diff --git a/ipacm/inc/IPACM_Defs.h b/ipacm/inc/IPACM_Defs.h
index 19ddbec..12887ce 100644
--- a/ipacm/inc/IPACM_Defs.h
+++ b/ipacm/inc/IPACM_Defs.h
@@ -57,6 +57,7 @@
 #define IPA_WLAN_PARTIAL_HDR_OFFSET  12 // dst mac first then src mac
 #define IPA_VIRTUAL_IFACE_NAME "bridge0"
 #define IPA_WLAN_PARTIAL_HDR_NAME  "IEEE802_3"
+#define IPA_WAN_PARTIAL_HDR_NAME  "IEEE802_3STA"
 #define IPA_MAX_IFACE_ENTRIES 15
 #define IPA_MAX_PRIVATE_SUBNET_ENTRIES 3
 #define IPA_MAX_ALG_ENTRIES 10
@@ -86,28 +87,30 @@
 ===========================================================================*/
 typedef enum
 {
-	IPA_LINK_UP_EVENT = 1,                    /* ipacm_event_data_fid */
+	IPA_LINK_UP_EVENT = 1,                    /* 1 ipacm_event_data_fid */
 	IPA_LINK_DOWN_EVENT,                      /* 2 ipacm_event_data_fid */
 	IPA_ADDR_ADD_EVENT,                       /* 3 ipacm_event_data_addr */
 	IPA_ADDR_DEL_EVENT,                       /* 4 no use */
 	IPA_ROUTE_ADD_EVENT,                      /* 5 ipacm_event_data_addr */
 	IPA_ROUTE_DEL_EVENT,                      /* 6 ipacm_event_data_addr */
 	IPA_FIREWALL_CHANGE_EVENT,                /* 7 NULL */
-	IPA_WLAN_CLIENT_ADD_EVENT,                /* 8 ipacm_event_data_mac */
-	IPA_WLAN_CLIENT_DEL_EVENT,                /* 9 ipacm_event_data_mac */
-	IPA_WLAN_CLIENT_POWER_SAVE_EVENT,         /* 10 ipacm_event_data_mac */
-	IPA_WLAN_CLIENT_RECOVER_EVENT,            /* 11 ipacm_event_data_mac */
-	IPA_NEW_NEIGH_EVENT,                      /* 12 ipacm_event_data_all */
-	IPA_DEL_NEIGH_EVENT,                      /* 13 ipacm_event_data_all */
-	IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT,       /* 14 ipacm_event_data_all */
-	IPA_NEIGH_CLIENT_IP_ADDR_DEL_EVENT,       /* 15 ipacm_event_data_all */
-	IPA_SW_ROUTING_ENABLE,                    /* 16 NULL */
-	IPA_SW_ROUTING_DISABLE,                   /* 17 NULL */
-	IPA_PROCESS_CT_MESSAGE,                   /* 18 ipacm_ct_evt_data */
-	IPA_HANDLE_WAN_UP,                        /* 19 unsigned long  */
-	IPA_HANDLE_WAN_DOWN,                      /* 20 unsigned long  */
-	IPA_HANDLE_WLAN_UP,                       /* 21 unsigned long  */
-	IPA_HANDLE_LAN_UP                         /* 22 unsigned long  */
+	IPA_WLAN_AP_LINK_UP_EVENT,                /* 8 ipacm_event_data_mac */
+	IPA_WLAN_STA_LINK_UP_EVENT,               /* 9 ipacm_event_data_mac */
+	IPA_WLAN_CLIENT_ADD_EVENT,                /* 10 ipacm_event_data_mac */
+	IPA_WLAN_CLIENT_DEL_EVENT,                /* 11 ipacm_event_data_mac */
+	IPA_WLAN_CLIENT_POWER_SAVE_EVENT,         /* 12 ipacm_event_data_mac */
+	IPA_WLAN_CLIENT_RECOVER_EVENT,            /* 13 ipacm_event_data_mac */
+	IPA_NEW_NEIGH_EVENT,                      /* 14 ipacm_event_data_all */
+	IPA_DEL_NEIGH_EVENT,                      /* 15 ipacm_event_data_all */
+	IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT,       /* 16 ipacm_event_data_all */
+	IPA_NEIGH_CLIENT_IP_ADDR_DEL_EVENT,       /* 17 ipacm_event_data_all */
+	IPA_SW_ROUTING_ENABLE,                    /* 18 NULL */
+	IPA_SW_ROUTING_DISABLE,                   /* 19 NULL */
+	IPA_PROCESS_CT_MESSAGE,                   /* 20 ipacm_ct_evt_data */
+	IPA_HANDLE_WAN_UP,                        /* 21 unsigned long  */
+	IPA_HANDLE_WAN_DOWN,                      /* 22 unsigned long  */
+	IPA_HANDLE_WLAN_UP,                       /* 23 unsigned long  */
+	IPA_HANDLE_LAN_UP                         /* 24 unsigned long  */
 } ipa_cm_event_id;
 
 typedef enum
@@ -115,7 +118,8 @@
 	LAN_IF = 0,
 	WLAN_IF,
 	WAN_IF,
-	VIRTUAL_IF
+	VIRTUAL_IF,
+	UNKNOWN_IF
 } ipacm_iface_type;
 
 typedef struct
diff --git a/ipacm/inc/IPACM_Wan.h b/ipacm/inc/IPACM_Wan.h
index da7fd06..bedc75d 100644
--- a/ipacm/inc/IPACM_Wan.h
+++ b/ipacm/inc/IPACM_Wan.h
@@ -77,9 +77,12 @@
 	uint32_t firewall_hdl_v6[IPACM_MAX_FIREWALL_ENTRIES];
 	uint32_t dft_wan_fl_hdl[IPA_NUM_DEFAULT_WAN_FILTER_RULES];
 	int num_firewall_v4,num_firewall_v6;
+	uint32_t wan_v4_addr;
 	bool active_v4;
 	bool active_v6;
-	uint32_t wan_v4_addr;
+	bool header_set;
+	bool header_partial_default_wan_v4;
+	bool header_partial_default_wan_v6;
 
 	/* IPACM firewall Configuration file*/
 	IPACM_firewall_conf_t firewall_config;
@@ -88,7 +91,7 @@
 	int handle_addr_evt(ipacm_event_data_addr *data);
 
 	/* wan default route/filter rule configuration */
-	int handle_route_add_evt(ipacm_event_data_addr *data);
+	int handle_route_add_evt(ipa_ip_type iptype);
 
 	/* wan default route/filter rule delete */	
 	int handle_route_del_evt(ipa_ip_type iptype);
diff --git a/ipacm/inc/IPACM_Wlan.h b/ipacm/inc/IPACM_Wlan.h
index 0535584..a720046 100644
--- a/ipacm/inc/IPACM_Wlan.h
+++ b/ipacm/inc/IPACM_Wlan.h
@@ -64,6 +64,7 @@
 	bool route_rule_set_v6;
 	bool ipv4_set;
 	bool ipv6_set;
+	bool power_save_set;
 	wlan_client_rt_hdl wifi_rt_hdl[0]; /* depends on number of tx properties */
 }ipa_wlan_client;
 
