diff --git a/apps/app_ices.c b/apps/app_ices.c
index 294ecc6047f195b4e1f1eca5d1f588108c0f1659..27abab808537402a6d3ee49a09c60ff00512ddc2 100755
--- a/apps/app_ices.c
+++ b/apps/app_ices.c
@@ -113,7 +113,7 @@ static int ices_exec(struct ast_channel *chan, void *data)
 	}
 
 	oreadformat = chan->readformat;
-	res = ast_set_read_format(chan, AST_FORMAT_SLINEAR);
+	res = ast_set_read_format(chan, AST_FORMAT_SLINEAR, 0);
 	if (res < 0) {
 		close(fds[0]);
 		close(fds[1]);
@@ -164,7 +164,7 @@ static int ices_exec(struct ast_channel *chan, void *data)
 	if (pid > -1)
 		kill(pid, SIGKILL);
 	if (!res && oreadformat)
-		ast_set_read_format(chan, oreadformat);
+		ast_set_read_format(chan, oreadformat, 0);
 	return res;
 }
 
diff --git a/apps/app_nbscat.c b/apps/app_nbscat.c
index e99d2f265a57f22cfe5963ff78b8c1042af7bd85..6c280855160d8aa9664b7f2cbd521f6f1612fbb6 100755
--- a/apps/app_nbscat.c
+++ b/apps/app_nbscat.c
@@ -109,7 +109,7 @@ static int NBScat_exec(struct ast_channel *chan, void *data)
 	ast_stopstream(chan);
 
 	owriteformat = chan->writeformat;
-	res = ast_set_write_format(chan, AST_FORMAT_SLINEAR);
+	res = ast_set_write_format(chan, AST_FORMAT_SLINEAR, 0);
 	if (res < 0) {
 		ast_log(LOG_WARNING, "Unable to set write format to signed linear\n");
 		return -1;
@@ -173,7 +173,7 @@ static int NBScat_exec(struct ast_channel *chan, void *data)
 	if (pid > -1)
 		kill(pid, SIGKILL);
 	if (!res && owriteformat)
-		ast_set_write_format(chan, owriteformat);
+		ast_set_write_format(chan, owriteformat, 0);
 	return res;
 }
 
diff --git a/channel.c b/channel.c
index 4c46e7017464ef539e1411693d0f376e07cc60f2..0abc3521e8a80d31cc3522fd0dd848dd27630442 100755
--- a/channel.c
+++ b/channel.c
@@ -1505,7 +1505,8 @@ int ast_set_write_format(struct ast_channel *chan, int fmts, int needlock)
 	int native;
 	int res;
 	
-	ast_mutex_lock(&chan->lock);
+	if (needlock)
+		ast_mutex_lock(&chan->lock);
 	native = chan->nativeformats;
 	fmt = fmts;
 	
@@ -1513,7 +1514,8 @@ int ast_set_write_format(struct ast_channel *chan, int fmts, int needlock)
 	if (res < 0) {
 		ast_log(LOG_NOTICE, "Unable to find a path from %s to %s\n",
 			ast_getformatname(fmts), ast_getformatname(chan->nativeformats));
-		ast_mutex_unlock(&chan->lock);
+		if (needlock)
+			ast_mutex_unlock(&chan->lock);
 		return -1;
 	}
 	
@@ -1528,7 +1530,8 @@ int ast_set_write_format(struct ast_channel *chan, int fmts, int needlock)
 	chan->pvt->writetrans = ast_translator_build_path(chan->pvt->rawwriteformat, chan->writeformat);
 	if (option_debug)
 		ast_log(LOG_DEBUG, "Set channel %s to write format %s\n", chan->name, ast_getformatname(chan->writeformat));
-	ast_mutex_unlock(&chan->lock);
+	if (needlock)
+		ast_mutex_unlock(&chan->lock);
 	return 0;
 }
 
@@ -1547,7 +1550,8 @@ int ast_set_read_format(struct ast_channel *chan, int fmts, int needlock)
 	if (res < 0) {
 		ast_log(LOG_NOTICE, "Unable to find a path from %s to %s\n",
 			ast_getformatname(chan->nativeformats), ast_getformatname(fmts));
-		ast_mutex_unlock(&chan->lock);
+		if (needlock)
+			ast_mutex_unlock(&chan->lock);
 		return -1;
 	}
 	
@@ -1563,7 +1567,8 @@ int ast_set_read_format(struct ast_channel *chan, int fmts, int needlock)
 	if (option_debug)
 		ast_log(LOG_DEBUG, "Set channel %s to read format %s\n", 
 			chan->name, ast_getformatname(chan->readformat));
-	ast_mutex_unlock(&chan->lock);
+	if (needlock)
+		ast_mutex_unlock(&chan->lock);
 	return 0;
 }