diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c
index 2288b1d8c595f8760619fa86ae64ab1495feb7e6..dcad080246c7727f2c3c8df9f284ac9726374c34 100644
--- a/channels/chan_misdn.c
+++ b/channels/chan_misdn.c
@@ -4805,7 +4805,10 @@ static int misdn_set_opt_exec(struct ast_channel *chan, void *data)
 			
 			if (strlen(tok) > 1 && tok[1]=='1') {
 				chan_misdn_log(1, ch->bc->port, "SETOPT: HDLC \n");
-				ch->bc->hdlc=1;
+				if (!ch->bc->hdlc) {
+					ch->bc->hdlc=1;
+					misdn_lib_setup_bc(ch->bc);
+				}
 			}  
 			ch->bc->capability=INFO_CAPABILITY_DIGITAL_UNRESTRICTED;
 			break;
diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c
index 19268d0e608d057424b4e2a1fd832710e02a5269..1ccea50a840f89a06061f1ee2e5e280a2779d2fd 100644
--- a/channels/misdn/isdn_lib.c
+++ b/channels/misdn/isdn_lib.c
@@ -896,6 +896,7 @@ static int create_process (int midev, struct misdn_bchannel *bc) {
 
 void misdn_lib_setup_bc(struct misdn_bchannel *bc)
 {
+	clean_up_bc(bc);
 	setup_bc(bc);
 }