diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c
index 89cbf67f73c0f7cfe4c8df345a1ec8e5e2476ed8..fc1309a7cbae842c069df9f694e4060a25f23a55 100644
--- a/channels/chan_misdn.c
+++ b/channels/chan_misdn.c
@@ -1154,7 +1154,7 @@ static int misdn_show_cls(int fd, int argc, char *argv[])
 		}
 	}
 
-
+ 	misdn_dump_chanlist();
 	return 0;
 }
 
diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c
index 078c6b79e54e027595abe741386f74ddef282ba2..4c7c91bd518675b25c1aa025147c9af08e410908 100644
--- a/channels/misdn/isdn_lib.c
+++ b/channels/misdn/isdn_lib.c
@@ -424,12 +424,19 @@ static void dump_chan_list(struct misdn_stack *stack)
 	int i;
 
 	for (i=0; i <= stack->b_num; i++) {
-		cb_log(6, stack->port, "Idx:%d stack->cchan:%d Chan:%d\n",i,stack->channels[i], i+1);
+		cb_log(6, stack->port, "Idx:%d stack->cchan:%d in_use:%d Chan:%d\n",i,stack->channels[i], stack->bc[i].in_use, i+1);
 	}
 }
 
 
+void misdn_dump_chanlist()
+{
+	struct misdn_stack *stack=get_misdn_stack();
+	for ( ; stack; stack=stack->next) {
+		dump_chan_list(stack);
+	}
 
+}
 
 static int find_free_chan_in_stack(struct misdn_stack *stack, struct misdn_bchannel *bc, int channel, int dec)
 {
@@ -671,7 +678,6 @@ static int clean_up_bc(struct misdn_bchannel *bc)
 	mISDN_write_frame(stack->midev, buff, bc->layer_id|FLG_MSG_TARGET|FLG_MSG_DOWN, MGR_DELLAYER | REQUEST, 0, 0, NULL, TIMEOUT_1SEC);
 	
 	bc->b_stid = 0;
-	bc->in_use = 0;
 	bc_state_change(bc, BCHAN_CLEANED);
 	
 	return ret;
@@ -689,6 +695,7 @@ static void clear_l3(struct misdn_stack *stack)
 			empty_chan_in_stack(stack,i+1);
 			empty_bc(&stack->bc[i]);
 			clean_up_bc(&stack->bc[i]);
+			stack->bc[i].in_use = 0;
 		}
 		
 	} 
@@ -1607,7 +1614,8 @@ static int handle_cr ( struct misdn_stack *stack, iframe_t *frm)
 				clean_up_bc(bc);
 
 				if (channel>0)
-					empty_chan_in_stack(stack,bc->channel);
+					empty_chan_in_stack(stack,channel);
+				bc->in_use=0;
 
 				dump_chan_list(stack);
 
@@ -1641,11 +1649,12 @@ void misdn_lib_release(struct misdn_bchannel *bc)
 		return;
 	}
 	
-	if (bc->channel>0) {
+	if (bc->channel>0) 
 		empty_chan_in_stack(stack,bc->channel);
-	}
+	
 	empty_bc(bc);
 	clean_up_bc(bc);
+	bc->in_use=0;
 }
 
 
@@ -2061,7 +2070,7 @@ handle_event_nt(void *dat, void *arg)
 					break;
 				case EVENT_RELEASE:
 				case EVENT_RELEASE_COMPLETE:
-				{
+					{
 					int channel=bc->channel;
 					int tmpcause=bc->cause;	
 			                empty_bc(bc);
@@ -2069,7 +2078,8 @@ handle_event_nt(void *dat, void *arg)
 					clean_up_bc(bc);
 
 					if (channel>0)
-                        			empty_chan_in_stack(stack, bc->channel);
+                        			empty_chan_in_stack(stack,channel);
+					bc->in_use=0;
 					}
 					break;
 
@@ -2640,8 +2650,6 @@ handle_frm_bc:
 					bc->in_use=0;
 
 					cb_log(0, stack->port, "GOT IGNORE SETUP\n");
-
-					
 					break;
 				case RESPONSE_OK:
 					cb_log(4, stack->port, "GOT SETUP OK\n");
@@ -2669,8 +2677,9 @@ handle_frm_bc:
 						set_chan_in_stack(stack,bc->channel);
 				} else {
 					if (channel>0)
-						empty_chan_in_stack(stack,bc->channel);
+						empty_chan_in_stack(stack,channel);
 				}
+				bc->in_use=0;
 			}
 
 			cb_log(5, stack->port, "Freeing Msg on prim:%x \n",frm->prim);
@@ -3356,7 +3365,9 @@ int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event )
 			clean_up_bc(bc);
 
 			if (channel>0)
-				empty_chan_in_stack(stack,bc->channel);
+				empty_chan_in_stack(stack,channel);
+
+			bc->in_use=0;	
 		}
 		
 	}
@@ -3401,6 +3412,8 @@ int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event )
 			
 			if (channel>0)
 				empty_chan_in_stack(stack,channel);
+			
+			bc->in_use=0;
 		}
 		break;
     
@@ -3700,9 +3713,11 @@ int misdn_lib_send_restart(int port, int channel)
 			if (stack->bc[cnt].channel == i) {
 				empty_bc(&stack->bc[cnt]);
 				clean_up_bc(&stack->bc[cnt]);
+				stack->bc[cnt].in_use=0;
 			}
 		}
 		empty_chan_in_stack(stack, i);
+
 			
 	}
 
@@ -4205,7 +4220,8 @@ void manager_clean_bc(struct misdn_bchannel *bc )
 	if (bc->channel>0)
 		empty_chan_in_stack(stack, bc->channel);
 	empty_bc(bc);
-  
+ 	bc->in_use=0;
+
 	cb_event(EVENT_CLEANUP, bc, NULL); 
 }
 
diff --git a/channels/misdn/isdn_lib.h b/channels/misdn/isdn_lib.h
index 0b6dcbb876f2533f094f09650b4b94936de60933..88d287ac39d2976d1757f6ba3003d7920df7bf88 100644
--- a/channels/misdn/isdn_lib.h
+++ b/channels/misdn/isdn_lib.h
@@ -476,5 +476,6 @@ void misdn_lib_reinit_nt_stack(int port);
 char *bc_state2str(enum bchannel_state state);
 void bc_state_change(struct misdn_bchannel *bc, enum bchannel_state state);
 
+void misdn_dump_chanlist(void);
 
 #endif