diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c
index 96b1fa46d592a043e7095219b7b0f84fdc1c724c..ba9aacc877d5c3a5c3b5629d8ca400556a3e3000 100644
--- a/channels/chan_misdn.c
+++ b/channels/chan_misdn.c
@@ -3322,6 +3322,16 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
 			
 			
 			
+		}
+
+		/* check if we should jump into s when we have no dad */
+		{
+			int im;
+			misdn_cfg_get( bc->port, MISDN_CFG_IMMEDIATE, &im, sizeof(im));
+			if ( im && ast_strlen_zero(bc->dad) ) {
+				do_immediate_setup(bc, ch , chan);
+				break;
+			}
 		}
 
 		
diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c
index b0e9477d07b0f6f883bd9eff5a18041688dc37f8..bb4da69213bee4ab64ba73bad8e4554f7d468274 100644
--- a/channels/misdn/isdn_lib.c
+++ b/channels/misdn/isdn_lib.c
@@ -1553,6 +1553,7 @@ handle_event_nt(void *dat, void *arg)
 	manager_t *mgr = (manager_t *)dat;
 	msg_t *msg = (msg_t *)arg;
 	mISDNuser_head_t *hh;
+	int reject=0;
 
 	struct misdn_stack *stack=find_stack_by_mgr(mgr);
 	int port;
@@ -1681,8 +1682,8 @@ handle_event_nt(void *dat, void *arg)
 				if (bc) { 
 					int myprocid=bc->l3_id&0x0000ffff;
 					hh->dinfo=(hh->dinfo&0xffff0000)|myprocid;
-					cb_log(3,stack->port,"Repaired reject Bug, new dinfo: %x\n",hh->dinfo);
-					return 0;
+					cb_log(3,stack->port,"Reject dinfo: %x cause:%d\n",hh->dinfo,bc->cause);
+					reject=1;		
 				}
 			}
 		}
@@ -1833,9 +1834,18 @@ handle_event_nt(void *dat, void *arg)
 			if(!isdn_get_info(msgs_g,event,1)) {
 				cb_log(4, stack->port, "Unknown Event Ind: prim %x dinfo %x\n",hh->prim, hh->dinfo);
 			} else {
+				if (reject) {
+					switch(bc->cause){
+						case 17:
+							cb_log(1, stack->port, "Siemens Busy reject..\n");
+
+							break;
+						default:
+							return 0;
+					}
+				}
 				cb_event(event, bc, glob_mgr->user_data);
 			}
-
       
 		} else {
 			cb_log(4, stack->port, "No BC found with l3id: prim %x dinfo %x\n",hh->prim, hh->dinfo);