diff --git a/include/asterisk/utils.h b/include/asterisk/utils.h
index c09aa6e2d2e3e3a47c981d201e13aa164636720d..e2585e56ce770f2380d13fac4f9ae0215f2d2617 100755
--- a/include/asterisk/utils.h
+++ b/include/asterisk/utils.h
@@ -161,11 +161,11 @@ struct ast_realloca {
 #define inet_ntoa __dont__use__inet_ntoa__use__ast_inet_ntoa__instead__
 
 #define AST_STACKSIZE 128 * 1024
-
+#define ast_pthread_create(a,b,c,d) ast_pthread_create_stack(a,b,c,d,0)
 #ifdef __linux__
 #define ast_strcasestr strcasestr
 #else
 extern char *ast_strcasestr(const char *, const char *);
 #endif /* __linux__ */
-extern int ast_pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *data);
+extern int ast_pthread_create_stack(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *data, size_t stacksize);
 #endif
diff --git a/utils.c b/utils.c
index 6267bbbb7ab4bd317973528ee9ed5a5bf284c9fb..3e9ddf67b3b1681f222242747f4ea4767914a169 100755
--- a/utils.c
+++ b/utils.c
@@ -389,14 +389,16 @@ int ast_utils_init(void)
 }
 
 
-int ast_pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *data)
+int ast_pthread_create_stack(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *data, size_t stacksize)
 {
 	pthread_attr_t lattr;
 	if (!attr) {
 		pthread_attr_init(&lattr);
 		attr = &lattr;
 	}
-	errno = pthread_attr_setstacksize(attr, AST_STACKSIZE);
+	if (!stacksize)
+		stacksize = AST_STACKSIZE;
+	errno = pthread_attr_setstacksize(attr, stacksize);
 	if (errno)
 		ast_log(LOG_WARNING, "pthread_attr_setstacksize returned non-zero: %s\n", strerror(errno));
 	return pthread_create(thread, attr, start_routine, data); /* We're in ast_pthread_create, so it's okay */