diff --git a/openair2/Makefile b/openair2/Makefile
index b02da508da5e101efbb354d56ff1d10095751feb..0f682b3d731dce2f03f41b4570357ecbe41a7c50 100755
--- a/openair2/Makefile
+++ b/openair2/Makefile
@@ -39,25 +39,18 @@
 #export LM_LICENSE_FILE
 
 KERNEL_NAME=$(shell uname -r)
-NUM_CORES=$(shell cat /proc/cpuinfo | grep processor | wc -l)
+NUM_CORES=$(shell getconf _NPROCESSORS_CONF)
 
-export IS_KERNEL_OPENAIRINTERFACE=$(shell if [ `uname -r | cut -d. -f5` = "openairinterface" ] ; then echo "1" ; else echo "0" ; fi)
-
-export IS_LINUX=$(shell if [ -d /usr/src/linux ] ; then  echo "1" ; else  echo "0" ; fi)
-
-ifeq ($(IS_LINUX), 1)
-export LINUX_KERNEL = linux
-else
-ifeq ($(IS_KERNEL_OPENAIRINTERFACE), 1)
-export LINUX_KERNEL = linux-`uname -r`
-else
-export LINUX_KERNEL = linux-headers-`uname -r`
-endif
-endif
+LINUX_KERNEL=$(shell for dir in /lib/modules/linux-headers-`uname -r` /usr/src/linux-`uname -r` /usr/src/linux-headers-`uname -r` ; do \
+                         if [ -d $$dir ] ; then \
+                            echo $$dir ; exit 0 ;  \
+                         fi \
+                     done ;\
+                     echo "LINUX_KERNEL DIRECTORY NOT FOUND: check the makefile" ; exit 1\
+              ) 
 
 export SET_UM=$(shell if grep --silent User\ Mode\ Linux /proc/cpuinfo ; then echo "ARCH=um" ; else echo ""; fi)
 
-
 #SUBDIRS_openair_USERRF  =   $(MAIN_RT_DIR) $(CONFIG_DIR)
 
 #openair_USERRFDIR  = openair_RFOBJS
@@ -81,44 +74,44 @@ mac_sim_rg_cellular:
 	( cd SIMULATION/USER_TOOLS/LAYER2_SIM && make mac_sim_rg MASTER=1 CELLULAR=1 NO_RRM=1)
 
 openair_layer2_emul.ko:
-	(cd LAYER2 && $(MAKE) V=1 -C /usr/src/linux-$(shell echo `uname -r`)  M=`pwd` NO_RRM=1 PCTARGET=1 RTAI=1 MASTER=1 OPEN_AIR=1 PHYEMUL=1 && mv openair_l2.ko openair_layer2.ko)
+	(cd LAYER2 && $(MAKE) V=1 -C $(LINUX_KERNEL)  M=`pwd` NO_RRM=1 PCTARGET=1 RTAI=1 MASTER=1 OPEN_AIR=1 PHYEMUL=1 && mv openair_l2.ko openair_layer2.ko)
 
 openair_layer2_emul_rrm.ko:
-	(cd LAYER2 && $(MAKE) V=1 -C /usr/src/linux-$(shell echo `uname -r`)  M=`pwd` PCTARGET=1 RTAI=1 MASTER=1 OPEN_AIR=1 PHYEMUL=1 && mv openair_l2.ko openair_layer2.ko)
+	(cd LAYER2 && $(MAKE) V=1 -C $(LINUX_KERNEL)  M=`pwd` PCTARGET=1 RTAI=1 MASTER=1 OPEN_AIR=1 PHYEMUL=1 && mv openair_l2.ko openair_layer2.ko)
 
 
 openair_layer2.ko:
-	(cd LAYER2 && $(MAKE) V=1 -C /usr/src/linux-$(shell echo `uname -r`)  M=`pwd` NO_RRM=1 PCTARGET=1 RTAI=1 MASTER=1 OPEN_AIR=1 OPENAIR1=1 && mv openair_l2.ko openair_layer2.ko)
+	(cd LAYER2 && $(MAKE) V=1 -C $(LINUX_KERNEL) M=`pwd` NO_RRM=1 PCTARGET=1 RTAI=1 MASTER=1 OPEN_AIR=1 OPENAIR1=1 && mv openair_l2.ko openair_layer2.ko)
 
 openair_layer2_rrm.ko:
-	(cd LAYER2 && $(MAKE) V=1 -C /usr/src/linux-$(shell echo `uname -r`)  M=`pwd` PCTARGET=1 RTAI=1 MASTER=1 OPEN_AIR=1 OPENAIR1=1 && mv openair_l2.ko openair_layer2.ko)
+	(cd LAYER2 && $(MAKE) V=1 -C $(LINUX_KERNEL)  M=`pwd` PCTARGET=1 RTAI=1 MASTER=1 OPEN_AIR=1 OPENAIR1=1 && mv openair_l2.ko openair_layer2.ko)
 
 openair_layer2_2615.ko:
-	(cd LAYER2 && $(MAKE) V=1 -C /usr/src/linux-$(shell echo `uname -r`)  M=`pwd` PCTARGET=1 RTAI=1 MASTER=1 OPEN_AIR=1 OPENAIR1=1 && mv openair_l2.ko openair_layer2_2615.ko)
+	(cd LAYER2 && $(MAKE) V=1 -C $(LINUX_KERNEL)  M=`pwd` PCTARGET=1 RTAI=1 MASTER=1 OPEN_AIR=1 OPENAIR1=1 && mv openair_l2.ko openair_layer2_2615.ko)
 
 
 openair_rrc.ko:
-	(cd RRC/MESH && $(MAKE) V=1 -C /usr/src/linux-$(shell echo `uname -r`)  M=`pwd` PCTARGET=1 RTAI=1 OPEN_AIR=1 MASTER=1 NO_RRM=1 && mv openair_rrc.ko openair_RRC.ko)
+	(cd RRC/MESH && $(MAKE) V=1 -C $(LINUX_KERNEL)  M=`pwd` PCTARGET=1 RTAI=1 OPEN_AIR=1 MASTER=1 NO_RRM=1 && mv openair_rrc.ko openair_RRC.ko)
 
 openair_rrc_rrm.ko:
-	(cd RRC/MESH && $(MAKE) V=1 -C /usr/src/linux-$(shell echo `uname -r`)  M=`pwd` PCTARGET=1 RTAI=1 OPEN_AIR=1 MASTER=1 && mv openair_rrc.ko openair_RRC.ko)
+	(cd RRC/MESH && $(MAKE) V=1 -C $(LINUX_KERNEL)  M=`pwd` PCTARGET=1 RTAI=1 OPEN_AIR=1 MASTER=1 && mv openair_rrc.ko openair_RRC.ko)
 
 
 openair_rrc_2615.ko:
-	(cd RRC/MESH && $(MAKE) V=1 -C /usr/src/linux-$(shell echo `uname -r`) M=`pwd` PCTARGET=1 RTAI=1 OPEN_AIR=1 MASTER=1 && mv openair_rrc.ko openair_RRC_2615.ko)
+	(cd RRC/MESH && $(MAKE) V=1 -C $(LINUX_KERNEL) M=`pwd` PCTARGET=1 RTAI=1 OPEN_AIR=1 MASTER=1 && mv openair_rrc.ko openair_RRC_2615.ko)
 
 openair_rrc_emul.ko:
-	(cd RRC/MESH && $(MAKE) V=1 -C /usr/src/linux-$(shell echo `uname -r`)  M=`pwd` PCTARGET=1 RTAI=1 OPEN_AIR=1 MASTER=1 PHYEMUL=1 NO_RRM=1)
+	(cd RRC/MESH && $(MAKE) V=1 -C $(LINUX_KERNEL)  M=`pwd` PCTARGET=1 RTAI=1 OPEN_AIR=1 MASTER=1 PHYEMUL=1 NO_RRM=1)
 
 openair_rrc_emul_rrm.ko:
-	(cd RRC/MESH && $(MAKE) V=1 -C /usr/src/linux-$(shell echo `uname -r`)  M=`pwd` PCTARGET=1 RTAI=1 OPEN_AIR=1 MASTER=1 PHYEMUL=1)
+	(cd RRC/MESH && $(MAKE) V=1 -C $(LINUX_KERNEL)  M=`pwd` PCTARGET=1 RTAI=1 OPEN_AIR=1 MASTER=1 PHYEMUL=1)
 
 
 openair_emul.ko:
-	(cd SIMULATION/PHY_EMULATION/DEVICE_DRIVER/ && $(MAKE) V=1 -C /usr/src/linux-$(shell echo `uname -r`)  M=`pwd` PCTARGET=1 RTAI=1 OPEN_AIR=1 MASTER=1 NO_RRM=1)
+	(cd SIMULATION/PHY_EMULATION/DEVICE_DRIVER/ && $(MAKE) V=1 -C $(LINUX_KERNEL)  M=`pwd` PCTARGET=1 RTAI=1 OPEN_AIR=1 MASTER=1 NO_RRM=1)
 
 openair_emul_rrm.ko:
-	(cd SIMULATION/PHY_EMULATION/DEVICE_DRIVER/ && $(MAKE) V=1 -C /usr/src/linux-$(shell echo `uname -r`)  M=`pwd` PCTARGET=1 RTAI=1 OPEN_AIR=1 MASTER=1)
+	(cd SIMULATION/PHY_EMULATION/DEVICE_DRIVER/ && $(MAKE) V=1 -C $(LINUX_KERNEL)  M=`pwd` PCTARGET=1 RTAI=1 OPEN_AIR=1 MASTER=1)
 
 
 
@@ -147,50 +140,50 @@ remove_emul:
 
 
 clean_nasmesh:
-	(cd NAS/DRIVER/MESH && $(MAKE) V=1 -C /usr/src/linux M=`pwd` clean)
+	(cd NAS/DRIVER/MESH && $(MAKE) V=1 -C $(LINUX_KERNEL) M=`pwd` clean)
 
 nasmesh_address_fix.ko:
-	(cd NAS/DRIVER/MESH && $(MAKE) -j$(NUM_CORES) $(SET_UM) V=1 ADDRESS_FIX=1 -C /usr/src/linux M=`pwd`)
+	(cd NAS/DRIVER/MESH && $(MAKE) -j$(NUM_CORES) $(SET_UM) V=1 ADDRESS_FIX=1 -C $(LINUX_KERNEL) M=`pwd`)
 
 nasmesh.ko:
-	(cd NAS/DRIVER/MESH && $(MAKE) -j$(NUM_CORES) $(SET_UM) V=1 -C /usr/src/linux M=`pwd`)
+	(cd NAS/DRIVER/MESH && $(MAKE) -j$(NUM_CORES) $(SET_UM) V=1 -C $(LINUX_KERNEL) M=`pwd`)
 
 # automatically detect the linux header files for driver compilation
 nasmesh_netlink.ko:
-	(cd NAS/DRIVER/MESH && $(MAKE) -j$(NUM_CORES) $(SET_UM) NAS_NETLINK=1 V=1 -C /usr/src/$(LINUX_KERNEL) M=`pwd` modules)
+	(cd NAS/DRIVER/MESH && $(MAKE) -j$(NUM_CORES) $(SET_UM) NAS_NETLINK=1 V=1 -C $(LINUX_KERNEL) M=`pwd` modules)
 
 naslite_netlink_ether.ko:
-	(cd NAS/DRIVER/LITE && $(MAKE) -j$(NUM_CORES) $(SET_UM) OAI_NW_DRIVER_TYPE_ETHERNET=1 NAS_NETLINK=1 OAI_NW_DRIVER_USE_NETLINK=1 V=1 -C /usr/src/$(LINUX_KERNEL) M=`pwd` modules)
+	(cd NAS/DRIVER/LITE && $(MAKE) -j$(NUM_CORES) $(SET_UM) OAI_NW_DRIVER_TYPE_ETHERNET=1 NAS_NETLINK=1 OAI_NW_DRIVER_USE_NETLINK=1 V=1 -C $(LINUX_KERNEL) M=`pwd` modules)
 
 oai_nw_ether.ko:
-	(cd NAS/DRIVER/LITE && $(MAKE) -j$(NUM_CORES) $(SET_UM) OAI_NW_DRIVER_TYPE_ETHERNET=1 NAS_NETLINK=1 OAI_NW_DRIVER_USE_NETLINK=1 V=1 -C /usr/src/$(LINUX_KERNEL) M=`pwd` modules)
+	(cd NAS/DRIVER/LITE && $(MAKE) -j$(NUM_CORES) $(SET_UM) OAI_NW_DRIVER_TYPE_ETHERNET=1 NAS_NETLINK=1 OAI_NW_DRIVER_USE_NETLINK=1 V=1 -C $(LINUX_KERNEL) M=`pwd` modules)
 
 oai_nw_drv.ko:
-	(cd NAS/DRIVER/LITE && $(MAKE) -j$(NUM_CORES) $(SET_UM) OAI_NW_DRIVER_TYPE_ETHERNET=1 NAS_NETLINK=1 OAI_NW_DRIVER_USE_NETLINK=1 V=1 -C /usr/src/$(LINUX_KERNEL) M=`pwd` modules)
+	(cd NAS/DRIVER/LITE && $(MAKE) -j$(NUM_CORES) $(SET_UM) OAI_NW_DRIVER_TYPE_ETHERNET=1 NAS_NETLINK=1 OAI_NW_DRIVER_USE_NETLINK=1 V=1 -C $(LINUX_KERNEL) M=`pwd` modules)
 
 nasmesh_netlink_address_fix.ko:
-	(cd NAS/DRIVER/MESH && $(MAKE) -j$(NUM_CORES) $(SET_UM) NAS_NETLINK=1 ADDRESS_FIX=1 V=1 -C /usr/src/$(LINUX_KERNEL) M=`pwd` modules)
+	(cd NAS/DRIVER/MESH && $(MAKE) -j$(NUM_CORES) $(SET_UM) NAS_NETLINK=1 ADDRESS_FIX=1 V=1 -C $(LINUX_KERNEL) M=`pwd` modules)
 
 
 nasmesh_netlink_loopback.ko:
-	(cd NAS/DRIVER/MESH && $(MAKE) $(SET_UM) NAS_NETLINK=1 LOOPBACK=1 V=1 -C /usr/src/$(LINUX_KERNEL) M=`pwd` modules)
+	(cd NAS/DRIVER/MESH && $(MAKE) $(SET_UM) NAS_NETLINK=1 LOOPBACK=1 V=1 -C $(LINUX_KERNEL) M=`pwd` modules)
 
 # drivers cellular version
 nascellmt_netlink.ko:
-	(cd NAS/DRIVER/CELLULAR/NASMT && $(MAKE) -j$(NUM_CORES) $(SET_UM) NAS_DRIVER_TYPE_ETHERNET=1 NAS_NETLINK=1 V=1 -C /usr/src/$(LINUX_KERNEL) M=`pwd` modules)
+	(cd NAS/DRIVER/CELLULAR/NASMT && $(MAKE) -j$(NUM_CORES) $(SET_UM) NAS_DRIVER_TYPE_ETHERNET=1 NAS_NETLINK=1 V=1 -C $(LINUX_KERNEL) M=`pwd` modules)
 
 nascellmt_clean.ko:
-	(cd NAS/DRIVER/CELLULAR/NASMT && $(MAKE) -j$(NUM_CORES) $(SET_UM) NAS_DRIVER_TYPE_ETHERNET=1 NAS_NETLINK=1 V=1 -C /usr/src/$(LINUX_KERNEL) M=`pwd` clean)
+	(cd NAS/DRIVER/CELLULAR/NASMT && $(MAKE) -j$(NUM_CORES) $(SET_UM) NAS_DRIVER_TYPE_ETHERNET=1 NAS_NETLINK=1 V=1 -C $(LINUX_KERNEL) M=`pwd` clean)
 
 nascellrg_netlink.ko:
-	(cd NAS/DRIVER/CELLULAR/NASRG && $(MAKE) -j$(NUM_CORES) $(SET_UM) NAS_DRIVER_TYPE_ETHERNET=1 NAS_NETLINK=1 V=1 -C /usr/src/$(LINUX_KERNEL) M=`pwd` modules)
+	(cd NAS/DRIVER/CELLULAR/NASRG && $(MAKE) -j$(NUM_CORES) $(SET_UM) NAS_DRIVER_TYPE_ETHERNET=1 NAS_NETLINK=1 V=1 -C $(LINUX_KERNEL) M=`pwd` modules)
 
 nascellrg_clean.ko:
-	(cd NAS/DRIVER/CELLULAR/NASRG && $(MAKE) -j$(NUM_CORES) $(SET_UM) NAS_DRIVER_TYPE_ETHERNET=1 NAS_NETLINK=1 V=1 -C /usr/src/$(LINUX_KERNEL) M=`pwd` clean)
+	(cd NAS/DRIVER/CELLULAR/NASRG && $(MAKE) -j$(NUM_CORES) $(SET_UM) NAS_DRIVER_TYPE_ETHERNET=1 NAS_NETLINK=1 V=1 -C $(LINUX_KERNEL) M=`pwd` clean)
 
 # Driver for UE using LTE core network (MME, S+P-GW)
 ue_ip.ko:
-	(cd NETWORK_DRIVER/UE_IP && $(MAKE) -j$(NUM_CORES) $(SET_UM) NAS_NETLINK=1 OAI_NW_DRIVER_USE_NETLINK=1 V=1 -C /usr/src/$(LINUX_KERNEL) M=`pwd` modules)
+	(cd NETWORK_DRIVER/UE_IP && $(MAKE) -j$(NUM_CORES) $(SET_UM) NAS_NETLINK=1 OAI_NW_DRIVER_USE_NETLINK=1 V=1 -C $(LINUX_KERNEL) M=`pwd` modules)
 
 
 rt_emul: