diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
index 2f56619863..f8b12ea588 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
@@ -967,12 +967,14 @@ static ftdm_status_t handle_show_inreset(ftdm_stream_handle_t *stream, int span,
 /******************************************************************************/
 static ftdm_status_t handle_show_flags(ftdm_stream_handle_t *stream, int span, int chan, int verbose)
 {
-	int				 x;
-	int				 bit;
-	sngss7_chan_data_t  *ss7_info;
-	ftdm_channel_t	  *ftdmchan;
-	int				 lspan;
-	int				 lchan;
+	sngss7_chan_data_t	*ss7_info;
+	ftdm_channel_t		*ftdmchan;
+	int					x;
+	int					bit;
+	int					lspan;
+	int					lchan;
+	const char			*text;
+	int					flag;
 
 	x = (g_ftdm_sngss7_data.cfg.procId * 1000) + 1;
 	while (g_ftdm_sngss7_data.cfg.isupCkt[x].id != 0) {
@@ -1001,11 +1003,11 @@ static ftdm_status_t handle_show_flags(ftdm_stream_handle_t *stream, int span, i
 							ss7_info->circuit->cic);
 	
 				for (bit = 0; bit < 33; bit++) {
-					stream->write_function(stream, "|");
 					if (ss7_info->ckt_flags & ( 0x1 << bit)) {
-						stream->write_function(stream, "%2d=1", bit);
-					} else {
-						stream->write_function(stream, "%2d=0", bit);
+						stream->write_function(stream, "|");
+						flag = bit;
+						text = ftmod_ss7_ckt_flag2str(flag);
+						stream->write_function(stream, "%s",text);
 					}
 				}
 
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cntrl.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cntrl.c
index c1b18e529a..83ef5e0a42 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cntrl.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cntrl.c
@@ -68,11 +68,14 @@ int ftmod_ss7_shutdown_isup(void);
 int ftmod_ss7_shutdown_mtp3(void);
 int ftmod_ss7_shutdown_mtp2(void);
 int ftmod_ss7_shutdown_relay(void);
+int ftmod_ss7_disable_relay_channel(uint32_t chanId);
 
 int ftmod_ss7_disable_grp_mtp3Link(uint32_t procId);
 int ftmod_ss7_enable_grp_mtp3Link(uint32_t procId);
 
 int ftmod_ss7_disable_grp_mtp2Link(uint32_t procId);
+
+int ftmod_ss7_block_isup_ckt(uint32_t cktId);
 /******************************************************************************/
 
 /* FUNCTIONS ******************************************************************/
@@ -712,6 +715,38 @@ int ftmod_ss7_shutdown_relay(void)
 	return (sng_cntrl_relay(&pst, &cntrl));
 }
 
+/******************************************************************************/
+int ftmod_ss7_disable_relay_channel(uint32_t chanId)
+{
+	RyMngmt cntrl;
+	Pst pst;
+
+	/* initalize the post structure */
+	smPstInit(&pst);
+
+	/* insert the destination Entity */
+	pst.dstEnt = ENTRY;
+
+	/* initalize the control structure */
+	memset(&cntrl, 0x0, sizeof(RyMngmt));
+
+	/* initalize the control header */
+	smHdrInit(&cntrl.hdr);
+
+	cntrl.hdr.msgType			= TCNTRL;	/* this is a control request */
+	cntrl.hdr.entId.ent			= ENTRY;
+	cntrl.hdr.entId.inst		= S_INST;
+	cntrl.hdr.elmId.elmnt		= STGEN;
+
+	
+	cntrl.hdr.elmId.elmntInst1	= chanId;
+
+	cntrl.t.cntrl.action		= ADISIMM;			/* Deactivate */
+	cntrl.t.cntrl.subAction		= SAELMNT;			/* specificed element */
+
+	return (sng_cntrl_relay(&pst, &cntrl));
+}
+
 /******************************************************************************/
 int ftmod_ss7_disable_grp_mtp3Link(uint32_t procId)
 {
@@ -808,6 +843,38 @@ int ftmod_ss7_disable_grp_mtp2Link(uint32_t procId)
 
 }
 
+/******************************************************************************/
+int ftmod_ss7_block_isup_ckt(uint32_t cktId)
+{
+	SiMngmt cntrl;
+	Pst pst;
+
+	/* initalize the post structure */
+	smPstInit(&pst);
+
+	/* insert the destination Entity */
+	pst.dstEnt = ENTSI;
+
+	/* initalize the control structure */
+	memset(&cntrl, 0x0, sizeof(SiMngmt));
+
+	/* initalize the control header */
+	smHdrInit(&cntrl.hdr);
+
+	cntrl.hdr.msgType						= TCNTRL;		/* this is a control request */
+	cntrl.hdr.entId.ent						= ENTSI;
+	cntrl.hdr.entId.inst					= S_INST;
+	cntrl.hdr.elmId.elmnt					= STICIR;
+
+	cntrl.t.cntrl.s.siElmnt.elmntId.circuit	= cktId;
+	cntrl.t.cntrl.s.siElmnt.elmntParam.cir.flag = LSI_CNTRL_CIR_FORCE;
+
+	cntrl.t.cntrl.action					= ADISIMM;		/* block via BLO */
+	cntrl.t.cntrl.subAction					= SAELMNT;		/* specificed element */
+
+	return (sng_cntrl_isup(&pst, &cntrl));
+}
+
 /******************************************************************************/
 /* For Emacs:
  * Local Variables:
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c
index f4143fc864..2a395c9ad1 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c
@@ -766,7 +766,18 @@ void handle_sng_relay_alarm(Pst *pst, RyMngmt *sta)
 												DECODE_LRY_REASON(sta->t.usta.s.ryErrUsta.reason));
 
 		/* process the event */
-		handle_relay_disconnect_on_error(sta);
+		switch (sta->t.usta.s.ryErrUsta.reason) {
+		/**********************************************************************/
+		case (LRYRSNMGMTREQ):
+			/* do nothing since this is a shutdown */
+			break;
+		/**********************************************************************/
+		default:
+			/* handle the error */
+			handle_relay_disconnect_on_error(sta);
+			break;
+		/**********************************************************************/
+		} /* switch (sta->t.usta.s.ryErrUsta.reason) */
 
 		break;
 	/**************************************************************************/
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
index 10e73d3fbd..7b885102b9 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
@@ -365,6 +365,9 @@ static void *ftdm_sangoma_ss7_run(ftdm_thread_t * me, void *obj)
 		/* check each channel on the span to see if there is an un-procressed SUS/RES flag */
 		check_for_res_sus_flag(ftdmspan);
 
+		/* check each channel on the span to see if it needs to be reconfigured */
+		check_for_reconfig_flag(ftdmspan);
+
 		/* Poll for events, e.g HW DTMF */
 		switch (ftdm_span_poll_event(ftdmspan, 0, NULL)) {
 		/**********************************************************************/
@@ -926,33 +929,27 @@ ftdm_status_t ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
 			}
 		}
 
-		/* if we're not coming from HANGUP_COMPLETE we need to check for resets
-		 * we can also check if we are in a PAUSED state (no point in sending message
-		 */
-		if ((ftdmchan->last_state != FTDM_CHANNEL_STATE_HANGUP_COMPLETE) &&
-			(!sngss7_test_ckt_flag(sngss7_info, FLAG_INFID_PAUSED))) {
 
-			/* check if this is an outgoing RSC */
-			if ((sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_TX)) &&
-				!(sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_SENT))) {
+		/* check if this is an outgoing RSC */
+		if ((sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_TX)) &&
+			!(sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_SENT))) {
 
-				/* send a reset request */
-				ft_to_sngss7_rsc (ftdmchan);
-				sngss7_set_ckt_flag(sngss7_info, FLAG_RESET_SENT);
+			/* send a reset request */
+			ft_to_sngss7_rsc (ftdmchan);
+			sngss7_set_ckt_flag(sngss7_info, FLAG_RESET_SENT);
 
-			} /* if (sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_TX)) */
-	
-			/* check if this is the first channel of a GRS (this flag is thrown when requesting reset) */
-			if ( (sngss7_test_ckt_flag (sngss7_info, FLAG_GRP_RESET_TX)) &&
-				!(sngss7_test_ckt_flag(sngss7_info, FLAG_GRP_RESET_SENT)) &&
-				(sngss7_test_ckt_flag(sngss7_info, FLAG_GRP_RESET_BASE))) {
+		} /* if (sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_TX)) */
 
