diff --git a/Makefile b/Makefile
index 78253bc..b7ab8a7 100755
--- a/Makefile
+++ b/Makefile
@@ -25,11 +25,12 @@
 	 ecm_tracker.o \
 	 frontends/ecm_front_end_ipv4.o \
 	 frontends/ecm_front_end_ipv6.o \
+	 frontends/ecm_front_end_common.o \
 	 frontends/nss/ecm_nss_ipv4.o \
 	 frontends/nss/ecm_nss_ported_ipv4.o \
 	 ecm_db.o \
 	 ecm_classifier_default.o \
-	 ecm_conntrack_notifier.o \
+	 frontends/nss/ecm_nss_conntrack_notifier.o \
 	 ecm_interface.o \
 	 ecm_init.o
 
@@ -195,6 +196,7 @@
 ccflags-y += -DECM_INIT_DEBUG_LEVEL=3
 ccflags-y += -DECM_FRONT_END_IPV4_DEBUG_LEVEL=1
 ccflags-y += -DECM_FRONT_END_IPV6_DEBUG_LEVEL=1
+ccflags-y += -DECM_FRONT_END_COMMON_DEBUG_LEVEL=1
 ccflags-y += -DECM_NSS_IPV4_DEBUG_LEVEL=1
 ccflags-y += -DECM_NSS_PORTED_IPV4_DEBUG_LEVEL=1
 ccflags-y += -DECM_NSS_NON_PORTED_IPV4_DEBUG_LEVEL=1
diff --git a/ecm_init.c b/ecm_init.c
index 373a3bc..5d7a927 100644
--- a/ecm_init.c
+++ b/ecm_init.c
@@ -43,6 +43,7 @@
 #ifdef ECM_IPV6_ENABLE
 #include "ecm_front_end_ipv6.h"
 #endif
+#include "ecm_front_end_common.h"
 
 struct dentry *ecm_dentry;	/* Dentry object for top level ecm debugfs directory */
 
@@ -72,10 +73,6 @@
 extern void ecm_bond_notifier_exit(void);
 #endif
 
-extern int ecm_conntrack_notifier_init(struct dentry *dentry);
-extern void ecm_conntrack_notifier_stop(int);
-extern void ecm_conntrack_notifier_exit(void);
-
 #ifdef ECM_CLASSIFIER_DSCP_ENABLE
 extern int ecm_classifier_dscp_init(struct dentry *dentry);
 extern void ecm_classifier_dscp_exit(void);
@@ -177,7 +174,7 @@
 	}
 #endif
 
-	ret = ecm_conntrack_notifier_init(ecm_dentry);
+	ret = ecm_front_end_conntrack_notifier_init(ecm_dentry);
 	if (0 != ret) {
 		goto err_ct;
 	}
@@ -194,7 +191,7 @@
 
 #ifdef ECM_STATE_OUTPUT_ENABLE
 err_state:
-	ecm_conntrack_notifier_exit();
+	ecm_front_end_conntrack_notifier_exit();
 #endif
 err_ct:
 #ifdef ECM_IPV6_ENABLE
@@ -255,7 +252,7 @@
 
 	/* call stop on anything that requires a prepare-to-exit signal */
 	DEBUG_INFO("stop conntrack notifier\n");
-	ecm_conntrack_notifier_stop(1);
+	ecm_front_end_conntrack_notifier_stop(1);
 	DEBUG_INFO("stop front_end_ipv4\n");
 	ecm_front_end_ipv4_stop(1);
 #ifdef ECM_IPV6_ENABLE
@@ -275,7 +272,7 @@
 	ecm_state_exit();
 #endif
 	DEBUG_INFO("exit conntrack notifier\n");
-	ecm_conntrack_notifier_exit();
+	ecm_front_end_conntrack_notifier_exit();
 	DEBUG_INFO("exit front_end_ipv4\n");
 	ecm_front_end_ipv4_exit();
 #ifdef ECM_IPV6_ENABLE
