diff --git a/ipacm/inc/IPACM_Config.h b/ipacm/inc/IPACM_Config.h
old mode 100755
new mode 100644
diff --git a/ipacm/inc/IPACM_ConntrackClient.h b/ipacm/inc/IPACM_ConntrackClient.h
old mode 100755
new mode 100644
diff --git a/ipacm/inc/IPACM_ConntrackListener.h b/ipacm/inc/IPACM_ConntrackListener.h
old mode 100755
new mode 100644
diff --git a/ipacm/inc/IPACM_Conntrack_NATApp.h b/ipacm/inc/IPACM_Conntrack_NATApp.h
old mode 100755
new mode 100644
index 530feb9..0a6d19a
--- a/ipacm/inc/IPACM_Conntrack_NATApp.h
+++ b/ipacm/inc/IPACM_Conntrack_NATApp.h
@@ -42,8 +42,6 @@
 #include <ipa_nat_drv.h>
 }
 
-#define IPACM_DEBUG
-
 typedef struct _nat_table_entry
 {
 	uint32_t private_ip;
@@ -63,12 +61,7 @@
 
 }nat_table_entry;
 
-#define CHK_TBL_HDL() if(0 == nat_table_hdl){\
-                             int n =0; \
-                             n = snprintf(log_buf, sizeof(log_buf), "%s:%d %s() %s", __FILE__,  __LINE__, __FUNCTION__, "Error:");\
-                             snprintf((log_buf+n), (sizeof(log_buf)-n)-1, "Invalid table handle\n");\
-                             logmessage(log_buf, LOG_ERR);\
-				  		             }
+#define CHK_TBL_HDL()  if(nat_table_hdl == 0){ return -1; }
 
 class NatApp
 {
diff --git a/ipacm/inc/IPACM_Defs.h b/ipacm/inc/IPACM_Defs.h
old mode 100755
new mode 100644
diff --git a/ipacm/inc/IPACM_Log.h b/ipacm/inc/IPACM_Log.h
index f75e73c..54be34a 100644
--- a/ipacm/inc/IPACM_Log.h
+++ b/ipacm/inc/IPACM_Log.h
@@ -50,28 +50,19 @@
 #include <string.h>
 #include <syslog.h>
 
-#define LOG_SIZE 200
-
 #define PERROR(fmt)   printf("%s:%d %s()", __FILE__, __LINE__, __FUNCTION__);\
                       perror(fmt);
 
-#define IPACMDBG(fmt, ...) {\
-                             int n =0; \
-                             n = snprintf(log_buf, sizeof(log_buf), "%s:%d %s() ", __FILE__,  __LINE__, __FUNCTION__);\
-                             snprintf((log_buf+n), (sizeof(log_buf)-n-1), fmt, ##__VA_ARGS__);\
-                             logmessage(log_buf, LOG_DEBUG);\
-				  		             }
+#define IPACMERR(fmt, ...) syslog(LOG_ERR, "ERROR: %s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);\
+                           printf("ERR: %s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);
 
+#ifdef DEBUG
+#define IPACMDBG(fmt, ...) syslog(LOG_DEBUG, "%s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);\
+                           printf("%s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);
+#else
+#define IPACMDBG(fmt, ...)
+#endif
 
-#define IPACMERR(fmt, ...) {\
-                             int n =0; \
-                             n = snprintf(log_buf, sizeof(log_buf), "%s:%d %s() %s", __FILE__,  __LINE__, __FUNCTION__, "Error:");\
-                             snprintf((log_buf+n), (sizeof(log_buf)-n-1), fmt, ##__VA_ARGS__);\
-                             logmessage(log_buf, LOG_ERR);\
-				  		             }
-
-extern void logmessage(char *msg, int log_level);
-extern char log_buf[LOG_SIZE];
 
 #ifdef __cplusplus
 }
diff --git a/ipacm/inc/IPACM_Wlan.h b/ipacm/inc/IPACM_Wlan.h
old mode 100755
new mode 100644
diff --git a/ipacm/inc/IPACM_Xml.h b/ipacm/inc/IPACM_Xml.h
old mode 100755
new mode 100644
diff --git a/ipacm/src/IPACM_Config.cpp b/ipacm/src/IPACM_Config.cpp
old mode 100755
new mode 100644
index 4717db0..0decb50
--- a/ipacm/src/IPACM_Config.cpp
+++ b/ipacm/src/IPACM_Config.cpp
@@ -300,7 +300,7 @@
 			/* Reset the matched entry */
 			memset(pNatIfaces[i].iface_name, 0, IPA_IFACE_NAME_LEN);
 
-			for (i; i < ipa_nat_iface_entries - 1; i++)
+			for (; i < ipa_nat_iface_entries - 1; i++)
 			{
 				memcpy(pNatIfaces[i].iface_name,
 							 pNatIfaces[i + 1].iface_name, IPA_IFACE_NAME_LEN);
diff --git a/ipacm/src/IPACM_ConntrackClient.cpp b/ipacm/src/IPACM_ConntrackClient.cpp
old mode 100755
new mode 100644
diff --git a/ipacm/src/IPACM_ConntrackListener.cpp b/ipacm/src/IPACM_ConntrackListener.cpp
old mode 100755
new mode 100644
index 56eeb4d..ace8a68
--- a/ipacm/src/IPACM_ConntrackListener.cpp
+++ b/ipacm/src/IPACM_ConntrackListener.cpp
@@ -578,9 +578,9 @@
 	 
 	 if(cnt == MAX_NAT_IFACES)
 	 {
-		IPACM_ConntrackClient::iptodot("ProcessTCPorUDPMsg(): ignoring iface with ip address", 
-				                       nat_iface_ipv4_addr[cnt]);
-	    return;
+		 IPACM_ConntrackClient::iptodot("ProcessTCPorUDPMsg(): ignoring nat rule with private ip",
+																		rule.private_ip);
+		 return;
 	 }
 	 
 	 IPACMDBG("Nat Entry with below information will be added\n");
diff --git a/ipacm/src/IPACM_Conntrack_NATApp.cpp b/ipacm/src/IPACM_Conntrack_NATApp.cpp
old mode 100755
new mode 100644
index f82d7da..3f027e3
--- a/ipacm/src/IPACM_Conntrack_NATApp.cpp
+++ b/ipacm/src/IPACM_Conntrack_NATApp.cpp
@@ -201,13 +201,11 @@
 
 	CHK_TBL_HDL();
 
-#ifdef IPACM_DEBUG
   IPACMDBG("Received below nat entry for deletion\n");
 	IPACM_ConntrackClient::iptodot("Private IP", rule->private_ip);
 	IPACM_ConntrackClient::iptodot("Target IP", rule->target_ip);
 	IPACMDBG("Private Port: %d\t Target Port: %d\t", rule->private_port, rule->target_port);
 	IPACMDBG("protocolcol: %d\n", rule->protocol);
-#endif
 
 	for(; cnt < max_entries; cnt++)
 	{
@@ -345,8 +343,6 @@
 		return -1;
 	}
 
-
-#ifdef IPACM_DEBUG
 	if(cache[cnt].enabled == true)
 	{
 		IPACMDBG("Added below rule successfully\n");
@@ -356,7 +352,6 @@
 		IPACMDBG("Public Port:%d\n", rule->public_port);
 		IPACMDBG("protocol: %d\n", rule->protocol);
 	}
-#endif
 
 	return 0;
 }
@@ -365,11 +360,9 @@
 {
 	int ret;
 
-#ifdef IPACM_DEBUG
 	IPACM_ConntrackClient::iptodot("Private IP:", rule->private_ip);
 	IPACM_ConntrackClient::iptodot("Target IP:",  rule->target_ip);
 	IPACMDBG("Private Port: %d, Target Port: %d\n", rule->private_port, rule->target_port);
-#endif
 
 	if(!ct_hdl)
 	{
@@ -603,14 +596,12 @@
 			}
 			cache[cnt].enabled = true;
 
-#ifdef IPACM_DEBUG
 			IPACMDBG("On power reset added below rule successfully\n");
 			IPACM_ConntrackClient::iptodot("Private IP", nat_rule.private_ip);
 			IPACM_ConntrackClient::iptodot("Target IP", nat_rule.target_ip);
 			IPACMDBG("Private Port:%d \t Target Port: %d\t", nat_rule.private_port, nat_rule.target_port);
 			IPACMDBG("Public Port:%d\n", nat_rule.public_port);
 			IPACMDBG("protocol: %d\n", nat_rule.protocol);
-#endif
 
 		}
 	}
diff --git a/ipacm/src/IPACM_Iface.cpp b/ipacm/src/IPACM_Iface.cpp
old mode 100755
new mode 100644
index 3328a01..154e77a
--- a/ipacm/src/IPACM_Iface.cpp
+++ b/ipacm/src/IPACM_Iface.cpp
@@ -526,10 +526,11 @@
 	int res = IPACM_SUCCESS, len = 0;
 	struct ipa_flt_rule_add flt_rule_entry;
 	ipa_ioc_add_flt_rule *m_pFilteringTable;
-        /* Adding this hack because WLAN may not registered for Rx-endpoint, other ifaces will always have*/
-	char *dev_wlan0="wlan0";
-	char *dev_wlan1="wlan1";
-	char *dev_ecm0="ecm0";
+
+  /* Adding this hack because WLAN may not registered for Rx-endpoint, other ifaces will always have*/
+	const char *dev_wlan0="wlan0";
+	const char *dev_wlan1="wlan1";
+	const char *dev_ecm0="ecm0";
 
 	/* update the iface ip-type to be IPA_IP_v4, IPA_IP_v6 or both*/
 	if (iptype == IPA_IP_v4)
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
old mode 100755
new mode 100644
diff --git a/ipacm/src/IPACM_Log.cpp b/ipacm/src/IPACM_Log.cpp
index b777540..72f71c5 100644
--- a/ipacm/src/IPACM_Log.cpp
+++ b/ipacm/src/IPACM_Log.cpp
@@ -41,75 +41,8 @@
 #include <stdlib.h>
 #include <unistd.h>
 
-/* write logging to a local file */
-#define LOG_USE_FILE "/etc/IPACM_LOG_F"
-#define FILE_NAME "/usr/ipacm_log.txt"
-
-/* To use syslog for logging and
-	 use logread cmd to read */
-#define LOG_USE_SYS  "/etc/IPACM_LOG_S"
-
-/* Maximum log file size. 1MB(1048576)  */
-#define MAX_LOG_FILE_SIZE (1048576ul/4)
-
-char log_buf[LOG_SIZE];
-
-void logmessage(char *msg, int log_level)
+void logmessage(int log_level)
 {
-#ifdef DEBUG
-	 static FILE *fp = NULL;
-	 static bool is_sys_log_open = false;
-	 int log_sys = 0, log_file = 0;
-
-	 printf("%s\n", msg);
-
-	 if(access(LOG_USE_SYS, F_OK) != -1 )
-	 {
-		 log_sys = 1;
-	 }
-	 else if(access(LOG_USE_FILE, F_OK) != -1)
-	 {
-		 log_file = 1;
-	 }
-	 else
-	 {
-		 log_sys = 0;
-		 log_file = 0;
-	 }
-
-	 if(log_sys)
-	 {
-		 if(is_sys_log_open == false)
-		 {
-			 setlogmask(LOG_UPTO(LOG_DEBUG));
-			 openlog("IPACM", LOG_PID, LOG_LOCAL0);
-
-			 is_sys_log_open = true;
-		 }
-		 syslog(log_level, msg);
-	 }
-	 else if(log_file)
-	 {
-		 if(fp == NULL)
-		 {
-				fp = fopen(FILE_NAME, "w+");
-				if(fp  == NULL)
-				{
-					 printf("unable to open file\n");
-					 return;
-				}
-		 }
-		 
-		 if(ftell(fp) > MAX_LOG_FILE_SIZE)
-		 {
-			 rewind(fp);
-			 fprintf(fp, "====Rewinding=====\n");
-		 }
-
-		 fprintf(fp, msg);
-		 fflush(fp);
-	}
-#endif
 	return;
 }
 
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
old mode 100755
new mode 100644
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
old mode 100755
new mode 100644
diff --git a/ipacm/src/IPACM_Xml.cpp b/ipacm/src/IPACM_Xml.cpp
old mode 100755
new mode 100644
diff --git a/ipacm/src/IPACM_cfg.xml b/ipacm/src/IPACM_cfg.xml
old mode 100755
new mode 100644
diff --git a/ipacm/src/Makefile.am b/ipacm/src/Makefile.am
index 1eac45a..3811c40 100644
--- a/ipacm/src/Makefile.am
+++ b/ipacm/src/Makefile.am
@@ -2,7 +2,7 @@
 	      -I$(top_srcdir)/ipanat/inc \
 	      ${LIBXML_CFLAGS}
 AM_CPPFLAGS += -Wall -Wundef -Wno-trigraphs
-AM_CPPFLAGS	+= -DDEBUG
+#AM_CPPFLAGS	+= -DDEBUG
 
 ipacm_SOURCES =	IPACM_Main.cpp \
 		IPACM_Conntrack_NATApp.cpp\
diff --git a/ipanat/inc/ipa_nat_drvi.h b/ipanat/inc/ipa_nat_drvi.h
index 2a5a5ba..6fce315 100644
--- a/ipanat/inc/ipa_nat_drvi.h
+++ b/ipanat/inc/ipa_nat_drvi.h
@@ -407,8 +407,9 @@
                             uint32_t  rule_hdl,
                             uint32_t  *time_stamp);
 
