diff --git a/ipacm/src/IPACM_EvtDispatcher.cpp b/ipacm/src/IPACM_EvtDispatcher.cpp
index 60f0e8d..c76f760 100644
--- a/ipacm/src/IPACM_EvtDispatcher.cpp
+++ b/ipacm/src/IPACM_EvtDispatcher.cpp
@@ -109,7 +109,7 @@
 void IPACM_EvtDispatcher::ProcessEvt(ipacm_cmd_q_data *data)
 {
 
-	cmd_evts *tmp = head;
+	cmd_evts *tmp = head, tmp1;
 
 	if(head == NULL)
 	{
@@ -118,12 +118,13 @@
 
 	while(tmp != NULL)
 	{
-		if(data->event == tmp->event)
+	        memcpy(&tmp1, tmp, sizeof(tmp1));
+		if(data->event == tmp1.event)
 		{
-			tmp->obj->event_callback(data->event, data->evt_data);
+			tmp1.obj->event_callback(data->event, data->evt_data);
 			IPACMDBG(" Find matched registered events\n");
 		}
-		tmp = tmp->next;
+	        tmp = tmp1.next;
 	}
 
 	IPACMDBG(" Finished process events\n");
diff --git a/ipacm/src/IPACM_Filtering.cpp b/ipacm/src/IPACM_Filtering.cpp
index 4241549..083a409 100644
--- a/ipacm/src/IPACM_Filtering.cpp
+++ b/ipacm/src/IPACM_Filtering.cpp
@@ -164,13 +164,14 @@
 	 uint32_t *flt_rule_hdls,
 	 ipa_ip_type ip,
 	 uint8_t num_rules
-	 )
+)
 {
 	struct ipa_ioc_del_flt_rule *flt_rule;
 	bool res = true;
 	int len = 0, cnt = 0;
+        const uint8_t UNIT_RULES = 1;
 
-	len = (sizeof(struct ipa_ioc_del_flt_rule)) + (num_rules * sizeof(struct ipa_flt_rule_del));
+	len = (sizeof(struct ipa_ioc_del_flt_rule)) + (UNIT_RULES * sizeof(struct ipa_flt_rule_del));
 	flt_rule = (struct ipa_ioc_del_flt_rule *)malloc(len);
 	if (flt_rule == NULL)
 	{
@@ -178,41 +179,43 @@
 		return false;
 	}
 
-	memset(flt_rule, 0, len);
-	flt_rule->commit = 1;
-	flt_rule->num_hdls = num_rules;
-	flt_rule->ip = ip;
-
-	for (cnt = 0; cnt < flt_rule->num_hdls; cnt++)
+	for (cnt = 0; cnt < num_rules; cnt++)
 	{
+	    memset(flt_rule, 0, len);
+	    flt_rule->commit = 1;
+	    flt_rule->num_hdls = UNIT_RULES;
+	    flt_rule->ip = ip;
 
-		if (flt_rule_hdls[cnt] == 0)
-		{
-			IPACMERR("invalid filter handle passed, ignoring it: %d\n", cnt)
-			res = false;
-			goto fail;
-		}
+	    if (flt_rule_hdls[cnt] == 0)
+	    {
+		   IPACMERR("invalid filter handle passed, ignoring it: %d\n", cnt)
+	    }
+            else
+	    {
 
-		flt_rule->hdl[cnt].status = -1;
-		flt_rule->hdl[cnt].hdl = flt_rule_hdls[cnt];
-		IPACMDBG("Deleting filter hdl:(0x%x) with ip type: %d\n", flt_rule_hdls[cnt], ip);
-	}
+		   flt_rule->hdl[0].status = -1;
+		   flt_rule->hdl[0].hdl = flt_rule_hdls[cnt];
+		   IPACMDBG("Deleting filter hdl:(0x%x) with ip type: %d\n", flt_rule_hdls[cnt], ip);
 
-	if (DeleteFilteringRule(flt_rule) == false)
-	{
-		PERROR("Filter rule deletion failed!\n");
-		res = false;
-		goto fail;
-	}
+	           if (DeleteFilteringRule(flt_rule) == false)
+	           {
+		        PERROR("Filter rule deletion failed!\n");
+		        res = false;
+		        goto fail;
+	           }
+		   else
+	           {
 
-	for (cnt = 0; cnt < flt_rule->num_hdls; cnt++)
-	{
-		if (flt_rule->hdl[cnt].status != 0)
-		{
-			IPACMERR("Filter rule hdl 0x%x deletion failed with error:%d\n",
-							 flt_rule->hdl[cnt].hdl, flt_rule->hdl[cnt].status);
-			res = false;
-		}
+		        if (flt_rule->hdl[0].status != 0)
+		        {
+			     IPACMERR("Filter rule hdl 0x%x deletion failed with error:%d\n",
+		        					 flt_rule->hdl[0].hdl, flt_rule->hdl[0].status);
+			     res = false;
+			     goto fail;
+		        }
+		   
+		   }	   
+	    }
 	}
 
 fail:
diff --git a/ipacm/src/IPACM_Iface.cpp b/ipacm/src/IPACM_Iface.cpp
index 745d921..736c84a 100644
--- a/ipacm/src/IPACM_Iface.cpp
+++ b/ipacm/src/IPACM_Iface.cpp
@@ -576,7 +576,10 @@
 	}
 	else
 	{
-	  IPACM_Iface::ipacmcfg->AddRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[rx_prop->rx[0].src_pipe]);		
+	  if(rx_prop != NULL)
+	  {
+	      IPACM_Iface::ipacmcfg->AddRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[rx_prop->rx[0].src_pipe]);		
+	  }
 	}
 #else
   	IPACM_Iface::ipacmcfg->AddRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[rx_prop->rx[0].src_pipe]);
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index 7bb6cad..95f042a 100644
--- a/ipacm/src/IPACM_Lan.cpp
+++ b/ipacm/src/IPACM_Lan.cpp
@@ -1299,6 +1299,7 @@
 		}
 	}
 
+        IPACMDBG("Finished delete default iface ipv4 filtering rules \n ");
 
 	if (ip_type != IPA_IP_v4 && rx_prop != NULL)
 	{
@@ -1312,6 +1313,8 @@
 		}
 	}
 
+        IPACMDBG("Finished delete default iface ipv6 filtering rules \n ");
+	
 	/* delete wan filter rule */
 	if (IPACM_Wan::isWanUP() && rx_prop != NULL)
 	{
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index 7ee68d5..f8e180d 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -398,6 +398,12 @@
 	/* copy header from tx-property, see if partial or not */
 	/* assume all tx-property uses the same header name for v4 or v6*/
 
+	if(tx_prop == NULL)
+	{
+	  IPACMDBG("No tx properties, ignore default route setting\n");
+	  return IPACM_SUCCESS;
+	}
+	
         for (cnt=0; cnt<tx_prop->num_tx_props; cnt++)
 	{
 		   if(tx_prop->tx[cnt].ip==iptype)
@@ -623,6 +629,12 @@
 
 	IPACMDBG("got handle_route_del_evt with ip-family:%d \n", iptype);
 
+	if(tx_prop == NULL)
+	{
+	  IPACMDBG("No tx properties, ignore delete default route setting\n");
+	  return IPACM_SUCCESS;
+	}		
+	
 	if (((iptype == IPA_IP_v4) && (active_v4 == true)) ||
 			((iptype == IPA_IP_v6) && (active_v6 == true)))
 	{