diff --git a/frontends/ecm_front_end_common.c b/frontends/ecm_front_end_common.c
new file mode 100644
index 0000000..7ded197
--- /dev/null
+++ b/frontends/ecm_front_end_common.c
@@ -0,0 +1,113 @@
+/*
+ **************************************************************************
+ * Copyright (c) 2015 The Linux Foundation.  All rights reserved.
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all copies.
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ **************************************************************************
+ */
+
+#include <linux/version.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/debugfs.h>
+#include <linux/inet.h>
+#include <linux/etherdevice.h>
+#include <net/netfilter/nf_conntrack.h>
+#include <net/ip.h>
+#include <net/ipv6.h>
+
+/*
+ * Debug output levels
+ * 0 = OFF
+ * 1 = ASSERTS / ERRORS
+ * 2 = 1 + WARN
+ * 3 = 2 + INFO
+ * 4 = 3 + TRACE
+ */
+#define DEBUG_LEVEL ECM_FRONT_END_COMMON_DEBUG_LEVEL
+
+#include <nss_api_if.h>
+
+#include "ecm_types.h"
+#include "ecm_db_types.h"
+#include "ecm_state.h"
+#include "ecm_tracker.h"
+#include "ecm_classifier.h"
+#include "ecm_front_end_types.h"
+#include "ecm_tracker_datagram.h"
+#include "ecm_tracker_udp.h"
+#include "ecm_tracker_tcp.h"
+#include "ecm_db.h"
+#include "ecm_nss_conntrack_notifier.h"
+
+/*
+ * ecm_front_end_conntrack_notifier_stop()
+ */
+void ecm_front_end_conntrack_notifier_stop(int num)
+{
+	/*
+	 * If the device tree is used, check which accel engine's conntrack notifier
+	 * will be stopped.
+	 * For ipq8064 platforms, we will stop NSS version.
+	 */
+#ifdef CONFIG_OF
+	/*
+	 * Check the other platforms and use the correct APIs for those platforms.
+	 */
+	if (!of_machine_is_compatible("qcom,ipq8064")) {
+		return;
+	}
+#endif
+	ecm_nss_conntrack_notifier_stop(num);
+}
+
+/*
+ * ecm_front_end_conntrack_notifier_init()
+ */
+int ecm_front_end_conntrack_notifier_init(struct dentry *dentry)
+{
+	/*
+	 * If the device tree is used, check which accel engine's conntrack notifier
+	 * can be used.
+	 * For ipq8064 platform, we will use NSS.
+	 */
+#ifdef CONFIG_OF
+	/*
+	 * Check the other platforms and use the correct APIs for those platforms.
+	 */
+	if (!of_machine_is_compatible("qcom,ipq8064")) {
+		return -1;
+	}
+#endif
+	return ecm_nss_conntrack_notifier_init(dentry);
+}
+
+/*
+ * ecm_front_end_conntrack_notifier_exit()
+ */
+void ecm_front_end_conntrack_notifier_exit(void)
+{
+	/*
+	 * If the device tree is used, check which accel engine's conntack notifier
+	 * will be exited.
+	 * For ipq8064 platforms, we will exit NSS.
+	 */
+#ifdef CONFIG_OF
+	/*
+	 * Check the other platforms and use the correct APIs for those platforms.
+	 */
+	if (!of_machine_is_compatible("qcom,ipq8064")) {
+		return;
+	}
+#endif
+	ecm_nss_conntrack_notifier_exit();
+}
+
diff --git a/frontends/include/ecm_front_end_common.h b/frontends/include/ecm_front_end_common.h
index 8ce3cef..ec9356b 100644
--- a/frontends/include/ecm_front_end_common.h
+++ b/frontends/include/ecm_front_end_common.h
@@ -14,8 +14,8 @@
  **************************************************************************
  */
 
-#ifndef _ECM_FRONT_END_COMMON_
-#define _ECM_FRONT_END_COMMON_
+#include <linux/if_pppox.h>
+#include "ecm_nss_conntrack_notifier.h"
 
 /*
  * ecm_front_end_l2_encap_header_len()
@@ -35,7 +35,7 @@
  * ecm_front_end_pull_l2_encap_header()
  *      Pull encapsulating L2 header
  */
