diff --git a/src/switch_apr.c b/src/switch_apr.c
index aeb10185a9..db6f075bed 100644
--- a/src/switch_apr.c
+++ b/src/switch_apr.c
@@ -614,34 +614,9 @@ SWITCH_DECLARE(const char *) switch_dir_next_file(switch_dir_t *thedir, char *bu
 
 /* thread stubs */
 
-#ifndef WIN32
-struct apr_threadattr_t {
-	apr_pool_t *pool;
-	pthread_attr_t attr;
-	int priority;
-};
-#else
-/* this needs to be revisited when apr for windows supports thread priority settings */
-/* search for WIN32 in this file */
-struct apr_threadattr_t {
-    apr_pool_t *pool;
-    apr_int32_t detach;
-    apr_size_t stacksize;
-};
-#endif
-
-
 SWITCH_DECLARE(switch_status_t) switch_threadattr_create(switch_threadattr_t ** new_attr, switch_memory_pool_t *pool)
 {
-	switch_status_t status;
-
-	if ((status = apr_threadattr_create(new_attr, pool)) == SWITCH_STATUS_SUCCESS) {
-#ifndef WIN32
-		(*new_attr)->priority = SWITCH_PRI_LOW;
-#endif
-	}
-
-	return status;
+	return apr_threadattr_create(new_attr, pool);
 }
 
 SWITCH_DECLARE(switch_status_t) switch_threadattr_detach_set(switch_threadattr_t *attr, int32_t on)
@@ -654,12 +629,29 @@ SWITCH_DECLARE(switch_status_t) switch_threadattr_stacksize_set(switch_threadatt
 	return apr_threadattr_stacksize_set(attr, stacksize);
 }
 
-SWITCH_DECLARE(switch_status_t) switch_threadattr_priority_set(switch_threadattr_t *attr, switch_thread_priority_t priority)
-{
 #ifndef WIN32
-	attr->priority = priority;
+struct apr_threadattr_t {
+	apr_pool_t *pool;
+	pthread_attr_t attr;
+};
 #endif
-	return SWITCH_STATUS_SUCCESS;
+
+SWITCH_DECLARE(switch_status_t) switch_threadattr_priority_increase(switch_threadattr_t *attr)
+{
+	int stat = 0;
+#ifndef WIN32
+	struct sched_param param;
+	struct apr_threadattr_t *myattr = attr;
+
+	pthread_attr_getschedparam(&myattr->attr, &param);
+	param.sched_priority = 1;
+	stat = pthread_attr_setschedparam(&myattr->attr, &param);
+
+	if (stat == 0) {
+		return SWITCH_STATUS_SUCCESS;
+	}
+#endif
+	return stat;
 }
 
 static char TT_KEY[] = "1";
@@ -1050,7 +1042,13 @@ SWITCH_DECLARE(unsigned int) switch_queue_size(switch_queue_t *queue)
 
 SWITCH_DECLARE(switch_status_t) switch_queue_pop(switch_queue_t *queue, void **data)
 {
-	return apr_queue_pop(queue, data);
+	apr_status_t s;
+
+	do {
+		s = apr_queue_pop(queue, data);
+	} while (s == APR_EINTR);
+
+	return s;
 }
 
 SWITCH_DECLARE(switch_status_t) switch_queue_pop_timeout(switch_queue_t *queue, void **data, switch_interval_time_t timeout)
@@ -1072,7 +1070,14 @@ SWITCH_DECLARE(switch_status_t) switch_queue_push(switch_queue_t *queue, void *d
 
 SWITCH_DECLARE(switch_status_t) switch_queue_trypop(switch_queue_t *queue, void **data)
 {
-	return apr_queue_trypop(queue, data);
+	apr_status_t s;
+
+	do {
+		s = apr_queue_trypop(queue, data);
+	} while (s == APR_EINTR);
+
+	return s;
+	
 }
 
 SWITCH_DECLARE(switch_status_t) switch_queue_interrupt_all(switch_queue_t *queue)