diff --git a/src/channels/chan_voicemngr.c b/src/channels/chan_voicemngr.c
index d51d5cdfc0ae6267e08f07863c84f6210be64f6f..81f5184acd03a8ca08354ae896a92deac402a638 100644
--- a/src/channels/chan_voicemngr.c
+++ b/src/channels/chan_voicemngr.c
@@ -772,6 +772,7 @@ static void chan_voicemngr_modify_codec(struct chan_voicemngr_subchannel *sub) {
 		if(bridge){
 			AST_LIST_TRAVERSE(&bridge->channels, bridge_channel, entry) {
 				if ( strcmp(ast_channel_name(bridge_channel->chan), ast_channel_name(sub->owner)) ){
+					ast_channel_unlock(bridge_channel->chan);
 					bridged_chan = ast_channel_get_by_name(ast_channel_name(bridge_channel->chan));
 					break;
 				}
@@ -870,9 +871,11 @@ static int chan_voicemngr_indicate(struct ast_channel *ast, int condition, const
 
 	switch(condition) {
 	case AST_CONTROL_UNHOLD:
-		pvt_lock(sub->parent, "indicate");
+		ast_channel_unlock(ast);
+		chan_voicemngr_lock_pvts();
 		chan_voicemngr_stop_dialtone(sub->parent);
 		// Play a beep when unholding.
+		ast_channel_lock(ast);
 		play_bridge_channel = ast_channel_get_bridge_channel(ast);
 		ast_bridge_channel_queue_playfile(play_bridge_channel, NULL, "beep", NULL);
 		ao2_ref(play_bridge_channel, -1);
@@ -889,13 +892,14 @@ static int chan_voicemngr_indicate(struct ast_channel *ast, int condition, const
 		astFrame.subclass.integer = AST_CONTROL_SRCUPDATE;
 		ast_bridge_queue_everyone_else(myBridge, NULL, &astFrame);
 		*/
-		pvt_unlock(sub->parent);
+		chan_voicemngr_unlock_pvts();
 		break;
 
 	case AST_CONTROL_UPDATE_RTP_PEER:
 	case AST_CONTROL_SRCUPDATE:
 	case AST_CONTROL_SRCCHANGE:
-		pvt_lock(sub->parent, "indicate");
+		ast_channel_unlock(sub->owner);
+		chan_voicemngr_lock_pvts();
 		sub->codec = -1;
 		if (sub->channel_state == RINGBACK)
 			endpt_signal(sub->parent->line_id, "ringback", "off", NULL);
@@ -906,9 +910,11 @@ static int chan_voicemngr_indicate(struct ast_channel *ast, int condition, const
 			// do not re-sync if the call has already been established
 			sub->updated_codec = 1;
 		}
+
 		pvt_unlock(sub->parent);
 		ast_log(LOG_NOTICE, "SRC update: sub->sip_client_id: %d, sub->updated_codec: %d\n", sub->sip_client_id, sub->updated_codec);
 		chan_voicemngr_modify_codec(sub);
+		chan_voicemngr_unlock_pvts();
 		break;
 	case AST_CONTROL_RINGING:
 		pvt_lock(sub->parent, "indicate");