diff --git a/ipacm/inc/IPACM_Xml.h b/ipacm/inc/IPACM_Xml.h
index 93e92a6..7079791 100644
--- a/ipacm/inc/IPACM_Xml.h
+++ b/ipacm/inc/IPACM_Xml.h
@@ -88,6 +88,7 @@
 #define LANIF_TAG                            "LAN"
 #define WLANIF_TAG                           "WLAN"
 #define VIRTUALIF_TAG                        "VIRTUAL"
+#define UNKNOWNIF_TAG                        "UNKNOWN"
 #define IPACMALG_TAG                         "IPACMALG"
 #define ALG_TAG                              "ALG"
 #define Protocol_TAG                         "Protocol"
diff --git a/ipacm/src/IPACM_ConntrackClient.cpp b/ipacm/src/IPACM_ConntrackClient.cpp
index 7e48822..3ef2f5e 100644
--- a/ipacm/src/IPACM_ConntrackClient.cpp
+++ b/ipacm/src/IPACM_ConntrackClient.cpp
@@ -399,7 +399,7 @@
 	if(pClient == NULL)
 	{
 		IPACMERR("unable to get conntrack client instance\n");
-		return -1;
+		return NULL;
 	}
 
 	pClient->tcp_hdl = nfct_open(CONNTRACK, NF_NETLINK_CONNTRACK_UPDATE);
diff --git a/ipacm/src/IPACM_ConntrackListener.cpp b/ipacm/src/IPACM_ConntrackListener.cpp
index 391c20a..f11e9be 100644
--- a/ipacm/src/IPACM_ConntrackListener.cpp
+++ b/ipacm/src/IPACM_ConntrackListener.cpp
@@ -65,13 +65,19 @@
 
 	 case IPA_HANDLE_WAN_UP:
 			IPACMDBG("Received IPA_HANDLE_WAN_UP event\n");
-			TriggerWANUp(data);
+			if(isWanUp == false)
+			{
+				TriggerWANUp(data);
+			}
 			break;
 
 	 case IPA_HANDLE_WAN_DOWN:
 			IPACMDBG("Received IPA_HANDLE_WAN_DOWN event\n");
 			pub_addr = (uint32_t *)data;
