diff --git a/ipacm/inc/IPACM_ConntrackListener.h b/ipacm/inc/IPACM_ConntrackListener.h
index dac3ea8..43b33c4 100755
--- a/ipacm/inc/IPACM_ConntrackListener.h
+++ b/ipacm/inc/IPACM_ConntrackListener.h
@@ -65,8 +65,6 @@
 	 void TriggerWANDown(uint32_t wan_addr);
 	 int  CreateNatThreads(void);
 
-	 void HandlePowerSave(void *data);
-	 void HandleResetPower(void *data);
 	 void HandleNeighIpAddrEvt(void *data, bool);
 
 public:
diff --git a/ipacm/inc/IPACM_Defs.h b/ipacm/inc/IPACM_Defs.h
old mode 100644
new mode 100755
index 7def2e9..18c349a
--- a/ipacm/inc/IPACM_Defs.h
+++ b/ipacm/inc/IPACM_Defs.h
@@ -115,9 +115,7 @@
 	IPA_HANDLE_WAN_UP,                        /* 21 ipacm_event_iface_up  */
 	IPA_HANDLE_WAN_DOWN,                      /* 22 unsigned long  */
 	IPA_HANDLE_WLAN_UP,                       /* 23 ipacm_event_iface_up */
-	IPA_HANDLE_LAN_UP,                        /* 24 ipacm_event_iface_up */
-	IPA_HANDLE_POWER_SAVE,                    /* 25 ipacm_event_iface_up */
-	IPA_HANDLE_RESET_POWER_SAVE               /* 26 ipacm_event_iface_up */
+	IPA_HANDLE_LAN_UP                         /* 24 ipacm_event_iface_up */
 } ipa_cm_event_id;
 
 typedef enum
diff --git a/ipacm/inc/IPACM_Wlan.h b/ipacm/inc/IPACM_Wlan.h
old mode 100644
new mode 100755
index fcab846..20eec98
--- a/ipacm/inc/IPACM_Wlan.h
+++ b/ipacm/inc/IPACM_Wlan.h
@@ -47,6 +47,7 @@
 #include "IPACM_Filtering.h"
 #include "IPACM_Lan.h"
 #include "IPACM_Iface.h"
+#include "IPACM_Conntrack_NATApp.h"
 
 typedef struct _wlan_client_rt_hdl
 {
@@ -103,6 +104,8 @@
 	int num_wifi_client;
 	wlan_ampdu_flt_rules wlan_ampdu_flt_rule;
 
+	NatApp *Nat_App;
+
 	inline ipa_wlan_client* get_client_memptr(ipa_wlan_client *param, int cnt)
 	{
 	    char *ret = ((char *)param) + (wlan_client_len * cnt);
diff --git a/ipacm/src/IPACM_ConntrackListener.cpp b/ipacm/src/IPACM_ConntrackListener.cpp
index 8d9a0e4..56eeb4d 100755
--- a/ipacm/src/IPACM_ConntrackListener.cpp
+++ b/ipacm/src/IPACM_ConntrackListener.cpp
@@ -51,8 +51,6 @@
 	 IPACM_EvtDispatcher::registr(IPA_HANDLE_WAN_DOWN, this);
 	 IPACM_EvtDispatcher::registr(IPA_PROCESS_CT_MESSAGE, this);
 	 IPACM_EvtDispatcher::registr(IPA_HANDLE_WLAN_UP, this);
-	 IPACM_EvtDispatcher::registr(IPA_HANDLE_POWER_SAVE, this);
-	 IPACM_EvtDispatcher::registr(IPA_HANDLE_RESET_POWER_SAVE, this);
 	 IPACM_EvtDispatcher::registr(IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT, this);
 	 IPACM_EvtDispatcher::registr(IPA_NEIGH_CLIENT_IP_ADDR_DEL_EVENT, this);
 }
@@ -118,17 +116,6 @@
 		 }
 		 break;
 
-
-	 case IPA_HANDLE_POWER_SAVE:
-		 IPACMDBG("Received IPA_HANDLE_POWER_SAVE event\n");
-		 HandlePowerSave(data);
-		 break;
-
-	 case IPA_HANDLE_RESET_POWER_SAVE:
-		 IPACMDBG("Received IPA_HANDLE_RESET_POWER_SAVE event\n");
-		 HandleResetPower(data);
-		 break;
-
 	 default:
 			IPACMDBG("Ignore cmd %d\n", evt);
 			break;
@@ -254,27 +241,10 @@
 
 }
 
-void IPACM_ConntrackListener::HandlePowerSave(void *in_param)
-{
-	ipacm_event_iface_up *pwrsv_data = (ipacm_event_iface_up *)in_param;
-
-	IPACM_ConntrackClient::iptodot("power save ip address",
-																 pwrsv_data->ipv4_addr);
-	NatApp::GetInstance()->UpdatePwrSaveIf(pwrsv_data->ipv4_addr);
-}
-
-void IPACM_ConntrackListener::HandleResetPower(void *in_param)
-{
-	ipacm_event_iface_up *pwrsv_data = (ipacm_event_iface_up *)in_param;
-
-	IPACM_ConntrackClient::iptodot("Reset power save ip address", 
-																 pwrsv_data->ipv4_addr);
-	NatApp::GetInstance()->ResetPwrSaveIf(pwrsv_data->ipv4_addr);
-}
-
 void IPACM_ConntrackListener::TriggerWANUp(void *in_param)
 {
 	 ipacm_event_iface_up *wanup_data = (ipacm_event_iface_up *)in_param;
+	 NatApp *na;
 
 	 IPACMDBG("Recevied below informatoin during wanup:\n");
 	 IPACMDBG("if_name:%s, ipv4_address:0x%x\n",
@@ -286,12 +256,17 @@
 		 return;
 	 }
 
-	 isWanUp = true;
-	 wan_ipaddr = wanup_data->ipv4_addr;
 	 IPACM_ConntrackClient::iptodot("public ip address", wanup_data->ipv4_addr);
+	 isWanUp = true;
 
+	 wan_ipaddr = wanup_data->ipv4_addr;
 	 memcpy(wan_ifname, wanup_data->ifname, sizeof(wan_ifname));
-	 NatApp::GetInstance()->AddTable(wanup_data->ipv4_addr);
+
+	 na = NatApp::GetInstance();
+	 if(na != NULL)
+	 {
+		 na->AddTable(wanup_data->ipv4_addr);
+	 }
 
 	 IPACMDBG("creating nat threads\n");
 	 CreateNatThreads();
@@ -395,8 +370,13 @@
 	 IPACMDBG("Deleting ipv4 nat table with ");
 	 IPACM_ConntrackClient::iptodot("public ip address", wan_addr);
 	 isWanUp = false;
+	 NatApp *na;
 
-	 NatApp::GetInstance()->DeleteTable(wan_addr);
+	 na = NatApp::GetInstance();
+	 if(na != NULL)
+	 {
+		 na->DeleteTable(wan_addr);
+	 }
 }
 
 
@@ -493,6 +473,7 @@
 	 nat_table_entry rule;
 	 u_int8_t tcp_state;
 	 uint32_t status = 0;
+	 NatApp *na = NULL;
 
 	 status = nfct_get_attr_u32(ct, ATTR_STATUS);
 
@@ -612,16 +593,23 @@
 
 	 if(IPPROTO_TCP == rule.protocol)
 	 {
+		        na = NatApp::GetInstance();
+			if(na == NULL)
+			{
+				IPACMERR("unable to get nat app instance");
+				return;
+			}
+
 			tcp_state = nfct_get_attr_u8(ct, ATTR_TCP_STATE);
 			if(TCP_CONNTRACK_ESTABLISHED == tcp_state)
 			{
 				 IPACMDBG("TCP state TCP_CONNTRACK_ESTABLISHED(%d)\n", tcp_state);
-				 NatApp::GetInstance()->AddEntry(&rule);
+				 na->AddEntry(&rule);
 			}
 			else if(TCP_CONNTRACK_FIN_WAIT == tcp_state)
 			{
 				 IPACMDBG("TCP state TCP_CONNTRACK_FIN_WAIT(%d)\n", tcp_state);
-				 NatApp::GetInstance()->DeleteEntry(&rule);
+				 na->DeleteEntry(&rule);
 			}
 			else
 			{
@@ -631,15 +619,22 @@
 	 }
 	 else if(IPPROTO_UDP == rule.protocol)
 	 {
+		  na = NatApp::GetInstance();
+			if(na == NULL)
+			{
+				IPACMERR("unable to get nat app instance");
+				return;
+			}
+
 			if(NFCT_T_NEW == type)
 			{
 				 IPACMDBG("New UDP connection at time %ld\n", time(NULL));
-				 NatApp::GetInstance()->AddEntry(&rule);
+				 na->AddEntry(&rule);
 			}
 			else if(NFCT_T_DESTROY == type)
 			{
 				 IPACMDBG("UDP connection close at time %ld\n", time(NULL));
-				 NatApp::GetInstance()->DeleteEntry(&rule);
+				 na->DeleteEntry(&rule);
 			}
 	 }
 	 else
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index 615d7b9..065f4b0 100755
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -79,6 +79,13 @@
 		return;
 	}
 
+	Nat_App = NatApp::GetInstance();
+	if (Nat_App == NULL)
+	{
+		IPACMERR("unable to get Nat App instance \n");
+		return;
+	}
+
 	IPACMDBG("index:%d constructor: Tx properties:%d\n", iface_index, iface_query->num_tx_props);
 	return;
 }