-uint32_t ipa_nati_add_ipv4_rule(uint32_t tbl_hdl, 
-                           const ipa_nat_ipv4_rule *clnt_rule);
+int ipa_nati_add_ipv4_rule(uint32_t tbl_hdl, 
+                           const ipa_nat_ipv4_rule *clnt_rule,
+													 uint32_t *rule_hdl);
 
 int ipa_nati_generate_rule(uint32_t tbl_hdl,
                            const ipa_nat_ipv4_rule *clnt_rule,
diff --git a/ipanat/inc/ipa_nat_logi.h b/ipanat/inc/ipa_nat_logi.h
index b4eee0f..0e1a5d1 100644
--- a/ipanat/inc/ipa_nat_logi.h
+++ b/ipanat/inc/ipa_nat_logi.h
@@ -50,32 +50,24 @@
 #include <string.h>
 #include <syslog.h>
 
-#define NAT_LOG_SIZE 200
-
 #define PERROR(fmt)   printf("%s:%d %s()", __FILE__, __LINE__, __FUNCTION__);\
                       perror(fmt);
-#define IPADBG(fmt, ...) {\
-                             int n =0; \
-                             n = snprintf(nat_log_buf, sizeof(nat_log_buf), "%s:%d %s() ", __FILE__,  __LINE__, __FUNCTION__);\
-                             snprintf((nat_log_buf+n), (sizeof(nat_log_buf)-n-1), fmt, ##__VA_ARGS__);\
-                             log_nat_message(nat_log_buf, LOG_DEBUG);\
-				  		             }
 
-#define IPAERR(fmt, ...) {\
-                             int n =0; \
-                             n = snprintf(nat_log_buf, sizeof(nat_log_buf), "%s:%d %s() %s", __FILE__,  __LINE__, __FUNCTION__, "Error:");\
-                             snprintf((nat_log_buf+n), (sizeof(nat_log_buf)-n-1), fmt, ##__VA_ARGS__);\
-                             log_nat_message(nat_log_buf, LOG_ERR);\
-				  		             }
+#define IPAERR(fmt, ...) syslog(LOG_ERR, "ERROR: %s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);\
+										     printf("ERR: %s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);
 
-#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, LOG_INFO);\
-				  		             }
+#ifdef DEBUG
+#define IPADBG(fmt, ...) syslog(LOG_DEBUG, "%s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);\
+	                       printf("%s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);
 
-extern void log_nat_message(char *msg, int log_level);
-extern char nat_log_buf[NAT_LOG_SIZE];
+#define IPADUMP(fmt, ...) syslog(LOG_DEBUG, fmt, ##__VA_ARGS__);\
+                          printf(fmt, ##__VA_ARGS__);
+
+#else
+#define IPADBG(fmt, ...)
+#define IPADUMP(fmt, ...)
+#endif
+
 
 #ifdef __cplusplus
 }
diff --git a/ipanat/src/Makefile.am b/ipanat/src/Makefile.am
index a688893..ef6969e 100644
--- a/ipanat/src/Makefile.am
+++ b/ipanat/src/Makefile.am
@@ -1,6 +1,6 @@
 AM_CFLAGS = -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs
 AM_CFLAGS += -I./../inc
-AM_CFLAGS += -DDEBUG
+#AM_CFLAGS += -DDEBUG
 
 c_sources   = ipa_nat_drv.c \
               ipa_nat_drvi.c \
diff --git a/ipanat/src/ipa_nat_drv.c b/ipanat/src/ipa_nat_drv.c
index 68e2de8..2b62a3c 100644
--- a/ipanat/src/ipa_nat_drv.c
+++ b/ipanat/src/ipa_nat_drv.c
@@ -110,9 +110,12 @@
   }
   IPADBG("Passed Table handle: 0x%x\n", tbl_hdl);
 
-  *rule_hdl = ipa_nati_add_ipv4_rule(tbl_hdl, clnt_rule);
-  IPADBG("returning rule handle 0x%x\n", *rule_hdl);
+  if(ipa_nati_add_ipv4_rule(tbl_hdl, clnt_rule, rule_hdl) != 0)
+	{
+		return -1;
+	}
 
+  IPADBG("returning rule handle 0x%x\n", *rule_hdl);
   return 0;
 }
 
