diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c
index e7aef8298bda2631c0d10c9ae3683eeb7f2c2df7..84c8d0fc063b53a6234f1548000a88e253c30e4f 100644
--- a/channels/chan_misdn.c
+++ b/channels/chan_misdn.c
@@ -691,6 +691,14 @@ static void reload_config(void)
 		misdn_debug[i] = cfg_debug;
 		misdn_debug_only[i] = 0;
 	}
+
+	int ntflags=0;
+	char ntfile[BUFFERSIZE+1];
+
+	misdn_cfg_get( 0, MISDN_GEN_NTDEBUGFLAGS, &ntflags, sizeof(int));
+	misdn_cfg_get( 0, MISDN_GEN_NTDEBUGFILE, &ntfile, BUFFERSIZE);
+
+	misdn_lib_nt_debug_init(ntflags,ntfile);
 }
 
 static int misdn_reload (int fd, int argc, char *argv[])
@@ -4125,6 +4133,9 @@ static int load_module(void *mod)
 	}
 
 
+
+	reload_config();
+
 	{
 		if (ast_channel_register(&misdn_tech)) {
 			ast_log(LOG_ERROR, "Unable to register channel class %s\n", misdn_type);
diff --git a/channels/misdn/chan_misdn_config.h b/channels/misdn/chan_misdn_config.h
index 0be6d6a2ee057473370fd00d50ca48f03d4572e3..d60ea6973ca7346b1b20bd57d109c4eb4e9b2a36 100644
--- a/channels/misdn/chan_misdn_config.h
+++ b/channels/misdn/chan_misdn_config.h
@@ -74,6 +74,8 @@ enum misdn_cfg_elements {
 	MISDN_GEN_CRYPT_PREFIX,        /* char[] */
 	MISDN_GEN_CRYPT_KEYS,          /* char[] */
 	MISDN_GEN_L1_TIMEOUT,          /* int */
+	MISDN_GEN_NTDEBUGFLAGS,          /* int */
+	MISDN_GEN_NTDEBUGFILE,          /* char[] */
 	MISDN_GEN_LAST
 };
 
diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c
index 632b2a043b2826afe93a03ca31f6efed813b9a4c..9405f0dafe704b3c7c3518a6c9ce8b16f2d3eecd 100644
--- a/channels/misdn/isdn_lib.c
+++ b/channels/misdn/isdn_lib.c
@@ -20,6 +20,7 @@ void misdn_split_conf(struct misdn_bchannel *bc, int conf_id);
 
 int queue_cleanup_bc(struct misdn_bchannel *bc) ;
 
+int misdn_lib_get_l2_up(struct misdn_stack *stack);
 
 struct misdn_stack* get_misdn_stack( void );
 
@@ -1642,12 +1643,21 @@ int misdn_lib_port_up(int port, int check)
 		if ( !stack->ptp && !check) return 1;
 		
 		if (stack->port == port) {
-			if (stack->l1link)
-				return 1;
-			else {
-				cb_log(-1,port, "Port down [%s]\n",
-				       stack->ptp?"PP":"PMP");
-				return 0;
+			if (stack->ptp ) {
+				if (stack->l1link && stack->l2link) {
+					return 1;
+				} else {
+					cb_log(-1,port, "Port Down L2:%d L1:%d\n",
+						stack->l2link, stack->l1link);
+					return 0;
+				}
+			} else {
+				if ( stack->l1link)
+					return 1;
+				else {
+					cb_log(-1,port, "Port down PMP\n");
+					return 0;
+				}
 			}
 		}
 	}
@@ -1894,6 +1904,7 @@ handle_event_nt(void *dat, void *arg)
 		{
 			cb_log(4, stack->port, "%% GOT L2 Activate Info.\n");
 			stack->l2link = 1;
+			stack->l2upcnt=0;
 			
 			free_msg(msg);
 			return 0;
@@ -1904,9 +1915,19 @@ handle_event_nt(void *dat, void *arg)
 		case DL_RELEASE | INDICATION:
 		case DL_RELEASE | CONFIRM:
 		{
-			cb_log(4, stack->port, "%% GOT L2 DeActivate Info.\n");
-			stack->l2link = 0;
+			if (stack->ptp) {
+				cb_log(-1 , stack->port, "%% GOT L2 DeActivate Info.\n");
+				if (stack->l2upcnt>3) {
+					cb_log(-1 , stack->port, "!!! Could not Get the L2 up after 3 Attemps!!!\n");
+				}  else {
+					misdn_lib_get_l2_up(stack);
+					stack->l2upcnt++;
+				}
+				
+			} else 
+				cb_log(4, stack->port, "%% GOT L2 DeActivate Info.\n");
 			
+			stack->l2link = 0;
 			free_msg(msg);
 			return 0;
 		}
@@ -1945,7 +1966,7 @@ handle_event_nt(void *dat, void *arg)
 
 					} else {
 
-						bc->channel = find_free_chan_in_stack(stack, 0);
+						bc->channel = find_free_chan_in_stack(stack, bc, 0);
 						if (!bc->channel) {
 							cb_log(-1, stack->port, " No free channel at the moment\n");
 					
@@ -3604,6 +3625,21 @@ int misdn_lib_maxports_get() { /** BE AWARE WE HAVE NO CB_LOG HERE! **/
 	return max;
 }
 
+
+void misdn_lib_nt_debug_init( int flags, char *file ) 
+{
+	int static init=0;
+
+	if (!init) {
+		debug_init( flags , file, file, file);
+		init=1;
+	} else {
+		debug_close();
+		debug_init( flags , file, file, file);
+	}
+}
+
+
 int misdn_lib_init(char *portlist, struct misdn_lib_iface *iface, void *user_data)
 {
 	struct misdn_lib *mgr=calloc(1, sizeof(struct misdn_lib));
@@ -3619,13 +3655,9 @@ int misdn_lib_init(char *portlist, struct misdn_lib_iface *iface, void *user_dat
 	glob_mgr = mgr;
   
 	msg_init();
-#if 0
-	int flags=0xff;
-	flags &= ~DBGM_MSG;
-	debug_init( flags , NULL, NULL, NULL);
-#else
-	debug_init(0 , NULL, NULL, NULL);
-#endif	
+
+	misdn_lib_nt_debug_init(0,NULL);
+	
 	if (!portlist || (*portlist == 0) ) return 1;
 	
 	init_flip_bits();
diff --git a/channels/misdn/isdn_lib.h b/channels/misdn/isdn_lib.h
index 0178633cc51ac5f0e751b3947ee575d016e94ca3..ef258f7d08cead48394a2e7eceb9709c64f7597a 100644
--- a/channels/misdn/isdn_lib.h
+++ b/channels/misdn/isdn_lib.h
@@ -347,6 +347,8 @@ struct misdn_lib_iface {
 
 /***** USER IFACE **********/
 
+void misdn_lib_nt_debug_init( int flags, char *file );
+
 int misdn_lib_init(char *portlist, struct misdn_lib_iface* iface, void *user_data);
 int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event );
 void misdn_lib_destroy(void);
diff --git a/channels/misdn/isdn_lib_intern.h b/channels/misdn/isdn_lib_intern.h
index 8a964313c27eef3b163ebbc728d52fbcf9840590..2b56576c54bf9c3f8470cef47b90acffe23e42a7 100644
--- a/channels/misdn/isdn_lib_intern.h
+++ b/channels/misdn/isdn_lib_intern.h
@@ -55,6 +55,8 @@ struct misdn_stack {
   
 	int ptp;
 
+	int l2upcnt;
+
 	int l2_id;
 	int lower_id;
 	int upper_id;
diff --git a/channels/misdn_config.c b/channels/misdn_config.c
index 50243625852171062443aadb0f25118fd4de11cd..369f20265c01b78e99ac248a5229bbcc646cdbe0 100644
--- a/channels/misdn_config.c
+++ b/channels/misdn_config.c
@@ -136,8 +136,9 @@ static const struct misdn_cfg_spec gen_spec[] = {
 	{ "dynamic_crypt", MISDN_GEN_DYNAMIC_CRYPT, MISDN_CTYPE_BOOL, "no", NONE },
 	{ "crypt_prefix", MISDN_GEN_CRYPT_PREFIX, MISDN_CTYPE_STR, NO_DEFAULT, NONE },
 	{ "crypt_keys", MISDN_GEN_CRYPT_KEYS, MISDN_CTYPE_STR, NO_DEFAULT, NONE },
-	{ "l1watcher_timeout", MISDN_GEN_L1_TIMEOUT, MISDN_CTYPE_INT, "0", NONE }
-	
+	{ "l1watcher_timeout", MISDN_GEN_L1_TIMEOUT, MISDN_CTYPE_INT, "0", NONE },
+	{ "ntdebugflags", MISDN_GEN_NTDEBUGFLAGS, MISDN_CTYPE_INT, "0", NONE },
+	{ "ntdebugfile", MISDN_GEN_NTDEBUGFILE, MISDN_CTYPE_STR, "/var/log/misdn-nt.log", NONE }
 };
 
 /* array of port configs, default is at position 0. */
@@ -543,11 +544,18 @@ static int _parse (union misdn_cfg_pt *dest, char *value, enum misdn_cfg_type ty
 		}
 		break;
 	case MISDN_CTYPE_INT:
-		if (sscanf(value, "%d", &tmp)) {
+	{
+		char *pat;
+		if (strchr(value,'x')) 
+			pat="%x";
+		else
+			pat="%d";
+		if (sscanf(value, pat, &tmp)) {
 			dest->num = (int *)malloc(sizeof(int));
 			memcpy(dest->num, &tmp, sizeof(int));
 		} else
 			re = -1;
+	}
 		break;
 	case MISDN_CTYPE_BOOL:
 		dest->num = (int *)malloc(sizeof(int));
diff --git a/configs/misdn.conf.sample b/configs/misdn.conf.sample
index 1f7dacc3890b36f426dd09b65585e424fd7a0afc..03df1660167705bc3bd47b6e879cd3a5a9b24e18 100644
--- a/configs/misdn.conf.sample
+++ b/configs/misdn.conf.sample
@@ -25,6 +25,37 @@ misdn_init=/etc/misdn-init.conf
 debug=0
 
 
+
+; set debugging file and flags for mISDNuser (NT-Stack) 
+; 
+; flags can be or'ed with the following values:
+;
+; DBGM_NET        0x00000001
+; DBGM_MSG        0x00000002
+; DBGM_FSM        0x00000004
+; DBGM_TEI        0x00000010
+; DBGM_L2         0x00000020
+; DBGM_L3         0x00000040
+; DBGM_L3DATA     0x00000080
+; DBGM_BC         0x00000100
+; DBGM_TONE       0x00000200
+; DBGM_BCDATA     0x00000400
+; DBGM_MAN        0x00001000
+; DBGM_APPL       0x00002000
+; DBGM_ISDN       0x00004000
+; DBGM_SOCK       0x00010000
+; DBGM_CONN       0x00020000
+; DBGM_CDATA      0x00040000
+; DBGM_DDATA      0x00080000
+; DBGM_SOUND      0x00100000
+; DBGM_SDATA      0x00200000
+; DBGM_TOPLEVEL   0x40000000
+; DBGM_ALL        0xffffffff
+;
+
+ntdebugflags=0
+ntdebugfile=/var/log/misdn-nt.log
+
 ; the big trace
 ;
 ; default value: [not set]