-			TriggerWANDown(*pub_addr);
+			if(isWanUp == true)
+			{
+				TriggerWANDown(*pub_addr);
+			}
 			break;
 
 	/* if wlan or lan comes up after wan interface, modify
@@ -100,6 +106,12 @@
 	 IPACMDBG("if_name:%s, ipv4_address:0x%x\n",
 						wanup_data->ifname, wanup_data->ipv4_addr);
 
+	 if(wanup_data->ipv4_addr == 0)
+	 {
+		 IPACMERR("Invalid ipv4 address,ignoring IPA_HANDLE_WAN_UP event\n");
+		 return;
+	 }
+
 	 isWanUp = true;
 	 wan_ipaddr = wanup_data->ipv4_addr;
 	 IPACM_ConntrackClient::iptodot("public ip address", wanup_data->ipv4_addr);
@@ -125,7 +137,7 @@
 				 if(0 != ret)
 				 {
 						IPACMERR("unable to create TCP conntrack event listner thread\n");
-						PERROR("unable to create TCP conntrack");
+						PERROR("unable to create TCP conntrack\n");
 						return -1;
 				 }
 
@@ -138,7 +150,7 @@
 				 if(0 != ret)
 				 {
 						IPACMERR("unable to create UDP conntrack event listner thread\n");
-						PERROR("unable to create UDP conntrack");
+						PERROR("unable to create UDP conntrack\n");
 						goto error;
 				 }
 
@@ -151,7 +163,7 @@
 				 if(0 != ret)
 				 {
 						IPACMERR("unable to create udp conn timeout thread\n");
-						PERROR("unable to create udp conn timeout");
+						PERROR("unable to create udp conn timeout\n");
 						goto error;
 				 }
 
diff --git a/ipacm/src/IPACM_Conntrack_NATApp.cpp b/ipacm/src/IPACM_Conntrack_NATApp.cpp
index 63b158c..8e5ee41 100644
--- a/ipacm/src/IPACM_Conntrack_NATApp.cpp
+++ b/ipacm/src/IPACM_Conntrack_NATApp.cpp
@@ -53,6 +53,7 @@
 int NatApp::Init(void)
 {
 	IPACM_Config *pConfig;
+	int size = 0;
 
 	pConfig = IPACM_Config::GetInstance();
 	if(pConfig == NULL)
@@ -63,13 +64,15 @@
 
 	max_entries = pConfig->GetNatMaxEntries();
 
-	cache = (nat_table_entry *)malloc(sizeof(nat_table_entry) * max_entries);
+	size = (sizeof(nat_table_entry) * max_entries);
+	cache = (nat_table_entry *)malloc(size);
 	if(cache == NULL)
 	{
 		IPACMERR("Unable to allocate memory for cache\n");
 		goto fail;
 	}
-	memset(cache, 0, sizeof(nat_table_entry) * max_entries);
+	IPACMDBG("Allocated %d bytes for config manager nat cache\n", size);
+	memset(cache, 0, size);
 
 	nALGPort = pConfig->GetAlgPortCnt();
 	pALGPorts = (ipacm_alg *)malloc(sizeof(ipacm_alg) * nALGPort);
diff --git a/ipacm/src/IPACM_EvtDispatcher.cpp b/ipacm/src/IPACM_EvtDispatcher.cpp
index aa72dd6..60f0e8d 100644
--- a/ipacm/src/IPACM_EvtDispatcher.cpp
+++ b/ipacm/src/IPACM_EvtDispatcher.cpp
@@ -121,10 +121,13 @@
 		if(data->event == tmp->event)
 		{
 			tmp->obj->event_callback(data->event, data->evt_data);
+			IPACMDBG(" Find matched registered events\n");
 		}
 		tmp = tmp->next;
 	}
 
+	IPACMDBG(" Finished process events\n");
+			
 	if(data->evt_data != NULL)
 	{
 		IPACMDBG("free the event:%d data: %p\n", data->event, data->evt_data);
diff --git a/ipacm/src/IPACM_IfaceManager.cpp b/ipacm/src/IPACM_IfaceManager.cpp
index 36f44ca..114c90c 100644
--- a/ipacm/src/IPACM_IfaceManager.cpp
+++ b/ipacm/src/IPACM_IfaceManager.cpp
@@ -53,12 +53,15 @@
 
 IPACM_IfaceManager::IPACM_IfaceManager() 
 {
-	IPACM_EvtDispatcher::registr(IPA_LINK_UP_EVENT, this); // skylar fix register name, class name
-	return; //skylar no interface_id
+	IPACM_EvtDispatcher::registr(IPA_LINK_UP_EVENT, this);         
+	IPACM_EvtDispatcher::registr(IPA_WLAN_AP_LINK_UP_EVENT, this);  // register for wlan AP-iface
+	IPACM_EvtDispatcher::registr(IPA_WLAN_STA_LINK_UP_EVENT, this); // register for wlan STA-iface
+	return;
 }
 
-void IPACM_IfaceManager::event_callback(ipa_cm_event_id event, void *param) //skylar rename:event_callback
+void IPACM_IfaceManager::event_callback(ipa_cm_event_id event, void *param)
 {
+  int ipa_interface_index;
 	ipacm_event_data_fid *evt_data = (ipacm_event_data_fid *)param;
 	switch(event)
 	{
@@ -68,6 +71,39 @@
 		create_iface_instance(evt_data->if_index);
 		break;
 
+	case IPA_WLAN_AP_LINK_UP_EVENT:
+	    ipa_interface_index = IPACM_Iface::iface_ipa_index_query(evt_data->if_index);
+		/* change iface category from unknown to WLAN_IF */
+		if(IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat == UNKNOWN_IF)
+		{  
+		  IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat=WLAN_IF; 
+		  IPACMDBG("WLAN AP (%s) link up, iface: %d: \n", 
+							     IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);		
+		  create_iface_instance(evt_data->if_index);
+		}
+		else
+		{
+		  IPACMDBG("iface %s already up and act as %d mode: \n",
+							 IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name,
+							 IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat);		
+		}
+		break;
+
+	case IPA_WLAN_STA_LINK_UP_EVENT:
+	    ipa_interface_index = IPACM_Iface::iface_ipa_index_query(evt_data->if_index);
+		/* change iface category from unknown to WAN_IF */
+		if(IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat==UNKNOWN_IF)
+		{  
+		  IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat=WAN_IF; 
+		  IPACMDBG("WLAN STA (%s) link up, iface: %d: \n", IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);		
+		  create_iface_instance(evt_data->if_index);
+		}
+		else
+		{
+		  IPACMDBG("iface %s already up and act as %d mode: \n",IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name,IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat);		
+		}
+		break;
+		
 	default:
 		break;
 	}
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index cc6eec1..b5f178c 100644
--- a/ipacm/src/IPACM_Lan.cpp
+++ b/ipacm/src/IPACM_Lan.cpp
@@ -99,6 +99,17 @@
 		{
 			ipacm_event_data_addr *data = (ipacm_event_data_addr *)param;
 			ipa_interface_index = iface_ipa_index_query(data->if_index);
+
+			if ( (data->iptype == IPA_IP_v4 && data->ipv4_addr == 0) ||
+					 (data->iptype == IPA_IP_v6 && 
+						data->ipv6_addr[0] == 0 && data->ipv6_addr[1] == 0 && 
+					  data->ipv6_addr[2] == 0 && data->ipv6_addr[3] == 0) )
+			{
+				IPACMDBG("Invalid address, ignore IPA_ADDR_ADD_EVENT event\n");
+				return;
+			}
+
+
 			if (ipa_interface_index == ipa_if_num)
 			{
 				IPACMDBG("Received IPA_ADDR_ADD_EVENT\n");
diff --git a/ipacm/src/IPACM_Main.cpp b/ipacm/src/IPACM_Main.cpp
index 446cd6a..42be223 100644
--- a/ipacm/src/IPACM_Main.cpp
+++ b/ipacm/src/IPACM_Main.cpp
@@ -12,7 +12,7 @@
 			with the distribution.
 		* Neither the name of The Linux Foundation nor the names of its
 			contributors may be used to endorse or promote products derived
-			from this software without specific prior written permission.																								from this software without specific prior written permission.
+			from this software without specific prior written permission.																								
 
 THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
 WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
@@ -130,7 +130,7 @@
 
 		if (length < 0)
 		{
-			IPACMDBG("inotify read() error return length: %d and mask: 0x%x 0x%x\n", length, event->mask, mask);
+			IPACMERR("inotify read() error return length: %d and mask: 0x%x 0x%x\n", length, event->mask, mask);
 			return NULL;
 		}
 
@@ -218,21 +218,46 @@
 		case SW_ROUTING_ENABLE:
 			IPACMDBG("Received SW_ROUTING_ENABLE\n");
 			evt_data.event = IPA_SW_ROUTING_ENABLE;
-			evt_data.evt_data = NULL;
 			break;
 
 		case SW_ROUTING_DISABLE:
 			IPACMDBG("Received SW_ROUTING_DISABLE\n");
 			evt_data.event = IPA_SW_ROUTING_DISABLE;
-			evt_data.evt_data = NULL;
 			break;
 
+		case WLAN_AP_CONNECT:
+			IPACMDBG("Received WLAN_AP_CONNECT name: %s\n",event->name);
+			IPACMDBG("AP Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
+							 event->mac_addr[0], event->mac_addr[1], event->mac_addr[2],
+							 event->mac_addr[3], event->mac_addr[4], event->mac_addr[5]); 
+
+			memcpy(data->mac_addr,
+						 event->mac_addr,
+						 sizeof(event->mac_addr));
+			ipa_get_if_index(event->name, &(data->if_index));
+			evt_data.event = IPA_WLAN_AP_LINK_UP_EVENT;
+			evt_data.evt_data = data;
+			break;
+
+		case WLAN_STA_CONNECT:
+			IPACMDBG("Received WLAN_STA_CONNECT name: %s\n",event->name);
+			IPACMDBG("STA Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
+							 event->mac_addr[0], event->mac_addr[1], event->mac_addr[2],
+							 event->mac_addr[3], event->mac_addr[4], event->mac_addr[5]); 
+			memcpy(data->mac_addr,
+						 event->mac_addr,
+						 sizeof(event->mac_addr));
+			ipa_get_if_index(event->name, &(data->if_index));
+
+			evt_data.event = IPA_WLAN_STA_LINK_UP_EVENT;
+			evt_data.evt_data = data;
+			break;
+						
 		case WLAN_CLIENT_CONNECT:
 			IPACMDBG("Received WLAN_CLIENT_CONNECT\n");
 			IPACMDBG("Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
 							 event->mac_addr[0], event->mac_addr[1], event->mac_addr[2],
 							 event->mac_addr[3], event->mac_addr[4], event->mac_addr[5]); 
-
 		  evt_data.event = IPA_WLAN_CLIENT_ADD_EVENT;
 			evt_data.evt_data = data;
 			ipa_get_if_index(event->name, &(data->if_index));
@@ -246,20 +271,19 @@
 			IPACMDBG("Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
 							 event->mac_addr[0], event->mac_addr[1], event->mac_addr[2],
 							 event->mac_addr[3], event->mac_addr[4], event->mac_addr[5]); 
-
 			memcpy(data->mac_addr,
 						 event->mac_addr,
 						 sizeof(event->mac_addr));
 			ipa_get_if_index(event->name, &(data->if_index));
 
 			evt_data.event = IPA_WLAN_CLIENT_DEL_EVENT;
-			evt_data.evt_data = data;
-			
+			evt_data.evt_data = data;			
 			break;
 
 		case WLAN_CLIENT_POWER_SAVE_MODE:
+#if 0
 			IPACMDBG("Received WLAN_CLIENT_POWER_SAVE_MODE\n");
-			IPACMDBG("Mac Address [0]:%2d [1]:%2d [2]:%2d [3]:%2d [4]:%2d [5]%2d\n",
+			IPACMDBG("Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
 							 event->mac_addr[0], event->mac_addr[1], event->mac_addr[2],
 							 event->mac_addr[3], event->mac_addr[4], event->mac_addr[5]); 
 
@@ -269,13 +293,14 @@
 			evt_data.evt_data = data;
 			memcpy(data->mac_addr,
 						 event->mac_addr,
-						 sizeof(event->mac_addr));
-			
+						 sizeof(event->mac_addr));			
+#endif
 			break;
 
 		case WLAN_CLIENT_NORMAL_MODE:
+#if 0
 			IPACMDBG("Received WLAN_CLIENT_NORMAL_MODE\n");
-			IPACMDBG("Mac Address [0]:%2d [1]:%2d [2]:%2d [3]:%2d [4]:%2d [5]%2d\n",
+			IPACMDBG("Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
 							 event->mac_addr[0], event->mac_addr[1], event->mac_addr[2],
 							 event->mac_addr[3], event->mac_addr[4], event->mac_addr[5]); 
 
@@ -285,18 +310,27 @@
 			ipa_get_if_index(event->name, &(data->if_index));
 			evt_data.evt_data = data;
 			evt_data.event = IPA_WLAN_CLIENT_RECOVER_EVENT;
+#endif
+			break;
+
+		case WLAN_AP_DISCONNECT:
+			IPACMDBG("Ignoring WLAN_AP_DISCONNECT\n");
+			break;
+
+		case WLAN_STA_DISCONNECT:
+			IPACMDBG("Ignoring WLAN_STA_DISCONNET\n");
 			break;
 
 		default:
-			IPACMDBG("Invalid message\n");
-			free(data);
-			continue;
+			IPACMERR("Unhandled message type: %d\n", event_hdr->msg_type);
+			break;
 
 		}
 
 		/* finish command queue */
 		if (evt_data.evt_data == NULL)
 		{
+			IPACMDBG("free the event data memory as there is no data\n");
 			free(data);
 		}
 
@@ -416,6 +450,7 @@
 	if (ioctl(fd, SIOCGIFINDEX, &ifr) < 0)
 	{
 		PERROR("call_ioctl_on_dev: ioctl failed:");
+    *if_index = -1;
 		close(fd);
 		return IPACM_FAILURE;
 	}
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index 237c4d9..aae30ed 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -58,7 +58,10 @@
 
 	active_v4 = false;
 	active_v6 = false;
-
+  header_set = false;
+  header_partial_default_wan_v4 = false;
+	header_partial_default_wan_v6 = false;
+	
 	IPACMDBG(" IPACM->IPACM_Wan(%d) constructor: Tx:%d\n", ipa_if_num, iface_query->num_tx_props);
 	return;
 }
@@ -197,6 +200,16 @@
 		{
 			ipacm_event_data_addr *data = (ipacm_event_data_addr *)param;
 			ipa_interface_index = iface_ipa_index_query(data->if_index);
+
+			if ( (data->iptype == IPA_IP_v4 && data->ipv4_addr == 0) ||
+					 (data->iptype == IPA_IP_v6 && 
+						data->ipv6_addr[0] == 0 && data->ipv6_addr[1] == 0 && 
+					  data->ipv6_addr[2] == 0 && data->ipv6_addr[3] == 0) )
+			{
+				IPACMDBG("Invalid address, ignore IPA_ADDR_ADD_EVENT event\n");
+				return;
+			}
+
 			if (ipa_interface_index == ipa_if_num)
 			{
 				/* check v4 not setup before, v6 can have 2 iface ip */
@@ -224,7 +237,7 @@
 				if ((data->iptype == IPA_IP_v4) && (!data->ipv4_addr) && (!data->ipv4_addr_mask))
 				{
 					IPACMDBG("adding routing table\n");
-					handle_route_add_evt(data);
+				  handle_route_add_evt(data->iptype);
 					IPACM_Wan::wan_up = true;
 					active_v4 = true;
 					config_dft_firewall_rules(IPA_IP_v4);
@@ -235,7 +248,7 @@
 					IPACMDBG("\n get default v6 route (dst:00.00.00.00)\n");
 					IPACMDBG(" IPV6 value: %08x:%08x:%08x:%08x \n",
 									 data->ipv6_addr[0], data->ipv6_addr[1], data->ipv6_addr[2], data->ipv6_addr[3]);
-					handle_route_add_evt(data);
+				  	handle_route_add_evt(data->iptype);
 					active_v6 = true;
 					config_dft_firewall_rules(IPA_IP_v6);
 				}
@@ -273,7 +286,7 @@
 			ipa_interface_index = iface_ipa_index_query(data->if_index);
 			if (ipa_interface_index == ipa_if_num)
 			{
-				IPACMDBG("Received IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT\n");
+				IPACMDBG("Received IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT in STA mode\n");
 				handle_header_add_evt(data->mac_addr);
 			}
 		}
@@ -315,7 +328,7 @@
 }
 
 /* wan default route/filter rule configuration */
-int IPACM_Wan::handle_route_add_evt(ipacm_event_data_addr *data)
+int IPACM_Wan::handle_route_add_evt(ipa_ip_type iptype)
 {
 
 	/* add default WAN route */
@@ -325,8 +338,52 @@
 	uint32_t tx_index;
 	const int NUM = 1;
 	ipacm_cmd_q_data evt_data;
+	struct ipa_ioc_copy_hdr sCopyHeader; /* checking if partial header*/
 
-	IPACMDBG(" ip-type:%d\n", data->iptype);
+	IPACMDBG(" ip-type:%d\n", iptype);
+
+	/* copy header from tx-property, see if partial or not */
+	/* assume all tx-property uses the same header name */
+
+	if(tx_prop->tx[0].hdr_name != NULL)
+	{
+	    memset(&sCopyHeader, 0, sizeof(sCopyHeader));
+	    memcpy(sCopyHeader.name,
+	    			 tx_prop->tx[0].hdr_name,
+	    			 sizeof(sCopyHeader.name));
+        
+	    IPACMDBG("header name: %s\n", sCopyHeader.name);
+	    if (m_header.CopyHeader(&sCopyHeader) == false)
+	    {
+	    	IPACMERR("ioctl copy header failed");
+	    	return IPACM_FAILURE;
+	    }        
+	    IPACMDBG("header length: %d, paritial: %d\n", sCopyHeader.hdr_len, sCopyHeader.is_partial);
+		if(sCopyHeader.is_partial)
+		{
+ 	       IPACMDBG("Not setup default WAN routing rules cuz the header is not complete\n");
+           if(iptype==IPA_IP_v4)
+		   {
+		      header_partial_default_wan_v4 = true;
+           }
+		   else		   
+		   {
+		      header_partial_default_wan_v6 = true;
+		   }
+		   return IPACM_SUCCESS;
+		}
+		{
+           if(iptype==IPA_IP_v4)
+		   {
+		      header_partial_default_wan_v4 = false;
+           }
+		   else		   
+		   {
+		      header_partial_default_wan_v6 = false;
+		   }
+		   
+		}
+    }
 
 	rt_rule = (struct ipa_ioc_add_rt_rule *)
 		 calloc(1, sizeof(struct ipa_ioc_add_rt_rule) +
@@ -340,9 +397,9 @@
 
 	rt_rule->commit = 1;
 	rt_rule->num_rules = (uint8_t)NUM;
-	rt_rule->ip = data->iptype;
+	rt_rule->ip = iptype;
 
-	if (data->iptype == IPA_IP_v4) 
+	if (iptype == IPA_IP_v4) 
 	{
 		strcpy(rt_rule->rt_tbl_name, IPACM_Iface::ipacmcfg->rt_tbl_wan_v4.name);
 	}
@@ -357,10 +414,10 @@
 
 	for (tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
 	{
-		if (data->iptype != tx_prop->tx[tx_index].ip)
+		if(iptype != tx_prop->tx[tx_index].ip)
 		{
 			IPACMDBG("Tx:%d, ip-type: %d conflict ip-type: %d no RT-rule added\n", 
-							    tx_index, tx_prop->tx[tx_index].ip,data->iptype);		
+							    tx_index, tx_prop->tx[tx_index].ip,iptype);		
 			continue;
 		}
 
@@ -387,21 +444,21 @@
 					 sizeof(rt_rule_entry->rule.attrib));
 
 		rt_rule_entry->rule.attrib.attrib_mask |= IPA_FLT_DST_ADDR;
-		if (data->iptype == IPA_IP_v4)
+		if (iptype == IPA_IP_v4)
 		{
-			rt_rule_entry->rule.attrib.u.v4.dst_addr      = data->ipv4_addr;
-			rt_rule_entry->rule.attrib.u.v4.dst_addr_mask = data->ipv4_addr_mask;
+			rt_rule_entry->rule.attrib.u.v4.dst_addr      = 0;
+			rt_rule_entry->rule.attrib.u.v4.dst_addr_mask = 0;
 		}
 		else
 		{
-			rt_rule_entry->rule.attrib.u.v6.dst_addr[0] = data->ipv6_addr[0];
-			rt_rule_entry->rule.attrib.u.v6.dst_addr[1] = data->ipv6_addr[1];
-			rt_rule_entry->rule.attrib.u.v6.dst_addr[2] = data->ipv6_addr[2];
-			rt_rule_entry->rule.attrib.u.v6.dst_addr[3] = data->ipv6_addr[3];
-			rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[0] = data->ipv6_addr_mask[0];
-			rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[1] = data->ipv6_addr_mask[1];
-			rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[2] = data->ipv6_addr_mask[2];
-			rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[3] = data->ipv6_addr_mask[3];
+			rt_rule_entry->rule.attrib.u.v6.dst_addr[0] = 0;
+			rt_rule_entry->rule.attrib.u.v6.dst_addr[1] = 0;
+			rt_rule_entry->rule.attrib.u.v6.dst_addr[2] = 0;
+			rt_rule_entry->rule.attrib.u.v6.dst_addr[3] = 0;
+			rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[0] = 0;
+			rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[1] = 0;
+			rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[2] = 0;
+			rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[3] = 0;
 		}
 
 		if (false == m_routing.AddRoutingRule(rt_rule))
@@ -411,13 +468,13 @@
 			return IPACM_FAILURE;
 		}
 
-		if (data->iptype == IPA_IP_v4)
+		if (iptype == IPA_IP_v4)
 		{
 			wan_route_rule_v4_hdl[tx_index] = rt_rule_entry->rt_rule_hdl;
 			IPACMDBG("Got ipv4 wan-route rule hdl:0x%x,tx:%d,ip-type: %d \n",
 							 wan_route_rule_v4_hdl[tx_index],
 							 tx_index,
-							 data->iptype);
+						 iptype);
 		}
 		else
 		{
@@ -425,12 +482,12 @@
 			IPACMDBG("Got ipv6 wan-route rule hdl:0x%x,tx:%d,ip-type: %d \n",
 							 wan_route_rule_v6_hdl[tx_index],
 							 tx_index,
-							 data->iptype);
+		                 iptype);
 		}
 	}
 	free(rt_rule);
 
-	if (data->iptype == IPA_IP_v4)
+	if (iptype == IPA_IP_v4)
 	{
 		ipacm_event_iface_up *wanup_data;
 
@@ -539,85 +596,124 @@
 /* construct complete ethernet header */
 int IPACM_Wan::handle_header_add_evt(uint8_t mac_addr[6])
 {
-	char index[2];
+  #define WAN_IFACE_INDEX_LEN 2
+    
+	uint32_t tx_index;
+	int res = IPACM_SUCCESS, len = 0;
+	char index[WAN_IFACE_INDEX_LEN];
 	struct ipa_ioc_copy_hdr sCopyHeader;
 	struct ipa_ioc_add_hdr *pHeaderDescriptor = NULL;
-	uint32_t tx_index;
-	int len = 0;
 
-	IPACMDBG("construct header\n");
+	/* start of adding header */
+	
+	IPACMDBG("Received Client MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
+					 mac_addr[0], mac_addr[1], mac_addr[2],
+					 mac_addr[3], mac_addr[4], mac_addr[5]);
 
-	/* start of add header */
+    if(header_set == true)
+    {
+	   IPACMDBG("Already add STA full header\n");
+       return IPACM_SUCCESS;
+	}					 
+					 
+	/* add header to IPA */
+	len = sizeof(struct ipa_ioc_add_hdr) + (1 * sizeof(struct ipa_hdr_add));
+	pHeaderDescriptor = (struct ipa_ioc_add_hdr *)calloc(1, len);
+	if (pHeaderDescriptor == NULL)
+	{
+		IPACMERR("calloc failed to allocate pHeaderDescriptor\n");
+		return IPACM_FAILURE;
+	}
+
+	/* copy partial header */
+	memset(&sCopyHeader, 0, sizeof(sCopyHeader));
+	memcpy(sCopyHeader.name,
+				 tx_prop->tx[0].hdr_name,
+				 sizeof(sCopyHeader.name));
+
+	IPACMDBG("header name: %s\n", sCopyHeader.name);
+	if (m_header.CopyHeader(&sCopyHeader) == false)
+	{
+		PERROR("ioctl copy header failed");
+		res = IPACM_FAILURE;
+		goto fail;
+	}
+
+	IPACMDBG("header length: %d, paritial: %d\n", sCopyHeader.hdr_len, sCopyHeader.is_partial);
+	if (sCopyHeader.hdr_len > IPA_HDR_MAX_SIZE)
+	{
+		IPACMERR("header oversize\n");
+		res = IPACM_FAILURE;
+		goto fail;
+	}
+	else
+	{
+		memcpy(pHeaderDescriptor->hdr[0].hdr,
+					 sCopyHeader.hdr, 
+					 sCopyHeader.hdr_len);
+	}
+
+
+	/* copy client mac_addr to partial header */
+	memcpy(&pHeaderDescriptor->hdr[0].hdr[IPA_WLAN_PARTIAL_HDR_OFFSET], mac_addr,
+					 IPA_MAC_ADDR_SIZE); /* only copy 6 bytes mac-address */				 
+				 
+	pHeaderDescriptor->commit = true;
+	pHeaderDescriptor->num_hdrs = 1;
+
+	memset(pHeaderDescriptor->hdr[0].name, 0,
+				 sizeof(pHeaderDescriptor->hdr[0].name));
+
+	sprintf(index, "%d", ipa_if_num);
+	strncpy(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
+
+	strncat(pHeaderDescriptor->hdr[0].name,
+					IPA_WAN_PARTIAL_HDR_NAME,
+					sizeof(IPA_WAN_PARTIAL_HDR_NAME));
+
+	pHeaderDescriptor->hdr[0].hdr_len = sCopyHeader.hdr_len;
+	pHeaderDescriptor->hdr[0].hdr_hdl = -1;
+	pHeaderDescriptor->hdr[0].is_partial = 0;
+	pHeaderDescriptor->hdr[0].status = -1;
+
+	if (m_header.AddHeader(pHeaderDescriptor) == false ||
+			pHeaderDescriptor->hdr[0].status != 0)
+	{
+		IPACMERR("ioctl IPA_IOC_ADD_HDR failed: %d\n", pHeaderDescriptor->hdr[0].status);
+		res = IPACM_FAILURE;
+		goto fail;
+	}
+	else
+	{
+	  IPACMDBG("add full header name: %s (%x)\n", pHeaderDescriptor->hdr[0].name, pHeaderDescriptor->hdr[0].hdr_hdl);
+		}
+
+	/* copy full header to each TX endpoint property*/ 
 	for (tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
 	{
-		/* add header to IPA */
-		len = sizeof(struct ipa_ioc_add_hdr) + (1 * sizeof(struct ipa_hdr_add));
-		pHeaderDescriptor = (struct ipa_ioc_add_hdr *)calloc(1, len);
-		if (!pHeaderDescriptor)
-		{
-			IPACMERR("calloc failed to allocate pHeaderDescriptor\n");
-			return IPACM_FAILURE;
-		}
-
-		/* copy partial header */
-		memset(&sCopyHeader, 0, sizeof(sCopyHeader));
-		memcpy(sCopyHeader.name, tx_prop->tx[tx_index].hdr_name,
-					 sizeof(tx_prop->tx[tx_index].hdr_name));
-
-		IPACMDBG("header name: %s\n", sCopyHeader.name);
-		if (false == m_header.CopyHeader(&sCopyHeader))
-		{
-			IPACMERR("ioctl copy header failed\n");
-			free(pHeaderDescriptor);
-			return IPACM_FAILURE;
-		};
-
-		if (sCopyHeader.hdr_len > IPA_HDR_MAX_SIZE)
-		{
-			IPACMERR("header oversize\n");
-			free(pHeaderDescriptor);
-			return IPACM_FAILURE;
-		}
-		else
-		{
-			memcpy(pHeaderDescriptor->hdr[0].hdr, sCopyHeader.hdr,
-						 sCopyHeader.hdr_len);
-		}
-
-		/* copy client mac_addr to partial header */
-		memcpy(&pHeaderDescriptor->hdr[0].hdr[IPA_WLAN_PARTIAL_HDR_OFFSET], mac_addr,
-					 IPA_MAC_ADDR_SIZE); /* only copy 6 bytes mac-address */
-
-		pHeaderDescriptor->commit = true;
-		pHeaderDescriptor->num_hdrs = 1;
-		sprintf(index, "%d", ipa_if_num);
-		strncpy(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
-		strncat(pHeaderDescriptor->hdr[0].name, IPA_WLAN_PARTIAL_HDR_NAME, sizeof(IPA_WLAN_PARTIAL_HDR_NAME));
-		strncat(pHeaderDescriptor->hdr[0].name, "tx", sizeof("tx"));
-		sprintf(index, "%d", tx_index);
-		strncat(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
-
-		pHeaderDescriptor->hdr[0].hdr_len = sizeof(sCopyHeader.hdr_len);
-		pHeaderDescriptor->hdr[0].hdr_hdl = -1;
-		pHeaderDescriptor->hdr[0].is_partial = false;
-		pHeaderDescriptor->hdr[0].status = -1;
-
-		if (false == m_header.AddHeader(pHeaderDescriptor))
-		{
-			IPACMERR("ioctl add header failed\n");
-			free(pHeaderDescriptor);
-			return IPACM_FAILURE;
-		}
-
+		
 		memcpy(tx_prop->tx[tx_index].hdr_name, pHeaderDescriptor->hdr[0].name,
 					 sizeof(tx_prop->tx[tx_index].hdr_name));
 		IPACMDBG("add full header name: %s (%x)\n", tx_prop->tx[tx_index].hdr_name, pHeaderDescriptor->hdr[0].hdr_hdl);
+   }	
 
+    /* see if default routes are setup before constructing full header */
+    if( (header_partial_default_wan_v4== true) && (header_set == false))
+	  { 
+	    handle_route_add_evt(IPA_IP_v4);	
+	  }
 
-		free(pHeaderDescriptor);
-	}
+    if( (header_partial_default_wan_v6== true) && (header_set == false))
+	  { 
+	    handle_route_add_evt(IPA_IP_v6);	
+	  }
+	
+     header_set = true;
+ 	 
+fail:
+	free(pHeaderDescriptor);
 
-	return IPACM_SUCCESS;
+	return res;
 }
 
 /* configure the initial firewall filter rules */
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index 4ed66b4..9584733 100644
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -94,6 +94,7 @@
 void IPACM_Wlan::event_callback(ipa_cm_event_id event, void *param)
 {
 	int ipa_interface_index;
+	int wlan_index;
 
 	switch (event)
 	{
@@ -108,6 +109,8 @@
 				handle_down_evt();
 				IPACMDBG("ipa_WLAN (%s):ipa_index (%d) instance close \n",
 								 IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].iface_name, ipa_if_num);
+				/* reset the iface category to unknown*/				 
+				IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].if_cat=UNKNOWN_IF;
 				delete this;
 				return;
 			}
@@ -119,14 +122,22 @@
 			ipacm_event_data_addr *data = (ipacm_event_data_addr *)param;
 			ipa_interface_index = iface_ipa_index_query(data->if_index);
 
+			if ( (data->iptype == IPA_IP_v4 && data->ipv4_addr == 0) ||
+					 (data->iptype == IPA_IP_v6 && 
+						data->ipv6_addr[0] == 0 && data->ipv6_addr[1] == 0 && 
+					  data->ipv6_addr[2] == 0 && data->ipv6_addr[3] == 0) )
+			{
+				IPACMDBG("Invalid address, ignore IPA_ADDR_ADD_EVENT event\n");
+				return;
+			}
+			
 			if (ipa_interface_index == ipa_if_num)
 			{
 				/* check v4 not setup before, v6 can have 2 iface ip */
-				if (((data->iptype != ip_type) && (ip_type != IPA_IP_MAX))
-						|| ((data->iptype == IPA_IP_v6) && (num_dft_rt != MAX_DEFAULT_v6_ROUTE_RULES)))
+				if( ((data->iptype != ip_type) && (ip_type != IPA_IP_MAX)) 
+				    || ((data->iptype==IPA_IP_v6) && (num_dft_rt!=MAX_DEFAULT_v6_ROUTE_RULES))) 
 				{
-
-					IPACMDBG("Got IPA_ADDR_ADD_EVENT ip-family:%d, v6 num %d: \n", data->iptype, num_dft_rt);
+				  IPACMDBG("Got IPA_ADDR_ADD_EVENT ip-family:%d, v6 num %d: \n",data->iptype,num_dft_rt);
 					/* Post event to NAT */
 					if (data->iptype == IPA_IP_v4)
 					{
@@ -228,6 +239,14 @@
 			if (ipa_interface_index == ipa_if_num)
 			{
 				IPACMDBG("Received IPA_WLAN_CLIENT_RECOVER_EVENT\n");
+			  wlan_index = get_wlan_client_index(data->mac_addr);
+
+	      if ((wlan_index != IPACM_INVALID_INDEX) && (get_client_memptr(wlan_client, wlan_index)->power_save_set == true))
+	      {
+	        IPACMDBG("change wlan client out of  power safe mode \n");
+			    	get_client_memptr(wlan_client, wlan_index)->power_save_set = false;
+	       }
+				
 				if (ip_type != IPA_IP_v6) /* for ipv4 */
 				{
 					handle_wlan_client_route_rule(data->mac_addr, IPA_IP_v4);
@@ -395,7 +414,7 @@
 	get_client_memptr(wlan_client, num_wifi_client)->route_rule_set_v6 = false;
 	get_client_memptr(wlan_client, num_wifi_client)->ipv4_set = false;
 	get_client_memptr(wlan_client, num_wifi_client)->ipv6_set = false;
-
+  get_client_memptr(wlan_client, num_wifi_client)->power_save_set=false;
 	num_wifi_client++;
 	header_name_count++; //keep increasing header_name_count
 	IPACM_Wlan::total_num_wifi_clients++;
@@ -492,6 +511,12 @@
 		return IPACM_SUCCESS;
 	}
 
+	if (get_client_memptr(wlan_client, wlan_index)->power_save_set == true)
+	{
+		IPACMDBG("wlan client is in power safe mode \n");
+		return IPACM_SUCCESS;
+	}
+
 	IPACMDBG("wlan client index: %d, ip-type: %d, ipv4_set:%d, ipv4_rule_set:%d \n", wlan_index, iptype,
 					 get_client_memptr(wlan_client, wlan_index)->ipv4_set,
 					 get_client_memptr(wlan_client, wlan_index)->route_rule_set_v4);
@@ -622,17 +647,16 @@
 		return IPACM_SUCCESS;
 	}
 
-	/*check if got duplicate power-save mode*/
-	if ((ip_type != IPA_IP_v6 && get_client_memptr(wlan_client, clt_indx)->route_rule_set_v4 == true)
-			|| (ip_type != IPA_IP_v4 && get_client_memptr(wlan_client, clt_indx)->route_rule_set_v6 == true))
+  if (get_client_memptr(wlan_client, clt_indx)->power_save_set == false)
 	{
-		return delete_default_qos_rtrules(clt_indx);
+ 	  delete_default_qos_rtrules(clt_indx);
+    get_client_memptr(wlan_client, clt_indx)->power_save_set = true;
 	}
 	else
 	{
 		IPACMDBG("wlan client already in power-save mode\n");
-		return IPACM_SUCCESS;
 	}
+    return IPACM_SUCCESS;
 }
 
 /*handle wifi client del mode*/
diff --git a/ipacm/src/IPACM_Xml.cpp b/ipacm/src/IPACM_Xml.cpp
index 8871b1d..6af108c 100644
--- a/ipacm/src/IPACM_Xml.cpp
+++ b/ipacm/src/IPACM_Xml.cpp
@@ -250,6 +250,11 @@
 							config->iface_config.iface_entries[config->iface_config.num_iface_entries - 1].if_cat = VIRTUAL_IF;
 							IPACMDBG("Category %d\n", config->iface_config.iface_entries[config->iface_config.num_iface_entries - 1].if_cat);
 						}
+			      else  if (0 == strncasecmp(content_buf, UNKNOWNIF_TAG, str_size))
+						{
+							config->iface_config.iface_entries[config->iface_config.num_iface_entries - 1].if_cat = UNKNOWN_IF;
+							IPACMDBG("Category %d\n", config->iface_config.iface_entries[config->iface_config.num_iface_entries - 1].if_cat);
+						}
 					}
 				}
 				else if (IPACM_util_icmp_string((char*)xml_node->name,
diff --git a/ipacm/src/IPACM_cfg.xml b/ipacm/src/IPACM_cfg.xml
index 551c178..1dd0f28 100644
--- a/ipacm/src/IPACM_cfg.xml
+++ b/ipacm/src/IPACM_cfg.xml
@@ -8,11 +8,15 @@
 			</Iface>
 			<Iface>
 			   <Name>rmnet1</Name>
-			   <Category>LAN</Category>
+			   <Category>WAN</Category>
 			</Iface>			
 			<Iface>
 			   <Name>wlan0</Name>
-			   <Category>WLAN</Category>
+			   <Category>UNKNOWN</Category>
+			</Iface>			
+			<Iface>
+			   <Name>wlan1</Name>
+			   <Category>UNKNOWN</Category>
 			</Iface>			
 			<Iface>
 			   <Name>bridge0</Name>
@@ -21,7 +25,7 @@
 		</IPACMIface>
 		<IPACMPrivateSubnet>
 			<Subnet>
-  			   <SubnetAddress>192.168.1.0</SubnetAddress>
+  			   <SubnetAddress>192.168.225.0</SubnetAddress>
   			   <SubnetMask>255.255.255.0</SubnetMask>
 		    </Subnet>		
 		</IPACMPrivateSubnet>
diff --git a/ipanat/inc/ipa_nat_drvi.h b/ipanat/inc/ipa_nat_drvi.h
index 9b56cf1..25309e1 100644
--- a/ipanat/inc/ipa_nat_drvi.h
+++ b/ipanat/inc/ipa_nat_drvi.h
@@ -466,9 +466,8 @@
    ========================================================*/
 #ifdef NAT_DUMP
 void ipa_nati_print_rule(struct ipa_nat_rule *rule, uint32_t rule_id);
-void ipa_nati_dump_rule_buf(void *param1, uint8_t size, uint32_t rule_id);
 void ipa_nat_dump_ipv4_table(uint32_t tbl_hdl);
-void ipa_nati_dump_index_rule_buf(void *param1, uint8_t size, uint32_t rule_id);
+void ipa_nati_print_index_rule(struct ipa_nat_indx_tbl_rule *param, uint32_t rule_id);
 #endif
 
 #endif /* #ifndef IPA_NAT_DRVI_H */
diff --git a/ipanat/inc/ipa_nat_logi.h b/ipanat/inc/ipa_nat_logi.h
index 0ffa672..e98445a 100644
--- a/ipanat/inc/ipa_nat_logi.h
+++ b/ipanat/inc/ipa_nat_logi.h
@@ -69,6 +69,12 @@
                              log_nat_message(nat_log_buf);\
 				  		             }
 
+#define IPADUMP(fmt, ...) {\
+                             int n =0; \
+                             snprintf((nat_log_buf+n), (sizeof(nat_log_buf)-1), fmt, ##__VA_ARGS__);\
+                             log_nat_message(nat_log_buf);\
+				  		             }
+
 extern void log_nat_message(char *msg);
 extern char nat_log_buf[NAT_LOG_SIZE];
 
diff --git a/ipanat/src/ipa_nat_drvi.c b/ipanat/src/ipa_nat_drvi.c
index d542a88..106abac 100644
--- a/ipanat/src/ipa_nat_drvi.c
+++ b/ipanat/src/ipa_nat_drvi.c
@@ -797,7 +797,9 @@
 
   /* Calclate the memory size for both table and index table entries */
   mem->size = (IPA_NAT_TABLE_ENTRY_SIZE * total_entries);
+	IPADBG("Nat Table size: %d\n", mem->size);
   mem->size += (IPA_NAT_INDEX_TABLE_ENTRY_SIZE * total_entries);
+	IPADBG("Nat Base and Index Table size: %d\n", mem->size);
   
   if (!ipv4_nat_cache.ipa_fd)
   {
@@ -2220,9 +2222,6 @@
     {
       atl_one = 1;
 			ipa_nati_print_rule(&tbl_ptr[cnt], cnt);
-      ipa_nati_dump_rule_buf(&tbl_ptr[cnt], 
-                             sizeof(struct ipa_nat_rule),
-                             cnt);
     }
   }
   if(!atl_one)
@@ -2243,9 +2242,6 @@
 														ENABLE_FIELD))
     {
 			ipa_nati_print_rule(&tbl_ptr[cnt], cnt);
-      ipa_nati_dump_rule_buf(&tbl_ptr[cnt], 
-                             sizeof(struct ipa_nat_rule),
-                             cnt);
     }
   }
   if(!atl_one)