-static void ecm_front_end_pull_l2_encap_header(struct sk_buff *skb, uint32_t len)
+static inline void ecm_front_end_pull_l2_encap_header(struct sk_buff *skb, uint32_t len)
 {
 	skb->data += len;
 	skb->network_header += len;
@@ -45,10 +45,12 @@
  * ecm_front_end_push_l2_encap_header()
  *      Push encapsulating L2 header
  */
-static void ecm_front_end_push_l2_encap_header(struct sk_buff *skb, uint32_t len)
+static inline void ecm_front_end_push_l2_encap_header(struct sk_buff *skb, uint32_t len)
 {
 	skb->data -= len;
 	skb->network_header -= len;
 }
 
-#endif
+extern void ecm_front_end_conntrack_notifier_stop(int num);
+extern int ecm_front_end_conntrack_notifier_init(struct dentry *dentry);
+extern void ecm_front_end_conntrack_notifier_exit(void);
diff --git a/ecm_conntrack_notifier.c b/frontends/nss/ecm_nss_conntrack_notifier.c
similarity index 67%
rename from ecm_conntrack_notifier.c
rename to frontends/nss/ecm_nss_conntrack_notifier.c
index 6014a0e..fcca942 100644
--- a/ecm_conntrack_notifier.c
+++ b/frontends/nss/ecm_nss_conntrack_notifier.c
@@ -15,7 +15,7 @@
  */
 
 /*
- * ecm_conntrack_notifier.c
+ * ecm_nss_conntrack_notifier.c
  * 	Conntrack notifier functionality.
  */
 
@@ -79,35 +79,35 @@
 #include "ecm_tracker_tcp.h"
 #include "ecm_tracker_datagram.h"
 #include "ecm_db.h"
-#include "ecm_front_end_ipv4.h"
+#include "ecm_nss_ipv4.h"
 #ifdef ECM_IPV6_ENABLE
-#include "ecm_front_end_ipv6.h"
+#include "ecm_nss_ipv6.h"
 #endif
 
 /*
  * Locking of the classifier - concurrency control
  */
-static DEFINE_SPINLOCK(ecm_conntrack_notifier_lock);				/* Protect against SMP access between netfilter, events and private threaded function. */
+static DEFINE_SPINLOCK(ecm_nss_conntrack_notifier_lock);				/* Protect against SMP access between netfilter, events and private threaded function. */
 
 /*
  * Debugfs dentry object.
  */
-static struct dentry *ecm_conntrack_notifier_dentry;
+static struct dentry *ecm_nss_conntrack_notifier_dentry;
 
 /*
  * General operational control
  */
-static int ecm_conntrack_notifier_stopped = 0;				/* When non-zero further traffic will not be processed */
+static int ecm_nss_conntrack_notifier_stopped = 0;				/* When non-zero further traffic will not be processed */
 
 #ifdef CONFIG_NF_CONNTRACK_EVENTS
 /*
- * ecm_conntrack_event()
+ * ecm_nss_conntrack_event()
  *	Callback event invoked when conntrack connection state changes, currently we handle destroy events to quickly release state
  */
 #ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS
-static int ecm_conntrack_event(struct notifier_block *this, unsigned long events, void *ptr)
+static int ecm_nss_conntrack_event(struct notifier_block *this, unsigned long events, void *ptr)
 #else
-static int ecm_conntrack_event(unsigned int events, struct nf_ct_event *item)
+static int ecm_nss_conntrack_event(unsigned int events, struct nf_ct_event *item)
 #endif
 {
 #ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS
@@ -118,13 +118,13 @@
 	/*
 	 * If operations have stopped then do not process event
 	 */
-	spin_lock_bh(&ecm_conntrack_notifier_lock);
-	if (unlikely(ecm_conntrack_notifier_stopped)) {
+	spin_lock_bh(&ecm_nss_conntrack_notifier_lock);
+	if (unlikely(ecm_nss_conntrack_notifier_stopped)) {
 		DEBUG_WARN("Ignoring event - stopped\n");
-		spin_unlock_bh(&ecm_conntrack_notifier_lock);
+		spin_unlock_bh(&ecm_nss_conntrack_notifier_lock);
 		return NOTIFY_DONE;
 	}
-	spin_unlock_bh(&ecm_conntrack_notifier_lock);
+	spin_unlock_bh(&ecm_nss_conntrack_notifier_lock);
 
 	if (!ct) {
 		DEBUG_WARN("Error: no ct\n");
@@ -155,50 +155,50 @@
 
 #ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS
 /*
- * struct notifier_block ecm_conntrack_notifier
+ * struct notifier_block ecm_nss_conntrack_notifier
  *	Netfilter conntrack event system to monitor connection tracking changes
  */
-static struct notifier_block ecm_conntrack_notifier = {
-	.notifier_call	= ecm_conntrack_event,
+static struct notifier_block ecm_nss_conntrack_notifier = {
+	.notifier_call	= ecm_nss_conntrack_event,
 };
 #else
 /*
- * struct nf_ct_event_notifier ecm_conntrack_notifier
+ * struct nf_ct_event_notifier ecm_nss_conntrack_notifier
  *	Netfilter conntrack event system to monitor connection tracking changes
  */
-static struct nf_ct_event_notifier ecm_conntrack_notifier = {
-	.fcn	= ecm_conntrack_event,
+static struct nf_ct_event_notifier ecm_nss_conntrack_notifier = {
+	.fcn	= ecm_nss_conntrack_event,
 };
 #endif
 #endif
 
 /*
- * ecm_conntrack_notifier_stop()
+ * ecm_nss_conntrack_notifier_stop()
  */
-void ecm_conntrack_notifier_stop(int num)
+void ecm_nss_conntrack_notifier_stop(int num)
 {
-	ecm_conntrack_notifier_stopped = num;
+	ecm_nss_conntrack_notifier_stopped = num;
 }
-EXPORT_SYMBOL(ecm_conntrack_notifier_stop);
+EXPORT_SYMBOL(ecm_nss_conntrack_notifier_stop);
 
 /*
- * ecm_conntrack_notifier_init()
+ * ecm_nss_conntrack_notifier_init()
  */
-int ecm_conntrack_notifier_init(struct dentry *dentry)
+int ecm_nss_conntrack_notifier_init(struct dentry *dentry)
 {
 	int result;
 	DEBUG_INFO("ECM Conntrack Notifier init\n");
 
-	ecm_conntrack_notifier_dentry = debugfs_create_dir("ecm_conntrack_notifier", dentry);
-	if (!ecm_conntrack_notifier_dentry) {
+	ecm_nss_conntrack_notifier_dentry = debugfs_create_dir("ecm_nss_conntrack_notifier", dentry);
+	if (!ecm_nss_conntrack_notifier_dentry) {
 		DEBUG_ERROR("Failed to create ecm conntrack notifier directory in debugfs\n");
 		return -1;
 	}
 
-	if (!debugfs_create_u32("stop", S_IRUGO | S_IWUSR, ecm_conntrack_notifier_dentry,
-					(u32 *)&ecm_conntrack_notifier_stopped)) {
+	if (!debugfs_create_u32("stop", S_IRUGO | S_IWUSR, ecm_nss_conntrack_notifier_dentry,
+					(u32 *)&ecm_nss_conntrack_notifier_stopped)) {
 		DEBUG_ERROR("Failed to create ecm conntrack notifier stopped file in debugfs\n");
-		debugfs_remove_recursive(ecm_conntrack_notifier_dentry);
+		debugfs_remove_recursive(ecm_nss_conntrack_notifier_dentry);
 		return -1;
 	}
 
@@ -206,32 +206,32 @@
 	/*
 	 * Eventing subsystem is available so we register a notifier hook to get fast notifications of expired connections
 	 */
-	result = nf_conntrack_register_notifier(&init_net, &ecm_conntrack_notifier);
+	result = nf_conntrack_register_notifier(&init_net, &ecm_nss_conntrack_notifier);
 	if (result < 0) {
 		DEBUG_ERROR("Can't register nf notifier hook.\n");
-		debugfs_remove_recursive(ecm_conntrack_notifier_dentry);
+		debugfs_remove_recursive(ecm_nss_conntrack_notifier_dentry);
 		return result;
 	}
 #endif
 
 	return 0;
 }
-EXPORT_SYMBOL(ecm_conntrack_notifier_init);
+EXPORT_SYMBOL(ecm_nss_conntrack_notifier_init);
 
 /*
- * ecm_conntrack_notifier_exit()
+ * ecm_nss_conntrack_notifier_exit()
  */
-void ecm_conntrack_notifier_exit(void)
+void ecm_nss_conntrack_notifier_exit(void)
 {
 	DEBUG_INFO("ECM Conntrack Notifier exit\n");
 #ifdef CONFIG_NF_CONNTRACK_EVENTS
-	nf_conntrack_unregister_notifier(&init_net, &ecm_conntrack_notifier);
+	nf_conntrack_unregister_notifier(&init_net, &ecm_nss_conntrack_notifier);
 #endif
 	/*
 	 * Remove the debugfs files recursively.
 	 */
-	if (ecm_conntrack_notifier_dentry) {
-		debugfs_remove_recursive(ecm_conntrack_notifier_dentry);
+	if (ecm_nss_conntrack_notifier_dentry) {
+		debugfs_remove_recursive(ecm_nss_conntrack_notifier_dentry);
 	}
 }
-EXPORT_SYMBOL(ecm_conntrack_notifier_exit);
+EXPORT_SYMBOL(ecm_nss_conntrack_notifier_exit);
diff --git a/frontends/nss/ecm_nss_conntrack_notifier.h b/frontends/nss/ecm_nss_conntrack_notifier.h
new file mode 100644
index 0000000..da1fe83
--- /dev/null
+++ b/frontends/nss/ecm_nss_conntrack_notifier.h
@@ -0,0 +1,19 @@
+/*
+ **************************************************************************
+ * Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all copies.
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ **************************************************************************
+ */
+
+extern void ecm_nss_conntrack_notifier_stop(int num);
+extern int ecm_nss_conntrack_notifier_init(struct dentry *dentry);
+extern void ecm_nss_conntrack_notifier_exit(void);