diff --git a/ipanat/src/ipa_nat_drvi.c b/ipanat/src/ipa_nat_drvi.c
old mode 100755
new mode 100644
index 692509f..5678306
--- a/ipanat/src/ipa_nat_drvi.c
+++ b/ipanat/src/ipa_nat_drvi.c
@@ -1072,14 +1072,14 @@
   return 0;
 }
 
-uint32_t ipa_nati_add_ipv4_rule(uint32_t tbl_hdl,
-                                const ipa_nat_ipv4_rule *clnt_rule)
+int ipa_nati_add_ipv4_rule(uint32_t tbl_hdl,
+                           const ipa_nat_ipv4_rule *clnt_rule,
+													 uint32_t *rule_hdl)
 {
   struct ipa_nat_ip4_table_cache *tbl_ptr;
   struct ipa_nat_sw_rule sw_rule;
   struct ipa_nat_indx_tbl_sw_rule index_sw_rule;
   uint16_t new_entry, new_index_tbl_entry;
-  uint32_t rule_hdl = 0;
 
   memset(&sw_rule, 0, sizeof(sw_rule));
   memset(&index_sw_rule, 0, sizeof(index_sw_rule));
@@ -1108,8 +1108,8 @@
   }
  
   /* Generate rule handle */
-  rule_hdl  = ipa_nati_make_rule_hdl((uint16_t)tbl_hdl, new_entry);
-  if (!rule_hdl)
+  *rule_hdl  = ipa_nati_make_rule_hdl((uint16_t)tbl_hdl, new_entry);
+  if (!(*rule_hdl))
   {
     IPAERR("unable to generate rule handle\n");
     return -1;
@@ -1119,7 +1119,7 @@
   ipa_nat_dump_ipv4_table(tbl_hdl);
 #endif
 
-  return rule_hdl;
+  return 0;
 }
 int ipa_nati_generate_rule(uint32_t tbl_hdl,
                            const ipa_nat_ipv4_rule *clnt_rule,
diff --git a/ipanat/src/ipa_nat_logi.c b/ipanat/src/ipa_nat_logi.c
index ead8154..b829b78 100644
--- a/ipanat/src/ipa_nat_logi.c
+++ b/ipanat/src/ipa_nat_logi.c
@@ -41,74 +41,8 @@
 #include <stdlib.h>
 #include <unistd.h>
 
-/* write logging to a local file */
-#define LOG_USE_FILE "/etc/IPACM_LOG_F"
-#define NAT_FILE_NAME "/usr/ipanat_log.txt"
-
-/* To use syslog for logging and
-	 use logread cmd to read */
-#define LOG_USE_SYS  "/etc/IPACM_LOG_S"
-
-/* Maximum log file size. 1MB(1048576)  */
-#define MAX_LOG_FILE_SIZE (1048576ul/4)
-
-char nat_log_buf[NAT_LOG_SIZE];
-
-void log_nat_message(char *msg, int log_level)
+void log_nat_message(char *msg)
 {
-#ifdef DEBUG
-	 static FILE *nat_fp = NULL;
-	 static int is_natsys_log_open = 0;
-	 int log_sys = 0, log_file = 0;
-
-	 printf("%s", msg);
-	 if(access(LOG_USE_SYS, F_OK) != -1 )
-	 {
-		 log_sys = 1;
-	 }
-	 else if(access(LOG_USE_FILE, F_OK) != -1)
-	 {
-		 log_file = 1;
-	 }
-	 else
-	 {
-		 log_sys = 0;
-		 log_file = 0;
-	 }
-
-	 if(log_sys)
-	 {
-		 if(is_natsys_log_open == 0)
-		 {
-			 setlogmask(LOG_UPTO(LOG_DEBUG));
-			 openlog("IPANAT", LOG_PID, LOG_LOCAL0);
-
-			 is_natsys_log_open = 1;
-		 }
-		 syslog(log_level, msg);
-	 }
-	 else if(log_file)
-	 {
-		 if(nat_fp == NULL)
-		 {
-			 nat_fp = fopen(NAT_FILE_NAME, "wb+");
-			 if(nat_fp  == NULL)
-			 {
-				 printf("unable to open file\n");
-				 return;
-			 }
-		 }
-		 
-		 if(ftell(nat_fp) > MAX_LOG_FILE_SIZE)
-		 {
-			 rewind(nat_fp);
-			 fprintf(nat_fp, "====Rewinding=====\n");
-		 }
-
-		 fprintf(nat_fp, msg);
-		 fflush(nat_fp);
-	 }
-#endif
 	 return;
 }
 