@@ -2265,9 +2261,8 @@
     if (Read16BitFieldValue(indx_tbl_ptr[cnt].tbl_entry_nxt_indx,
 														INDX_TBL_TBL_ENTRY_FIELD))
     {
-      ipa_nati_dump_index_rule_buf(&indx_tbl_ptr[cnt], 
-                                   sizeof(struct ipa_nat_indx_tbl_rule),
-                                   cnt);
+			ipa_nati_print_index_rule(&indx_tbl_ptr[cnt], cnt);
+      //ipa_nati_dump_index_rule_buf(&indx_tbl_ptr[cnt], sizeof(struct ipa_nat_indx_tbl_rule), cnt);
     }
   }
   if(!atl_one)
@@ -2288,9 +2283,8 @@
     if (Read16BitFieldValue(indx_tbl_ptr[cnt].tbl_entry_nxt_indx,
 														INDX_TBL_TBL_ENTRY_FIELD))
     {
-      ipa_nati_dump_index_rule_buf(&indx_tbl_ptr[cnt], 
-                                   sizeof(struct ipa_nat_indx_tbl_rule),
-                                   cnt);
+			ipa_nati_print_index_rule(&indx_tbl_ptr[cnt], cnt);
+      //ipa_nati_dump_index_rule_buf(&indx_tbl_ptr[cnt], sizeof(struct ipa_nat_indx_tbl_rule), cnt);
     }
   }
   if(!atl_one)
