diff --git a/openair2/LAYER2/Makefile b/openair2/LAYER2/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..5890cd548e684fa559e2abf2aa4efad778dfa6a6
--- /dev/null
+++ b/openair2/LAYER2/Makefile
@@ -0,0 +1,159 @@
+#/*________________________Makefile________________________
+
+# Authors : Hicham Anouar, Lionel Gauthier, Raymond Knopp
+# Company : EURECOM
+# Emails  : anouar@eurecom.fr, lionel.gauthier@eurecom.fr, knopp@eurecom.fr
+#________________________________________________________________*/
+
+
+
+
+
+include $(OPENAIR_HOME)/common/utils/Makefile.inc
+
+KERNEL_ARCH:=$(shell echo `uname -m`)
+SET_X64:=$(shell if [ $(KERNEL_ARCH) = 'x86_64' ]; then echo true ; fi)
+ifdef RTAI
+# Get the RTAI variables
+CCC = $(shell rtai-config --cc)
+RTAI_SUBVERSION=$(shell rtai-config --version | sed -e 's/^..\(.\).*$$/\1/')
+IS_RTAI_SUBVERSION_LESS_THAN_FIVE=$(shell if [ $(RTAI_SUBVERSION) -lt 5 ] ; then echo true ; fi)
+
+EXTRA_CFLAGS = $(shell rtai-config --module-cflags) -DRTAI_ENABLED -DPC_TARGET -D__KERNEL__ -DMODULE -D_LOOSE_KERNEL_NAMES -I$(KERNEL_DIR)/build/include -I$(KERNEL_DIR)/build/include/asm/mach-default -DNB_ANTENNAS_RX=2 -DNB_ANTENNAS_TX=2 -DNB_ANTENNAS_TXRX -DMAC_CONTEXT -I/usr/include $(if $(IS_RTAI_SUBVERSION_LESS_THAN_FIVE),-DRTAI_ISNT_POSIX,)
+endif
+
+
+
+
+
+####################################################
+#      SOURCE FOLDERS
+####################################################
+
+
+COMMON_DIR		      = ../COMMON
+AS_RLC_UM_DIR                 = RLC/UM_v6.1.0_LITE
+AS_RLC_AM_DIR                 = RLC/AM
+AS_RLC_TM_DIR                 = RLC/TM
+AS_RLC_DIR                    = RLC
+AS_PDCP_DIR                   = PDCP_v10.1.0
+AS_MEM_DIR                    = ../UTIL/MEM
+AS_LIST_DIR                   = ../UTIL/LISTS
+AS_FIFO_DIR	              = ../UTIL/FIFO
+AS_MATH_DIR                   = ../UTIL/MATH
+AS_TIMER_DIR                  = ../UTIL/TIMER
+PHY_INTERFACE_DIR	      = ../PHY_INTERFACE
+
+export AS_RLC_UM_DIR
+export AS_RLC_AM_DIR
+export AS_RLC_TM_DIR
+export AS_RLC_DIR
+export AS_PDCP_DIR
+export AS_MPLS_DIR
+export AS_MEM_DIR
+export AS_LIST_DIR
+export AS_FIFO_DIR
+export AS_MATH_DIR
+export AS_TIMER_DIR
+export AS_RRM_CONFIG_DIR
+
+
+
+obj-m += openair_l2.o
+
+
+
+
+openair_l2-objs += layer2_top.o MAC/layer2_scheduler.o MAC/main.o MAC/nodeb_control_plane_procedures.o MAC/ue_scheduler.o MAC/nodeb_scheduler.o MAC/ue_control_plane_procedures.o MAC/lchan_interface.o MAC/utils.o MAC/openair2_proc.o
+
+openair_l2-objs += register.o
+
+
+
+openair_l2-objs +=  $(AS_LIST_DIR)/list.o
+openair_l2-objs +=  $(AS_LIST_DIR)/list2.o
+
+openair_l2-objs +=  $(AS_TIMER_DIR)/umts_timer.o
+
+openair_l2-objs +=  $(AS_PDCP_DIR)/pdcp.o
+openair_l2-objs +=  $(AS_PDCP_DIR)/pdcp_fifo.o
+
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_segment.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_fsm.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_mux.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_retrans.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_util.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_mac_status.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_demux.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_receiver.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_reassembly.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_discard_rx.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_control_primitives.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_reset.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_status.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_timers.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_discard_notif.o
+openair_l2-objs +=  $(AS_RLC_AM_DIR)/rlc_am_discard_tx.o
+
+openair_l2-objs +=  $(AS_RLC_TM_DIR)/rlc_tm.o
+openair_l2-objs +=  $(AS_RLC_TM_DIR)/rlc_tm_control_primitives.o
+openair_l2-objs +=  $(AS_RLC_TM_DIR)/rlc_tm_fsm.o
+openair_l2-objs +=  $(AS_RLC_TM_DIR)/rlc_tm_segment.o
+openair_l2-objs +=  $(AS_RLC_TM_DIR)/rlc_tm_reassembly.o
+
+openair_l2-objs +=  $(AS_RLC_UM_DIR)/rlc_um.o
+openair_l2-objs +=  $(AS_RLC_UM_DIR)/rlc_um_fsm.o
+openair_l2-objs +=  $(AS_RLC_UM_DIR)/rlc_um_control_primitives.o
+openair_l2-objs +=  $(AS_RLC_UM_DIR)/rlc_um_segment.o
+openair_l2-objs +=  $(AS_RLC_UM_DIR)/rlc_um_reassembly.o
+openair_l2-objs +=  $(AS_RLC_UM_DIR)/rlc_um_receiver.o
+
+openair_l2-objs +=  $(AS_RLC_DIR)/rlc_mac.o
+openair_l2-objs +=  $(AS_RLC_DIR)/rlc.o
+openair_l2-objs +=  $(AS_RLC_DIR)/rlc_rrc.o
+openair_l2-objs +=  $(AS_RLC_DIR)/rlc_mpls.o
+
+
+openair_l2-objs +=  $(AS_MATH_DIR)/random.o
+openair_l2-objs +=  $(AS_MATH_DIR)/crc_byte.o
+
+openair_l2-objs +=  $(AS_MEM_DIR)/mem_block.o
+
+
+openair_l2-objs += $(PHY_INTERFACE_DIR)/mac_phy_primitives.o
+
+
+ifdef MASTER
+EXTRA_CFLAGS += -DNODE_RG
+else
+EXTRA_CFLAGS += -DNODE_MT
+endif
+
+
+ifdef NO_RRM
+EXTRA_CFLAGS += -DNO_RRM
+else
+ifndef USER_MODE
+EXTRA_CFLAGS += -DRRC_RRM_FIFOS_XFACE
+endif
+endif
+
+
+CCC=gcc
+
+ifdef PHYEMUL
+EXTRA_CFLAGS += -DPHY_EMUL
+else
+EXTRA_CFLAGS += -I$(OPENAIR1_DIR) -DOPENAIR1 -DOPENAIR2
+endif
+
+#--------------------------------------------------------
+EXTRA_CFLAGS +=   -DKERNEL$(KERNEL_MAIN_TYPE)  -DBIGPHYSAREA #-DNO_RRM  -DRRC_RRM_XFACE -DRRC_RRM_FIFOS_XFACE 
+
+
+EXTRA_CFLAGS += -Wall -Wstrict-prototypes  $(if $(SET_X64),-DARCH_64,) $(if $(SET_X64),-mcmodel=kernel,) $(if $(SET_X64),-m64,) -fno-common -fno-strict-aliasing -pipe -freg-struct-return -ffreestanding -maccumulate-outgoing-args -funroll-loops -mmmx -msse -msse2 -fomit-frame-pointer -nostdinc -DMODULE  -D_LOOSE_KERNEL_NAMES -O2  $(GT2629)
+
+
+EXTRA_CFLAGS += -I$(OPENAIR2_DIR)/COMMON -I$(OPENAIR2_DIR)/PHY_INTERFACE -I$(OPENAIR2_DIR)/UTIL/TIMER -I$(OPENAIR2_DIR)/UTIL/MATH -I$(OPENAIR2_DIR)/UTIL/LISTS -I$(OPENAIR2_DIR)/UTIL/MEM -I$(OPENAIR2_DIR)/LAYER2/RLC -I$(OPENAIR2_DIR)/LAYER2/RLC/UM_v6.1.0_LITE -I$(OPENAIR2_DIR)/LAYER2/RLC/TM -I$(OPENAIR2_DIR)/LAYER2/RLC/AM -I$(OPENAIR2_DIR)/LAYER2/PDCP -I$(OPENAIR2_DIR) -I$(OPENAIR3_DIR)/MESH -I$(OPENAIR3_DIR)/MESH/RRM 
+
diff --git a/openair2/LAYER2/Makefile.inc b/openair2/LAYER2/Makefile.inc
new file mode 100644
index 0000000000000000000000000000000000000000..c6c40ade23da59b71ec257bfd34866d2a075d463
--- /dev/null
+++ b/openair2/LAYER2/Makefile.inc
@@ -0,0 +1,120 @@
+ifeq ($(OPENAIR2),1)
+EXTRA_CFLAGS += -DOPENAIR2
+endif
+EXTRA_CFLAGS += -DASSERT
+EXTRA_CFLAGS += -DNO_RRM
+
+COMMON_DIR = $(OPENAIR2_TOP)/COMMON
+L2_INTERFACE_DIR = $(OPENAIR2_TOP)/RRC/L2_INTERFACE
+RLC_UM_DIR = $(OPENAIR2_TOP)/LAYER2/RLC/UM_v9.3.0
+RLC_AM_DIR = $(OPENAIR2_TOP)/LAYER2/RLC/AM_v9.3.0
+RLC_TM_DIR = $(OPENAIR2_TOP)/LAYER2/RLC/TM_v9.3.0
+RLC_DIR = $(OPENAIR2_TOP)/LAYER2/RLC
+PDCP_DIR = $(OPENAIR2_TOP)/LAYER2/PDCP_v10.1.0
+PHY_INTERFACE_DIR = $(OPENAIR2_TOP)/PHY_INTERFACE
+RRC_DIR = $(OPENAIR2_TOP)/RRC/LITE
+L2_INTERFACE_DIR = $(OPENAIR2_TOP)/RRC/L2_INTERFACE
+MAC_DIR = $(OPENAIR2_TOP)/LAYER2/MAC
+RRC_CELL_DIR = $(OPENAIR2_TOP)/RRC/CELLULAR
+
+SOURCES_L2 +=  $(OPENAIR2_TOP)/LAYER2/openair2_proc.c 
+
+SOURCES_L2 +=  $(PDCP_DIR)/pdcp.c
+SOURCES_L2 +=  $(PDCP_DIR)/pdcp_fifo.c
+SOURCES_L2 +=  $(PDCP_DIR)/pdcp_sequence_manager.c
+SOURCES_L2 +=  $(PDCP_DIR)/pdcp_primitives.c
+SOURCES_L2 +=  $(PDCP_DIR)/pdcp_util.c
+SOURCES_L2 +=  $(PDCP_DIR)/pdcp_security.c
+SOURCES_L2 +=  $(PDCP_DIR)/pdcp_netlink.c
+
+SOURCES_L2 +=  $(RLC_AM_DIR)/rlc_am.c
+SOURCES_L2 +=  $(RLC_AM_DIR)/rlc_am_init.c
+SOURCES_L2 +=  $(RLC_AM_DIR)/rlc_am_timer_poll_retransmit.c
+SOURCES_L2 +=  $(RLC_AM_DIR)/rlc_am_timer_reordering.c
+SOURCES_L2 +=  $(RLC_AM_DIR)/rlc_am_timer_status_prohibit.c
+SOURCES_L2 +=  $(RLC_AM_DIR)/rlc_am_segment.c
+SOURCES_L2 +=  $(RLC_AM_DIR)/rlc_am_segments_holes.c
+SOURCES_L2 +=  $(RLC_AM_DIR)/rlc_am_in_sdu.c
+SOURCES_L2 +=  $(RLC_AM_DIR)/rlc_am_receiver.c
+SOURCES_L2 +=  $(RLC_AM_DIR)/rlc_am_retransmit.c
+SOURCES_L2 +=  $(RLC_AM_DIR)/rlc_am_windows.c
+SOURCES_L2 +=  $(RLC_AM_DIR)/rlc_am_rx_list.c
+SOURCES_L2 +=  $(RLC_AM_DIR)/rlc_am_reassembly.c
+SOURCES_L2 +=  $(RLC_AM_DIR)/rlc_am_status_report.c
+
+
+SOURCES_L2 +=  $(RLC_TM_DIR)/rlc_tm.c
+SOURCES_L2 +=  $(RLC_TM_DIR)/rlc_tm_init.c
+
+SOURCES_L2 +=  $(RLC_UM_DIR)/rlc_um.c
+SOURCES_L2 +=  $(RLC_UM_DIR)/rlc_um_fsm.c
+SOURCES_L2 +=  $(RLC_UM_DIR)/rlc_um_control_primitives.c
+SOURCES_L2 +=  $(RLC_UM_DIR)/rlc_um_segment.c
+SOURCES_L2 +=  $(RLC_UM_DIR)/rlc_um_reassembly.c
+SOURCES_L2 +=  $(RLC_UM_DIR)/rlc_um_receiver.c
+SOURCES_L2 +=  $(RLC_UM_DIR)/rlc_um_dar.c
+
+ifeq ($(OPENAIR_EMU),1)
+SOURCES_L2 +=  $(RLC_UM_DIR)/rlc_um_very_simple_test.c
+endif
+
+SOURCES_L2 +=  $(RLC_DIR)/rlc_mac.c
+SOURCES_L2 +=  $(RLC_DIR)/rlc.c
+SOURCES_L2 +=  $(RLC_DIR)/rlc_rrc.c
+SOURCES_L2 +=  $(RLC_DIR)/rlc_mpls.c
+
+RRC_OBJS =  $(RRC_DIR)/rrc_UE.o
+ifeq ($(ENABLE_RAL),1)
+RRC_OBJS +=  $(RRC_DIR)/rrc_UE_ral.o
+RRC_OBJS +=  $(RRC_DIR)/rrc_eNB_ral.o
+endif
+
+RRC_OBJS += $(RRC_DIR)/rrc_eNB.o
+RRC_OBJS += $(RRC_DIR)/rrc_eNB_S1AP.o
+ifdef USE_MME
+RRC_OBJS += $(RRC_DIR)/rrc_eNB_GTPV1U.o
+endif
+RRC_OBJS += $(RRC_DIR)/rrc_common.o
+RRC_OBJS += $(RRC_DIR)/L2_interface.o
+
+MAC_OBJS =  $(MAC_DIR)/lte_transport_init.o
+MAC_OBJS += $(MAC_DIR)/main.o
+MAC_OBJS += $(MAC_DIR)/ue_procedures.o
+MAC_OBJS += $(MAC_DIR)/ra_procedures.o
+MAC_OBJS += $(MAC_DIR)/l1_helpers.o
+MAC_OBJS += $(MAC_DIR)/rar_tools.o
+MAC_OBJS += $(MAC_DIR)/eNB_scheduler.o
+MAC_OBJS += $(MAC_DIR)/eNB_scheduler_dlsch.o
+MAC_OBJS += $(MAC_DIR)/eNB_scheduler_ulsch.o
+MAC_OBJS += $(MAC_DIR)/eNB_scheduler_mch.o
+MAC_OBJS += $(MAC_DIR)/eNB_scheduler_bch.o
+MAC_OBJS += $(MAC_DIR)/eNB_scheduler_primitives.o
+MAC_OBJS += $(MAC_DIR)/eNB_scheduler_RA.o
+MAC_OBJS += $(MAC_DIR)/pre_processor.o
+MAC_OBJS += $(MAC_DIR)/config.o
+
+L2_INTERFACE_OBJS = $(L2_INTERFACE_DIR)/openair_rrc_L2_interface.o
+
+L2_OBJS=$(addsuffix .o,$(basename $(SOURCES_L2))) $(PHY_INTERFACE_OBJS) $(MAC_OBJS) $(L2_INTERFACE_OBJS)
+
+L2_incl =  -I$(OPENAIR2_TOP)
+L2_incl += -I$(COMMON_DIR)
+L2_incl += -I$(RLC_DIR)
+L2_incl += -I$(RLC_AM_DIR)
+L2_incl += -I$(RLC_UM_DIR)
+L2_incl += -I$(RLC_TM_DIR)
+L2_incl += -I$(PDCP_DIR)
+L2_incl += -I$(OPENAIR3)/MESH
+L2_incl += -I$(OPENAIR2_TOP)/RRC/LITE/MESSAGES
+L2_incl += -I$(OPENAIR3)/MESH/RRM
+
+ifeq ($(rrc_cellular),1)
+  include $(RRC_CELL_DIR)/Makefile.inc
+  L2_OBJS += $(RRC_CELLULAR_OBJS)
+  L2_incl += -I$(OPENAIR2_TOP)/RRC/CELLULAR
+  EXTRA_CFLAGS += -DRRC_CELLULAR -DCELLULAR
+else
+  L2_OBJS += $(RRC_OBJS)
+  L2_incl += -I$(OPENAIR2_TOP)/RRC/LITE
+endif
+