-					/* send out the grs */
-					ft_to_sngss7_grs (ftdmchan);
-					sngss7_set_ckt_flag(sngss7_info, FLAG_GRP_RESET_SENT);
+		/* check if this is the first channel of a GRS (this flag is thrown when requesting reset) */
+		if ( (sngss7_test_ckt_flag (sngss7_info, FLAG_GRP_RESET_TX)) &&
+			!(sngss7_test_ckt_flag(sngss7_info, FLAG_GRP_RESET_SENT)) &&
+			(sngss7_test_ckt_flag(sngss7_info, FLAG_GRP_RESET_BASE))) {
 
-			}/* if ( sngss7_test_ckt_flag ( sngss7_info, FLAG_GRP_RESET_TX ) ) */
-		} /* if ( last_state != HANGUP && !PAUSED */
+				/* send out the grs */
+				ft_to_sngss7_grs (ftdmchan);
+				sngss7_set_ckt_flag(sngss7_info, FLAG_GRP_RESET_SENT);
+
+		}/* if ( sngss7_test_ckt_flag ( sngss7_info, FLAG_GRP_RESET_TX ) ) */
 	
 		/* if the sig_status is up...bring it down */
 		if (ftdm_test_flag (ftdmchan, FTDM_CHANNEL_SIG_UP)) {
@@ -1598,6 +1595,8 @@ static FIO_SIG_UNLOAD_FUNCTION(ftdm_sangoma_ss7_unload)
 {
 	/*this function is called by the FT-core to unload the signaling module */
 
+	int x;
+
 	ftdm_log (FTDM_LOG_INFO, "Starting ftmod_sangoma_ss7 unload...\n");
 
 	if (sngss7_test_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_CC)) {
@@ -1625,6 +1624,26 @@ static FIO_SIG_UNLOAD_FUNCTION(ftdm_sangoma_ss7_unload)
 	}
 
 	if (sngss7_test_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_RY)) {
+		/* go through all the relays channels and configure it */
+		x = 1;
+		while (g_ftdm_sngss7_data.cfg.relay[x].id != 0) {
+			/* check if this relay channel has been configured already */
+			if ((g_ftdm_sngss7_data.cfg.relay[x].flags & SNGSS7_CONFIGURED)) {
+	
+				/* send the specific configuration */
+				if (ftmod_ss7_disable_relay_channel(x)) {
+					SS7_CRITICAL("Relay Channel %d disable failed!\n", x);
+					return 1;
+				} else {
+					SS7_INFO("Relay Channel %d disable DONE!\n", x);
+				}
+	
+				/* set the SNGSS7_CONFIGURED flag */
+				g_ftdm_sngss7_data.cfg.relay[x].flags &= !SNGSS7_CONFIGURED;
+			} /* if !SNGSS7_CONFIGURED */
+			x++;
+		} /* while (g_ftdm_sngss7_data.cfg.relay[x].id != 0) */
+		
 		ftmod_ss7_shutdown_relay();
 		sng_isup_free_relay();
 		sngss7_clear_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_RY);
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h
index 4d09dfa7e3..291eea0985 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h
@@ -506,6 +506,27 @@ typedef enum {
 	FLAG_RELAY_DOWN			= (1 << 30)
 } sng_ckt_flag_t;
 