@@ -2301,87 +2295,29 @@
 
 }
 
-
-void ipa_nati_dump_rule_buf(void *param1, uint8_t size, uint32_t rule_id)
-{
-  int cnt = 0;
-	uint8_t temp[IPA_NAT_TABLE_ENTRY_SIZE];
-  uint64_t *rule = NULL;
-
-	memcpy(&temp, param1, sizeof(temp));
-	rule = (uint64_t *)temp;
-
-  IPADBG("Address :%p, rule id: %d size: %d\n", 
-          rule, rule_id, size);
-  for(; cnt<size; )
-  {
-    uint8_t *byte = (uint8_t *)rule;
-
-    IPADBG("uint64[%d]: 0x%x:\n", cnt, (unsigned int)rule);
-    IPADBG("%02x\t%02x\t%02x\t%02x\n", byte[0], byte[1], byte[2], byte[3]);
-    IPADBG("%02x\t%02x\t%02x\t%02x\n", byte[4], byte[5], byte[6], byte[7]);
-
-    cnt += 8;
-    rule++;
-  }
-
-  return;
-}
-
-void ipa_nati_dump_index_rule_buf(void *param1, uint8_t size, uint32_t rule_id)
-{
-  int cnt = 0;
-	uint8_t temp[IPA_NAT_INDEX_TABLE_ENTRY_SIZE];
-  uint16_t *rule = NULL;
-
-	memcpy(&temp, param1, sizeof(temp));
-	rule = (uint16_t *)temp;
-
-  IPADBG("Address :%p, rule id: %d size: %d\n", 
-          rule, rule_id, size);
-
-  for(; cnt<size; )
-  {
-    uint8_t *byte = (uint8_t *)rule;
-
-    IPADBG("uint64[%d]: 0x%x:\n", cnt, (unsigned int)rule);
-    IPADBG("%02x\t%02x\n", byte[0], byte[1]);
-    IPADBG("\n");
-
-    cnt += 2;
-    rule++;
-  }
-
-  return;
-}
-
 void ipa_nati_print_rule(struct ipa_nat_rule *param, uint32_t rule_id)
 {
 	struct ipa_nat_sw_rule sw_rule;
 	memcpy(&sw_rule, param, sizeof(sw_rule));
 
-  IPADBG("Printing NAT Rule:%d at memory location:%p\n", rule_id, param);
+  IPADUMP("rule-id:%d  Trgt-IP:0x%x  Trgt-Port:0x%x  ",rule_id, sw_rule.target_ip, sw_rule.target_port);
+  IPADUMP("Priv-IP:0x%x Priv-Port:0x%x  ", sw_rule.private_ip, sw_rule.private_port);
+  IPADUMP("Pub-Port:0x%x  Nxt-indx:0x%x  ", sw_rule.public_port, sw_rule.next_index);
+  IPADUMP("IP-cksm:0x%x  En-bit:0x%x  ", sw_rule.ip_chksum, sw_rule.enable);
+  IPADUMP("TS:0x%x  Proto:0x%x  ", sw_rule.time_stamp, sw_rule.protocol);
+  IPADUMP("Prv-indx:0x%x  nxt-indx:0x%x  Tcp-udp-cksum:0x%x", sw_rule.prev_index, sw_rule.next_index, sw_rule.tcp_udp_chksum);
+  IPADUMP("\n");
+  return;
+}
 
-  IPADBG("Target IP: 0x%x Target Port: 0x%x\n", 
-         sw_rule.target_ip, sw_rule.target_port);
+void ipa_nati_print_index_rule(struct ipa_nat_indx_tbl_rule *param, uint32_t rule_id)
+{
+	struct ipa_nat_sw_indx_tbl_rule sw_rule;
+	memcpy(&sw_rule, param, sizeof(sw_rule));
 
-  IPADBG("Private IP: 0x%x Private Port: 0x%x\n", 
-         sw_rule.private_ip, sw_rule.private_port);
-
-  IPADBG("Public Port: 0x%x Next index: 0x%x\n", 
-         sw_rule.public_port, sw_rule.next_index);
-
-  IPADBG("IP ChkSum: 0x%x Enable bit: 0x%x\n", 
-         sw_rule.ip_chksum, sw_rule.enable);
-
-  IPADBG("Time Stamp: 0x%x Protocol: 0x%x\n", 
-         sw_rule.time_stamp, sw_rule.protocol);
-
-  IPADBG("Prev Index: 0x%x Next Index: 0x%x\n", 
-         sw_rule.prev_index, sw_rule.next_index);
-
-  IPADBG("TCP UDP Chksum: 0x%x\n", sw_rule.tcp_udp_chksum);
-
+  IPADUMP("rule-id:%d  Table_entry:0x%x  Next_index:0x%x",
+					        rule_id, sw_rule.tbl_entry, sw_rule.next_index);
+  IPADUMP("\n");
   return;
 }
 #endif