@@ -245,39 +252,30 @@
 				if ((wlan_index != IPACM_INVALID_INDEX) &&
 						(get_client_memptr(wlan_client, wlan_index)->power_save_set == true))
 				{
-				    if(get_client_memptr(wlan_client, wlan_index)->ipv4_set == true)
-				    {
-					ipacm_cmd_q_data evt_data;
-					ipacm_event_iface_up *data = NULL;
 
-					data = (ipacm_event_iface_up *)malloc(sizeof(ipacm_event_iface_up));
-					if (data == NULL)
-					{
-						IPACMERR("unable to allocate memory\n");
-						return;
-					}
-
-					data->ipv4_addr = get_client_memptr(wlan_client, wlan_index)->v4_addr;
-					evt_data.event = IPA_HANDLE_RESET_POWER_SAVE;
-					evt_data.evt_data = (void *)data;
-					IPACM_EvtDispatcher::PostEvt(&evt_data);
-					    IPACMDBG("recover client index(%d):ipv4 address: 0x%x\n", wlan_index, get_client_memptr(wlan_client, wlan_index)->v4_addr);
-				     }
 					IPACMDBG("change wlan client out of  power safe mode \n");
 					get_client_memptr(wlan_client, wlan_index)->power_save_set = false;
-				}
 				
-				
-                                if(get_client_memptr(wlan_client, wlan_index)->ipv4_set == true) /* for ipv4 */
-				{
-					handle_wlan_client_route_rule(data->mac_addr, IPA_IP_v4);
-				}				
+					/* First add route rules and then nat rules */
+                    if(get_client_memptr(wlan_client, wlan_index)->ipv4_set == true) /* for ipv4 */
+				    {
+						     IPACMDBG("recover client index(%d):ipv4 address: 0x%x\n",
+										 wlan_index,
+										 get_client_memptr(wlan_client, wlan_index)->v4_addr);
 
-				if(get_client_memptr(wlan_client, wlan_index)->ipv6_set == true) /* for ipv6 */
-				{
-					handle_wlan_client_route_rule(data->mac_addr, IPA_IP_v6);
-				}
-			}
+						IPACMDBG("Adding Route Rules\n");
+					    handle_wlan_client_route_rule(data->mac_addr, IPA_IP_v4);
+
+						IPACMDBG("Adding Nat Rules\n");
+						Nat_App->ResetPwrSaveIf(get_client_memptr(wlan_client, wlan_index)->v4_addr);
+				    }				
+
+				    if(get_client_memptr(wlan_client, wlan_index)->ipv6_set == true) /* for ipv6 */
+				    {
+					    handle_wlan_client_route_rule(data->mac_addr, IPA_IP_v6);
+				    }
+			    }
+		    }
 		}
 		break;
 
@@ -852,8 +850,6 @@
 int IPACM_Wlan::handle_wlan_client_pwrsave(uint8_t *mac_addr)
 {
 	int clt_indx;
-	ipacm_cmd_q_data evt_data;
-	ipacm_event_iface_up *data;
 	IPACMDBG("wlan->handle_wlan_client_pwrsave();\n");
 
 	clt_indx = get_wlan_client_index(mac_addr);
@@ -865,24 +861,14 @@
 
         if (get_client_memptr(wlan_client, clt_indx)->power_save_set == false)
 	{
+		/* First reset nat rules and then route rules */
 	    if(get_client_memptr(wlan_client, clt_indx)->ipv4_set == true)
 	    {
-		data = (ipacm_event_iface_up *)malloc(sizeof(ipacm_event_iface_up));
-		if (data == NULL)
-		{
-			IPACMERR("unable to allocate memory\n");
-			return IPACM_FAILURE;
-		}
-
-		data->ipv4_addr = get_client_memptr(wlan_client, clt_indx)->v4_addr ;
-		   IPACMDBG("power-save client index(%d):ipv4 address: 0x%x\n", clt_indx, get_client_memptr(wlan_client, clt_indx)->v4_addr);
-           
-           
-		evt_data.event = IPA_HANDLE_POWER_SAVE;
-		evt_data.evt_data = (void *)data;
-		IPACM_EvtDispatcher::PostEvt(&evt_data);
+			IPACMDBG("Deleting Nat Rules\n");
+			Nat_App->UpdatePwrSaveIf(get_client_memptr(wlan_client, clt_indx)->v4_addr);
  	     }
  	  
+		IPACMDBG("Deleting default qos Route Rules\n");
 		delete_default_qos_rtrules(clt_indx, IPA_IP_v4);
 		delete_default_qos_rtrules(clt_indx, IPA_IP_v6);
                 get_client_memptr(wlan_client, clt_indx)->power_save_set = true;