+#define CKT_FLAGS_STRING \
+	"RX_RSC", \
+	"TX_RSC", \
+	"TX_RSC_REQ_SENT", \
+	"TX_RSC_RSP_RECIEVED", \
+	"RX_GRS", \
+	"RX_GRS_DONE", \
+	"RX_GRS_CMPLT", \
+	"GRS_BASE", \
+	"TX_GRS", \
+	"TX_GRS_REQ_SENT", \
+	"TX_GRS_RSP_RECIEVED", \
+	"REMOTE_REL", \
+	"LOCAL_REL", \
+	"GLARE", \
+	"INF_RESUME", \
+	"INF_PAUSED", \
+	"RELAY_DOWN", \
+	"CKT_RECONFIG"
+FTDM_STR2ENUM_P(ftmod_ss7_ckt_state2flag, ftmod_ss7_ckt_flag2str, sng_ckt_flag_t)
+
 /* ckt blocking flags */
 typedef enum {
 	FLAG_CKT_UCIC_BLOCK		= (1 << 0),
@@ -626,12 +647,17 @@ int ftmod_ss7_shutdown_isup(void);
 int ftmod_ss7_shutdown_mtp3(void);
 int ftmod_ss7_shutdown_mtp2(void);
 int ftmod_ss7_shutdown_relay(void);
+int ftmod_ss7_disable_relay_channel(uint32_t chanId);
 
 int ftmod_ss7_disable_grp_mtp3Link(uint32_t procId);
 int ftmod_ss7_enable_grp_mtp3Link(uint32_t procId);
 
 int ftmod_ss7_disable_grp_mtp2Link(uint32_t procId);
 
+int ftmod_ss7_block_isup_ckt(uint32_t cktId);
+
+
+
 /* in ftmod_sangoma_ss7_sta.c */
 int ftmod_ss7_mtp1link_sta(uint32_t id, L1Mngmt *cfm);
 int ftmod_ss7_mtp2link_sta(uint32_t id, SdMngmt *cfm);
@@ -756,6 +782,7 @@ int find_ssf_type_in_map(const char *ssfType);
 int find_cic_cntrl_in_map(const char *cntrlType);
 
 ftdm_status_t check_status_of_all_isup_intf(void);
+ftdm_status_t check_for_reconfig_flag(ftdm_span_t *ftdmspan);
 
 void sngss7_send_signal(sngss7_chan_data_t *sngss7_info, ftdm_signal_event_t event_id);
 void sngss7_set_sig_status(sngss7_chan_data_t *sngss7_info, ftdm_signaling_status_t status);
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_relay.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_relay.c
index d003371ff2..d34d62c217 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_relay.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_relay.c
@@ -61,23 +61,28 @@ ftdm_status_t handle_relay_connect(RyMngmt *sta)
 
 	/* test if this is the first time the channel comes up */
 	if (!sngss7_test_flag(sng_relay, SNGSS7_RELAY_INIT)) {
-		SS7_DEBUG("Relay Channel %d initial connection UP\n", sng_relay->id);
+		SS7_INFO("Relay Channel %d initial connection UP\n", sng_relay->id);
 
 		/* mark the channel as being up */
 		sngss7_set_flag(sng_relay, SNGSS7_RELAY_INIT);
 	} else {
-		SS7_DEBUG("Relay Channel %d connection UP\n", sng_relay->id);
+		SS7_INFO("Relay Channel %d connection UP\n", sng_relay->id);
 
 		/* react based on type of channel */
 		switch (sng_relay->type) {
 		/******************************************************************/
 		case (LRY_CT_TCP_CLIENT):
+			/* check the status of all isup intfs in case we weren't connected when
+			 * the interface became active
+			 */
+			check_status_of_all_isup_intf();
+
 			/* reconfigure all ISUP ckts, since the main system would have lost all configs */
 			if (reconfig_all_ckts_for_relay()) {
 				SS7_ERROR("Failed to reconfigure ISUP Ckts!\n");
-
 				/* we're done....this is very bad! */
-			} else {				
+			} else {
+				/* if the circuits reconfiged then bring then back up */	
 				enable_all_ckts_for_relay();
 			}
 
@@ -104,16 +109,20 @@ ftdm_status_t handle_relay_disconnect_on_error(RyMngmt *sta)
 
 	/* check which procId is in error, if it is 1, disable the ckts */
 	if (sta->t.usta.s.ryErrUsta.errPid == 1 ) {
-		disable_all_ckts_for_relay();
-
+		/* we've lost the server, bring down the mtp2 links */
 		disble_all_mtp2_sigs_for_relay();
+
+		/* we've lost the server, bring the sig status down on all ckts */
+		disable_all_ckts_for_relay();
 	}
 
 	/* check if the channel is a server, means we just lost a MGW */
 	if (g_ftdm_sngss7_data.cfg.relay[sta->t.usta.s.ryErrUsta.errPid].type == LRY_CT_TCP_SERVER) {
-		block_all_ckts_for_relay(sta->t.usta.s.ryErrUsta.errPid);
-
+		/* we've lost the client, bring down all mtp3 links for this procId */
 		disable_all_sigs_for_relay(sta->t.usta.s.ryErrUsta.errPid);
+
+		/* we've lost the client, bring down all the ckts for this procId */
+		block_all_ckts_for_relay(sta->t.usta.s.ryErrUsta.errPid);
 	}
 
 	return FTDM_SUCCESS;
@@ -222,30 +231,26 @@ ftdm_status_t enable_all_ckts_for_relay(void)
 /******************************************************************************/
 ftdm_status_t reconfig_all_ckts_for_relay(void)
 {
-#if 1
 	int x;
-	int ret;
+	sngss7_chan_data_t	*sngss7_info = NULL;
 
+	/* go through all the circuits on our ProcId */
 	x = (g_ftdm_sngss7_data.cfg.procId * 1000) + 1;
 	while (g_ftdm_sngss7_data.cfg.isupCkt[x].id != 0) {
+	/**************************************************************************/
 		if ( g_ftdm_sngss7_data.cfg.isupCkt[x].type == VOICE) {
-	
-			ret = ftmod_ss7_isup_ckt_config(x);
-			if (ret) {
-				SS7_CRITICAL("ISUP CKT %d configuration FAILED (%d)!\n", x, ret);
-				return 1;
-			} else {
-				SS7_INFO("ISUP CKT %d configuration DONE!\n", x);
-			}
+			/* grab the private data structure */
+			sngss7_info = g_ftdm_sngss7_data.cfg.isupCkt[x].obj;
+			
+			/* mark the circuit for re-configuration */
+			sngss7_set_ckt_flag(sngss7_info, FLAG_CKT_RECONFIG);
+		}
 
-		} /* if ( g_ftdm_sngss7_data.cfg.isupCkt[x].type == VOICE) */
-
-		/* set the SNGSS7_CONFIGURED flag */
-		g_ftdm_sngss7_data.cfg.isupCkt[x].flags |= SNGSS7_CONFIGURED;
-		
+		/* move to the next circuit */
 		x++;
+	/**************************************************************************/
 	} /* while (g_ftdm_sngss7_data.cfg.isupCkt[x].id != 0) */
-#endif
+
 	return FTDM_SUCCESS;
 }
 
@@ -253,23 +258,26 @@ ftdm_status_t reconfig_all_ckts_for_relay(void)
 ftdm_status_t block_all_ckts_for_relay(uint32_t procId)
 {
 	int x;
-
-	SS7_INFO("BLOcking all ckts on ProcID = %d\n", procId);
+	int ret;
 
 	/* we just lost connection to this procId, send out a block for all these circuits */
 	x = (procId * 1000) + 1;
 	while (g_ftdm_sngss7_data.cfg.isupCkt[x].id != 0) {
 	/**************************************************************************/
 		if (g_ftdm_sngss7_data.cfg.isupCkt[x].type == VOICE) {
-			/* send out a BLO */
-			sng_cc_sta_request (1,
-								0,
-								0,
-								g_ftdm_sngss7_data.cfg.isupCkt[x].id,
-								0, 
-								SIT_STA_CIRBLOREQ, 
-								NULL);
 
+			/* send a block request via stack manager */
+			ret = ftmod_ss7_block_isup_ckt(g_ftdm_sngss7_data.cfg.isupCkt[x].id);
+			if (ret) {
+				SS7_INFO("Successfully BLOcked CIC:%d(ckt:%d) due to Relay failure\n", 
+							g_ftdm_sngss7_data.cfg.isupCkt[x].cic,
+							g_ftdm_sngss7_data.cfg.isupCkt[x].id);
+			} else {
+				SS7_ERROR("Failed to BLOck CIC:%d(ckt:%d) due to Relay failure\n",
+							g_ftdm_sngss7_data.cfg.isupCkt[x].cic,
+							g_ftdm_sngss7_data.cfg.isupCkt[x].id);
+			}
+	
 		} /* if (g_ftdm_sngss7_data.cfg.isupCkt[x].type == VOICE) */
 
 		/* move along */
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c
index 814f418a13..ded695c205 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c
@@ -83,6 +83,7 @@ int find_ssf_type_in_map(const char *ssfType);
 int find_cic_cntrl_in_map(const char *cntrlType);
 
 ftdm_status_t check_status_of_all_isup_intf(void);
+ftdm_status_t check_for_reconfig_flag(ftdm_span_t *ftdmspan);
 
 void sngss7_send_signal(sngss7_chan_data_t *sngss7_info, ftdm_signal_event_t event_id);
 void sngss7_set_sig_status(sngss7_chan_data_t *sngss7_info, ftdm_signaling_status_t status);
@@ -90,6 +91,9 @@ ftdm_status_t sngss7_add_var(sngss7_chan_data_t *ss7_info, const char* var, cons
 ftdm_status_t sngss7_add_raw_data(sngss7_chan_data_t *sngss7_info, uint8_t* data, ftdm_size_t data_len);
 /******************************************************************************/
 
+FTDM_ENUM_NAMES(CKT_FLAGS_NAMES, CKT_FLAGS_STRING)
+FTDM_STR2ENUM(ftmod_ss7_ckt_state2flag, ftmod_ss7_ckt_flag2str, sng_ckt_flag_t, CKT_FLAGS_NAMES, 31)
+
 /* FUNCTIONS ******************************************************************/
 uint8_t copy_cgPtyNum_from_sngss7(ftdm_caller_data_t *ftdm, SiCgPtyNum *cgPtyNum)
 {
@@ -1475,6 +1479,46 @@ void sngss7_set_sig_status(sngss7_chan_data_t *sngss7_info, ftdm_signaling_statu
 	return;
 }
 
+/******************************************************************************/
+ftdm_status_t check_for_reconfig_flag(ftdm_span_t *ftdmspan)
+{
+	ftdm_channel_t		*ftdmchan = NULL;
+	sngss7_chan_data_t	*sngss7_info = NULL;
+	int 				x;
+	int					ret;
+
+	for (x = 1; x < (ftdmspan->chan_count + 1); x++) {
+	/**************************************************************************/
+		/* extract the channel structure and sngss7 channel data */
+		ftdmchan = ftdmspan->channels[x];
+		
+		/* if the call data is NULL move on */
+		if (ftdmchan->call_data == NULL) {
+			SS7_WARN_CHAN(ftdmchan, "Reconfiguring channel that has not call_data!%s\n", " ");
+			continue;
+		}
+
+		/* grab the private data */
+		sngss7_info = ftdmchan->call_data;
+
+		/* check the reconfig flag */
+		if (sngss7_test_ckt_flag(sngss7_info, FLAG_CKT_RECONFIG)) {
+			ret = ftmod_ss7_isup_ckt_config(sngss7_info->circuit->id);
+
+			if (ret) {
+				SS7_CRITICAL("ISUP CKT %d re-configuration FAILED!\n", x);
+			} else {
+				SS7_INFO("ISUP CKT %d re-configuration DONE!\n", x);
+			}
+
+			/* clear the re-config flag ... no matter what */
+			sngss7_clear_ckt_flag(sngss7_info, FLAG_CKT_RECONFIG);
+
+		} /* if ((sngss7_test_ckt_flag(sngss7_info, FLAG_CKT_RECONFIG)) */
+	} /* for (x = 1; x < (span->chan_count + 1); x++) */
+
+	return FTDM_SUCCESS;
+}
 /******************************************************************************/
 /* For Emacs:
  * Local Variables:
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
index 166fe5dc04..49da10cdf1 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
@@ -2668,7 +2668,7 @@ static int ftmod_ss7_fill_in_isup_interface(sng_isup_inf_t *sng_isup)
 	if (sng_isup->tpause != 0) {
 		g_ftdm_sngss7_data.cfg.isupIntf[i].tpause	= sng_isup->tpause;
 	} else {
-		g_ftdm_sngss7_data.cfg.isupIntf[i].tpause	= 150;
+		g_ftdm_sngss7_data.cfg.isupIntf[i].tpause	= 3000;
 	}
 	if (sng_isup->tstaenq != 0) {
 		g_ftdm_sngss7_data.cfg.isupIntf[i].tstaenq	= sng_isup->tstaenq;