diff --git a/CHANGELOG.md b/CHANGELOG.md
old mode 100644
new mode 100755
diff --git a/LICENSE b/LICENSE
old mode 100644
new mode 100755
diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py
index 7b75cf82c58c3d6b82a9a156d3e6bfb25f04d5fc..e2851abc25d76f06f0b8d338ce336d1c093e998b 100644
--- a/ci-scripts/cls_oaicitest.py
+++ b/ci-scripts/cls_oaicitest.py
@@ -2535,7 +2535,7 @@ class OaiCiTest():
 			if (os.path.isfile('iperf_server_' + self.testCase_id + '.log')):
 				os.remove('iperf_server_' + self.testCase_id + '.log')
 			SSH.copyin(iServerIPAddr, iServerUser, iServerPasswd, '/tmp/tmp_iperf_server_' + self.testCase_id + '.log', 'iperf_server_' + self.testCase_id + '_OAI-UE.log')
-			filename='iperf_server_' + self.testCase_id + '_' + device_id + '.log'
+			filename='iperf_server_' + self.testCase_id + '_OAI-UE.log'
 			self.Iperf_analyzeV2Server(lock, '10.0.1.2', 'OAI-UE', status_queue, modified_options,filename,0)
 
 		# copying on the EPC server for logCollection
diff --git a/ci-scripts/ran.py b/ci-scripts/ran.py
index 7079773a344d681c0ec2442a21c7d22164126896..c23541127c917c8a1bb4ea97fe3fe8a4c07e78d4 100644
--- a/ci-scripts/ran.py
+++ b/ci-scripts/ran.py
@@ -130,12 +130,16 @@ class RANManagement():
 		result = re.search('--eNBocp', self.Build_eNB_args)
 		if result is not None:
 			self.air_interface[self.eNB_instance] = 'ocp-enb'
-		else:	
-			result = re.search('--gNB', self.Build_eNB_args)
+		else:
+			result = re.search('--RU', self.Build_eNB_args)
 			if result is not None:
-				self.air_interface[self.eNB_instance] = 'nr-softmodem'
+				self.air_interface[self.eNB_instance] = 'oairu'
 			else:
-				self.air_interface[self.eNB_instance] = 'lte-softmodem'
+				result = re.search('--gNB', self.Build_eNB_args)
+				if result is not None:
+					self.air_interface[self.eNB_instance] = 'nr-softmodem'
+				else:
+					self.air_interface[self.eNB_instance] = 'lte-softmodem'
 		
 		# Worakround for some servers, we need to erase completely the workspace
 		if self.Build_eNB_forced_workspace_cleanup:
@@ -296,7 +300,7 @@ class RANManagement():
 				mySSH.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword)
 				mySSH.command('cd ' + self.eNBSourceCodePath + '/cmake_targets', '\$', 5)
 				#-qq quiet / -u update orcreate files
-				mySSH.command('unzip -u -qq -DD tmp_build' + testcaseId + '.zip', '\$', 5)
+				mySSH.command('unzip -o -u -qq -DD tmp_build' + testcaseId + '.zip', '\$', 5)
 				mySSH.command('rm -f tmp_build' + testcaseId + '.zip', '\$', 5)
 				mySSH.close()
 		else:
diff --git a/ci-scripts/reportTestLocally.sh b/ci-scripts/reportTestLocally.sh
index c4fa817b06173c81eab7284b1f534f548701aec3..105c95786f5a3c73a039aeb9c4480b70f22863c4 100755
--- a/ci-scripts/reportTestLocally.sh
+++ b/ci-scripts/reportTestLocally.sh
@@ -309,14 +309,14 @@ function report_test {
                     NB_ENB_GOT_SYNC=`egrep -c "got sync" $ENB_LOG`
                     NB_UE_GOT_SYNC=`egrep -c "got sync" $UE_LOG`
                     NB_ENB_SYNCED_WITH_UE=`egrep -c "got UE capabilities for UE" $ENB_LOG`
-                    if [ $NB_ENB_GOT_SYNC -eq 1 ] && [ $NB_UE_GOT_SYNC -eq 2 ] && [ $NB_ENB_SYNCED_WITH_UE -eq 1 ]
+                    if [ $NB_ENB_GOT_SYNC -gt 0 ] && [ $NB_UE_GOT_SYNC -eq 2 ] && [ $NB_ENB_SYNCED_WITH_UE -eq 1 ]
                     then
                         echo "        <td bgcolor = \"green\" >OK</td>" >> ./test_simulator_results.html
                     else
                         echo "        <td bgcolor = \"red\" >KO</td>" >> ./test_simulator_results.html
                     fi
                     echo "        <td><pre>" >> ./test_simulator_results.html
-                    if [ $NB_ENB_GOT_SYNC -eq 1 ]
+                    if [ $NB_ENB_GOT_SYNC -gt 0 ]
                     then
                         echo "<font color = \"blue\">- eNB --> got sync</font>" >> ./test_simulator_results.html
                     else
diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh
index cb751c3830f6b9aa78a9febc10acd96fda7dd35c..fc35370e0a3c496bd01eadd53d64696bf9f3063d 100755
--- a/ci-scripts/runTestOnVM.sh
+++ b/ci-scripts/runTestOnVM.sh
@@ -1235,9 +1235,9 @@ function start_rf_sim_gnb {
     then
         if [ $LOC_RA_TEST -eq 0 ] #no RA test => use --phy-test option
         then
-            echo "echo \"./nr-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --log_config.global_log_options level,nocolor --parallel-config PARALLEL_SINGLE_THREAD --noS1 --nokrnmod 1 --rfsim --phy-test\" > ./my-nr-softmodem-run.sh " >> $1
+            echo "echo \"./nr-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --log_config.global_log_options level,nocolor --parallel-config PARALLEL_SINGLE_THREAD --noS1 --nokrnmod 1 --rfsim --phy-test --lowmem --noS1\" > ./my-nr-softmodem-run.sh " >> $1
         else #RA test => use --do-ra option
-            echo "echo \"./nr-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --log_config.global_log_options level,nocolor --parallel-config PARALLEL_SINGLE_THREAD --rfsim --do-ra\" > ./my-nr-softmodem-run.sh " >> $1
+            echo "echo \"./nr-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --log_config.global_log_options level,nocolor --parallel-config PARALLEL_SINGLE_THREAD --rfsim --do-ra --lowmem --noS1\" > ./my-nr-softmodem-run.sh " >> $1
         fi
     fi
     echo "chmod 775 ./my-nr-softmodem-run.sh" >> $1
diff --git a/ci-scripts/xml_files/multi_rru_band38_build.xml b/ci-scripts/xml_files/multi_rru_band38_build.xml
index ba45eab10a35e8db259457d7578f3a1e694761ad..1370a3a3962e435e802d2e3118f98d2439971d90 100644
--- a/ci-scripts/xml_files/multi_rru_band38_build.xml
+++ b/ci-scripts/xml_files/multi_rru_band38_build.xml
@@ -26,7 +26,7 @@
 	<htmlTabIcon>wrench</htmlTabIcon>
 	<TestCaseRequestedList>
  010101 010102 010103
- 000101 000102 000103
+ 000102 000103 000101
 	</TestCaseRequestedList>
 	<TestCaseExclusionList></TestCaseExclusionList>
 
@@ -50,7 +50,7 @@
 	<testCase id="010102">
 		<class>Build_eNB</class>
 		<desc>Build Master RRU</desc>
-		<Build_eNB_args>-w USRP -c --eNB --ninja</Build_eNB_args>
+		<Build_eNB_args>-w USRP -c --RU --ninja</Build_eNB_args>
 		<eNB_instance>1</eNB_instance>
 		<eNB_serverId>1</eNB_serverId>
 		<backgroundBuild>True</backgroundBuild>
@@ -59,7 +59,7 @@
 	<testCase id="000102">
 		<class>WaitEndBuild_eNB</class>
 		<desc>Wait for end of Build Master RRU</desc>
-		<Build_eNB_args>-w USRP -c --eNB --ninja</Build_eNB_args>
+		<Build_eNB_args>-w USRP -c --RU --ninja</Build_eNB_args>
 		<eNB_instance>1</eNB_instance>
 		<eNB_serverId>1</eNB_serverId>
 	</testCase>
@@ -67,7 +67,7 @@
 	<testCase id="010103">
 		<class>Build_eNB</class>
 		<desc>Build Slave RRU</desc>
-		<Build_eNB_args>-w USRP -c --eNB --ninja</Build_eNB_args>
+		<Build_eNB_args>-w USRP -c --RU --ninja</Build_eNB_args>
 		<eNB_instance>2</eNB_instance>
 		<eNB_serverId>2</eNB_serverId>
 		<backgroundBuild>True</backgroundBuild>
@@ -76,7 +76,7 @@
 	<testCase id="000103">
 		<class>WaitEndBuild_eNB</class>
 		<desc>Wait for end of Build Slave RRU</desc>
-		<Build_eNB_args>-w USRP -c --eNB --ninja</Build_eNB_args>
+		<Build_eNB_args>-w USRP -c --RU --ninja</Build_eNB_args>
 		<eNB_instance>2</eNB_instance>
 		<eNB_serverId>2</eNB_serverId>
 	</testCase>
diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 8bf57f460e6be7643f23603bc6e413f2dd1e387e..fe03a9c68d76b084b63adf55665566e1f89555c9 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -62,6 +62,8 @@ elseif (${RF_BOARD} STREQUAL "OAI_IRIS")
 
 endif (${RF_BOARD} STREQUAL "OAI_USRP")
 
+message("RU=${RU}")
+
 pkg_search_module(OPENPGM openpgm-5.1 openpgm-5.2)
 if(NOT ${OPENPGM_FOUND})
   message("PACKAGE openpgm-5.1 is required by binaries such as oaisim: will fail later if this target is built")
@@ -437,6 +439,9 @@ set(asn1_generated_dir ${OPENAIR_BIN_DIR})
 set(protoc_call "${OPENAIR_CMAKE}/tools/generate_protobuf")
 set(protobuf_generated_dir ${OPENAIR_BIN_DIR})
 
+if (${RU} STREQUAL 1)
+add_definitions(-DNO_RRC)
+endif (${RU} STREQUAL 1)
 
 # RRC
 ######
@@ -448,8 +453,11 @@ add_definitions(-DLTE_RRC_VERSION=${LTE_RRC_VERSION})
 set (RRC_FULL_DIR ${asn1_generated_dir}/RRC_${RRC_ASN1_VERSION})
 
 # Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make
-execute_process(COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${RRC_FULL_DIR}" "${RRC_GRAMMAR}" "LTE_"
-                RESULT_VARIABLE ret)
+if (${RU} STREQUAL 0)
+  execute_process(COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${RRC_FULL_DIR}" "${RRC_GRAMMAR}" "LTE_"
+                  RESULT_VARIABLE ret)
+endif (${RU} STREQUAL 0)
+
 if (NOT ${ret} STREQUAL 0)
   message(FATAL_ERROR "${ret}: error")
 endif (NOT ${ret} STREQUAL 0)
@@ -477,13 +485,16 @@ add_definitions(-DNR_RRC_VERSION=${NR_RRC_VERSION})
 set (NR_RRC_FULL_DIR ${asn1_generated_dir}/RRC_${NR_RRC_ASN1_VERSION})
 
 # Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make
-execute_process(COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${NR_RRC_FULL_DIR}" "${NR_RRC_GRAMMAR}" "NR_" "-findirect-choice"
+if (${RU} STREQUAL 0)
+  execute_process(COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${NR_RRC_FULL_DIR}" "${NR_RRC_GRAMMAR}" "NR_" "-findirect-choice"
                 RESULT_VARIABLE ret)
 if (NOT ${ret} STREQUAL 0)
   message(FATAL_ERROR "${ret}: error")
 endif ()
 file(GLOB nr_rrc_source ${NR_RRC_FULL_DIR}/*.c)
 file(GLOB nr_rrc_h ${NR_RRC_FULL_DIR}/*.h)
+endif (${RU} STREQUAL 0)
+
 add_custom_target (
   nr_rrc_flag ALL
   ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${NR_RRC_FULL_DIR}" "${NR_RRC_GRAMMAR}" "NR_" "-findirect-choice"
@@ -511,31 +522,33 @@ set(S1AP_ASN_DIR ${S1AP_DIR}/MESSAGES/ASN1/${S1AP_RELEASE})
 set(S1AP_C_DIR ${asn1_generated_dir}/S1AP_${S1AP_RELEASE})
 
 # Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make
-execute_process(COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${S1AP_C_DIR}" "${S1AP_ASN_DIR}/${S1AP_ASN_FILES}" "S1AP_" -fno-include-deps
-                RESULT_VARIABLE ret)
-if (NOT ${ret} STREQUAL 0)
-  message(FATAL_ERROR "${ret}: error")
-endif (NOT ${ret} STREQUAL 0)
-file(GLOB S1AP_source ${S1AP_C_DIR}/*.c)
-
-add_custom_target (
-  s1ap_flag ALL
-  ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${S1AP_C_DIR}" "${S1AP_ASN_DIR}/${S1AP_ASN_FILES}" "S1AP_" -fno-include-deps
-  DEPENDS  "${S1AP_ASN_DIR}/${S1AP_ASN_FILES}" 
-)
-
-add_library(S1AP_LIB
-  ${S1AP_source}
-  ${S1AP_DIR}/s1ap_common.c
-  )
-add_dependencies(S1AP_LIB rrc_flag s1ap_flag)
+if (${RU} STREQUAL 0)
+  execute_process(COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${S1AP_C_DIR}" "${S1AP_ASN_DIR}/${S1AP_ASN_FILES}" "S1AP_" -fno-include-deps
+                  RESULT_VARIABLE ret)
+  if (NOT ${ret} STREQUAL 0)
+    message(FATAL_ERROR "${ret}: error")
+  endif (NOT ${ret} STREQUAL 0)
+  file(GLOB S1AP_source ${S1AP_C_DIR}/*.c)
+endif (${RU} STREQUAL 0)
+
+  add_custom_target (
+    s1ap_flag ALL
+    ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${S1AP_C_DIR}" "${S1AP_ASN_DIR}/${S1AP_ASN_FILES}" "S1AP_" -fno-include-deps
+    DEPENDS  "${S1AP_ASN_DIR}/${S1AP_ASN_FILES}" 
+  )
+
+  add_library(S1AP_LIB
+    ${S1AP_source}
+    ${S1AP_DIR}/s1ap_common.c
+    )
+  add_dependencies(S1AP_LIB rrc_flag s1ap_flag)
 
-include_directories ("${S1AP_C_DIR}")
-include_directories ("${S1AP_DIR}")
+  include_directories ("${S1AP_C_DIR}")
+  include_directories ("${S1AP_DIR}")
 
 add_library(S1AP_ENB
-  ${S1AP_DIR}/s1ap_eNB.c
-  ${S1AP_DIR}/s1ap_eNB_context_management_procedures.c
+    ${S1AP_DIR}/s1ap_eNB.c
+    ${S1AP_DIR}/s1ap_eNB_context_management_procedures.c
   ${S1AP_DIR}/s1ap_eNB_decoder.c
   ${S1AP_DIR}/s1ap_eNB_encoder.c
   ${S1AP_DIR}/s1ap_eNB_handlers.c
@@ -631,11 +644,13 @@ set(M2AP_ASN_DIR ${M2AP_DIR}/MESSAGES/ASN1/${M2AP_RELEASE})
 set(M2AP_C_DIR ${asn1_generated_dir}/M2AP_${M2AP_RELEASE})
 
 # Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make
-execute_process(COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${M2AP_C_DIR}" "${M2AP_ASN_DIR}/${M2AP_ASN_FILES}"  "M2AP_" -fno-include-deps -DEMIT_ASN_DEBUG=1
+if (${RU} STREQUAL 0)
+  execute_process(COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${M2AP_C_DIR}" "${M2AP_ASN_DIR}/${M2AP_ASN_FILES}"  "M2AP_" -fno-include-deps -DEMIT_ASN_DEBUG=1
                 RESULT_VARIABLE ret)
-if (NOT ${ret} STREQUAL 0)
-  message(FATAL_ERROR "${ret}: error")
-endif (NOT ${ret} STREQUAL 0)
+  if (NOT ${ret} STREQUAL 0)
+    message(FATAL_ERROR "${ret}: error")
+  endif (NOT ${ret} STREQUAL 0)
+endif (${RU} STREQUAL 0)
 
 file(GLOB M2AP_source ${M2AP_C_DIR}/*.c)
 
@@ -701,11 +716,13 @@ set(M3AP_ASN_DIR ${M3AP_DIR}/MESSAGES/ASN1/${M3AP_RELEASE})
 set(M3AP_C_DIR ${asn1_generated_dir}/M3AP_${M3AP_RELEASE})
 
 # Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make
-execute_process(COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${M3AP_C_DIR}" "${M3AP_ASN_DIR}/${M3AP_ASN_FILES}"  "M3AP_" -fno-include-deps
-                RESULT_VARIABLE ret)
-if (NOT ${ret} STREQUAL 0)
-  message(FATAL_ERROR "${ret}: error")
-endif (NOT ${ret} STREQUAL 0)
+if (${RU} STREQUAL 0)
+  execute_process(COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${M3AP_C_DIR}" "${M3AP_ASN_DIR}/${M3AP_ASN_FILES}"  "M3AP_" -fno-include-deps
+                  RESULT_VARIABLE ret)
+  if (NOT ${ret} STREQUAL 0)
+    message(FATAL_ERROR "${ret}: error")
+  endif (NOT ${ret} STREQUAL 0)
+endif (${RU} STREQUAL 0)
 
 file(GLOB M3AP_source ${M3AP_C_DIR}/*.c)
 
@@ -755,11 +772,13 @@ add_definitions(-DX2AP_VERSION=${X2AP_VERSION})
 set(X2AP_ASN_DIR ${X2AP_DIR}/MESSAGES/ASN1/${X2AP_RELEASE})
 set(X2AP_C_DIR ${asn1_generated_dir}/X2AP_${X2AP_RELEASE})
 # Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make
-execute_process(COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${X2AP_C_DIR}" "${X2AP_ASN_DIR}/${X2AP_ASN_FILES}"  "X2AP_" -fno-include-deps
-                RESULT_VARIABLE ret)
-if (NOT ${ret} STREQUAL 0)
-  message(FATAL_ERROR "${ret}: error")
-endif (NOT ${ret} STREQUAL 0)
+if (${RU} STREQUAL 0)
+  execute_process(COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${X2AP_C_DIR}" "${X2AP_ASN_DIR}/${X2AP_ASN_FILES}"  "X2AP_" -fno-include-deps
+                  RESULT_VARIABLE ret)
+  if (NOT ${ret} STREQUAL 0)
+    message(FATAL_ERROR "${ret}: error")
+  endif (NOT ${ret} STREQUAL 0)
+endif (${RU} STREQUAL 0)
 
 file(GLOB X2AP_source ${X2AP_C_DIR}/*.c)
 
@@ -794,12 +813,12 @@ add_dependencies(X2AP_ENB X2AP_LIB rrc_flag x2_flag)
 
 # F1AP
 ##############
-add_list1_option(F1AP_RELEASE R15 "F1AP ASN.1 grammar version" R15)
+add_list1_option(F1AP_RELEASE R16 "F1AP ASN.1 grammar version" R16)
 set(F1AP_DIR ${OPENAIR2_DIR}/F1AP)
-if (${F1AP_RELEASE} STREQUAL "R15")
-  make_version(F1AP_VERSION 15 2 1)
-  set (ASN1RELDIR R15.2.1)
-endif(${F1AP_RELEASE} STREQUAL "R15")
+if (${F1AP_RELEASE} STREQUAL "R16")
+  make_version(F1AP_VERSION 16 3 1)
+  set (ASN1RELDIR R16.3.1)
+endif(${F1AP_RELEASE} STREQUAL "R16")
 add_definitions(-DF1AP_VERSION=${F1AP_VERSION})
 set(F1AP_ASN_DIR ${F1AP_DIR}/MESSAGES/ASN1/${ASN1RELDIR})
 set(F1AP_ASN_FILES
@@ -811,17 +830,18 @@ set(F1AP_ASN_FILES
   ${F1AP_ASN_DIR}/F1AP-Containers.asn
   )
 
-set(F1AP_ASN_GENERATED_C_DIR ${asn1_generated_dir}/F1AP_${ASN1RELDIR})
-message("calling ASN1C_PREFIX=F1AP_ asn1c -gen-PER -no-gen-OER -fcompound-names -no-gen-example -findirect-choice -fno-include-deps -D ${F1AP_ASN_GENERATED_C_DIR} ${F1AP_ASN_FILES}")
-execute_process(COMMAND mkdir -p ${F1AP_ASN_GENERATED_C_DIR}
-   COMMAND env "ASN1C_PREFIX=F1AP_" asn1c -gen-PER -no-gen-OER -fcompound-names -no-gen-example -findirect-choice -fno-include-deps -D ${F1AP_ASN_GENERATED_C_DIR} ${F1AP_ASN_FILES}
-                RESULT_VARIABLE ret
-                OUTPUT_QUIET
-                ERROR_QUIET)
+if (${RU} STREQUAL 0)
+  set(F1AP_ASN_GENERATED_C_DIR ${asn1_generated_dir}/F1AP_${ASN1RELDIR})
+  message("calling ASN1C_PREFIX=F1AP_ asn1c -gen-PER -no-gen-OER -fcompound-names -no-gen-example -findirect-choice -fno-include-deps -D ${F1AP_ASN_GENERATED_C_DIR} ${F1AP_ASN_FILES}")
+  execute_process(COMMAND mkdir -p ${F1AP_ASN_GENERATED_C_DIR}
+     COMMAND env "ASN1C_PREFIX=F1AP_" asn1c -gen-PER -no-gen-OER -fcompound-names -no-gen-example -findirect-choice -fno-include-deps -D ${F1AP_ASN_GENERATED_C_DIR} ${F1AP_ASN_FILES}
+                  RESULT_VARIABLE ret
+                  OUTPUT_QUIET
+                  ERROR_QUIET)
 
-if (NOT ${ret} STREQUAL 0)
-  message(FATAL_ERROR "asn1c: error")
-endif (NOT ${ret} STREQUAL 0)
+  if (NOT ${ret} STREQUAL 0)
+    message(FATAL_ERROR "asn1c: error")
+  endif (NOT ${ret} STREQUAL 0)
 
 file(GLOB F1AP_ASN_GENERATED_C_FILES ${F1AP_ASN_GENERATED_C_DIR}/*.c)
 add_library(F1AP_LIB
@@ -836,6 +856,8 @@ add_library(F1AP
   ${F1AP_C_FILES}
 )
 
+endif (${RU} STREQUAL 0)
+
 
 # Hardware dependant options
 ###################################
@@ -1642,7 +1664,6 @@ set(PHY_SRC_COMMON
   ${OPENAIR1_DIR}/PHY/CODING/viterbi_lte.c
   ${OPENAIR1_DIR}/PHY/INIT/init_top.c
   ${OPENAIR1_DIR}/PHY/INIT/lte_parms.c
-  ${OPENAIR1_DIR}/PHY/INIT/lte_param_init.c
   ${OPENAIR1_DIR}/PHY/TOOLS/cadd_vv.c
   ${OPENAIR1_DIR}/PHY/TOOLS/dfts_load.c
   ${OPENAIR1_DIR}/PHY/TOOLS/log2_approx.c
@@ -2908,6 +2929,8 @@ add_executable(lte-softmodem
   ${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
   ${OPENAIR_DIR}/common/utils/utils.c
   ${OPENAIR_DIR}/common/utils/system.c
+  ${OPENAIR_DIR}/common/utils/lte/ue_power.c
+  ${OPENAIR_DIR}/common/utils/lte/prach_utils.c
   ${XFORMSINTERFACE_SOURCE}
   ${T_SOURCE}
   ${CONFIG_SOURCES}
@@ -2949,6 +2972,8 @@ add_executable(ocp-enb
   ${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
   ${OPENAIR_DIR}/common/utils/utils.c
   ${OPENAIR_DIR}/common/utils/system.c
+  ${OPENAIR_DIR}/common/utils/lte/ue_power.c
+  ${OPENAIR_DIR}/common/utils/lte/prach_utils.c
   ${XFORMSINTERFACE_SOURCE}
   ${T_SOURCE}
   ${CONFIG_SOURCES}
@@ -2993,6 +3018,33 @@ target_link_libraries(du_test
   ${PROTO_AGENT_LIB} pthread UTIL ${T_LIB} dl ${ITTI_LIB}
 )
 
+add_executable(oairu
+  ${OPENAIR_TARGETS}/RT/USER/lte-ru.c
+  ${OPENAIR_TARGETS}/RT/USER/ru_control.c
+  ${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
+  ${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
+  ${OPENAIR_TARGETS}/ARCH/COMMON/record_player.c
+  ${OPENAIR_DIR}/executables/softmodem-common.c
+  ${OPENAIR_DIR}/openair1/SCHED/phy_procedures_lte_common.c
+  ${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
+  ${OPENAIR_DIR}/executables/main_ru.c
+  ${T_SOURCE}
+  ${OPENAIR_DIR}/common/utils/LOG/log.c
+  ${CONFIG_SOURCES}
+  ${OPENAIR_DIR}/common/utils/utils.c
+  ${OPENAIR_DIR}/common/utils/system.c
+  ${OPENAIR_DIR}/common/utils/lte/prach_utils.c
+  ${SHLIB_LOADER_SOURCES}
+)
+target_link_libraries (oairu
+  -Wl,--start-group
+  SCHED_RU_LIB 
+  PHY_COMMON PHY_RU 
+  -Wl,--end-group z dl)
+  
+target_link_libraries (oairu pthread m ${CONFIG_LIB} rt ${CMAKE_DL_LIBS} ${T_LIB})
+
+
 # lte-uesoftmodem is  UE implementation
 #######################################
 
@@ -3001,9 +3053,6 @@ add_executable(lte-uesoftmodem
   ${OPENAIR_TARGETS}/RT/USER/lte-ue.c
   ${OPENAIR_TARGETS}/RT/USER/lte-uesoftmodem.c
   ${OPENAIR_DIR}/executables/softmodem-common.c
-  ${OPENAIR_TARGETS}/RT/USER/lte-ru.c
-  ${OPENAIR_TARGETS}/RT/USER/ru_control.c
-  ${OPENAIR_TARGETS}/RT/USER/rfsim.c
   ${OPENAIR_TARGETS}/COMMON/create_tasks_ue.c
   ${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
   ${OPENAIR_TARGETS}/ARCH/COMMON/record_player.c
@@ -3015,6 +3064,8 @@ add_executable(lte-uesoftmodem
   ${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
   ${OPENAIR_DIR}/common/utils/utils.c
   ${OPENAIR_DIR}/common/utils/system.c
+  ${OPENAIR_DIR}/common/utils/lte/ue_power.c
+  ${OPENAIR_DIR}/common/utils/lte/prach_utils.c
   ${XFORMSINTERFACE_SOURCE}
   ${T_SOURCE}
   ${CONFIG_SOURCES}
@@ -3061,6 +3112,8 @@ add_executable(nr-softmodem
   ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
   ${OPENAIR_DIR}/common/utils/utils.c
   ${OPENAIR_DIR}/common/utils/system.c
+  ${OPENAIR_DIR}/common/utils/lte/ue_power.c
+  ${OPENAIR_DIR}/common/utils/lte/prach_utils.c
   ${OPENAIR_DIR}/common/utils/nr/nr_common.c
   ${XFORMSINTERFACE_SOURCE}
   ${T_SOURCE}
@@ -3410,6 +3463,9 @@ foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim pr
     ${OPENAIR_DIR}/common/utils/backtrace.c
     ${OPENAIR_DIR}/common/utils/system.c
     ${OPENAIR_DIR}/common/utils/utils.c
+    ${OPENAIR_DIR}/common/utils/lte/ue_power.c
+    ${OPENAIR_DIR}/common/utils/lte/prach_utils.c
+    ${OPENAIR1_DIR}/PHY/INIT/lte_param_init.c
     ${XFORMS_SOURCE}
     ${T_SOURCE}
     ${CONFIG_SOURCES}
diff --git a/cmake_targets/at_commands/CMakeLists.txt b/cmake_targets/at_commands/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/README.txt b/cmake_targets/autotests/README.txt
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/core.py b/cmake_targets/autotests/core.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/log.py b/cmake_targets/autotests/log.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/openair.py b/cmake_targets/autotests/openair.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/templates/index.html b/cmake_targets/autotests/templates/index.html
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/templates/testcase_report.html b/cmake_targets/autotests/templates/testcase_report.html
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml
old mode 100644
new mode 100755
index b0511f63ccd2bacdecd9dfffa19dcb19bb42f85a..29257e482f3fb745ff2fc2a3907db196191c3de8
--- a/cmake_targets/autotests/test_case_list.xml
+++ b/cmake_targets/autotests/test_case_list.xml
@@ -1099,8 +1099,9 @@
                                  (Test14: 3 PTRS, 8 Interpolated Symbols),
                                  (Test15: 6 PTRS, 5 Interpolated Symbols),
                                  (Test16: 11 PTRS, 0 Interpolated Symbols),
-                                 (Test17: 2 DMRS Symbols),
-                                 (Test18: 3 DMRS Symbols)</desc>
+                                 (Test17: Mapping type A, 2 DMRS Symbols),
+                                 (Test18: Mapping type A, 3 DMRS Symbols),
+                                 (Test19: Mapping type B, 4 DMRS Symbols)</desc>
       <pre_compile_prog></pre_compile_prog>
       <compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
       <compile_prog_args> --phy_simulators  -c </compile_prog_args>
@@ -1124,8 +1125,9 @@
                   -n100 -s5 -T 2 1 2
                   -n100 -s5 -T 2 0 4
                   -n100 -s2 -U 2 0 1
-                  -n100 -s2 -U 2 0 2</main_exec_args>
-      <tags>nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11 nr_dlsim.test12 nr_dlsim.test13 nr_dlsim.test14 nr_dlsim.test15 nr_dlsim.test16 nr_dlsim.test17 nr_dlsim.test18</tags>
+                  -n100 -s2 -U 2 0 2
+                  -n100 -s2 -U 2 1 3</main_exec_args>
+      <tags>nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11 nr_dlsim.test12 nr_dlsim.test13 nr_dlsim.test14 nr_dlsim.test15 nr_dlsim.test16 nr_dlsim.test17 nr_dlsim.test18 nr_dlsim.test19</tags>
       <search_expr_true>PDSCH test OK</search_expr_true>
       <search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
       <nruns>3</nruns>
@@ -1287,15 +1289,16 @@
                                  (Test3: MCS 28 50 PRBs),
                                  (Test4: MCS 9 217 PRBs),
                                  (Test5: MCS 9 273 PRBs),
-                                 (Test6: DMRS Type A, 3 DMRS, 4 PTRS, 5 Interpolated Symbols),
-                                 (Test7: DMRS Type B, 3 DMRS, 2 PTRS, 7 Interpolated Symbols),
-                                 (Test8: DMRS Type B, 3 DMRS, 2 PTRS, 3 Interpolated Symbols),
-                                 (Test9: SC-FDMA, 50 PRBs),
-                                 (Test10: SC-FDMA, 75 PRBs),
-                                 (Test11: SC-FDMA, 216 PRBs),
-                                 (Test12: SC-FDMA, 273 PRBs),
-                                 (Test13: SC-FDMA, 3 DMRS),
-                                 (Test14: MCS 16 50 PRBs 2 RX_Antenna)</desc>
+                                 (Test6: DMRS Type A, 2 DMRS Symbols),
+                                 (Test7: DMRS Type A, 3 DMRS, 4 PTRS, 5 Interpolated Symbols),
+                                 (Test8: DMRS Type B, 3 DMRS, 2 PTRS, 7 Interpolated Symbols),
+                                 (Test9: DMRS Type B, 3 DMRS, 2 PTRS, 3 Interpolated Symbols),
+                                 (Test10: SC-FDMA, 50 PRBs),
+                                 (Test11: SC-FDMA, 75 PRBs),
+                                 (Test12: SC-FDMA, 216 PRBs),
+                                 (Test13: SC-FDMA, 273 PRBs),
+                                 (Test14: SC-FDMA, 3 DMRS),
+                                 (Test15: MCS 16 50 PRBs 2 RX_Antenna)</desc>
       <pre_compile_prog></pre_compile_prog>
       <compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
       <compile_prog_args> --phy_simulators  -c </compile_prog_args>
@@ -1307,6 +1310,7 @@
                       -n100 -m28 -s20
                       -n100 -m9 -R217 -r217 -s5
                       -n100 -m9 -R273 -r273 -s5
+                      -n100 -s5 -U 2 0 1
                       -n100 -s5 -T 2 1 2 -U 2 0 2
                       -n100 -s5 -T 2 2 2 -U 2 1 2
                       -n100 -s5 -a4 -b8 -T 2 1 2 -U 2 1 3
@@ -1317,7 +1321,7 @@
                       -n100 -s2 -Z -U 2 0 2
                       -n100 -m16 -s10 -z2</main_exec_args>
 
-      <tags>nr_ulsim.test1 nr_ulsim.test2 nr_ulsim.test3 nr_ulsim.test4 nr_ulsim.test5 nr_ulsim.test6 nr_ulsim.test7 nr_ulsim.test8 nr_ulsim.test9 nr_ulsim.test10 nr_ulsim.test11 nr_ulsim.test12 nr_ulsim.test13 nr_ulsim.test14</tags>
+      <tags>nr_ulsim.test1 nr_ulsim.test2 nr_ulsim.test3 nr_ulsim.test4 nr_ulsim.test5 nr_ulsim.test6 nr_ulsim.test7 nr_ulsim.test8 nr_ulsim.test9 nr_ulsim.test10 nr_ulsim.test11 nr_ulsim.test12 nr_ulsim.test13 nr_ulsim.test14 nr_ulsim.test15</tags>
       <search_expr_true>PUSCH test OK</search_expr_true>
       <search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
       <nruns>3</nruns>
diff --git a/cmake_targets/autotests/testsuite_ue_noS1.xml b/cmake_targets/autotests/testsuite_ue_noS1.xml
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/testsuite_ue_noS1_TCL.xml b/cmake_targets/autotests/testsuite_ue_noS1_TCL.xml
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/tools/lib_autotest.py b/cmake_targets/autotests/tools/lib_autotest.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/tools/lib_autotest_analyser.py b/cmake_targets/autotests/tools/lib_autotest_analyser.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/tools/wdial.bandrich.conf b/cmake_targets/autotests/tools/wdial.bandrich.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/3276.txt b/cmake_targets/autotests/v2/actions/3276.txt
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/alu_epc.bash b/cmake_targets/autotests/v2/actions/alu_epc.bash
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/alu_epc_stop.bash b/cmake_targets/autotests/v2/actions/alu_epc_stop.bash
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/alu_hss.bash b/cmake_targets/autotests/v2/actions/alu_hss.bash
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/bandrich.txt b/cmake_targets/autotests/v2/actions/bandrich.txt
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/client_tcp.bash b/cmake_targets/autotests/v2/actions/client_tcp.bash
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/client_udp.bash b/cmake_targets/autotests/v2/actions/client_udp.bash
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/clone_repository.bash b/cmake_targets/autotests/v2/actions/clone_repository.bash
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/compilation.bash b/cmake_targets/autotests/v2/actions/compilation.bash
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/execution.bash b/cmake_targets/autotests/v2/actions/execution.bash
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/execution_compile.bash b/cmake_targets/autotests/v2/actions/execution_compile.bash
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/modem.py b/cmake_targets/autotests/v2/actions/modem.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/run_enb.bash b/cmake_targets/autotests/v2/actions/run_enb.bash
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/server_tcp.bash b/cmake_targets/autotests/v2/actions/server_tcp.bash
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/server_udp.bash b/cmake_targets/autotests/v2/actions/server_udp.bash
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/start_3276.bash b/cmake_targets/autotests/v2/actions/start_3276.bash
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/start_3276.py b/cmake_targets/autotests/v2/actions/start_3276.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/start_bandrich.bash b/cmake_targets/autotests/v2/actions/start_bandrich.bash
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/start_bandrich.py b/cmake_targets/autotests/v2/actions/start_bandrich.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/stop_3276.py b/cmake_targets/autotests/v2/actions/stop_3276.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/stop_bandrich.py b/cmake_targets/autotests/v2/actions/stop_bandrich.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/wvdial.3276.conf b/cmake_targets/autotests/v2/actions/wvdial.3276.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/actions/wvdial.bandrich.conf b/cmake_targets/autotests/v2/actions/wvdial.bandrich.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/alu_test.py b/cmake_targets/autotests/v2/alu_test.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/connection.py b/cmake_targets/autotests/v2/connection.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/machine_list.py b/cmake_targets/autotests/v2/machine_list.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/main.py b/cmake_targets/autotests/v2/main.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/task.py b/cmake_targets/autotests/v2/task.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/autotests/v2/utils.py b/cmake_targets/autotests/v2/utils.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index 8748e8d80724297d87f3776c51c15423cf4a22f2..07aa150921accef1efe6f0a98de12d95d79adf8f 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -104,6 +104,8 @@ Options
   Makes the NR softmodem
 --nrUE
   Makes the NR UE softmodem
+--RU
+  Makes the OAI RRU (without full stack) 
 --UE
    Makes the UE specific parts (ue_ip, usim, nvram) from the given configuration file
 --UE-conf-nvram [configuration file]
@@ -241,25 +243,34 @@ function main() {
             shift;;
        --eNB)
             eNB=1
+            RU=0
             echo_info "Will compile eNB"
             shift;;
        --eNBocp)
             eNBocp=1
+            RU=0
             echo_info "Will compile OCP eNB"
             shift;;
       --gNB)
             gNB=1
+            RU=0
             NR="True"
             echo_info "Will compile gNB"
             shift;;
+       --RU)
+	    RU=1
+            echo_info "Will compile RRU"
+	    shift;;
        -a | --agent)
             echo_info "FlexRAN support is always compiled into the eNB"
             shift;;
        --UE)
+            RU=0
             UE=1
             echo_info "Will compile UE"
             shift;;
        --nrUE)
+            RU=0
             nrUE=1
             NR="True"
             echo_info "Will compile NR UE"
@@ -296,6 +307,7 @@ function main() {
             shift 2;;
        -P | --phy_simulators)
             SIMUS_PHY=1
+	    RU=0
             echo_info "Will compile dlsim, ulsim, ..."
             shift;;
        -S | --core_simulators)
@@ -464,7 +476,7 @@ function main() {
   ########################################################
   # to be discussed
   
-  if [ "$eNB" = "1" -o "$eNBocp" = "1" -o "$gNB" = "1" ] ; then
+  if [ "$eNB" = "1" -o "$eNBocp" = "1" -o "$gNB" = "1" -o "$RU" = "1" ] ; then
       if [ "$HW" = "None" -a  "$TP" = "None" ] ; then
 	      echo_info "No local radio head and no transport protocol selected"
       fi
@@ -591,7 +603,7 @@ function main() {
   config_libconfig_shlib=params_libconfig
   
   # first generate the CMakefile in the right directory
-  if [ "$eNB" = "1" -o "$eNBocp" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" -o "$HW" = "EXMIMO" -o "$ittiSIM" = "1" ] ; then
+  if [ "$eNB" = "1" -o "$eNBocp" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$RU" = "1" -o "$nrUE" = "1" -o "$HW" = "EXMIMO" -o "$ittiSIM" = "1" ] ; then
 
     # softmodem compilation
 
@@ -615,6 +627,7 @@ function main() {
     echo "set ( UE_TIMING_TRACE $UE_TIMING_TRACE )"                       >> $cmake_file
     echo "set ( USRP_REC_PLAY $USRP_REC_PLAY )"                           >> $cmake_file
     echo "set ( SKIP_SHARED_LIB_FLAG $SKIP_SHARED_LIB_FLAG )"             >> $cmake_file
+    echo "set ( RU $RU )"                                                 >> $cmake_file
     echo "set ( ITTI_SIM $ITTI_SIM )"                                     >> $cmake_file
     echo "set ( SANITIZE_ADDRESS $SANITIZE_ADDRESS )"                     >> $cmake_file
     echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)'         >> $cmake_file
@@ -631,6 +644,9 @@ function main() {
     if [ "$gNB" = "1" ] ; then
       execlist="$execlist nr-softmodem"
     fi
+    if [ "$RU" = "1" ] ; then
+      execlist="$execlist oairu"
+    fi
     if [ "$UE" = 1 ] ; then
       execlist="$execlist lte-uesoftmodem"
     fi
@@ -659,28 +675,29 @@ function main() {
         $build_dir $config_libconfig_shlib \
         lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
 
-      compilations \
-        $build_dir coding \
-        libcoding.so $dbin/libcoding.so
-
+      if [ "$RU" = "0" ] ; then
 
-      #check if we run inside a container or not
-      #IS_CONTAINER variable is defined in build_helper file
-      #compile  nasmesh and rb_tool only if NOT running in a container
-      if [ $IS_CONTAINER -eq 0 ]
-      then
         compilations \
-          $build_dir nasmesh \
-          CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
+          $build_dir coding \
+          libcoding.so $dbin/libcoding.so
+
+        #check if we run inside a container or not
+        #IS_CONTAINER variable is defined in build_helper file
+        #compile  nasmesh and rb_tool only if NOT running in a container
+        if [ $IS_CONTAINER -eq 0 ]
+        then
+          compilations \
+            $build_dir nasmesh \
+            CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
 
-        compilations \
-          $build_dir rb_tool \
-          rb_tool $dbin/rb_tool
+          compilations \
+            $build_dir rb_tool \
+            rb_tool $dbin/rb_tool
 
-        cp $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 $dbin
-      fi #IS_CONTAINER
+          cp $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 $dbin
+        fi #IS_CONTAINER
+      fi
     fi
-
   fi
 
   if [ "$UE" = 1 ] ; then
@@ -862,7 +879,7 @@ function main() {
   ####################################################
   # Build RF device and transport protocol libraries #
   ####################################################
-  if [ "$eNB" = "1" -o "$eNBocp" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" -o "$HWLAT" = "1" ] ; then
+  if [ "$eNB" = "1" -o "$eNBocp" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$RU" = "1"  -o "$nrUE" = "1" -o "$HWLAT" = "1" ] ; then
 
       # build RF device libraries
       if [ "$HW" != "None" ] ; then
diff --git a/cmake_targets/doxygen/CMakeLists.txt b/cmake_targets/doxygen/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/cmake_targets/epc_test/CMakeLists.template b/cmake_targets/epc_test/CMakeLists.template
old mode 100644
new mode 100755
diff --git a/cmake_targets/nas_sim_tools/CMakeLists.txt b/cmake_targets/nas_sim_tools/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/cmake_targets/phy_simulators/CMakeLists.txt b/cmake_targets/phy_simulators/CMakeLists.txt
old mode 100644
new mode 100755
index 447e90bcab1190b6aa03720898e8d8cf4175e1f2..f8c659959f36a6558a2cf76f3c8a6ac1676a9be0
--- a/cmake_targets/phy_simulators/CMakeLists.txt
+++ b/cmake_targets/phy_simulators/CMakeLists.txt
@@ -17,4 +17,5 @@ set ( UE_TIMING_TRACE False )
 set ( USRP_REC_PLAY False )
 set ( SKIP_SHARED_LIB_FLAG False )
 set ( PHYSIM True)
+set ( RU 0)
 include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)
diff --git a/cmake_targets/s1c_mme_test/CMakeLists.template b/cmake_targets/s1c_mme_test/CMakeLists.template
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/Kbuild.cmake b/cmake_targets/tools/Kbuild.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/CMakeParseArguments.cmake b/cmake_targets/tools/MODULES/CMakeParseArguments.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/CMakeUserFindMySQL.cmake b/cmake_targets/tools/MODULES/CMakeUserFindMySQL.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/CMakeUserUseBison.cmake b/cmake_targets/tools/MODULES/CMakeUserUseBison.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/CMakeUserUseFlex.cmake b/cmake_targets/tools/MODULES/CMakeUserUseFlex.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/FindFreeDiameter.cmake b/cmake_targets/tools/MODULES/FindFreeDiameter.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/FindGCCXML.cmake b/cmake_targets/tools/MODULES/FindGCCXML.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/FindGcrypt.cmake b/cmake_targets/tools/MODULES/FindGcrypt.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/FindGnuTLS.cmake b/cmake_targets/tools/MODULES/FindGnuTLS.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/FindKbuild.cmake b/cmake_targets/tools/MODULES/FindKbuild.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/FindLibXml2.cmake b/cmake_targets/tools/MODULES/FindLibXml2.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/FindMySQL.cmake b/cmake_targets/tools/MODULES/FindMySQL.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/FindNettle.cmake b/cmake_targets/tools/MODULES/FindNettle.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/FindPostgreSQL.cmake b/cmake_targets/tools/MODULES/FindPostgreSQL.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/FindSCTP.cmake b/cmake_targets/tools/MODULES/FindSCTP.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/Kbuild.cmake b/cmake_targets/tools/MODULES/Kbuild.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/cmake_useful.cmake b/cmake_targets/tools/MODULES/cmake_useful.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/kbuild_system.cmake b/cmake_targets/tools/MODULES/kbuild_system.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/kmodule.cmake b/cmake_targets/tools/MODULES/kmodule.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/MODULES/path_prefixes.cmake b/cmake_targets/tools/MODULES/path_prefixes.cmake
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/asn1tostruct.py b/cmake_targets/tools/asn1tostruct.py
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper
index 9b8363fc2b96f6e966418847029ba7926572ae4c..fb3f2e7b9a73a78819a0814479ebd44983125dc0 100755
--- a/cmake_targets/tools/build_helper
+++ b/cmake_targets/tools/build_helper
@@ -113,6 +113,7 @@ check_supported_distribution() {
         "rhel7.6")     return 0 ;;
         "rhel7.7")     return 0 ;;
         "rhel7.8")     return 0 ;;
+	"rhel7.9")     return 0 ;;
         "rhel8.2")     return 0 ;;
         "rhel8.3")     return 0 ;;
         "rhel8.4")     return 0 ;;
@@ -320,7 +321,7 @@ install_usrp_uhd_driver_from_source(){
     rm -rf /tmp/uhd
     git clone https://github.com/EttusResearch/uhd.git
     cd uhd
-    git checkout tags/v4.0.0.0
+    git checkout tags/v3.14.0.0
     mkdir -p host/build
     cd host/build
     $CMAKE ../
diff --git a/cmake_targets/tools/example_enb_exmimo_mme_hss.txt b/cmake_targets/tools/example_enb_exmimo_mme_hss.txt
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/example_oaisim_enb_ue_mme_virtual.txt b/cmake_targets/tools/example_oaisim_enb_ue_mme_virtual.txt
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/exmimo2_2arxg.lime b/cmake_targets/tools/exmimo2_2arxg.lime
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/exmimo2_2brxg.lime b/cmake_targets/tools/exmimo2_2brxg.lime
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/exmimo_stop_octave.m b/cmake_targets/tools/exmimo_stop_octave.m
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/fix_asn1.data/RRC.rel10/SystemInformation-r8-IEs.h.diff b/cmake_targets/tools/fix_asn1.data/RRC.rel10/SystemInformation-r8-IEs.h.diff
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/fix_asn1.data/RRC.rel14/SystemInformation-NB-r13-IEs.h.diff b/cmake_targets/tools/fix_asn1.data/RRC.rel14/SystemInformation-NB-r13-IEs.h.diff
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/fix_asn1.data/RRC.rel14/SystemInformation-r8-IEs.h.diff b/cmake_targets/tools/fix_asn1.data/RRC.rel14/SystemInformation-r8-IEs.h.diff
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/fix_asn1.data/X2AP.rel11.2/X2ap-CriticalityDiagnostics-IE-List.h.diff b/cmake_targets/tools/fix_asn1.data/X2AP.rel11.2/X2ap-CriticalityDiagnostics-IE-List.h.diff
old mode 100644
new mode 100755
diff --git a/cmake_targets/tools/test_helper b/cmake_targets/tools/test_helper
old mode 100644
new mode 100755
diff --git a/common/ran_context.h b/common/ran_context.h
index 3f57c000a097f0e3c816f06e140e5b510f84c182..5a18225329245bdb40891c109a3e7efcabacd475 100644
--- a/common/ran_context.h
+++ b/common/ran_context.h
@@ -39,7 +39,7 @@
 #include "PHY/types.h"
 #include "PHY/impl_defs_top.h"
 
-#include "ENB_APP/enb_config.h"
+//#include "ENB_APP/enb_config.h"
 #include "flexran_agent_defs.h"
 
 #include "gtpv1u.h"
diff --git a/common/utils/lte/prach_utils.c b/common/utils/lte/prach_utils.c
new file mode 100644
index 0000000000000000000000000000000000000000..9ef29e55a5ef5c467ffae8b616a75761356ac7c1
--- /dev/null
+++ b/common/utils/lte/prach_utils.c
@@ -0,0 +1,425 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file common/utils/lte/prach_utils.c
+ * \brief utils for PRACH  common to both PHY and MAC
+ * \author R. Knopp
+ * \date 2020
+ * \version 0.1
+ * \company Eurecom
+ * \email: knopp@eurecom.fr
+ * \note
+ * \warning
+ */
+
+#include <stdint.h>
+
+
+#include "PHY/LTE_TRANSPORT/transport_common.h"
+
+// This is table 5.7.1-4 from 36.211
+PRACH_TDD_PREAMBLE_MAP tdd_preamble_map[64][7] = {
+  // TDD Configuration Index 0
+  { {1,{{0,1,0,2}}},{1,{{0,1,0,1}}}, {1,{{0,1,0,0}}}, {1,{{0,1,0,2}}}, {1,{{0,1,0,1}}}, {1,{{0,1,0,0}}}, {1,{{0,1,0,2}}}},
+  // TDD Configuration Index 1
+  { {1,{{0,2,0,2}}},{1,{{0,2,0,1}}}, {1,{{0,2,0,0}}}, {1,{{0,2,0,2}}}, {1,{{0,2,0,1}}}, {1,{{0,2,0,0}}}, {1,{{0,2,0,2}}}},
+  // TDD Configuration Index 2
+  { {1,{{0,1,1,2}}},{1,{{0,1,1,1}}}, {1,{{0,1,1,0}}}, {1,{{0,1,0,1}}}, {1,{{0,1,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,1,1,1}}}},
+  // TDD Configuration Index 3
+  { {1,{{0,0,0,2}}},{1,{{0,0,0,1}}}, {1,{{0,0,0,0}}}, {1,{{0,0,0,2}}}, {1,{{0,0,0,1}}}, {1,{{0,0,0,0}}}, {1,{{0,0,0,2}}}},
+  // TDD Configuration Index 4
+  { {1,{{0,0,1,2}}},{1,{{0,0,1,1}}}, {1,{{0,0,1,0}}}, {1,{{0,0,0,1}}}, {1,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,0,1,1}}}},
+  // TDD Configuration Index 5
+  { {1,{{0,0,0,1}}},{1,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,0,0,1}}}},
+  // TDD Configuration Index 6
+  { {2,{{0,0,0,2},{0,0,1,2}}}, {2,{{0,0,0,1},{0,0,1,1}}}, {2,{{0,0,0,0},{0,0,1,0}}}, {2,{{0,0,0,1},{0,0,0,2}}}, {2,{{0,0,0,0},{0,0,0,1}}}, {2,{{0,0,0,0},{1,0,0,0}}}, {2,{{0,0,0,2},{0,0,1,1}}}},
+  // TDD Configuration Index 7
+  { {2,{{0,0,0,1},{0,0,1,1}}}, {2,{{0,0,0,0},{0,0,1,0}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {2,{{0,0,0,0},{0,0,0,2}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {2,{{0,0,0,1},{0,0,1,0}}}},
+  // TDD Configuration Index 8
+  { {2,{{0,0,0,0},{0,0,1,0}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {2,{{0,0,0,0},{0,0,0,1}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {2,{{0,0,0,0},{0,0,1,1}}}},
+  // TDD Configuration Index 9
+  { {3,{{0,0,0,1},{0,0,0,2},{0,0,1,2}}}, {3,{{0,0,0,0},{0,0,0,1},{0,0,1,1}}}, {3,{{0,0,0,0},{0,0,1,0},{1,0,0,0}}}, {3,{{0,0,0,0},{0,0,0,1},{0,0,0,2}}}, {3,{{0,0,0,0},{0,0,0,1},{1,0,0,1}}}, {3,{{0,0,0,0},{1,0,0,0},{2,0,0,0}}}, {3,{{0,0,0,1},{0,0,0,2},{0,0,1,1}}}},
+  // TDD Configuration Index 10
+  { {3,{{0,0,0,0},{0,0,1,0},{0,0,1,1}}}, {3,{{0,0,0,1},{0,0,1,0},{0,0,1,1}}}, {3,{{0,0,0,0},{0,0,1,0},{1,0,1,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {3,{{0,0,0,0},{0,0,0,1},{1,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {3,{{0,0,0,0},{0,0,0,2},{0,0,1,0}}}},
+  // TDD Configuration Index 11
+  { {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {3,{{0,0,0,0},{0,0,0,1},{0,0,1,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {3,{{0,0,0,1},{0,0,1,0},{0,0,1,1}}}},
+  // TDD Configuration Index 12
+  { {4,{{0,0,0,1},{0,0,0,2},{0,0,1,1},{0,0,1,2}}}, {4,{{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1}}},
+    {4,{{0,0,0,0},{0,0,1,0},{1,0,0,0},{1,0,1,0}}},
+    {4,{{0,0,0,0},{0,0,0,1},{0,0,0,2},{1,0,0,2}}},
+    {4,{{0,0,0,0},{0,0,0,1},{1,0,0,0},{1,0,0,1}}},
+    {4,{{0,0,0,0},{1,0,0,0},{2,0,0,0},{3,0,0,0}}},
+    {4,{{0,0,0,1},{0,0,0,2},{0,0,1,0},{0,0,1,1}}}
+  },
+  // TDD Configuration Index 13
+  { {4,{{0,0,0,0},{0,0,0,2},{0,0,1,0},{0,0,1,2}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {4,{{0,0,0,0},{0,0,0,1},{0,0,0,2},{1,0,0,1}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {4,{{0,0,0,0},{0,0,0,1},{0,0,0,2},{0,0,1,1}}}
+  },
+  // TDD Configuration Index 14
+  { {4,{{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {4,{{0,0,0,0},{0,0,0,1},{0,0,0,2},{1,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {4,{{0,0,0,0},{0,0,0,2},{0,0,1,0},{0,0,1,1}}}
+  },
+  // TDD Configuration Index 15
+  { {5,{{0,0,0,0},{0,0,0,1},{0,0,0,2},{0,0,1,1},{0,0,1,2}}}, {5,{{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},{1,0,0,1}}},
+    {5,{{0,0,0,0},{0,0,1,0},{1,0,0,0},{1,0,1,0},{2,0,0,0}}}, {5,{{0,0,0,0},{0,0,0,1},{0,0,0,2},{1,0,0,1},{1,0,0,2}}},
+    {5,{{0,0,0,0},{0,0,0,1},{1,0,0,0},{1,0,0,1},{2,0,0,1}}}, {5,{{0,0,0,0},{1,0,0,0},{2,0,0,0},{3,0,0,0},{4,0,0,0}}},
+    {5,{{0,0,0,0},{0,0,0,1},{0,0,0,2},{0,0,1,0},{0,0,1,1}}}
+  },
+  // TDD Configuration Index 16
+  { {5,{{0,0,0,1},{0,0,0,2},{0,0,1,0},{0,0,1,1},{0,0,1,2}}}, {5,{{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},{1,0,1,1}}},
+    {5,{{0,0,0,0},{0,0,1,0},{1,0,0,0},{1,0,1,0},{2,0,1,0}}}, {5,{{0,0,0,0},{0,0,0,1},{0,0,0,2},{1,0,0,0},{1,0,0,2}}},
+    {5,{{0,0,0,0},{0,0,0,1},{1,0,0,0},{1,0,0,1},{2,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}}
+  },
+  // TDD Configuration Index 17
+  { {5,{{0,0,0,0},{0,0,0,1},{0,0,0,2},{0,0,1,0},{0,0,1,2}}}, {5,{{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},{1,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {5,{{0,0,0,0},{0,0,0,1},{0,0,0,2},{1,0,0,0},{1,0,0,1}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}}
+  },
+  // TDD Configuration Index 18
+  { {6,{{0,0,0,0},{0,0,0,1},{0,0,0,2},{0,0,1,0},{0,0,1,1},{0,0,1,2}}},
+    {6,{{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},{1,0,0,1},{1,0,1,1}}},
+    {6,{{0,0,0,0},{0,0,1,0},{1,0,0,0},{1,0,1,0},{2,0,0,0},{2,0,1,0}}},
+    {6,{{0,0,0,0},{0,0,0,1},{0,0,0,2},{1,0,0,0},{1,0,0,1},{1,0,0,2}}},
+    {6,{{0,0,0,0},{0,0,0,1},{1,0,0,0},{1,0,0,1},{2,0,0,0},{2,0,0,1}}},
+    {6,{{0,0,0,0},{1,0,0,0},{2,0,0,0},{3,0,0,0},{4,0,0,0},{5,0,0,0}}},
+    {6,{{0,0,0,0},{0,0,0,1},{0,0,0,2},{0,0,1,0},{0,0,1,1},{1,0,0,2}}}
+  },
+  // TDD Configuration Index 19
+  { {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {6,{{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},{1,0,0,0},{1,0,1,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {6,{{0,0,0,0},{0,0,0,1},{0,0,0,2},{0,0,1,0},{0,0,1,1},{1,0,1,1}}}
+  },
+  // TDD Configuration Index 20
+  { {1,{{0,1,0,1}}},{1,{{0,1,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,1,0,1}}}, {1,{{0,1,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,1,0,1}}}},
+  // TDD Configuration Index 21
+  { {1,{{0,2,0,1}}},{1,{{0,2,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,2,0,1}}}, {1,{{0,2,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,2,0,1}}}},
+
+  // TDD Configuration Index 22
+  { {1,{{0,1,1,1}}},{1,{{0,1,1,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,1,1,0}}}},
+
+  // TDD Configuration Index 23
+  { {1,{{0,0,0,1}}},{1,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,0,0,1}}}, {1,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,0,0,1}}}},
+
+  // TDD Configuration Index 24
+  { {1,{{0,0,1,1}}},{1,{{0,0,1,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,0,1,0}}}},
+
+  // TDD Configuration Index 25
+  { {2,{{0,0,0,1},{0,0,1,1}}}, {2,{{0,0,0,0},{0,0,1,0}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {2,{{0,0,0,1},{1,0,0,1}}}, {2,{{0,0,0,0},{1,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {2,{{0,0,0,1},{0,0,1,0}}}},
+
+  // TDD Configuration Index 26
+  { {3,{{0,0,0,1},{0,0,1,1},{1,0,0,1}}}, {3,{{0,0,0,0},{0,0,1,0},{1,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {3,{{0,0,0,1},{1,0,0,1},{2,0,0,1}}}, {3,{{0,0,0,0},{1,0,0,0},{2,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {3,{{0,0,0,1},{0,0,1,0},{1,0,0,1}}}},
+
+  // TDD Configuration Index 27
+  { {4,{{0,0,0,1},{0,0,1,1},{1,0,0,1},{1,0,1,1}}}, {4,{{0,0,0,0},{0,0,1,0},{1,0,0,0},{1,0,1,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {4,{{0,0,0,1},{1,0,0,1},{2,0,0,1},{3,0,0,1}}},
+    {4,{{0,0,0,0},{1,0,0,0},{2,0,0,0},{3,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {4,{{0,0,0,1},{0,0,1,0},{1,0,0,1},{1,0,1,0}}}
+  },
+
+  // TDD Configuration Index 28
+  { {5,{{0,0,0,1},{0,0,1,1},{1,0,0,1},{1,0,1,1},{2,0,0,1}}}, {5,{{0,0,0,0},{0,0,1,0},{1,0,0,0},{1,0,1,0},{2,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {5,{{0,0,0,1},{1,0,0,1},{2,0,0,1},{3,0,0,1},{4,0,0,1}}},
+    {5,{{0,0,0,0},{1,0,0,0},{2,0,0,0},{3,0,0,0},{4,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {5,{{0,0,0,1},{0,0,1,0},{1,0,0,1},{1,0,1,0},{2,0,0,1}}}
+  },
+
+  // TDD Configuration Index 29
+  { {6,{{0,0,0,1},{0,0,1,1},{1,0,0,1},{1,0,1,1},{2,0,0,1},{2,0,1,1}}},
+    {6,{{0,0,0,0},{0,0,1,0},{1,0,0,0},{1,0,1,0},{2,0,0,0},{2,0,1,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {6,{{0,0,0,1},{1,0,0,1},{2,0,0,1},{3,0,0,1},{4,0,0,1},{5,0,0,1}}},
+    {6,{{0,0,0,0},{1,0,0,0},{2,0,0,0},{3,0,0,0},{4,0,0,0},{5,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {6,{{0,0,0,1},{0,0,1,0},{1,0,0,1},{1,0,1,0},{2,0,0,1},{2,0,1,0}}}
+  },
+
+
+  // TDD Configuration Index 30
+  { {1,{{0,1,0,1}}},{1,{{0,1,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,1,0,1}}}, {1,{{0,1,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,1,0,1}}}},
+
+  // TDD Configuration Index 31
+  { {1,{{0,2,0,1}}},{1,{{0,2,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,2,0,1}}}, {1,{{0,2,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,2,0,1}}}},
+
+  // TDD Configuration Index 32
+  { {1,{{0,1,1,1}}},{1,{{0,1,1,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,1,1,0}}}},
+
+  // TDD Configuration Index 33
+  { {1,{{0,0,0,1}}},{1,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,0,0,1}}}, {1,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,0,0,1}}}},
+
+  // TDD Configuration Index 34
+  { {1,{{0,0,1,1}}},{1,{{0,0,1,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,0,1,0}}}},
+
+  // TDD Configuration Index 35
+  { {2,{{0,0,0,1},{0,0,1,1}}}, {2,{{0,0,0,0},{0,0,1,0}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {2,{{0,0,0,1},{1,0,0,1}}}, {2,{{0,0,0,0},{1,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {2,{{0,0,0,1},{0,0,1,0}}}},
+
+  // TDD Configuration Index 36
+  { {3,{{0,0,0,1},{0,0,1,1},{1,0,0,1}}}, {3,{{0,0,0,0},{0,0,1,0},{1,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {3,{{0,0,0,1},{1,0,0,1},{2,0,0,1}}}, {3,{{0,0,0,0},{1,0,0,0},{2,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {3,{{0,0,0,1},{0,0,1,0},{1,0,0,1}}}},
+
+  // TDD Configuration Index 37
+  { {4,{{0,0,0,1},{0,0,1,1},{1,0,0,1},{1,0,1,1}}}, {4,{{0,0,0,0},{0,0,1,0},{1,0,0,0},{1,0,1,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {4,{{0,0,0,1},{1,0,0,1},{2,0,0,1},{3,0,0,1}}},
+    {4,{{0,0,0,0},{1,0,0,0},{2,0,0,0},{3,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {4,{{0,0,0,1},{0,0,1,0},{1,0,0,1},{1,0,1,0}}}
+  },
+
+  // TDD Configuration Index 38
+  { {5,{{0,0,0,1},{0,0,1,1},{1,0,0,1},{1,0,1,1},{2,0,0,1}}}, {5,{{0,0,0,0},{0,0,1,0},{1,0,0,0},{1,0,1,0},{2,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {5,{{0,0,0,1},{1,0,0,1},{2,0,0,1},{3,0,0,1},{4,0,0,1}}},
+    {5,{{0,0,0,0},{1,0,0,0},{2,0,0,0},{3,0,0,0},{4,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {5,{{0,0,0,1},{0,0,1,0},{1,0,0,1},{1,0,1,0},{2,0,0,1}}}
+  },
+
+  // TDD Configuration Index 39
+  { {6,{{0,0,0,1},{0,0,1,1},{1,0,0,1},{1,0,1,1},{2,0,0,1},{2,0,1,1}}},
+    {6,{{0,0,0,0},{0,0,1,0},{1,0,0,0},{1,0,1,0},{2,0,0,0},{2,0,1,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {6,{{0,0,0,1},{1,0,0,1},{2,0,0,1},{3,0,0,1},{4,0,0,1},{5,0,0,1}}},
+    {6,{{0,0,0,0},{1,0,0,0},{2,0,0,0},{3,0,0,0},{4,0,0,0},{5,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {6,{{0,0,0,1},{0,0,1,0},{1,0,0,1},{1,0,1,0},{2,0,0,1},{2,0,1,0}}}
+  },
+
+  // TDD Configuration Index 40
+  { {1,{{0,1,0,0}}},{0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,1,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,1,0,0}}}},
+  // TDD Configuration Index 41
+  { {1,{{0,2,0,0}}},{0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,2,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,2,0,0}}}},
+
+  // TDD Configuration Index 42
+  { {1,{{0,1,1,0}}},{0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}},
+
+  // TDD Configuration Index 43
+  { {1,{{0,0,0,0}}},{0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {1,{{0,0,0,0}}}},
+
+  // TDD Configuration Index 44
+  { {1,{{0,0,1,0}}},{0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}, {0,{{0,0,0,0}}}},
+
+  // TDD Configuration Index 45
+  { {2,{{0,0,0,0},{0,0,1,0}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {2,{{0,0,0,0},{1,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0}}}, {2,{{0,0,0,0},{1,0,0,0}}}},
+
+  // TDD Configuration Index 46
+  { {3,{{0,0,0,0},{0,0,1,0},{1,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {3,{{0,0,0,0},{1,0,0,0},{2,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0}}}, {3,{{0,0,0,0},{1,0,0,0},{2,0,0,0}}}},
+
+  // TDD Configuration Index 47
+  { {4,{{0,0,0,0},{0,0,1,0},{1,0,0,0},{1,0,1,0}}}, {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {4,{{0,0,0,0},{1,0,0,0},{2,0,0,0},{3,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {0,{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}},
+    {4,{{0,0,0,0},{1,0,0,0},{2,0,0,0},{3,0,0,0}}}
+  }
+};
+
+
+uint8_t get_prach_fmt(int prach_ConfigIndex,int frame_type) {
+  if (frame_type == FDD) // FDD
+    return(prach_ConfigIndex>>4);
+  else {
+    if (prach_ConfigIndex < 20)
+      return (0);
+
+    if (prach_ConfigIndex < 30)
+      return (1);
+
+    if (prach_ConfigIndex < 40)
+      return (2);
+
+    if (prach_ConfigIndex < 48)
+      return (3);
+    else
+      return (4);
+  }
+}
+
+uint8_t get_prach_prb_offset(int frame_type,
+			     int tdd_config,
+                             int N_RB_UL,
+                             uint8_t prach_ConfigIndex,
+                             uint8_t n_ra_prboffset,
+                             uint8_t tdd_mapindex, uint16_t Nf) {
+  uint8_t n_ra_prb;
+  uint8_t f_ra,t1_ra;
+  uint8_t prach_fmt = get_prach_fmt(prach_ConfigIndex,frame_type);
+  uint8_t Nsp=2;
+
+  if (frame_type == TDD) { // TDD
+    if (tdd_preamble_map[prach_ConfigIndex][tdd_config].num_prach==0) {
+      LOG_E(PHY, "Illegal prach_ConfigIndex %"PRIu8"", prach_ConfigIndex);
+      return(-1);
+    }
+
+    // adjust n_ra_prboffset for frequency multiplexing (p.36 36.211)
+    f_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[tdd_mapindex].f_ra;
+
+    if (prach_fmt < 4) {
+      if ((f_ra&1) == 0) {
+        n_ra_prb = n_ra_prboffset + 6*(f_ra>>1);
+      } else {
+        n_ra_prb = N_RB_UL - 6 - n_ra_prboffset + 6*(f_ra>>1);
+      }
+    } else {
+      if ((tdd_config >2) && (tdd_config<6))
+        Nsp = 2;
+
+      t1_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t1_ra;
+
+      if ((((Nf&1)*(2-Nsp)+t1_ra)&1) == 0) {
+        n_ra_prb = 6*f_ra;
+      } else {
+        n_ra_prb = N_RB_UL - 6*(f_ra+1);
+      }
+    }
+  } else { //FDD
+    n_ra_prb = n_ra_prboffset;
+  }
+
+  return(n_ra_prb);
+}
+
+int is_prach_subframe0(int tdd_config,int frame_type,uint8_t prach_ConfigIndex,uint32_t frame, uint8_t subframe) {
+  uint8_t t0_ra;
+  uint8_t t1_ra;
+  uint8_t t2_ra;
+  int prach_mask = 0;
+
+  if (frame_type == FDD) { //FDD
+    //implement Table 5.7.1-2 from 36.211 (Rel-10, p.41)
+    if ((((frame&1) == 1) && (subframe < 9)) ||
+        (((frame&1) == 0) && (subframe == 9)))  // This is an odd frame, ignore even-only PRACH frames
+      if (((prach_ConfigIndex&0xf)<3) || // 0,1,2,16,17,18,32,33,34,48,49,50
+          ((prach_ConfigIndex&0x1f)==18) || // 18,50
+          ((prach_ConfigIndex&0xf)==15))   // 15,47
+        return(0);
+
+    switch (prach_ConfigIndex&0x1f) {
+      case 0:
+      case 3:
+        if (subframe==1) prach_mask = 1;
+
+        break;
+
+      case 1:
+      case 4:
+        if (subframe==4) prach_mask = 1;
+
+        break;
+
+      case 2:
+      case 5:
+        if (subframe==7) prach_mask = 1;
+
+        break;
+
+      case 6:
+        if ((subframe==1) || (subframe==6)) prach_mask=1;
+
+        break;
+
+      case 7:
+        if ((subframe==2) || (subframe==7)) prach_mask=1;
+
+        break;
+
+      case 8:
+        if ((subframe==3) || (subframe==8)) prach_mask=1;
+
+        break;
+
+      case 9:
+        if ((subframe==1) || (subframe==4) || (subframe==7)) prach_mask=1;
+
+        break;
+
+      case 10:
+        if ((subframe==2) || (subframe==5) || (subframe==8)) prach_mask=1;
+
+        break;
+
+      case 11:
+        if ((subframe==3) || (subframe==6) || (subframe==9)) prach_mask=1;
+
+        break;
+
+      case 12:
+        if ((subframe&1)==0) prach_mask=1;
+
+        break;
+
+      case 13:
+        if ((subframe&1)==1) prach_mask=1;
+
+        break;
+
+      case 14:
+        prach_mask=1;
+        break;
+
+      case 15:
+        if (subframe==9) prach_mask=1;
+
+        break;
+    }
+  } else { // TDD
+    AssertFatal(prach_ConfigIndex<64,
+                "Illegal prach_ConfigIndex %d for ",prach_ConfigIndex);
+    AssertFatal(tdd_preamble_map[prach_ConfigIndex][tdd_config].num_prach>0,
+                "Illegal prach_ConfigIndex %d for ",prach_ConfigIndex);
+    t0_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t0_ra;
+    t1_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t1_ra;
+    t2_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t2_ra;
+#ifdef PRACH_DEBUG
+    LOG_I(PHY,"[PRACH] Checking for PRACH format (ConfigIndex %d) in TDD subframe %d (%d,%d,%d)\n",
+          prach_ConfigIndex,
+          subframe,
+          t0_ra,t1_ra,t2_ra);
+#endif
+
+    if ((((t0_ra == 1) && ((frame &1)==0))||  // frame is even and PRACH is in even frames
+         ((t0_ra == 2) && ((frame &1)==1))||  // frame is odd and PRACH is in odd frames
+         (t0_ra == 0)) &&                                // PRACH is in all frames
+        (((subframe<5)&&(t1_ra==0)) ||                   // PRACH is in 1st half-frame
+         (((subframe>4)&&(t1_ra==1))))) {                // PRACH is in 2nd half-frame
+      if ((prach_ConfigIndex<48) &&                          // PRACH only in normal UL subframe
+          (((subframe%5)-2)==t2_ra)) prach_mask=1;
+      else if ((prach_ConfigIndex>47) && (((subframe%5)-1)==t2_ra)) prach_mask=1;      // PRACH can be in UpPTS
+    }
+  }
+
+  return(prach_mask);
+}
+
diff --git a/common/utils/lte/prach_utils.h b/common/utils/lte/prach_utils.h
new file mode 100644
index 0000000000000000000000000000000000000000..995805fbd2f0547956966e9580f517f6e1fea168
--- /dev/null
+++ b/common/utils/lte/prach_utils.h
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file common/utils/prach_utils.h
+* \brief computation of some PRACH variables used in both MAC and PHY 
+* \author R. Knopp
+* \date 2020
+* \version 0.1
+* \company Eurecom
+* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
+* \note
+* \warning
+*/
+uint8_t get_prach_fmt(int prach_ConfigIndex,int frame_type);
+
+uint8_t get_prach_prb_offset(int frame_type,
+                             int tdd_config,
+                             int N_RB_UL,
+                             uint8_t prach_ConfigIndex,
+                             uint8_t n_ra_prboffset,
+                             uint8_t tdd_mapindex, uint16_t Nf);
+int is_prach_subframe0(int tdd_config,int frame_type,uint8_t prach_ConfigIndex,uint32_t frame, uint8_t subframe);
diff --git a/common/utils/lte/ue_power.c b/common/utils/lte/ue_power.c
new file mode 100644
index 0000000000000000000000000000000000000000..b377abf2ff91719f1d4107902c4ce5ba6912fe8a
--- /dev/null
+++ b/common/utils/lte/ue_power.c
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file ue_power.c
+* \brief Routines to compute UE TX power according to 36.213
+* \author R. Knopp, F. Kaltenberger
+* \date 2020
+* \version 0.1
+* \company Eurecom
+* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
+* \note
+* \warning
+*/
+
+#include <stdint.h>
+#include <stdio.h>
+#include "PHY/defs_eNB.h"
+#include "PHY/TOOLS/dB_routines.h"
+
+extern int16_t hundred_times_delta_TF[100];
+extern uint16_t hundred_times_log10_NPRB[100];
+
+int16_t estimate_ue_tx_power(int norm,uint32_t tbs, uint32_t nb_rb, uint8_t control_only, int ncp, uint8_t use_srs)
+{
+
+  /// The payload + CRC size in bits, "B"
+  uint32_t B;
+  /// Number of code segments
+  uint32_t C;
+  /// Number of "small" code segments
+  uint32_t Cminus;
+  /// Number of "large" code segments
+  uint32_t Cplus;
+  /// Number of bits in "small" code segments (<6144)
+  uint32_t Kminus;
+  /// Number of bits in "large" code segments (<6144)
+  uint32_t Kplus;
+  /// Total number of bits across all segments
+  uint32_t sumKr;
+  /// Number of "Filler" bits
+  uint32_t F;
+  // num resource elements
+  uint32_t num_re=0.0;
+  // num symbols
+  uint32_t num_symb=0.0;
+  /// effective spectral efficiency of the PUSCH
+  uint32_t MPR_x100=0;
+  /// beta_offset
+  uint16_t beta_offset_pusch_x8=8;
+  /// delta mcs
+  float delta_mcs=0.0;
+  /// bandwidth factor
+  float bw_factor=0.0;
+
+  B= tbs+24;
+  lte_segmentation(NULL,
+                   NULL,
+                   B,
+                   &C,
+                   &Cplus,
+                   &Cminus,
+                   &Kplus,
+                   &Kminus,
+                   &F);
+
+
+  sumKr = Cminus*Kminus + Cplus*Kplus;
+  num_symb = 12-(ncp<<1)-(use_srs==0?0:1);
+  num_re = num_symb * nb_rb * 12;
+
+  if (num_re == 0)
+    return(0);
+
+  MPR_x100 = 100*sumKr/num_re;
+
+  if (control_only == 1 )
+    beta_offset_pusch_x8=8; // fixme
+
+  //(beta_offset_pusch_x8=ue->ulsch[eNB_id]->harq_processes[harq_pid]->control_only == 1) ? ue->ulsch[eNB_id]->beta_offset_cqi_times8:8;
+
+  // if deltamcs_enabledm
+  delta_mcs = ((hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_times10((beta_offset_pusch_x8)>>3))/100.0);
+                                                                                                                 
+  bw_factor = (norm!=0) ? 0 : (hundred_times_log10_NPRB[nb_rb-1]/100.0);
+  LOG_D(PHY,"estimated ue tx power %d (num_re %d, sumKr %d, mpr_x100 %d, delta_mcs %f, bw_factor %f)\n",
+         (int16_t)ceil(delta_mcs + bw_factor), num_re, sumKr, MPR_x100, delta_mcs, bw_factor);
+  return (int16_t)ceil(delta_mcs + bw_factor);
+
+}
+    
diff --git a/targets/RT/USER/rfsim.h b/common/utils/lte/ue_power.h
similarity index 69%
rename from targets/RT/USER/rfsim.h
rename to common/utils/lte/ue_power.h
index 801ab5eb564a0837379846f17552d9d6a86d1098..caeebec2c8f01fabfb4362313e44649835f6a492 100644
--- a/targets/RT/USER/rfsim.h
+++ b/common/utils/lte/ue_power.h
@@ -18,23 +18,17 @@
  * For more information about the OpenAirInterface (OAI) Software Alliance:
  *      contact@openairinterface.org
  */
-#ifndef __RFSIM__H__
-#define __RFSIM__H__
-#include "lte-softmodem.h"
-#include "openair1/SIMULATION/TOOLS/sim.h"
-#include "platform_constants.h"
-#include "common/ran_context.h"
-#include "PHY/defs_UE.h"
-#include "PHY/defs_eNB.h"
 
-void init_ocm(void);
+/*! \file ue_power.h
+* \brief support routines used in MAC and PHY 
+* \author R. Knopp, F. Kaltenberger
+* \date 2020
+* \version 0.1
+* \company Eurecom
+* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
+* \note
+* \warning
+*/
 
-void update_ocm(double snr_dB,double sinr_dB);
+int16_t estimate_ue_tx_power(int norm,uint32_t tbs, uint32_t nb_rb, uint8_t control_only, lte_prefix_type_t ncp, uint8_t use_srs);
 
-//extern pthread_mutex_t async_server_lock;
-//extern pthread_cond_t async_server_notify;
-//extern int async_server_shutdown;
-
-void init_channel_vars(void);
-
-#endif
diff --git a/executables/main-fs6.c b/executables/main-fs6.c
index 5283ce5eaa1cf1b3b3dbd25543c15af7475b7637..438edb4044dd02dc766029406697c6094c4e300c 100644
--- a/executables/main-fs6.c
+++ b/executables/main-fs6.c
@@ -750,7 +750,7 @@ void phy_procedures_eNB_uespec_RX_fromsplit(uint8_t *bufferZone, int nbBlocks,PH
   recvFs6Ul(bufferZone, nbBlocks, eNB, ul_propa);
 
   // dirty memory allocation in OAI...
-  for (int i = 0; i < NUMBER_OF_UCI_VARS_MAX; i++)
+  for (int i = 0; i < NUMBER_OF_UCI_MAX; i++)
     if ( eNB->uci_vars[i].frame == proc->frame_rx &&
          eNB->uci_vars[i].subframe == proc->subframe_rx )
       eNB->uci_vars[i].active=0;
@@ -1145,7 +1145,7 @@ void appendFs6DLUEcch(uint8_t *bufferZone, PHY_VARS_eNB *eNB, int frame, int sub
   commonUDP_t *newUDPheader=(commonUDP_t *) firstFreeByte;
   bool first_UE=true;
 
-  for (int i = 0; i < NUMBER_OF_UCI_VARS_MAX; i++) {
+  for (int i = 0; i < NUMBER_OF_UCI_MAX; i++) {
     LTE_eNB_UCI *uci = &(eNB->uci_vars[i]);
 
     if ((uci->active == 1) && (uci->frame == frame) && (uci->subframe == subframe)) {
diff --git a/executables/main-ocp.c b/executables/main-ocp.c
index 925861c71e016d1af7e2d2af78edc0d4207c2fde..b0f0b05315b17b5d7a21e7e71fdf98d0b5c7e718 100644
--- a/executables/main-ocp.c
+++ b/executables/main-ocp.c
@@ -204,7 +204,6 @@ void init_eNB_afterRU(void) {
   for (int inst=0; inst<RC.nb_inst; inst++) {
     for (int CC_id=0; CC_id<RC.nb_CC[inst]; CC_id++) {
       PHY_VARS_eNB *eNB = RC.eNB[inst][CC_id];
-      phy_init_lte_eNB(eNB,0,0);
       eNB->frame_parms.nb_antennas_rx       = 0;
       eNB->frame_parms.nb_antennas_tx       = 0;
       eNB->prach_vars.rxsigF[0] = (int16_t **)malloc16(64*sizeof(int16_t *));
@@ -230,12 +229,26 @@ void init_eNB_afterRU(void) {
           for (int ce_level=0; ce_level<4; ce_level++)
             eNB->prach_vars_br.rxsigF[ce_level][aa] = eNB->RU_list[ru_id]->prach_rxsigF_br[ce_level][i];
 
-          eNB->common_vars.rxdataF[aa]     =  eNB->RU_list[ru_id]->common.rxdataF[i];
         }
       }
 
-      AssertFatal( eNB->frame_parms.nb_antennas_rx > 0 && eNB->frame_parms.nb_antennas_rx < 4, "");
-      AssertFatal( eNB->frame_parms.nb_antennas_tx > 0 && eNB->frame_parms.nb_antennas_rx < 4, "");
+
+      AssertFatal( eNB->frame_parms.nb_antennas_rx > 0 && eNB->frame_parms.nb_antennas_rx < 5, "");
+      AssertFatal( eNB->frame_parms.nb_antennas_tx > 0 && eNB->frame_parms.nb_antennas_rx < 5, "");
+
+      phy_init_lte_eNB(eNB,0,0);
+
+      // need to copy rxdataF after L1 variables are allocated
+      for (int inst=0; inst<RC.nb_inst; inst++) {
+         for (int CC_id=0; CC_id<RC.nb_CC[inst]; CC_id++) {
+           PHY_VARS_eNB *eNB = RC.eNB[inst][CC_id];
+           for (int ru_id=0,aa=0; ru_id<eNB->num_RU; ru_id++) {
+              for (int i=0; i<eNB->RU_list[ru_id]->nb_rx; aa++,i++) 
+                eNB->common_vars.rxdataF[aa]     =  eNB->RU_list[ru_id]->common.rxdataF[i];
+           }
+         }
+      }
+
       LOG_I(PHY,"inst %d, CC_id %d : nb_antennas_rx %d\n",inst,CC_id,eNB->frame_parms.nb_antennas_rx);
       init_transport(eNB);
       //init_precoding_weights(RC.eNB[inst][CC_id]);
@@ -802,7 +815,7 @@ int init_rf(RU_t *ru) {
   pthread_setname_np(pthread_self(),name);
   return ret;
 }
-
+ 
 void ocp_init_RU(RU_t *ru, char *rf_config_file, int send_dmrssync) {
   PHY_VARS_eNB *eNB0= (PHY_VARS_eNB *)NULL;
   int i;
diff --git a/executables/main_ru.c b/executables/main_ru.c
new file mode 100644
index 0000000000000000000000000000000000000000..93a580560e34122ee7ed258aa1d8b34a8a2a7903
--- /dev/null
+++ b/executables/main_ru.c
@@ -0,0 +1,382 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file oairu.c
+ * \brief Top-level threads for radio-unit
+ * \author R. Knopp
+ * \date 2020
+ * \version 0.1
+ * \company Eurecom
+ * \email: knopp@eurecom.fr
+ * \note
+ * \warning
+ */
+
+
+#define _GNU_SOURCE             /* See feature_test_macros(7) */
+#include <sched.h>
+
+
+
+
+#include "assertions.h"
+#include "PHY/types.h"
+
+#include "PHY/defs_RU.h"
+#include "common/config/config_userapi.h"
+#include "common/utils/load_module_shlib.h"
+
+
+#include "../../ARCH/COMMON/common_lib.h"
+#include "../../ARCH/ETHERNET/USERSPACE/LIB/if_defs.h"
+
+
+#include "PHY/phy_vars.h"
+#include "SCHED/sched_common_vars.h"
+#include "PHY/TOOLS/phy_scope_interface.h"
+#include "common/utils/LOG/log.h"
+#include "common/utils/LOG/vcd_signal_dumper.h"
+#include "PHY/INIT/phy_init.h"
+#include "openair2/ENB_APP/enb_paramdef.h"
+#include "system.h"
+
+#include <executables/split_headers.h>
+#include <executables/softmodem-common.h>
+#include <executables/thread-common.h>
+
+static int DEFBANDS[] = {7};
+static int DEFENBS[] = {0};
+static int DEFBFW[] = {0x00007fff};
+
+THREAD_STRUCT thread_struct;
+
+pthread_cond_t sync_cond;
+pthread_mutex_t sync_mutex;
+int sync_var=-1; //!< protected by mutex \ref sync_mutex.
+int config_sync_var=-1;
+
+volatile int             oai_exit = 0;
+uint16_t sf_ahead = 4;
+RU_t ru_m;
+
+
+extern void init_RU0(RU_t *ru,int ru_id,char *rf_config_file, int send_dmrssync);
+extern void init_RU_proc(RU_t *ru);
+extern void kill_RU_proc(RU_t *ru);
+extern void set_function_spec_param(RU_t *ru);
+
+int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
+
+
+void nfapi_setmode(nfapi_mode_t nfapi_mode) { return; }
+void exit_function(const char *file, const char *function, const int line, const char *s) {
+
+  if (s != NULL) {
+    printf("%s:%d %s() Exiting OAI softmodem: %s\n",file,line, function, s);
+  }
+  close_log_mem();
+  oai_exit = 1;
+
+  if (ru_m.rfdevice.trx_end_func) {
+    ru_m.rfdevice.trx_end_func(&ru_m.rfdevice);
+    ru_m.rfdevice.trx_end_func = NULL;
+  }
+
+  if (ru_m.ifdevice.trx_end_func) {
+    ru_m.ifdevice.trx_end_func(&ru_m.ifdevice);
+    ru_m.ifdevice.trx_end_func = NULL;
+  }
+ 
+  pthread_mutex_destroy(ru_m.ru_mutex);
+  pthread_cond_destroy(ru_m.ru_cond); 
+  sleep(1); //allow lte-softmodem threads to exit first
+  exit(1);
+}
+
+
+static void get_options(void) {
+  CONFIG_SETRTFLAG(CONFIG_NOEXITONHELP);
+  get_common_options(SOFTMODEM_ENB_BIT );
+  CONFIG_CLEARRTFLAG(CONFIG_NOEXITONHELP);
+
+  //RCConfig();
+  
+}
+
+
+
+
+
+extern void  phy_free_RU(RU_t *);
+
+nfapi_mode_t nfapi_getmode(void) {
+  return(NFAPI_MODE_PNF);
+}
+
+void oai_nfapi_rach_ind(nfapi_rach_indication_t *rach_ind) {
+
+  AssertFatal(1==0,"This is bad ... please check why we get here\n");
+}
+
+void wait_eNBs(void){ return; }
+
+uint64_t                 downlink_frequency[MAX_NUM_CCs][4];
+
+
+int main ( int argc, char **argv )
+{
+
+  if ( load_configmodule(argc,argv,0) == NULL) {
+    exit_fun("[SOFTMODEM] Error, configuration module init failed\n");
+  }
+
+  logInit();
+  printf("Reading in command-line options\n");
+  get_options ();
+
+  if (CONFIG_ISFLAGSET(CONFIG_ABORT) ) {
+    fprintf(stderr,"Getting configuration failed\n");
+    exit(-1);
+  }
+
+#if T_TRACER
+  T_Config_Init();
+#endif
+  printf("configuring for RRU\n");
+
+#ifndef PACKAGE_VERSION
+#  define PACKAGE_VERSION "UNKNOWN-EXPERIMENTAL"
+#endif
+  LOG_I(HW, "Version: %s\n", PACKAGE_VERSION);
+
+  /* Read configuration */
+
+  printf("About to Init RU threads\n");
+  
+
+  RU_t *ru=&ru_m;
+
+  paramdef_t RUParams[] = RUPARAMS_DESC;
+  paramlist_def_t RUParamList = {CONFIG_STRING_RU_LIST,NULL,0};
+  config_getlist( &RUParamList,RUParams,sizeof(RUParams)/sizeof(paramdef_t), NULL);
+
+  int j=0;
+  uint64_t ru_mask=1;
+  pthread_mutex_t ru_mutex; pthread_mutex_init(&ru_mutex,NULL);
+  pthread_cond_t ru_cond; pthread_cond_init(&ru_cond,NULL);
+
+  ru->ru_mask= &ru_mask;
+  ru->ru_mutex = &ru_mutex;
+  ru->ru_cond = &ru_cond;
+
+  ru->if_timing = synch_to_ext_device;
+  ru->num_eNB = 0;
+  ru->has_ctrl_prt = 1;
+  if (config_isparamset(RUParamList.paramarray[j], RU_SDR_ADDRS)) {
+    ru->openair0_cfg.sdr_addrs = strdup(*(RUParamList.paramarray[j][RU_SDR_ADDRS].strptr));
+  }
+
+  if (config_isparamset(RUParamList.paramarray[j], RU_SDR_CLK_SRC)) {
+    if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "internal") == 0) {
+      ru->openair0_cfg.clock_source = internal;
+      LOG_D(PHY, "RU clock source set as internal\n");
+    } else if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "external") == 0) {
+      ru->openair0_cfg.clock_source = external;
+      LOG_D(PHY, "RU clock source set as external\n");
+    } else if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "gpsdo") == 0) {
+      ru->openair0_cfg.clock_source = gpsdo;
+      LOG_D(PHY, "RU clock source set as gpsdo\n");
+    } else {
+      LOG_E(PHY, "Erroneous RU clock source in the provided configuration file: '%s'\n", *(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr));
+    }
+  }
+  else {
+    ru->openair0_cfg.clock_source = unset;
+  }
+
+  if (config_isparamset(RUParamList.paramarray[j], RU_SDR_TME_SRC)) {
+    if (strcmp(*(RUParamList.paramarray[j][RU_SDR_TME_SRC].strptr), "internal") == 0) {
+      ru->openair0_cfg.time_source = internal;
+      LOG_D(PHY, "RU time source set as internal\n");
+    } else if (strcmp(*(RUParamList.paramarray[j][RU_SDR_TME_SRC].strptr), "external") == 0) {
+      ru->openair0_cfg.time_source = external;
+      LOG_D(PHY, "RU time source set as external\n");
+    } else if (strcmp(*(RUParamList.paramarray[j][RU_SDR_TME_SRC].strptr), "gpsdo") == 0) {
+      ru->openair0_cfg.time_source = gpsdo;
+      LOG_D(PHY, "RU time source set as gpsdo\n");
+    } else {
+      LOG_E(PHY, "Erroneous RU time source in the provided configuration file: '%s'\n", *(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr));
+    }
+  }
+  else {
+    ru->openair0_cfg.time_source = unset;
+  }      
+
+  if (strcmp(*(RUParamList.paramarray[j][RU_LOCAL_RF_IDX].strptr), "yes") == 0) {
+    if ( !(config_isparamset(RUParamList.paramarray[j],RU_LOCAL_IF_NAME_IDX)) ) {
+      AssertFatal(1==0,"IF_NAME is required\n");
+    } else {
+      ru->eth_params.local_if_name            = strdup(*(RUParamList.paramarray[j][RU_LOCAL_IF_NAME_IDX].strptr));
+      ru->eth_params.my_addr                  = strdup(*(RUParamList.paramarray[j][RU_LOCAL_ADDRESS_IDX].strptr));
+      ru->eth_params.remote_addr              = strdup(*(RUParamList.paramarray[j][RU_REMOTE_ADDRESS_IDX].strptr));
+      ru->eth_params.my_portd                 = *(RUParamList.paramarray[j][RU_LOCAL_PORTD_IDX].uptr);
+      ru->eth_params.remote_portd             = *(RUParamList.paramarray[j][RU_REMOTE_PORTD_IDX].uptr);
+
+      // Check if control port set
+      if  (!(config_isparamset(RUParamList.paramarray[j],RU_REMOTE_PORTC_IDX)) ) {
+	printf("Removing control port for RU %d\n",j);
+	ru->has_ctrl_prt            = 0;
+      } else {
+	ru->eth_params.my_portc                 = *(RUParamList.paramarray[j][RU_LOCAL_PORTC_IDX].uptr);
+	ru->eth_params.remote_portc             = *(RUParamList.paramarray[j][RU_REMOTE_PORTC_IDX].uptr);
+	printf(" Control port %u \n",ru->eth_params.my_portc);
+      }
+
+      if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp") == 0) {
+	ru->if_south                        = LOCAL_RF;
+	ru->function                        = NGFI_RRU_IF5;
+	ru->eth_params.transp_preference    = ETH_UDP_MODE;
+	printf("Setting function for RU %d to NGFI_RRU_IF5 (udp)\n",j);
+      } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw") == 0) {
+	ru->if_south                        = LOCAL_RF;
+	ru->function                        = NGFI_RRU_IF5;
+	ru->eth_params.transp_preference    = ETH_RAW_MODE;
+	printf("Setting function for RU %d to NGFI_RRU_IF5 (raw)\n",j);
+      } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp_if4p5") == 0) {
+	ru->if_south                        = LOCAL_RF;
+	ru->function                        = NGFI_RRU_IF4p5;
+	ru->eth_params.transp_preference    = ETH_UDP_IF4p5_MODE;
+	printf("Setting function for RU %d to NGFI_RRU_IF4p5 (udp)\n",j);
+      } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw_if4p5") == 0) {
+	ru->if_south                        = LOCAL_RF;
+	ru->function                        = NGFI_RRU_IF4p5;
+	ru->eth_params.transp_preference    = ETH_RAW_IF4p5_MODE;
+	printf("Setting function for RU %d to NGFI_RRU_IF4p5 (raw)\n",j);
+      }
+
+      printf("RU %d is_slave=%s\n",j,*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr));
+
+      if (strcmp(*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr), "yes") == 0) ru->is_slave=1;
+      else ru->is_slave=0;
+
+      printf("RU %d ota_sync_enabled=%s\n",j,*(RUParamList.paramarray[j][RU_OTA_SYNC_ENABLE_IDX].strptr));
+
+      if (strcmp(*(RUParamList.paramarray[j][RU_OTA_SYNC_ENABLE_IDX].strptr), "yes") == 0) ru->ota_sync_enable=1;
+      else ru->ota_sync_enable=0;
+    }
+
+    ru->max_pdschReferenceSignalPower     = *(RUParamList.paramarray[j][RU_MAX_RS_EPRE_IDX].uptr);;
+    ru->max_rxgain                        = *(RUParamList.paramarray[j][RU_MAX_RXGAIN_IDX].uptr);
+    ru->num_bands                         = RUParamList.paramarray[j][RU_BAND_LIST_IDX].numelt;
+    /* sf_extension is in unit of samples for 30.72MHz here, has to be scaled later */
+    ru->sf_extension                      = *(RUParamList.paramarray[j][RU_SF_EXTENSION_IDX].uptr);
+
+    for (int i=0; i<ru->num_bands; i++) ru->band[i] = RUParamList.paramarray[j][RU_BAND_LIST_IDX].iptr[i];
+  } //strcmp(local_rf, "yes") == 0
+  else {
+    printf("RU %d: Transport %s\n",j,*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr));
+    ru->eth_params.local_if_name      = strdup(*(RUParamList.paramarray[j][RU_LOCAL_IF_NAME_IDX].strptr));
+    ru->eth_params.my_addr            = strdup(*(RUParamList.paramarray[j][RU_LOCAL_ADDRESS_IDX].strptr));
+    ru->eth_params.remote_addr        = strdup(*(RUParamList.paramarray[j][RU_REMOTE_ADDRESS_IDX].strptr));
+    ru->eth_params.my_portc           = *(RUParamList.paramarray[j][RU_LOCAL_PORTC_IDX].uptr);
+    ru->eth_params.remote_portc       = *(RUParamList.paramarray[j][RU_REMOTE_PORTC_IDX].uptr);
+    ru->eth_params.my_portd           = *(RUParamList.paramarray[j][RU_LOCAL_PORTD_IDX].uptr);
+    ru->eth_params.remote_portd       = *(RUParamList.paramarray[j][RU_REMOTE_PORTD_IDX].uptr);
+
+    if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp") == 0) {
+      ru->if_south                     = REMOTE_IF5;
+      ru->function                     = NGFI_RAU_IF5;
+      ru->eth_params.transp_preference = ETH_UDP_MODE;
+    } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw") == 0) {
+      ru->if_south                     = REMOTE_IF5;
+      ru->function                     = NGFI_RAU_IF5;
+      ru->eth_params.transp_preference = ETH_RAW_MODE;
+    } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp_if4p5") == 0) {
+      ru->if_south                     = REMOTE_IF4p5;
+      ru->function                     = NGFI_RAU_IF4p5;
+      ru->eth_params.transp_preference = ETH_UDP_IF4p5_MODE;
+    } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw_if4p5") == 0) {
+      ru->if_south                     = REMOTE_IF4p5;
+      ru->function                     = NGFI_RAU_IF4p5;
+      ru->eth_params.transp_preference = ETH_RAW_IF4p5_MODE;
+    }
+
+    if (strcmp(*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr), "yes") == 0) ru->is_slave=1;
+    else ru->is_slave=0;
+  }  /* strcmp(local_rf, "yes") != 0 */
+      
+  ru->nb_tx                             = *(RUParamList.paramarray[j][RU_NB_TX_IDX].uptr);
+  ru->nb_rx                             = *(RUParamList.paramarray[j][RU_NB_RX_IDX].uptr);
+  ru->att_tx                            = *(RUParamList.paramarray[j][RU_ATT_TX_IDX].uptr);
+  ru->att_rx                            = *(RUParamList.paramarray[j][RU_ATT_RX_IDX].uptr);
+
+
+  set_worker_conf("WORKER_ENABLE");
+
+  mlockall(MCL_CURRENT | MCL_FUTURE);
+  pthread_cond_init(&sync_cond,NULL);
+  pthread_mutex_init(&sync_mutex, NULL);
+ 
+  init_RU0(ru,0,get_softmodem_params()->rf_config_file,get_softmodem_params()->send_dmrs_sync);
+  ru->rf_map.card=0;
+  ru->rf_map.chain=(get_softmodem_params()->chain_offset);
+
+  LOG_I(PHY, "Initializing RRU descriptor : (%s,%s,%d)\n", ru_if_types[ru->if_south], NB_timing[ru->if_timing], ru->function);
+  set_function_spec_param(ru);
+  LOG_I(PHY, "Starting ru_thread , is_slave %d, send_dmrs %d\n", ru->is_slave, ru->generate_dmrs_sync);
+  init_RU_proc(ru);
+
+  pthread_mutex_lock(&ru_mutex);
+  while (ru_mask>0) 
+    pthread_cond_wait(&ru_cond,&ru_mutex);
+  pthread_mutex_unlock(&ru_mutex);
+  LOG_I(PHY,"RU configured, unlocking threads\n"); 
+  config_sync_var=0;
+  pthread_mutex_lock(&sync_mutex);
+  sync_var=0;
+  pthread_cond_broadcast(&sync_cond);
+  pthread_mutex_unlock(&sync_mutex);
+ 
+  while (oai_exit==0) sleep(1);
+  // stop threads
+      
+  kill_RU_proc(ru);
+  phy_free_RU(ru);
+      
+  free_lte_top();
+  end_configmodule();
+      
+  if (ru->rfdevice.trx_end_func) {
+    ru->rfdevice.trx_end_func(&ru->rfdevice);
+    ru->rfdevice.trx_end_func = NULL;
+  }
+      
+  if (ru->ifdevice.trx_end_func) {
+    ru->ifdevice.trx_end_func(&ru->ifdevice);
+    ru->ifdevice.trx_end_func = NULL;
+  }
+      
+  
+      
+  logClean();
+  printf("Bye.\n");
+  return 0;
+}
diff --git a/executables/nr-softmodem.c b/executables/nr-softmodem.c
index 8ac3a63efee8c7a729e60fe13f6bc5a5c0238dcf..353751a66a0d267c9e69afd60ffbac2b459271fc 100644
--- a/executables/nr-softmodem.c
+++ b/executables/nr-softmodem.c
@@ -164,10 +164,15 @@ int otg_enabled;
 uint32_t timing_advance = 0;
 uint64_t num_missed_slots=0; // counter for the number of missed slots
 
+#include <executables/split_headers.h>
 int split73=0;
 void sendFs6Ul(PHY_VARS_eNB *eNB, int UE_id, int harq_pid, int segmentID, int16_t *data, int dataLen, int r_offset) {
   AssertFatal(false, "Must not be called in this context\n");
 }
+void sendFs6Ulharq(enum pckType type, int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, int frame, int subframe, uint8_t *harq_ack, uint8_t tdd_mapping_mode, uint16_t tdd_multiplexing_mask, uint16_t rnti, int32_t stat) {
+    AssertFatal(false, "Must not be called in this context\n");
+}
+
 
 extern void reset_opp_meas(void);
 extern void print_opp_meas(void);
diff --git a/executables/softmodem-common.h b/executables/softmodem-common.h
index 9fa96462fd254d1594b29bebefa43e306d5257a7..ad349d4d019930a94861b3495a69b5cec5df550e 100644
--- a/executables/softmodem-common.h
+++ b/executables/softmodem-common.h
@@ -88,6 +88,8 @@ extern "C"
 #define CONFIG_HLP_EMULATE_RF    "Emulated RF enabled(disable by defult)\n"
 #define CONFIG_HLP_PARALLEL_CMD  "three config for level of parallelism 'PARALLEL_SINGLE_THREAD', 'PARALLEL_RU_L1_SPLIT', or 'PARALLEL_RU_L1_TRX_SPLIT'\n"
 #define CONFIG_HLP_WORKER_CMD    "two option for worker 'WORKER_DISABLE' or 'WORKER_ENABLE'\n"
+#define CONFIG_HLP_USRP_THREAD   "having extra thead for usrp tx\n"
+
 #define CONFIG_HLP_NOS1          "Disable s1 interface\n"
 #define CONFIG_HLP_RFSIM         "Run in rf simulator mode (also known as basic simulator)\n"
 #define CONFIG_HLP_NOKRNMOD      "(noS1 only): Use tun instead of namesh module \n"
@@ -253,6 +255,7 @@ extern char *get_softmodem_function(uint64_t *sofmodemfunc_mask_ptr);
 extern void set_softmodem_sighandler(void);
 extern uint64_t downlink_frequency[MAX_NUM_CCs][4];
 extern int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
+extern int usrp_tx_thread;
 extern uint16_t sl_ahead;
 extern uint16_t sf_ahead;
 extern volatile int  oai_exit;
diff --git a/nfapi/open-nFAPI/pnf/public_inc/nfapi_pnf_interface.h b/nfapi/open-nFAPI/pnf/public_inc/nfapi_pnf_interface.h
index fc9cd660774bbf497e77eb76ecfa1691c8a2f965..8520a5d1620e74ad2b6848e27742f50412862113 100644
--- a/nfapi/open-nFAPI/pnf/public_inc/nfapi_pnf_interface.h
+++ b/nfapi/open-nFAPI/pnf/public_inc/nfapi_pnf_interface.h
@@ -27,7 +27,6 @@ extern "C" {
 #include <openair2/PHY_INTERFACE/IF_Module.h>
 #include "nfapi_nr_interface.h"
 #include "nfapi_nr_interface_scf.h"
-
 #include <sys/types.h>
 #include "openair1/PHY/defs_gNB.h"
 
diff --git a/openair1/PHY/CODING/TESTBENCH/coding_unitary_defs.h b/openair1/PHY/CODING/TESTBENCH/coding_unitary_defs.h
new file mode 100644
index 0000000000000000000000000000000000000000..f77ffff2eb5bcf5fe01a0d712ddd8c21411234ec
--- /dev/null
+++ b/openair1/PHY/CODING/TESTBENCH/coding_unitary_defs.h
@@ -0,0 +1,53 @@
+/*
+ *  Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The OpenAirInterface Software Alliance licenses this file to You under
+ *  the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ *  except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *  http://www.openairinterface.org/?page_id=698
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *  -------------------------------------------------------------------------------
+ *  For more information about the OpenAirInterface (OAI) Software Alliance:
+ *        contact@openairinterface.org
+ */
+
+#ifndef __CODING_UNITARY_DEFS__h__
+#define __CODING_UNITARY_DEFS__h__
+int oai_exit=0;
+unsigned int NB_UE_INST = 1;
+#include "openair1/PHY/defs_UE.h"
+PHY_VARS_UE ***PHY_vars_UE_g;
+#include "common/ran_context.h"
+RAN_CONTEXT_t RC;
+
+void exit_function(const char* file, const char* function, const int line, const char *s) {
+  const char * msg= s==NULL ? "no comment": s;
+  printf("Exiting at: %s:%d %s(), %s\n", file, line, function, msg);
+  exit(-1);
+}
+
+signed char quantize(double D, double x, unsigned char B) {
+  double qxd;
+  short maxlev;
+  qxd = floor(x / D);
+  maxlev = 1 << (B - 1); //(char)(pow(2,B-1));
+
+  if (qxd <= -maxlev)
+    qxd = -maxlev;
+  else if (qxd >= maxlev)
+    qxd = maxlev - 1;
+
+  return ((char) qxd);
+}
+
+
+#endif
+
diff --git a/openair1/PHY/CODING/TESTBENCH/ldpctest.c b/openair1/PHY/CODING/TESTBENCH/ldpctest.c
index f6769251cdb5343f4f8dc4c1898cb723a229ba7c..91c5d5961127c7fe258578f5caafef1838d916e1 100644
--- a/openair1/PHY/CODING/TESTBENCH/ldpctest.c
+++ b/openair1/PHY/CODING/TESTBENCH/ldpctest.c
@@ -26,9 +26,11 @@
 #include "assertions.h"
 #include "SIMULATION/TOOLS/sim.h"
 #include "PHY/CODING/nrLDPC_extern.h"
-#include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
+//#include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
 #include "openair1/PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_decoder_LYC.h"
-#define MAX_NUM_DLSCH_SEGMENTS 16
+#include "openair1/PHY/defs_nr_common.h"
+#include "coding_unitary_defs.h"
+
 #define MAX_BLOCK_LENGTH 8448
 
 #ifndef malloc16
@@ -81,9 +83,6 @@ typedef struct {
   int n_iter_max;
 } n_iter_stats_t;
 
-RAN_CONTEXT_t RC;
-PHY_VARS_UE ***PHY_vars_UE_g;
-uint16_t NB_UE_INST = 1;
 nrLDPC_encoderfunc_t encoder_orig;
 
 short lift_size[51]= {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20,22,24,26,28,30,32,36,40,44,48,52,56,60,64,72,80,88,96,104,112,120,128,144,160,176,192,208,224,240,256,288,320,352,384};
@@ -117,7 +116,7 @@ int test_ldpc(short No_iteration,
   sigma = 1.0/sqrt(2*SNR);
   opp_enabled=1;
   //short test_input[block_length];
-  unsigned char *test_input[MAX_NUM_DLSCH_SEGMENTS]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};;
+  unsigned char *test_input[MAX_NUM_NR_DLSCH_SEGMENTS]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};;
   //short *c; //padded codeword
   unsigned char *estimated_output[MAX_NUM_DLSCH_SEGMENTS];
   unsigned char *estimated_output_bit[MAX_NUM_DLSCH_SEGMENTS];
diff --git a/openair1/PHY/CODING/TESTBENCH/polartest.c b/openair1/PHY/CODING/TESTBENCH/polartest.c
index e43ba507ab1078f9f7b9a4bae9158220960f2571..8e7e37754259a5b4051303032a55163a378ec36e 100644
--- a/openair1/PHY/CODING/TESTBENCH/polartest.c
+++ b/openair1/PHY/CODING/TESTBENCH/polartest.c
@@ -11,16 +11,12 @@
 #include "PHY/CODING/nrPolar_tools/nr_polar_uci_defs.h"
 #include "PHY/CODING/coding_defs.h"
 #include "SIMULATION/TOOLS/sim.h"
-#include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
 //#include "common/utils/LOG/log.h"
-
+#include "coding_unitary_defs.h"
 //#define DEBUG_DCI_POLAR_PARAMS
 //#define DEBUG_POLAR_TIMING
 //#define DEBUG_POLARTEST
 
-RAN_CONTEXT_t RC;
-PHY_VARS_UE ***PHY_vars_UE_g;
-uint16_t NB_UE_INST = 1;
 
 int main(int argc, char *argv[])
 {
diff --git a/openair1/PHY/CODING/TESTBENCH/smallblocktest.c b/openair1/PHY/CODING/TESTBENCH/smallblocktest.c
index f750d249771802fac2806a3d67f051ff0cffae62..c9ed678a8fb09301f4275cc6ddebe76e7c56643d 100644
--- a/openair1/PHY/CODING/TESTBENCH/smallblocktest.c
+++ b/openair1/PHY/CODING/TESTBENCH/smallblocktest.c
@@ -1,13 +1,10 @@
 #include <getopt.h>
 #include "SIMULATION/TOOLS/sim.h"
 #include "PHY/CODING/nrSmallBlock/nr_small_block_defs.h"
-#include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
+#include "coding_unitary_defs.h"
 
 //#define DEBUG_SMALLBLOCKTEST
 
-RAN_CONTEXT_t RC;
-PHY_VARS_UE ***PHY_vars_UE_g;
-uint16_t NB_UE_INST = 1;
 
 int main(int argc, char *argv[])
 {
diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c b/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
index 18db8a01fbc5b65fb2ab09d442181b67f1b56429..8fe115b23a1aed0416503985d2793be985634c82 100644
--- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
+++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
@@ -40,9 +40,9 @@
 #include "assertions.h"
 
 int8_t polar_decoder(double *input,
-					 uint32_t *out,
-					 t_nrPolar_params *polarParams,
-					 uint8_t listSize)
+                     uint32_t *out,
+                     const t_nrPolar_params *polarParams,
+                     uint8_t listSize)
 {
   //Assumes no a priori knowledge.
   uint8_t ***bit = nr_alloc_uint8_3D_array(polarParams->N, (polarParams->n+1), 2*listSize);
@@ -299,7 +299,7 @@ int8_t polar_decoder(double *input,
 
 int8_t polar_decoder_dci(double *input,
                          uint32_t *out,
-                         t_nrPolar_params *polarParams,
+                         const t_nrPolar_params *polarParams,
                          uint8_t listSize,
                          uint16_t n_RNTI) {
   uint8_t ***bit = nr_alloc_uint8_3D_array(polarParams->N, (polarParams->n+1), 2*listSize);
diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h b/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h
index a44a08a701256dcf1877abd7d1eeae4a491161df..c2e9fd938105fe2846f69f305fe0419632060fa0 100644
--- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h
+++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h
@@ -138,22 +138,22 @@ typedef struct nrPolar_params t_nrPolar_params;
 
 void polar_encoder(uint32_t *input,
                    uint32_t *output,
-                   t_nrPolar_params *polarParams);
+                   const t_nrPolar_params *polarParams);
 
 void polar_encoder_dci(uint32_t *in,
                        uint32_t *out,
-                       t_nrPolar_params *polarParams,
+                       const t_nrPolar_params *polarParams,
                        uint16_t n_RNTI);
 
 void polar_encoder_fast(uint64_t *A,
                         void *out,
                         int32_t crcmask,
                         uint8_t ones_flag,
-                        t_nrPolar_params *polarParams);
+                        const t_nrPolar_params *polarParams);
 
 int8_t polar_decoder(double *input,
-					 uint32_t *output,
-                     t_nrPolar_params *polarParams,
+                     uint32_t *output,
+                     const t_nrPolar_params *polarParams,
                      uint8_t listSize);
 
 uint32_t polar_decoder_int16(int16_t *input,
@@ -163,21 +163,21 @@ uint32_t polar_decoder_int16(int16_t *input,
 
 int8_t polar_decoder_dci(double *input,
                          uint32_t *out,
-                         t_nrPolar_params *polarParams,
+                         const t_nrPolar_params *polarParams,
                          uint8_t listSize,
                          uint16_t n_RNTI);
 
 void generic_polar_decoder(const t_nrPolar_params *pp,
-						   decoder_node_t *node);
+                           decoder_node_t *node);
 
 void applyFtoleft(const t_nrPolar_params *pp,
-				  decoder_node_t *node);
+                  decoder_node_t *node);
 
 void applyGtoright(const t_nrPolar_params *pp,
-				   decoder_node_t *node);
+                   decoder_node_t *node);
 
 void computeBeta(const t_nrPolar_params *pp,
-				 decoder_node_t *node);
+                 decoder_node_t *node);
 
 void build_decoder_tree(t_nrPolar_params *pp);
 void build_polar_tables(t_nrPolar_params *polarParams);
diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c b/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
index 27c062c217c1493292a1d567048a53c973dfa318..e61b3dff9b8ce02d597751dfdf9b1a96d727cec2 100644
--- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
+++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
@@ -43,7 +43,7 @@
 
 void polar_encoder(uint32_t *in,
                    uint32_t *out,
-                   t_nrPolar_params *polarParams) {
+                   const t_nrPolar_params *polarParams) {
   if (1) {//polarParams->idx == 0 || polarParams->idx == 1) { //PBCH or PDCCH
     /*
     uint64_t B = (((uint64_t)*in)&((((uint64_t)1)<<32)-1)) | (((uint64_t)crc24c((uint8_t*)in,polarParams->payloadBits)>>8)<<polarParams->payloadBits);
@@ -154,7 +154,7 @@ void polar_encoder(uint32_t *in,
 
 void polar_encoder_dci(uint32_t *in,
                        uint32_t *out,
-                       t_nrPolar_params *polarParams,
+                       const t_nrPolar_params *polarParams,
                        uint16_t n_RNTI) {
 #ifdef DEBUG_POLAR_ENCODER_DCI
   printf("[polar_encoder_dci] in: [0]->0x%08x \t [1]->0x%08x \t [2]->0x%08x \t [3]->0x%08x\n", in[0], in[1], in[2], in[3]);
@@ -251,9 +251,9 @@ void polar_encoder_dci(uint32_t *in,
 #endif
 }
 
-static inline void polar_rate_matching(t_nrPolar_params *polarParams,void *in,void *out) __attribute__((always_inline));
+static inline void polar_rate_matching(const t_nrPolar_params *polarParams,void *in,void *out) __attribute__((always_inline));
 
-static inline void polar_rate_matching(t_nrPolar_params *polarParams,void *in,void *out) {
+static inline void polar_rate_matching(const t_nrPolar_params *polarParams,void *in,void *out) {
 
   // handle rate matching with a single 128 bit word using bit shuffling
   // can be done with SIMD intrisics if needed
@@ -411,7 +411,7 @@ void polar_encoder_fast(uint64_t *A,
                         void *out,
                         int32_t crcmask,
                         uint8_t ones_flag,
-                        t_nrPolar_params *polarParams) {
+                        const t_nrPolar_params *polarParams) {
   //  AssertFatal(polarParams->K > 32, "K = %d < 33, is not supported yet\n",polarParams->K);
   AssertFatal(polarParams->K < 129, "K = %d > 128, is not supported yet\n",polarParams->K);
   AssertFatal(polarParams->payloadBits < 65, "payload bits = %d > 64, is not supported yet\n",polarParams->payloadBits);
diff --git a/openair1/PHY/INIT/init_top.c b/openair1/PHY/INIT/init_top.c
index 0990a58266ad7867bf7de52e748cada1d486e8d9..81fb28cc98eda5baa21e057313d0fe0f55ff82e8 100644
--- a/openair1/PHY/INIT/init_top.c
+++ b/openair1/PHY/INIT/init_top.c
@@ -73,7 +73,6 @@ void init_lte_top(LTE_DL_FRAME_PARMS *frame_parms) {
   init_unscrambling_lut();
   init_scrambling_lut();
   //set_taus_seed(1328);
-  init_sss();
 }
 
 void free_lte_top(void) {
diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c
index 2c7e3e88eb5b06cc8c9a03f7e8713266687b06f0..1daeb72187b81454ecc2ed359b234b86ec4dec69 100644
--- a/openair1/PHY/INIT/lte_init.c
+++ b/openair1/PHY/INIT/lte_init.c
@@ -35,7 +35,7 @@
 #include "assertions.h"
 #include <math.h>
 #include "nfapi/oai_integration/vendor_ext.h"
-
+#include <openair1/PHY/LTE_ESTIMATION/lte_estimation.h>
 extern uint32_t from_earfcn(int eutra_bandP,uint32_t dl_earfcn);
 extern int32_t get_uldl_offset(int eutra_bandP);
 
@@ -46,6 +46,17 @@ uint8_t         dmrs1_tab[8] = { 0, 2, 3, 4, 6, 8, 9, 10 };
 
 int             N_RB_DL_array[6] = { 6, 15, 25, 50, 75, 100 };
 
+#include "common/ran_context.h"
+extern RAN_CONTEXT_t RC;
+
+void pdsch_procedures(PHY_VARS_eNB *eNB,
+                      L1_rxtx_proc_t *proc,
+                      int harq_pid,
+                      LTE_eNB_DLSCH_t *dlsch,
+                      LTE_eNB_DLSCH_t *dlsch1);
+
+void init_sss(void);
+
 int
 l1_north_init_eNB () {
   int i,j;
@@ -347,6 +358,33 @@ void phy_config_sib13_eNB(module_id_t Mod_id,int CC_id,int mbsfn_Area_idx,
   lte_gold_mbsfn_khz_1dot25 (fp, RC.eNB[Mod_id][CC_id]->lte_gold_mbsfn_khz_1dot25_table, fp->Nid_cell_mbsfn);
 }
 
+void fill_subframe_mask(PHY_VARS_eNB *eNB) {
+
+  AssertFatal(eNB->subframe_mask!=NULL,"Subframe mask is null\n");
+  int32_t **dummy_tx=eNB->common_vars.txdataF;
+  eNB->common_vars.txdataF = eNB->subframe_mask;
+  
+  for (int sf=0;sf<10;sf++) {
+    if (subframe_select(&eNB->frame_parms,sf)==SF_DL) {
+      LTE_DL_eNB_HARQ_t *dlsch_harq=eNB->dlsch[0][0]->harq_processes[0];
+      L1_rxtx_proc_t proc;
+      proc.frame_tx=0;
+      proc.subframe_tx=sf;
+      eNB->dlsch[0][0]->harq_ids[0][sf]=0;
+      eNB->dlsch[0][0]->rnti=0x1234;
+      dlsch_harq->nb_rb=48;
+      dlsch_harq->rb_alloc[0]=(uint32_t)0xffffffff;
+      dlsch_harq->Qm=2;
+      dlsch_harq->Nl=1;
+      dlsch_harq->pdsch_start=1;
+      dlsch_harq->mimo_mode=(eNB->frame_parms.nb_antenna_ports_eNB>1) ? ALAMOUTI : SISO;
+      dlsch_harq->dl_power_off = 1;
+      computeRhoB_eNB(4,eNB->frame_parms.pdsch_config_common.p_b,eNB->frame_parms.nb_antenna_ports_eNB,eNB->dlsch[0][0],dlsch_harq->dl_power_off);
+      pdsch_procedures(eNB,&proc,0,eNB->dlsch[0][0],NULL);
+    }
+  }
+  eNB->common_vars.txdataF = dummy_tx;
+}
 
 int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
                      unsigned char is_secondary_eNB,
@@ -385,7 +423,9 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
   lte_gold (fp, eNB->lte_gold_table, fp->Nid_cell);
   generate_pcfich_reg_mapping (fp);
   generate_phich_reg_mapping (fp);
+  init_sss();
 
+  init_fde();
   for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) {
     eNB->first_run_timing_advance[UE_id] =
       1;   ///This flag used to be static. With multiple eNBs this does no longer work, hence we put it in the structure. However it has to be initialized with 1, which is performed here.
@@ -397,9 +437,13 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
   eNB->first_run_I0_measurements =
     1; ///This flag used to be static. With multiple eNBs this does no longer work, hence we put it in the structure. However it has to be initialized with 1, which is performed here.
 
+  eNB->use_DTX=1;
   if (NFAPI_MODE!=NFAPI_MODE_VNF) {
     common_vars->rxdata  = (int32_t **)NULL;
     common_vars->txdataF = (int32_t **)malloc16(NB_ANTENNA_PORTS_ENB*sizeof(int32_t *));
+    if (eNB->use_DTX==0) {
+      eNB->subframe_mask = (int32_t **)malloc16(NB_ANTENNA_PORTS_ENB*sizeof(int32_t *));
+    }
     common_vars->rxdataF = (int32_t **)malloc16(64*sizeof(int32_t *));
     LOG_I(PHY,"[INIT] NB_ANTENNA_PORTS_ENB:%d fp->nb_antenna_ports_eNB:%d\n", NB_ANTENNA_PORTS_ENB, fp->nb_antenna_ports_eNB);
 
@@ -409,17 +453,19 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
         LOG_I(PHY,"[INIT] common_vars->txdataF[%d] = %p (%lu bytes)\n",
               i,common_vars->txdataF[i],
               fp->ofdm_symbol_size*fp->symbols_per_tti*10*sizeof(int32_t));
+	if (eNB->use_DTX==0 && i<fp->nb_antenna_ports_eNB) eNB->subframe_mask[i] = malloc16_clear(fp->ofdm_symbol_size*fp->symbols_per_tti*10*sizeof(int32_t) );
       }
     }
 
+    LOG_I(PHY,"[INIT]SRS allocation\n");
     // Channel estimates for SRS
-    for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) {
-      srs_vars[UE_id].srs_ch_estimates = (int32_t **) malloc16 (64 * sizeof (int32_t *));
-      srs_vars[UE_id].srs_ch_estimates_time = (int32_t **) malloc16 (64 * sizeof (int32_t *));
+    for (int srs_id = 0; srs_id < NUMBER_OF_SRS_MAX; srs_id++) {
+      srs_vars[srs_id].srs_ch_estimates = (int32_t **) malloc16 (64 * sizeof (int32_t *));
+      srs_vars[srs_id].srs_ch_estimates_time = (int32_t **) malloc16 (64 * sizeof (int32_t *));
 
       for (i = 0; i < 64; i++) {
-        srs_vars[UE_id].srs_ch_estimates[i] = (int32_t *) malloc16_clear (sizeof (int32_t) * fp->ofdm_symbol_size);
-        srs_vars[UE_id].srs_ch_estimates_time[i] = (int32_t *) malloc16_clear (sizeof (int32_t) * fp->ofdm_symbol_size * 2);
+        srs_vars[srs_id].srs_ch_estimates[i] = (int32_t *) malloc16_clear (sizeof (int32_t) * fp->ofdm_symbol_size);
+        srs_vars[srs_id].srs_ch_estimates_time[i] = (int32_t *) malloc16_clear (sizeof (int32_t) * fp->ofdm_symbol_size * 2);
       }
     }                             //UE_id
 
@@ -427,10 +473,11 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
     init_ulsch_power_LUT ();
 
     // SRS
-    for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) {
-      srs_vars[UE_id].srs = (int32_t *) malloc16_clear (2 * fp->ofdm_symbol_size * sizeof (int32_t));
+    for (int srs_id = 0; srs_id < NUMBER_OF_SRS_MAX; srs_id++) {
+      srs_vars[srs_id].srs = (int32_t *) malloc16_clear (2 * fp->ofdm_symbol_size * sizeof (int32_t));
     }
 
+    LOG_I(PHY,"PRACH allocation\n");
     // PRACH
     prach_vars->prachF = (int16_t *) malloc16_clear (1024 * 2 * sizeof (int16_t));
     // assume maximum of 64 RX antennas for PRACH receiver
@@ -461,34 +508,33 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
       LOG_D(PHY,"[INIT] prach_vars->rxsigF[%d] = %p\n",i,prach_vars->rxsigF[i]);
       }*/
 
-    for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
+    printf("NUMBER_OF_ULSCH_MAX %d\n",NUMBER_OF_ULSCH_MAX);
+    for (int ULSCH_id=0; ULSCH_id<NUMBER_OF_ULSCH_MAX; ULSCH_id++) {
       //FIXME
-      pusch_vars[UE_id] = (LTE_eNB_PUSCH *) malloc16_clear (NUMBER_OF_UE_MAX * sizeof (LTE_eNB_PUSCH));
-      pusch_vars[UE_id]->rxdataF_ext = (int32_t **) malloc16 (2 * sizeof (int32_t *));
-      pusch_vars[UE_id]->rxdataF_ext2 = (int32_t **) malloc16 (2 * sizeof (int32_t *));
-      pusch_vars[UE_id]->drs_ch_estimates = (int32_t **) malloc16 (2 * sizeof (int32_t *));
-      pusch_vars[UE_id]->drs_ch_estimates_time = (int32_t **) malloc16 (2 * sizeof (int32_t *));
-      pusch_vars[UE_id]->rxdataF_comp = (int32_t **) malloc16 (2 * sizeof (int32_t *));
-      pusch_vars[UE_id]->ul_ch_mag = (int32_t **) malloc16 (2 * sizeof (int32_t *));
-      pusch_vars[UE_id]->ul_ch_magb = (int32_t **) malloc16 (2 * sizeof (int32_t *));
+      pusch_vars[ULSCH_id] = (LTE_eNB_PUSCH *) malloc16_clear (NUMBER_OF_ULSCH_MAX * sizeof (LTE_eNB_PUSCH));
+      pusch_vars[ULSCH_id]->rxdataF_ext = (int32_t **) malloc16 (4 * sizeof (int32_t *));
+      pusch_vars[ULSCH_id]->rxdataF_ext2 = (int32_t **) malloc16 (4 * sizeof (int32_t *));
+      pusch_vars[ULSCH_id]->drs_ch_estimates = (int32_t **) malloc16 (4 * sizeof (int32_t *));
+      pusch_vars[ULSCH_id]->drs_ch_estimates_time = (int32_t **) malloc16 (4 * sizeof (int32_t *));
+      pusch_vars[ULSCH_id]->rxdataF_comp = (int32_t **) malloc16 (4 * sizeof (int32_t *));
+      pusch_vars[ULSCH_id]->ul_ch_mag = (int32_t **) malloc16 (4 * sizeof (int32_t *));
+      pusch_vars[ULSCH_id]->ul_ch_magb = (int32_t **) malloc16 (4 * sizeof (int32_t *));
       AssertFatal (fp->ofdm_symbol_size > 127, "fp->ofdm_symbol_size %d<128\n", fp->ofdm_symbol_size);
       AssertFatal (fp->symbols_per_tti > 11, "fp->symbols_per_tti %d < 12\n", fp->symbols_per_tti);
       AssertFatal (fp->N_RB_UL > 5, "fp->N_RB_UL %d < 6\n", fp->N_RB_UL);
-
-      for (i = 0; i < 2; i++) {
-        // RK 2 times because of output format of FFT!
+      AssertFatal (fp->nb_antennas_rx > 0,"fp->nb_antennas_rx = %d\n",fp->nb_antennas_rx);
+      for (i = 0; i < fp->nb_antennas_rx; i++) {
         // FIXME We should get rid of this
-        pusch_vars[UE_id]->rxdataF_ext[i]      = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->N_RB_UL*12*fp->symbols_per_tti );
-        pusch_vars[UE_id]->rxdataF_ext2[i]     = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->N_RB_UL*12*fp->symbols_per_tti );
-        pusch_vars[UE_id]->drs_ch_estimates[i] = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->N_RB_UL*12*fp->symbols_per_tti );
-        pusch_vars[UE_id]->drs_ch_estimates_time[i] = (int32_t *)malloc16_clear( 2*sizeof(int32_t)*fp->ofdm_symbol_size );
-        pusch_vars[UE_id]->rxdataF_comp[i]     = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->N_RB_UL*12*fp->symbols_per_tti );
-        pusch_vars[UE_id]->ul_ch_mag[i]  = (int32_t *)malloc16_clear( fp->symbols_per_tti*sizeof(int32_t)*fp->N_RB_UL*12 );
-        pusch_vars[UE_id]->ul_ch_magb[i] = (int32_t *)malloc16_clear( fp->symbols_per_tti*sizeof(int32_t)*fp->N_RB_UL*12 );
+        pusch_vars[ULSCH_id]->rxdataF_ext[i]      = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->N_RB_UL*12*fp->symbols_per_tti );
+        pusch_vars[ULSCH_id]->drs_ch_estimates[i] = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->N_RB_UL*12*fp->symbols_per_tti );
+        pusch_vars[ULSCH_id]->drs_ch_estimates_time[i] = (int32_t *)malloc16_clear( 4*sizeof(int32_t)*fp->ofdm_symbol_size );
+        pusch_vars[ULSCH_id]->rxdataF_comp[i]     = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->N_RB_UL*12*fp->symbols_per_tti );
+        pusch_vars[ULSCH_id]->ul_ch_mag[i]  = (int32_t *)malloc16_clear( fp->symbols_per_tti*sizeof(int32_t)*fp->N_RB_UL*12 );
+        pusch_vars[ULSCH_id]->ul_ch_magb[i] = (int32_t *)malloc16_clear( fp->symbols_per_tti*sizeof(int32_t)*fp->N_RB_UL*12 );
       }
 
-      pusch_vars[UE_id]->llr = (int16_t *)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
-    } //UE_id
+      pusch_vars[ULSCH_id]->llr = (int16_t *)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
+    } //ULSCH_id
 
     for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++)
       eNB->UE_stats_ptr[UE_id] = &eNB->UE_stats[UE_id];
@@ -518,19 +564,19 @@ void phy_free_lte_eNB(PHY_VARS_eNB *eNB) {
   free_and_zero(common_vars->rxdataF);
 
   // Channel estimates for SRS
-  for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) {
+  for (int srs_id = 0; srs_id < NUMBER_OF_SRS_MAX; srs_id++) {
     for (i=0; i<64; i++) {
-      free_and_zero(srs_vars[UE_id].srs_ch_estimates[i]);
-      free_and_zero(srs_vars[UE_id].srs_ch_estimates_time[i]);
+      free_and_zero(srs_vars[srs_id].srs_ch_estimates[i]);
+      free_and_zero(srs_vars[srs_id].srs_ch_estimates_time[i]);
     }
 
-    free_and_zero(srs_vars[UE_id].srs_ch_estimates);
-    free_and_zero(srs_vars[UE_id].srs_ch_estimates_time);
+    free_and_zero(srs_vars[srs_id].srs_ch_estimates);
+    free_and_zero(srs_vars[srs_id].srs_ch_estimates_time);
   } //UE_id
 
   free_ul_ref_sigs();
 
-  for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) free_and_zero(srs_vars[UE_id].srs);
+  for (UE_id=0; UE_id<NUMBER_OF_SRS_MAX; UE_id++) free_and_zero(srs_vars[UE_id].srs);
 
   free_and_zero(prach_vars->prachF);
 
@@ -548,26 +594,26 @@ void phy_free_lte_eNB(PHY_VARS_eNB *eNB) {
   free_and_zero(prach_vars_br->prachF);
   free_and_zero(prach_vars->rxsigF[0]);
 
-  for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
-    for (i = 0; i < 2; i++) {
-      free_and_zero(pusch_vars[UE_id]->rxdataF_ext[i]);
-      free_and_zero(pusch_vars[UE_id]->rxdataF_ext2[i]);
-      free_and_zero(pusch_vars[UE_id]->drs_ch_estimates[i]);
-      free_and_zero(pusch_vars[UE_id]->drs_ch_estimates_time[i]);
-      free_and_zero(pusch_vars[UE_id]->rxdataF_comp[i]);
-      free_and_zero(pusch_vars[UE_id]->ul_ch_mag[i]);
-      free_and_zero(pusch_vars[UE_id]->ul_ch_magb[i]);
+  for (int ULSCH_id=0; ULSCH_id<NUMBER_OF_ULSCH_MAX; ULSCH_id++) {
+    for (i = 0; i < fp->nb_antennas_rx; i++) {
+      free_and_zero(pusch_vars[ULSCH_id]->rxdataF_ext[i]);
+      free_and_zero(pusch_vars[ULSCH_id]->rxdataF_ext2[i]);
+      free_and_zero(pusch_vars[ULSCH_id]->drs_ch_estimates[i]);
+      free_and_zero(pusch_vars[ULSCH_id]->drs_ch_estimates_time[i]);
+      free_and_zero(pusch_vars[ULSCH_id]->rxdataF_comp[i]);
+      free_and_zero(pusch_vars[ULSCH_id]->ul_ch_mag[i]);
+      free_and_zero(pusch_vars[ULSCH_id]->ul_ch_magb[i]);
     }
 
-    free_and_zero(pusch_vars[UE_id]->rxdataF_ext);
-    free_and_zero(pusch_vars[UE_id]->rxdataF_ext2);
-    free_and_zero(pusch_vars[UE_id]->drs_ch_estimates);
-    free_and_zero(pusch_vars[UE_id]->drs_ch_estimates_time);
-    free_and_zero(pusch_vars[UE_id]->rxdataF_comp);
-    free_and_zero(pusch_vars[UE_id]->ul_ch_mag);
-    free_and_zero(pusch_vars[UE_id]->ul_ch_magb);
-    free_and_zero(pusch_vars[UE_id]->llr);
-    free_and_zero(pusch_vars[UE_id]);
+    free_and_zero(pusch_vars[ULSCH_id]->rxdataF_ext);
+    free_and_zero(pusch_vars[ULSCH_id]->rxdataF_ext2);
+    free_and_zero(pusch_vars[ULSCH_id]->drs_ch_estimates);
+    free_and_zero(pusch_vars[ULSCH_id]->drs_ch_estimates_time);
+    free_and_zero(pusch_vars[ULSCH_id]->rxdataF_comp);
+    free_and_zero(pusch_vars[ULSCH_id]->ul_ch_mag);
+    free_and_zero(pusch_vars[ULSCH_id]->ul_ch_magb);
+    free_and_zero(pusch_vars[ULSCH_id]->llr);
+    free_and_zero(pusch_vars[ULSCH_id]);
   } //UE_id
 
   for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) eNB->UE_stats_ptr[UE_id] = NULL;
diff --git a/openair1/PHY/INIT/lte_init_ru.c b/openair1/PHY/INIT/lte_init_ru.c
index 8ad928f8a0c3ee69419227d9c9c5af490809ba46..a856c33999e27fe138f3591438e70088137408d8 100644
--- a/openair1/PHY/INIT/lte_init_ru.c
+++ b/openair1/PHY/INIT/lte_init_ru.c
@@ -21,9 +21,8 @@
 
 #include "phy_init.h"
 #include "SCHED/sched_eNB.h"
-#include "PHY/phy_extern.h"
 #include "PHY/LTE_REFSIG/lte_refsig.h"
-#include "SIMULATION/TOOLS/sim.h"
+//#include "SIMULATION/TOOLS/sim.h"
 #include "LTE_RadioResourceConfigCommonSIB.h"
 #include "LTE_RadioResourceConfigDedicated.h"
 #include "LTE_TDD-Config.h"
@@ -34,6 +33,8 @@
 
 void init_7_5KHz(void);
 
+extern const char ru_if_types[MAX_RU_IF_TYPES][20];
+
 int phy_init_RU(RU_t *ru) {
   LTE_DL_FRAME_PARMS *fp = ru->frame_parms;
   RU_CALIBRATION *calibration = &ru->calibration;
@@ -44,6 +45,7 @@ int phy_init_RU(RU_t *ru) {
   if (ru->is_slave == 1) {
     generate_ul_ref_sigs_rx();
   }
+  else generate_ul_ref_sigs();
 
   if (ru->if_south <= REMOTE_IF5) { // this means REMOTE_IF5 or LOCAL_RF, so allocate memory for time-domain signals
     // Time-domain signals
@@ -135,14 +137,14 @@ int phy_init_RU(RU_t *ru) {
       }
     }
 
-    AssertFatal(RC.nb_L1_inst <= NUMBER_OF_eNB_MAX,"eNB instances %d > %d\n",
-                RC.nb_L1_inst,NUMBER_OF_eNB_MAX);
-    LOG_D(PHY,"[INIT] %s() RC.nb_L1_inst:%d \n", __FUNCTION__, RC.nb_L1_inst);
+    AssertFatal(ru->num_eNB <= NUMBER_OF_eNB_MAX,"eNB instances %d > %d\n",
+                ru->num_eNB,NUMBER_OF_eNB_MAX);
+    LOG_D(PHY,"[INIT] %s() ru->num_eNB:%d \n", __FUNCTION__, ru->num_eNB);
     int starting_antenna_index=0;
 
     for (i=0; i<ru->idx; i++) starting_antenna_index+=ru->nb_tx;
 
-    for (i=0; i<RC.nb_L1_inst; i++) {
+    for (i=0; i<ru->num_eNB; i++) {
       for (p=0; p<15; p++) {
         LOG_D(PHY,"[INIT] %s() nb_antenna_ports_eNB:%d \n", __FUNCTION__, ru->eNB_list[i]->frame_parms.nb_antenna_ports_eNB);
 
@@ -240,7 +242,7 @@ void phy_free_RU(RU_t *ru) {
     free_and_zero(ru->prach_rxsigF[0]);
     /* ru->prach_rxsigF_br is not allocated -> don't free */
 
-    for (i = 0; i < RC.nb_L1_inst; i++) {
+    for (i = 0; i < ru->num_eNB; i++) {
       for (p = 0; p < 15; p++) {
         if (p < ru->eNB_list[i]->frame_parms.nb_antenna_ports_eNB || p == 5) {
           for (j=0; j<ru->nb_tx; j++) free_and_zero(ru->beam_weights[i][p][j]);
diff --git a/openair1/PHY/INIT/lte_init_ue.c b/openair1/PHY/INIT/lte_init_ue.c
index 64a5992a64345b80a0550bc90a581e96d75d2bc2..b75673581687731b5d51bd9eac0c9fd0d4802fde 100644
--- a/openair1/PHY/INIT/lte_init_ue.c
+++ b/openair1/PHY/INIT/lte_init_ue.c
@@ -39,6 +39,7 @@ void init_7_5KHz(void);
 
 uint8_t dmrs1_tab_ue[8] = {0,2,3,4,6,8,9,10};
 
+void init_sss(void);
 
 void phy_config_sib1_ue(module_id_t Mod_id,int CC_id,
                         uint8_t eNB_id,
@@ -629,6 +630,7 @@ int init_lte_ue_signal(PHY_VARS_UE *ue,
   init_frame_parms(&ue->frame_parms,1);
   lte_sync_time_init(&ue->frame_parms);
   init_lte_top(&ue->frame_parms);
+  init_sss();
   init_7_5KHz();
   init_ul_hopping(&ue->frame_parms);
   // many memory allocation sizes are hard coded
diff --git a/openair1/PHY/INIT/lte_param_init.c b/openair1/PHY/INIT/lte_param_init.c
index 1505ee018e9f2ae6c4c43078476c917da8916634..504c8fa80a0f284d732d549c3d6d2af6c03d7d12 100644
--- a/openair1/PHY/INIT/lte_param_init.c
+++ b/openair1/PHY/INIT/lte_param_init.c
@@ -25,7 +25,6 @@
 #include <execinfo.h>
 #include <signal.h>
 
-#include "SIMULATION/TOOLS/sim.h"
 #include "PHY/types.h"
 #include "PHY/defs_eNB.h"
 #include "PHY/defs_UE.h"
@@ -33,7 +32,9 @@
 #include "phy_init.h"
 #include "PHY/LTE_REFSIG/lte_refsig.h"
 #include "PHY/LTE_TRANSPORT/transport_common_proto.h"
-#include "targets/RT/USER/lte-softmodem.h"
+#include "executables/softmodem-common.h"
+#include "SIMULATION/TOOLS/sim.h"
+
 extern PHY_VARS_eNB *eNB;
 extern PHY_VARS_UE *UE;
 extern RU_t *ru;
diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c
index e05045d3ed00199bc2c19581b21072157eea0469..f9be62797472f1f3cc7b96977bc1bc08ab4b755e 100644
--- a/openair1/PHY/INIT/nr_init.c
+++ b/openair1/PHY/INIT/nr_init.c
@@ -110,7 +110,7 @@ int l1_north_init_gNB() {
 
 int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
                     unsigned char is_secondary_gNB,
-                    unsigned char abstraction_flag) {
+                    unsigned char lowmem_flag) {
   // shortcuts
   NR_DL_FRAME_PARMS *const fp       = &gNB->frame_parms;
   nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config;
@@ -128,6 +128,15 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
 
   while(gNB->configured == 0) usleep(10000);
 
+  if (lowmem_flag == 1) {
+    gNB->number_of_nr_dlsch_max = 2;
+    gNB->number_of_nr_ulsch_max = 2;
+  }
+  else {
+    gNB->number_of_nr_dlsch_max = NUMBER_OF_NR_DLSCH_MAX;
+    gNB->number_of_nr_ulsch_max = NUMBER_OF_NR_ULSCH_MAX;
+  }  
+
   load_dftslib();
 
   LOG_D(PHY,"[MSC_NEW][FRAME 00000][PHY_gNB][MOD %02"PRIu8"][]\n", gNB->Mod_id);
@@ -287,7 +296,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
 
   int N_RB_UL = cfg->carrier_config.ul_grid_size[cfg->ssb_config.scs_common.value].value;
 
-  for (int ULSCH_id=0; ULSCH_id<NUMBER_OF_NR_ULSCH_MAX; ULSCH_id++) {
+  for (int ULSCH_id=0; ULSCH_id<gNB->number_of_nr_ulsch_max; ULSCH_id++) {
     pusch_vars[ULSCH_id] = (NR_gNB_PUSCH *)malloc16_clear( sizeof(NR_gNB_PUSCH) );
     pusch_vars[ULSCH_id]->rxdataF_ext           = (int32_t **)malloc16(Prx*sizeof(int32_t *) );
     pusch_vars[ULSCH_id]->rxdataF_ext2          = (int32_t **)malloc16(Prx*sizeof(int32_t *) );
@@ -372,7 +381,7 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
   free_and_zero(prach_vars->prach_ifft[0]);
   free_and_zero(prach_vars->rxsigF[0]);
 */
-  for (int ULSCH_id=0; ULSCH_id<NUMBER_OF_NR_ULSCH_MAX; ULSCH_id++) {
+  for (int ULSCH_id=0; ULSCH_id<gNB->number_of_nr_ulsch_max; ULSCH_id++) {
     for (int i = 0; i < 2; i++) {
       free_and_zero(pusch_vars[ULSCH_id]->rxdataF_ext[i]);
       free_and_zero(pusch_vars[ULSCH_id]->rxdataF_ext2[i]);
@@ -563,9 +572,9 @@ void init_nr_transport(PHY_VARS_gNB *gNB) {
     AssertFatal(gNB->pucch[i]!=NULL,"Can't initialize pucch %d \n", i);
   }
 
-  for (i=0; i<NUMBER_OF_NR_DLSCH_MAX; i++) {
+  for (i=0; i<gNB->number_of_nr_dlsch_max; i++) {
 
-    LOG_I(PHY,"Allocating Transport Channel Buffers for DLSCH %d/%d\n",i,NUMBER_OF_NR_DLSCH_MAX);
+    LOG_I(PHY,"Allocating Transport Channel Buffers for DLSCH %d/%d\n",i,gNB->number_of_nr_dlsch_max);
 
     for (j=0; j<2; j++) {
       gNB->dlsch[i][j] = new_gNB_dlsch(fp,1,16,NSOFT,0,grid_size);
@@ -573,9 +582,9 @@ void init_nr_transport(PHY_VARS_gNB *gNB) {
     }
   }
 
-  for (i=0; i<NUMBER_OF_NR_ULSCH_MAX; i++) {
+  for (i=0; i<gNB->number_of_nr_ulsch_max; i++) {
 
-    LOG_I(PHY,"Allocating Transport Channel Buffer for ULSCH, UE %d\n",i);
+    LOG_I(PHY,"Allocating Transport Channel Buffer for ULSCH  %d/%d\n",i,gNB->number_of_nr_ulsch_max);
 
     for (j=0; j<2; j++) {
       // ULSCH for data
diff --git a/openair1/PHY/INIT/nr_init_ru.c b/openair1/PHY/INIT/nr_init_ru.c
index 2bd7d90620b369e48e43596c0c1d074d299f478a..5ab46ccda24b54e19d63d178806db7bc176c90a5 100644
--- a/openair1/PHY/INIT/nr_init_ru.c
+++ b/openair1/PHY/INIT/nr_init_ru.c
@@ -21,9 +21,6 @@
 
 #include "phy_init.h"
 #include "SCHED/sched_common.h"
-#include "PHY/phy_extern.h"
-#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
-#include "SIMULATION/TOOLS/sim.h"
 /*#include "RadioResourceConfigCommonSIB.h"
 #include "RadioResourceConfigDedicated.h"
 #include "TDD-Config.h"
@@ -33,6 +30,10 @@
 #include <math.h>
 #include "openair1/PHY/defs_RU.h"
 
+void init_prach_ru_list(RU_t *ru);
+
+extern const char ru_if_types[MAX_RU_IF_TYPES][20];
+
 int nr_phy_init_RU(RU_t *ru) {
 
   NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
@@ -44,7 +45,7 @@ int nr_phy_init_RU(RU_t *ru) {
 
   nfapi_nr_config_request_scf_t *cfg;
   ru->nb_log_antennas=0;
-  for (int n=0;n<RC.nb_nr_L1_inst;n++) {
+  for (int n=0;n<ru->num_gNB;n++) {
     cfg = &ru->config;
     if (cfg->carrier_config.num_tx_ant.value > ru->nb_log_antennas) ru->nb_log_antennas = cfg->carrier_config.num_tx_ant.value;   
   }
@@ -117,10 +118,10 @@ int nr_phy_init_RU(RU_t *ru) {
       }
     }
     
-    AssertFatal(RC.nb_nr_L1_inst <= NUMBER_OF_eNB_MAX,"gNB instances %d > %d\n",
-		RC.nb_nr_L1_inst,NUMBER_OF_gNB_MAX);
+    AssertFatal(ru->num_gNB <= NUMBER_OF_gNB_MAX,"gNB instances %d > %d\n",
+		ru->num_gNB,NUMBER_OF_gNB_MAX);
 
-    LOG_E(PHY,"[INIT] %s() RC.nb_nr_L1_inst:%d \n", __FUNCTION__, RC.nb_nr_L1_inst);
+    LOG_E(PHY,"[INIT] %s() ru->num_gNB:%d \n", __FUNCTION__, ru->num_gNB);
     
     int beam_count = 0;
     if (ru->nb_tx>1) {//Enable beamforming when nb_tx > 1
@@ -131,7 +132,7 @@ int nr_phy_init_RU(RU_t *ru) {
       AssertFatal(ru->nb_bfw==(beam_count*ru->nb_tx),"Number of beam weights from config file is %d while the expected number is %d",ru->nb_bfw,(beam_count*ru->nb_tx));
     
       int l_ind = 0;
-      for (i=0; i<RC.nb_nr_L1_inst; i++) {
+      for (i=0; i<ru->num_gNB; i++) {
         for (p=0;p<ru->nb_log_antennas;p++) {
           //if ((fp->L_ssb >> (63-p)) & 0x01)  {
 	    ru->beam_weights[i][p] = (int32_t **)malloc16_clear(ru->nb_tx*sizeof(int32_t*));
@@ -199,8 +200,7 @@ void nr_phy_free_RU(RU_t *ru)
 	free_and_zero(ru->prach_rxsigF[j][i]);
       }
     }
-    
-    for (i = 0; i < RC.nb_nr_L1_inst; i++) {
+    for (i = 0; i < ru->num_gNB; i++) {
       for (p = 0; p < 15; p++) {
 	  for (j=0; j<ru->nb_tx; j++) free_and_zero(ru->beam_weights[i][p][j]);
 	  free_and_zero(ru->beam_weights[i][p]);
diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c
index 855acc01ff1021d73c10c7b17463ac16d94fb0b9..a9c71d158256b3cbfdb5631977958fb34f19c6a5 100644
--- a/openair1/PHY/INIT/nr_init_ue.c
+++ b/openair1/PHY/INIT/nr_init_ue.c
@@ -28,6 +28,7 @@
 #include "TDD-Config.h"
 #include "MBSFN-SubframeConfigList.h"*/
 #include "openair1/PHY/defs_RU.h"
+#include "openair1/PHY/impl_defs_nr.h"
 #include "common/utils/LOG/vcd_signal_dumper.h"
 #include "assertions.h"
 #include <math.h>
@@ -196,7 +197,7 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
   }
 
   for (i=0;i<MAX_NR_OF_DL_ALLOCATIONS;i++){
-    ue->PDSCH_Config.pdsch_TimeDomainResourceAllocation[i] = (NR_PDSCH_TimeDomainResourceAllocation_t *)malloc16(sizeof(NR_PDSCH_TimeDomainResourceAllocation_t));
+    ue->PDSCH_Config.pdsch_TimeDomainResourceAllocation[i] = (PDSCH_TimeDomainResourceAllocation_t *)malloc16(sizeof(PDSCH_TimeDomainResourceAllocation_t));
     ue->PDSCH_Config.pdsch_TimeDomainResourceAllocation[i]->mappingType = typeA;
   }
 
diff --git a/openair1/PHY/INIT/phy_init.h b/openair1/PHY/INIT/phy_init.h
index 2db0ccc258f23b8992b40c6b87c1ca7e5c94f6d8..2ab610739d5fcfb772d2173e7f3cf5247de3a475 100644
--- a/openair1/PHY/INIT/phy_init.h
+++ b/openair1/PHY/INIT/phy_init.h
@@ -399,7 +399,7 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,int nb_connected_eNB,uint8_t abstractio
 void init_nr_ue_transport(PHY_VARS_NR_UE *ue,int abstraction_flag);
 void init_N_TA_offset(PHY_VARS_NR_UE *ue);
 void nr_dump_frame_parms(NR_DL_FRAME_PARMS *frame_parms);
-int phy_init_nr_gNB(PHY_VARS_gNB *gNB, unsigned char is_secondary_gNB, unsigned char abstraction_flag);
+int phy_init_nr_gNB(PHY_VARS_gNB *gNB, unsigned char is_secondary_gNB, unsigned char lowmem_flag);
 void nr_phy_config_request(NR_PHY_Config_t *gNB);
 void nr_phy_config_request_sim(PHY_VARS_gNB *gNB,int N_RB_DL,int N_RB_UL,int mu,int Nid_cell,uint64_t position_in_burst);
 void phy_free_nr_gNB(PHY_VARS_gNB *gNB);
@@ -408,6 +408,7 @@ void init_nr_transport(PHY_VARS_gNB *gNB);
 
 void init_dfts(void);
 
+void fill_subframe_mask(PHY_VARS_eNB *eNB);
 
 /** @} */
 #endif
diff --git a/openair1/PHY/LTE_ESTIMATION/freq_equalization.c b/openair1/PHY/LTE_ESTIMATION/freq_equalization.c
index 3fd58a4989701d795401ae296b3a4241e159136a..6d382bdd633c95870aed567cdb6b471b76a7ef8d 100644
--- a/openair1/PHY/LTE_ESTIMATION/freq_equalization.c
+++ b/openair1/PHY/LTE_ESTIMATION/freq_equalization.c
@@ -20,11 +20,11 @@
  */
 
 #include "PHY/defs_eNB.h"
-#include "PHY/phy_extern.h"
 #include "PHY/sse_intrin.h"
+#include "PHY/LTE_ESTIMATION/lte_estimation.h"
 
-// This is 512/(1:256) in __m128i format
-int16_t inv_ch[256*8] = {512,512,512,512,512,512,512,512,
+// This is 4096/(1:4096) in __m128i format
+__m128i inv_ch[4096];/* = {512,512,512,512,512,512,512,512,
                          256,256,256,256,256,256,256,256,
                          170,170,170,170,170,170,170,170,
                          128,128,128,128,128,128,128,128,
@@ -280,7 +280,11 @@ int16_t inv_ch[256*8] = {512,512,512,512,512,512,512,512,
                          2,2,2,2,2,2,2,2,
                          2,2,2,2,2,2,2,2,
                          2,2,2,2,2,2,2,2,
-                        };
+                        };*/
+
+void init_fde() {
+  for (int i=1;i<4096;i++) inv_ch[i] = _mm_set1_epi16(4096/i);
+}
 
 void freq_equalization(LTE_DL_FRAME_PARMS *frame_parms,
                        int32_t **rxdataF_comp,
@@ -313,12 +317,12 @@ void freq_equalization(LTE_DL_FRAME_PARMS *frame_parms,
 
     amp=(*((int16_t*)&ul_ch_mag128[re]));
 
-    if (amp>255)
-      amp=255;
+    if (amp>4095)
+      amp=4095;
 
-    //     printf("freq_eq: symbol %d re %d => %d,%d,%d, (%d) (%d,%d) => ",symbol,re,*((int16_t*)(&ul_ch_mag128[re])),amp,inv_ch[8*amp],*((int16_t*)(&ul_ch_mag128[re]))*inv_ch[8*amp],*(int16_t*)&(rxdataF_comp128[re]),*(1+(int16_t*)&(rxdataF_comp128[re])));
+    //printf("freq_eq: symbol %d re %d => mag %d,amp %d,inv %d, prod %d (%d,%d)\n",symbol,re,*((int16_t*)(&ul_ch_mag128[re])),amp,_mm_extract_epi16(inv_ch[amp],0),(*((int16_t*)(&ul_ch_mag128[re]))*_mm_extract_epi16(inv_ch[amp],0))>>3,*(int16_t*)&(rxdataF_comp128[re]),*(1+(int16_t*)&(rxdataF_comp128[re])));
 #if defined(__x86_64__) || defined(__i386__)
-    rxdataF_comp128[re] = _mm_mullo_epi16(rxdataF_comp128[re],*((__m128i *)&inv_ch[8*amp]));
+    rxdataF_comp128[re] = _mm_srai_epi16(_mm_mullo_epi16(rxdataF_comp128[re],inv_ch[amp]),3);
 
     if (Qm==4)
       ul_ch_mag128[re]  = _mm_set1_epi16(324);  // this is 512*2/sqrt(10)
@@ -327,7 +331,7 @@ void freq_equalization(LTE_DL_FRAME_PARMS *frame_parms,
       ul_ch_magb128[re] = _mm_set1_epi16(158);  // this is 512*2/sqrt(42)
     }
 #elif defined(__arm__)
-    rxdataF_comp128[re] = vmulq_s16(rxdataF_comp128[re],*((int16x8_t *)&inv_ch[8*amp]));
+    rxdataF_comp128[re] = vmulq_s16(rxdataF_comp128[re],inv_ch[amp]);
 
     if (Qm==4)
       ul_ch_mag128[re]  = vdupq_n_s16(324);  // this is 512*2/sqrt(10)
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_eNB.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_eNB.c
index f85162e095d4c711439ae0a9eceb2baf38bf1e83..aac8e71828d4499de5e686adfd70292e303fd48a 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_eNB.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_eNB.c
@@ -21,7 +21,6 @@
 
 #include "PHY/types.h"
 #include "PHY/defs_eNB.h"
-#include "PHY/phy_extern.h"
 
 #include "common/utils/LOG/vcd_signal_dumper.h"
 
@@ -118,12 +117,12 @@ int lte_est_timing_advance_pusch(LTE_DL_FRAME_PARMS *frame_parms,
   int temp, i, aa, max_pos=0, max_val=0;
   short Re,Im;
 
-  uint8_t cyclic_shift = 0;
-  int sync_pos = (frame_parms->ofdm_symbol_size-cyclic_shift*frame_parms->ofdm_symbol_size/12)%(frame_parms->ofdm_symbol_size);
+ // uint8_t cyclic_shift = 0;
+  int sync_pos = 0;//(frame_parms->ofdm_symbol_size-cyclic_shift*frame_parms->ofdm_symbol_size/12)%(frame_parms->ofdm_symbol_size);
   
   AssertFatal(frame_parms->ofdm_symbol_size > 127,"frame_parms->ofdm_symbol_size %d<128\n",frame_parms->ofdm_symbol_size);
-  AssertFatal(frame_parms->nb_antennas_rx >0 && frame_parms->nb_antennas_rx<3,"frame_parms->nb_antennas_rx %d not in [0,1]\n",
-	      frame_parms->nb_antennas_rx);
+  AssertFatal(frame_parms->nb_antennas_rx >0 && frame_parms->nb_antennas_rx<=4,"frame_parms->nb_antennas_rx %d not in [1...%d]\n",
+	      frame_parms->nb_antennas_rx,4);
   for (i = 0; i < frame_parms->ofdm_symbol_size; i++) {
     temp = 0;
 
@@ -142,9 +141,5 @@ int lte_est_timing_advance_pusch(LTE_DL_FRAME_PARMS *frame_parms,
   if (max_pos>frame_parms->ofdm_symbol_size/2)
     max_pos = max_pos-frame_parms->ofdm_symbol_size;
 
-  //#ifdef DEBUG_PHY
-  LOG_D(PHY,"max_pos = %d, sync_pos=%d\n",max_pos,sync_pos);
-  //#endif //DEBUG_PHY
-
   return max_pos - sync_pos;
 }
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
index 2d79158920bb821d71e126822e193c7d50f20fcd..7eeeb998bab51f083a207c7e679691b3bb418821 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
@@ -32,6 +32,30 @@
 int32_t rx_power_avg_eNB[3];
 
 
+void dump_I0_stats(FILE *fd,PHY_VARS_eNB *eNB) {
+
+
+    int min_I0=1000,max_I0=0;
+    int amin=0,amax=0;
+    for (int i=0; i<eNB->frame_parms.N_RB_UL; i++) {
+      if (i==(eNB->frame_parms.N_RB_UL>>1) - 1) i+=2;
+
+      if (eNB->measurements.n0_subband_power_tot_dB[i]<min_I0) {min_I0 = eNB->measurements.n0_subband_power_tot_dB[i]; amin=i;}
+
+      if (eNB->measurements.n0_subband_power_tot_dB[i]>max_I0) {max_I0 = eNB->measurements.n0_subband_power_tot_dB[i]; amax=i;}
+    }
+
+    for (int i=0; i<eNB->frame_parms.N_RB_UL; i++) {
+     fprintf(fd,"%2d.",eNB->measurements.n0_subband_power_tot_dB[i]-eNB->measurements.n0_subband_power_avg_dB);
+     if (i%25 == 24) fprintf(fd,"\n");
+    }
+
+    fprintf(fd,"\nmax_I0 %d (rb %d), min_I0 %d (rb %d), avg I0 %d\n", max_I0, amax, min_I0, amin, eNB->measurements.n0_subband_power_avg_dB);
+
+    fprintf(fd,"prach_I0 = %d.%d dB\n",eNB->measurements.prach_I0/10,eNB->measurements.prach_I0%10);
+
+
+}
 void lte_eNB_I0_measurements(PHY_VARS_eNB *eNB,
 			     int subframe,
                              module_id_t eNB_id,
@@ -87,46 +111,45 @@ void lte_eNB_I0_measurements(PHY_VARS_eNB *eNB,
       nb_rb++;
       for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
         measurements->n0_subband_power[aarx][rb] = 0;
-        for (int s=0;s<14-(frame_parms->Ncp<<1);s++) {
-      // select the 7th symbol in an uplink subframe
-	  offset = offset0 + (s*frame_parms->ofdm_symbol_size);
-	  ul_ch  = &common_vars->rxdataF[aarx][offset];
-	  len = 12;
+        for (int s=0;s<(14-(frame_parms->Ncp<<1));s++) {
+	        offset = offset0 + (s*frame_parms->ofdm_symbol_size);
+	        ul_ch  = &common_vars->rxdataF[aarx][offset];
+	        len = 12;
 	// just do first half of middle PRB for odd number of PRBs
-	  if (((frame_parms->N_RB_UL&1) == 1) && 
-	      (rb==(frame_parms->N_RB_UL>>1))) {
-	    len=6;
-	  }
+	        if (((frame_parms->N_RB_UL&1) == 1) && 
+	            (rb==(frame_parms->N_RB_UL>>1))) {
+	           len=6;
+	        }
 
-	  AssertFatal(ul_ch, "RX signal buffer (freq) problem");
+	        AssertFatal(ul_ch, "RX signal buffer (freq) problem");
 
 
-	  measurements->n0_subband_power[aarx][rb] += signal_energy_nodc(ul_ch,len);
+	        measurements->n0_subband_power[aarx][rb] += signal_energy_nodc(ul_ch,len);
 	  
-        }
+        } // symbol
         measurements->n0_subband_power[aarx][rb]/=(14-(frame_parms->Ncp<<1));
         measurements->n0_subband_power_dB[aarx][rb] = dB_fixed(measurements->n0_subband_power[aarx][rb]);
         n0_power_tot += measurements->n0_subband_power[aarx][rb];
 
-      }
+      } //antenna
       n0_power_tot/=frame_parms->nb_antennas_rx;
       n0_power_tot2 += n0_power_tot;
-      measurements->n0_subband_power_tot_dB[rb] = dB_fixed(n0_power_tot/frame_parms->nb_antennas_rx);
+      measurements->n0_subband_power_tot_dB[rb] = dB_fixed(n0_power_tot);
       measurements->n0_subband_power_tot_dBm[rb] = measurements->n0_subband_power_tot_dB[rb] - eNB->rx_total_gain_dB - dB_fixed(frame_parms->N_RB_UL);
       
-    }
-  }
+    } //rb not used in subframe
+  } //rb
   if (nb_rb>0) measurements->n0_subband_power_avg_dB = dB_fixed(n0_power_tot2/nb_rb);
 }
 
 void lte_eNB_srs_measurements(PHY_VARS_eNB *eNB,
                               module_id_t eNB_id,
-                              module_id_t UE_id,
+                              module_id_t srs_id,
                               unsigned char init_averaging)
 {
   LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
   PHY_MEASUREMENTS_eNB *measurements = &eNB->measurements;
-  LTE_eNB_SRS *srs_vars = &eNB->srs_vars[UE_id];
+  LTE_eNB_SRS *srs_vars = &eNB->srs_vars[srs_id];
 
   int32_t aarx,rx_power_correction;
   int32_t rx_power;
@@ -136,7 +159,7 @@ void lte_eNB_srs_measurements(PHY_VARS_eNB *eNB,
   //printf("Running eNB_srs_measurements for eNB_id %d\n",eNB_id);
 
   if (init_averaging == 1)
-    rx_power_avg_eNB[UE_id] = 0;
+    rx_power_avg_eNB[srs_id] = 0;
 
   rx_power = 0;
 
@@ -152,24 +175,24 @@ void lte_eNB_srs_measurements(PHY_VARS_eNB *eNB,
   for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
 
 
-    measurements->rx_spatial_power[UE_id][0][aarx] =
+    measurements->rx_spatial_power[srs_id][0][aarx] =
       ((signal_energy_nodc(&srs_vars->srs_ch_estimates[aarx][frame_parms->first_carrier_offset],
                            (frame_parms->N_RB_DL*6)) +
         signal_energy_nodc(&srs_vars->srs_ch_estimates[aarx][1],
                            (frame_parms->N_RB_DL*6)))*rx_power_correction) -
       measurements->n0_power[aarx];
 
-    measurements->rx_spatial_power[UE_id][0][aarx]<<=1;  // because of noise only in odd samples
+    measurements->rx_spatial_power[srs_id][0][aarx]<<=1;  // because of noise only in odd samples
 
-    measurements->rx_spatial_power_dB[UE_id][0][aarx] = (unsigned short) dB_fixed(measurements->rx_spatial_power[UE_id][0][aarx]);
+    measurements->rx_spatial_power_dB[srs_id][0][aarx] = (unsigned short) dB_fixed(measurements->rx_spatial_power[srs_id][0][aarx]);
 
-    measurements->wideband_cqi[UE_id][aarx] = measurements->rx_spatial_power[UE_id][0][aarx];
+    measurements->wideband_cqi[srs_id][aarx] = measurements->rx_spatial_power[srs_id][0][aarx];
 
 
 
     //      measurements->rx_power[UE_id][aarx]/=frame_parms->nb_antennas_tx;
-    measurements->wideband_cqi_dB[UE_id][aarx] = (unsigned short) dB_fixed(measurements->wideband_cqi[UE_id][aarx]);
-    rx_power += measurements->wideband_cqi[UE_id][aarx];
+    measurements->wideband_cqi_dB[srs_id][aarx] = (unsigned short) dB_fixed(measurements->wideband_cqi[srs_id][aarx]);
+    rx_power += measurements->wideband_cqi[srs_id][aarx];
     //      measurements->rx_avg_power_dB[UE_id] += measurements->rx_power_dB[UE_id][aarx];
   }
 
@@ -177,14 +200,14 @@ void lte_eNB_srs_measurements(PHY_VARS_eNB *eNB,
 
   //    measurements->rx_avg_power_dB[UE_id]/=frame_parms->nb_antennas_rx;
   if (init_averaging == 0)
-    rx_power_avg_eNB[UE_id] = ((k1*rx_power_avg_eNB[UE_id]) + (k2*rx_power))>>10;
+    rx_power_avg_eNB[srs_id] = ((k1*rx_power_avg_eNB[srs_id]) + (k2*rx_power))>>10;
   else
-    rx_power_avg_eNB[UE_id] = rx_power;
+    rx_power_avg_eNB[srs_id] = rx_power;
 
-  measurements->wideband_cqi_tot[UE_id] = dB_fixed2(rx_power,2*measurements->n0_power_tot);
+  measurements->wideband_cqi_tot[srs_id] = dB_fixed2(rx_power,2*measurements->n0_power_tot);
   // times 2 since we have noise only in the odd carriers of the srs comb
 
-  measurements->rx_rssi_dBm[UE_id] = (int32_t)dB_fixed(rx_power_avg_eNB[UE_id])-eNB->rx_total_gain_dB;
+  measurements->rx_rssi_dBm[srs_id] = (int32_t)dB_fixed(rx_power_avg_eNB[srs_id])-eNB->rx_total_gain_dB;
 
 
 
@@ -200,21 +223,21 @@ void lte_eNB_srs_measurements(PHY_VARS_eNB *eNB,
       else if (rb>12)
         ul_ch    = &srs_vars->srs_ch_estimates[aarx][6 + (rb-13)*12];
       else {
-        measurements->subband_cqi_dB[UE_id][aarx][rb] = 0;
+        measurements->subband_cqi_dB[srs_id][aarx][rb] = 0;
         continue;
       }
 
       // cqi
       if (aarx==0)
-        measurements->subband_cqi_tot[UE_id][rb]=0;
+        measurements->subband_cqi_tot[srs_id][rb]=0;
 
-      measurements->subband_cqi[UE_id][aarx][rb] = (signal_energy_nodc(ul_ch,12))*rx_power_correction - measurements->n0_power[aarx];
+      measurements->subband_cqi[srs_id][aarx][rb] = (signal_energy_nodc(ul_ch,12))*rx_power_correction - measurements->n0_power[aarx];
 
-      if (measurements->subband_cqi[UE_id][aarx][rb] < 0)
-        measurements->subband_cqi[UE_id][aarx][rb]=0;
+      if (measurements->subband_cqi[srs_id][aarx][rb] < 0)
+        measurements->subband_cqi[srs_id][aarx][rb]=0;
 
-      measurements->subband_cqi_tot[UE_id][rb] += measurements->subband_cqi[UE_id][aarx][rb];
-      measurements->subband_cqi_dB[UE_id][aarx][rb] = dB_fixed2(measurements->subband_cqi[UE_id][aarx][rb],
+      measurements->subband_cqi_tot[srs_id][rb] += measurements->subband_cqi[srs_id][aarx][rb];
+      measurements->subband_cqi_dB[srs_id][aarx][rb] = dB_fixed2(measurements->subband_cqi[srs_id][aarx][rb],
           2*measurements->n0_power[aarx]);
       // 2*n0_power since we have noise from the odd carriers in the comb of the srs
 
@@ -225,7 +248,7 @@ void lte_eNB_srs_measurements(PHY_VARS_eNB *eNB,
 
 
   for (rb=0; rb<frame_parms->N_RB_DL; rb++) {
-    measurements->subband_cqi_tot_dB[UE_id][rb] = dB_fixed2(measurements->subband_cqi_tot[UE_id][rb],
+    measurements->subband_cqi_tot_dB[srs_id][rb] = dB_fixed2(measurements->subband_cqi_tot[srs_id][rb],
         measurements->n0_power_tot);
     /*
     if (measurements->subband_cqi_tot_dB[UE_id][rb] == 65)
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_estimation.h b/openair1/PHY/LTE_ESTIMATION/lte_estimation.h
index fc40280853ec3adb48cc6866041508b8e3e0838b..6ba901e29f453d2dcbd63328abbb15a9c635a4e0 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_estimation.h
+++ b/openair1/PHY/LTE_ESTIMATION/lte_estimation.h
@@ -288,6 +288,8 @@ void freq_equalization(LTE_DL_FRAME_PARMS *frame_parms,
                        unsigned short Msc_RS,
                        unsigned char Qm);
 
+void init_fde(void);
 
+void dump_I0_stats(FILE *fd,PHY_VARS_eNB *eNB);
 /** @} */
 #endif
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
index 57b4c286612edda81863082dd167be4e54c14b79..1fbc8b7ef2bcd643a718245a9d3873edc3efeb0b 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
@@ -27,12 +27,9 @@
 
 //#include <string.h>
 #include <math.h>
-#include "LAYER2/MAC/mac.h"
 #include "PHY/defs_UE.h"
 #include "PHY/phy_extern_ue.h"
-#include "PHY_INTERFACE/phy_interface.h"
 #include "PHY/LTE_REFSIG/lte_refsig.h"
-#include "RRC/LTE/rrc_extern.h"
 
 // Note: this is for prototype of generate_drs_pusch (OTA synchronization of RRUs)
 #include "PHY/LTE_UE_TRANSPORT/transport_proto_ue.h"
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
index 1d1b16e036d22b5b02915ca208ed425ebefcd03a..eab9b3f321a76b1f4265d8d9cbb6166a29d91e31 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
@@ -20,7 +20,7 @@
  */
 
 #include "PHY/defs_eNB.h"
-#include "PHY/phy_extern.h"
+//#include "PHY/phy_extern.h"
 #include "PHY/sse_intrin.h"
 //#define DEBUG_CH
 #include "common/utils/LOG/log.h"
@@ -34,12 +34,18 @@ static int16_t ru_90c[2*128] = {32767, 0,32766, -402,32758, -804,32746, -1206,32
 
 #define SCALE 0x3FFF
 
+static const short conjugate[8]__attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1};
+static const short conjugate2[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1};
+
+extern unsigned short dftsizes[34];
+extern int16_t *ul_ref_sigs_rx[30][2][34];
+
 int32_t lte_ul_channel_estimation(LTE_DL_FRAME_PARMS *frame_parms,
                                   L1_rxtx_proc_t *proc,
-				  LTE_eNB_ULSCH_t * ulsch,
-				  int32_t **ul_ch_estimates,
-				  int32_t **ul_ch_estimates_time,
-				  int32_t **rxdataF_ext,
+                        				  LTE_eNB_ULSCH_t * ulsch,
+				                          int32_t **ul_ch_estimates,
+				                          int32_t **ul_ch_estimates_time,
+				                          int32_t **rxdataF_ext,
                                   module_id_t UE_id,
                                   unsigned char l,
                                   unsigned char Ns) {
diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
index 4b06f67bbe8accbc9f163ddce57ecb63c4002ad2..f11a39e24991e9de27bb8777682b622259f41c59 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
@@ -53,14 +53,12 @@
 //#undef LOG_D
 //#define LOG_D(A,B...) printf(B)
 
-int16_t find_dlsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type) {
-  uint16_t i;
-  int16_t first_free_index=-1;
+int find_dlsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type) {
+  int first_free_index=-1;
   AssertFatal(eNB!=NULL,"eNB is null\n");
 
-  for (i=0; i<NUMBER_OF_UE_MAX; i++) {
-    AssertFatal(eNB->dlsch[i]!=NULL,"eNB->dlsch[%d] is null\n",i);
-    AssertFatal(eNB->dlsch[i]!=NULL,"eNB->dlsch[%d][0] is null\n",i);
+  for (int i=0; i<NUMBER_OF_DLSCH_MAX; i++) {
+    if (eNB->dlsch[i][0] == NULL) continue;
     LOG_D(PHY,"searching for rnti %x : UE index %d=> harq_mask %x, rnti %x, first_free_index %d\n", rnti,i,eNB->dlsch[i][0]->harq_mask,eNB->dlsch[i][0]->rnti,first_free_index);
 
     if ((eNB->dlsch[i][0]->harq_mask >0) &&
@@ -78,13 +76,12 @@ int16_t find_dlsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type) {
 }
 
 
-int16_t find_ulsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type) {
-  uint16_t i;
-  int16_t first_free_index=-1;
+int find_ulsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type) {
+  int first_free_index=-1;
   AssertFatal(eNB!=NULL,"eNB is null\n");
 
-  for (i=0; i<NUMBER_OF_UE_MAX; i++) {
-    AssertFatal(eNB->ulsch[i]!=NULL,"eNB->ulsch[%d] is null\n",i);
+  for (int i=0; i<NUMBER_OF_ULSCH_MAX; i++) {
+    if (eNB->ulsch[i]==NULL) continue;
 
     if ((eNB->ulsch[i]->harq_mask >0) &&
         (eNB->ulsch[i]->rnti==rnti))       return i;
@@ -301,7 +298,7 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,
 
   UE_id = find_dlsch(rel8->rnti,eNB,SEARCH_EXIST_OR_FREE);
 
-  if( (UE_id<0) || (UE_id>=NUMBER_OF_UE_MAX) ) {
+  if( (UE_id<0) || (UE_id>=NUMBER_OF_DLSCH_MAX) ) {
     LOG_E(PHY,"illegal UE_id found!!! rnti %04x UE_id %d\n",rel8->rnti,UE_id);
     return;
   }
@@ -476,7 +473,7 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,
             ((DCI1A_20MHz_TDD_1_6_t *)dci_pdu)->harq_pid  = rel8->harq_process;
             ((DCI1A_20MHz_TDD_1_6_t *)dci_pdu)->dai       = rel8->downlink_assignment_index;
             ((DCI1A_20MHz_TDD_1_6_t *)dci_pdu)->padding   = 0;
-            //        printf("TDD 1A: mcs %d, rballoc %x,rv %d, NPRB %d\n",mcs,rballoc,rv,NPRB);
+            //LOG_D(PHY,"TDD 1A: mcs %d, rballoc %x,rv %d, NPRB %d\n",rel8->mcs_1,rel8->resource_block_coding,rel8->redundancy_version_1,NPRB);
           } else {
             dci_alloc->dci_length                         = sizeof_DCI1A_20MHz_FDD_t;
             ((DCI1A_20MHz_FDD_t *)dci_pdu)->type          = 1;
@@ -535,7 +532,7 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,
 
       dlsch0->harq_mask |= (1 << rel8->harq_process);
 
-      if (rel8->rnti_type == 1) LOG_D(PHY,"DCI 1A: round %d, mcs %d, TBS %d, rballoc %x, rv %d, rnti %x, harq process %d\n",dlsch0_harq->round,rel8->mcs_1,dlsch0_harq->TBS,rel8->resource_block_coding,
+      if (rel8->rnti != SI_RNTI) LOG_D(PHY,"DCI 1A: round %d, mcs %d, TBS %d, rballoc %x, rv %d, rnti %x, harq process %d\n",dlsch0_harq->round,rel8->mcs_1,dlsch0_harq->TBS,rel8->resource_block_coding,
                                         rel8->redundancy_version_1,rel8->rnti,rel8->harq_process);
 
       break;
@@ -1550,7 +1547,7 @@ void fill_mdci_and_dlsch(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc,mDCI_ALLOC_t *dc
   dci_alloc->i0 = rel13->initial_transmission_sf_io;
   UE_id = find_dlsch (rel13->rnti, eNB, SEARCH_EXIST_OR_FREE);
   AssertFatal (UE_id != -1, "no free or exiting dlsch_context\n");
-  AssertFatal (UE_id < NUMBER_OF_UE_MAX, "returned UE_id %d >= %d(NUMBER_OF_UE_MAX)\n", UE_id, NUMBER_OF_UE_MAX);
+  AssertFatal (UE_id < NUMBER_OF_DLSCH_MAX, "returned UE_id %d >= %d(NUMBER_OF_DLSCH_MAX)\n", UE_id, NUMBER_OF_DLSCH_MAX);
   dlsch0 = eNB->dlsch[UE_id][0];
   dlsch0_harq = dlsch0->harq_processes[rel13->harq_process];
   dci_alloc->ra_flag = 0;
@@ -1955,7 +1952,7 @@ void fill_dci0(PHY_VARS_eNB *eNB,int frame,int subframe,L1_rxtx_proc_t *proc,
   if(frame_parms->frame_type == TDD) {
     UE_id = find_ulsch(pdu->dci_pdu_rel8.rnti, eNB,SEARCH_EXIST_OR_FREE);
 
-    if(UE_id != -1) {
+    if(UE_id >=0 -1 || UE_id < NUMBER_OF_ULSCH_MAX) {
       eNB->ulsch[UE_id]->harq_processes[pdu->dci_pdu_rel8.harq_pid]->V_UL_DAI = dai +1;
     }
   }
diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c b/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c
index 583d12eedb4a6d86f99e4ec9bbddcc4f0fc80b6e..64e74ebfbf80341dd7d1b70d74240769b90858dd 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c
@@ -32,7 +32,6 @@
 
 #include "PHY/defs_eNB.h"
 #include "PHY/phy_extern.h"
-#include "SCHED/sched_eNB.h"
 #ifdef DEBUG_DCI_TOOLS
 #include "PHY/phy_vars.h"
 #endif
@@ -43,7 +42,6 @@
 //#define DEBUG_HARQ
 
 
-#include "LAYER2/MAC/mac.h"
 
 //#define DEBUG_DCI
 
@@ -100,7 +98,6 @@ uint16_t RIV2nb_rb_LUT100[6000];
 uint16_t RIV2first_rb_LUT100[6000];
 uint16_t RIV_max100=0;
 
-extern RAN_CONTEXT_t RC;
 
 extern uint32_t current_dlsch_cqi;
 
@@ -273,15 +270,6 @@ uint16_t get_nCCE(uint8_t num_pdcch_symbols,LTE_DL_FRAME_PARMS *frame_parms,uint
 
 
 
-uint16_t get_nCCE_mac(uint8_t Mod_id,uint8_t CC_id,int num_pdcch_symbols,int subframe)
-{
-
-  // check for eNB only !
-  return(get_nCCE(num_pdcch_symbols,
-		  &RC.eNB[Mod_id][CC_id]->frame_parms,
-		  get_mi(&RC.eNB[Mod_id][CC_id]->frame_parms,subframe)));
-}
-
 
 void conv_eMTC_rballoc (uint16_t resource_block_coding, uint32_t N_RB_DL, uint32_t * rb_alloc)
 {
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
index 3eb44d98fa69abb1935cd7d24e4ea7d0a95ada5f..b5bcb0848d4d489f6ba862f21f81ddc74aba7fec 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
@@ -96,6 +96,7 @@ void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch) {
 }
 
 
+
 LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,
                                unsigned char Mdlharq,
                                uint32_t Nsoft,
@@ -110,7 +111,7 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,
 
   switch (N_RB_DL) {
   case 6:
-    bw_scaling =16;
+    bw_scaling = 4;
     break;
 
   case 25:
@@ -160,7 +161,7 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,
 
     for (i=0; i<Mdlharq; i++) {
       dlsch->harq_processes[i] = (LTE_DL_eNB_HARQ_t *)malloc16(sizeof(LTE_DL_eNB_HARQ_t));
-      LOG_T(PHY, "Required mem size %d (bw scaling %d), dlsch->harq_processes[%d] %p\n",
+      LOG_I(PHY, "Required DLSCH mem size %d (bw scaling %d), dlsch->harq_processes[%d] %p\n",
             MAX_DLSCH_PAYLOAD_BYTES/bw_scaling,bw_scaling, i,dlsch->harq_processes[i]);
 
       if (dlsch->harq_processes[i]) {
@@ -169,9 +170,9 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,
         dlsch->harq_processes[i]->b = (unsigned char *)malloc16(MAX_DLSCH_PAYLOAD_BYTES/bw_scaling);
 
         if (dlsch->harq_processes[i]->b) {
-          bzero(dlsch->harq_processes[i]->b,MAX_DLSCH_PAYLOAD_BYTES/bw_scaling);
+          memset(dlsch->harq_processes[i]->b,0,MAX_DLSCH_PAYLOAD_BYTES/bw_scaling);
         } else {
-          printf("Can't get b\n");
+          AssertFatal(1==0,"Can't get b\n");
           exit_flag=1;
         }
 
@@ -181,15 +182,15 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,
             dlsch->harq_processes[i]->c[r] = (uint8_t *)malloc16(((r==0)?8:0) + 3+ 768);
 
             if (dlsch->harq_processes[i]->c[r]) {
-              bzero(dlsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+ 768);
+              memset(dlsch->harq_processes[i]->c[r],0,((r==0)?8:0) + 3+ 768);
             } else {
-              printf("Can't get c\n");
+              AssertFatal(1==0,"Can't get c\n");
               exit_flag=2;
             }
           }
         }
       } else {
-        printf("Can't get harq_p %d\n",i);
+        AssertFatal(1==0,"Can't get harq_p %d\n",i);
         exit_flag=3;
       }
     }
@@ -203,7 +204,7 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,
     }
   }
 
-  LOG_D(PHY,"new_eNB_dlsch exit flag %d, size of  %ld\n",
+  LOG_I(PHY,"new_eNB_dlsch exit flag %d, size of  %ld\n",
         exit_flag, sizeof(LTE_eNB_DLSCH_t));
   free_eNB_dlsch(dlsch);
   return(NULL);
@@ -360,6 +361,7 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
 
   proc->nbEncode=0;
 
+
   //  if (hadlsch->Ndi == 1) {  // this is a new packet
   if (hadlsch->round == 0) {  // this is a new packet
     // Add 24-bit crc (polynomial A) to payload
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
index 347fbb026be76a8a14f159f3bd774c5f30562386..aba4a464f2bcbbfbef7b008b4801216891674ea0 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
@@ -2375,16 +2375,14 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
   for (l=num_pdcch_symbols; l<nsymb; l++) {
 
   if (dlsch0 != NULL ) {
-#ifdef DEBUG_DLSCH_MODULATION
-    LOG_I(PHY,"Generating DLSCH (harq_pid %d,mimo %d, pmi_alloc0 %lx, mod0 %d, mod1 %d, rb_alloc[0] %d)\n",
-            harq_pid,
+     LOG_D(PHY,"Generating DLSCH (num_pdcch_symb %d harq_pid %d,mimo %d, pmi_alloc0 %lx, mod0 %d, mod1 %d, rb_alloc[0] %x)\n",
+            num_pdcch_symbols,harq_pid,
             dlsch0_harq->mimo_mode,
             pmi2hex_2Ar2(dlsch0_harq->pmi_alloc),
             mod_order0,
             mod_order1,
             rb_alloc[0]
             );
-#endif
   }
 
     if (frame_parms->Ncp==0) { // normal prefix
@@ -2980,7 +2978,7 @@ int allocate_REs_in_RB_MCH_khz_1dot25(int32_t **txdataF,
 
       case 2:  //QPSK
 
-                  LOG_D(PHY,"%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
+      LOG_D(PHY,"%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
       ((int16_t*)&txdataF[0][tti_offset])[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i
 
       *jj = *jj + 1;
@@ -3082,7 +3080,7 @@ int mch_modulation_khz_1dot25(int32_t **txdataF,
   uint8_t skip_dc=0;
   uint8_t mod_order = dlsch->harq_processes[0]->Qm;
   int16_t qam16_table_a[4],qam64_table_a[8];//,qam16_table_b[4],qam64_table_b[8];
-  int16_t *qam_table_s;
+  int16_t *qam_table_s=qam16_table_a;
 
   nsymb_pmch = 1;
   nsymb = (frame_parms->Ncp == NORMAL) ? 14 : 12;
@@ -3125,12 +3123,8 @@ int mch_modulation_khz_1dot25(int32_t **txdataF,
 
       }
 
-      if (mod_order == 4)
-        qam_table_s = qam16_table_a;
-      else if (mod_order == 6)
+      if (mod_order == 6)
         qam_table_s = qam64_table_a;
-      else
-        qam_table_s = NULL;
 
       //LOG_I(PHY,"Allocated rb %d, subframe_offset %d,amp %d\n",rb,subframe_offset,amp);
       allocate_REs_in_RB_MCH_khz_1dot25(txdataF,
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c b/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c
index b03f59fb784c0f6a49d50710f972ab6ad51c193f..015a95a8624744b631f844b0dc442bc08db3844a 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c
@@ -113,9 +113,6 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
     x2 = ((Ns>>1)<<9) + frame_parms->Nid_cell_mbsfn; //this is c_init in 36.211 Sec 6.3.1 for PMCH
   }
 
-#ifdef DEBUG_SCRAMBLING
-  printf("scrambling: i0 %d rnti %x, q %d, Ns %d, Nid_cell %d, G %d x2 %x\n",dlsch->i0,dlsch->rnti,q,Ns,frame_parms->Nid_cell, G, x2);
-#endif
   s = lte_gold_generic(&x1, &x2, 1);
 
   for (n=0; n<(1+(G>>5)); n++) {
diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.c b/openair1/PHY/LTE_TRANSPORT/if4_tools.c
index 95ad42002823d5f836bf303369c9b8c899f915aa..09c0b4ba0f80a39ddf83c403035e92506b0b9062 100644
--- a/openair1/PHY/LTE_TRANSPORT/if4_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.c
@@ -30,10 +30,13 @@
 * \warning
 */
 
-#include "PHY/defs_eNB.h"
+#include <stdio.h>
+//#include "PHY/defs_eNB.h"
+#include "PHY/defs_RU.h"
 #include "PHY/TOOLS/alaw_lut.h"
-#include "PHY/phy_extern.h"
-#include "SCHED/sched_eNB.h"
+//#include "PHY/phy_extern.h"
+//#include "SCHED/sched_eNB.h"
+lte_subframe_t subframe_select(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe);
 
 //#include "targets/ARCH/ETHERNET/USERSPACE/LIB/if_defs.h"
 #include "targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h"
diff --git a/openair1/PHY/LTE_TRANSPORT/if5_tools.c b/openair1/PHY/LTE_TRANSPORT/if5_tools.c
index f39f3ef872021d12fb73273f7a165e104d59cf75..e2bec337aa44be16b556b2b78ea8834cec179473 100644
--- a/openair1/PHY/LTE_TRANSPORT/if5_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/if5_tools.c
@@ -31,11 +31,11 @@
 */
 
 #include <time.h>
-#include "PHY/defs_eNB.h"
+#include <stdio.h>
+#include "PHY/defs_RU.h"
 #include "PHY/TOOLS/alaw_lut.h"
 //#include "targets/ARCH/ETHERNET/USERSPACE/LIB/if_defs.h"
 #include "targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h"
-#include <intertask_interface.h>
 #include "common/utils/LOG/vcd_signal_dumper.h"
 //#define DEBUG_DL_MOBIPASS
 //#define DEBUG_UL_MOBIPASS
@@ -1469,7 +1469,7 @@ void recv_IF5(RU_t *ru, openair0_timestamp *proc_timestamp, int subframe, uint16
         // HYPOTHESIS: first packet per subframe has lowest timestamp of subframe
         // should detect out of order and act accordingly ....
         AssertFatal(aid==0 || aid==1,"aid %d != 0 or 1\n",aid);
-        //LOG_I(PHY,"rxp[%d] %p, dest %p, offset %d (%lld,%lld)\n",aid,rxp[aid],rxp[aid]+(timestamp[packet_id]-timestamp[0]),(timestamp[packet_id]-timestamp[0]),timestamp[packet_id],timestamp[0]);
+        LOG_D(PHY,"rxp[%d] %p, dest %p, offset %d (%llu,%llu)\n",aid,rxp[aid],rxp[aid]+(timestamp[packet_id]-timestamp[0]),(int)(timestamp[packet_id]-timestamp[0]),(long long unsigned int)timestamp[packet_id],(long long unsigned int)timestamp[0]);
         memcpy((void*)(rxp[aid]+(timestamp[packet_id]-timestamp[0])),
                (void*)temp_rx,
                spp_eth<<2);
diff --git a/openair1/PHY/LTE_TRANSPORT/pbch.c b/openair1/PHY/LTE_TRANSPORT/pbch.c
index dfa990269ec864293d57ebf0eac259cd4d483b91..8e9a9688274bb38ca22581b85d4da8b849396fe5 100644
--- a/openair1/PHY/LTE_TRANSPORT/pbch.c
+++ b/openair1/PHY/LTE_TRANSPORT/pbch.c
@@ -72,6 +72,7 @@ int allocate_pbch_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms,
   first_re=0;
   last_re=12;
 
+
   for (re=first_re; re<last_re; re++) {
 
     tti_offset = symbol_offset + re_off + re;
diff --git a/openair1/PHY/LTE_TRANSPORT/pmch.c b/openair1/PHY/LTE_TRANSPORT/pmch.c
index 7b508239a9fa6090fadad3da69ef733a2cbcfece..37fe0d17ae88a0973cc6b1f280ffee1815d0a9cc 100644
--- a/openair1/PHY/LTE_TRANSPORT/pmch.c
+++ b/openair1/PHY/LTE_TRANSPORT/pmch.c
@@ -24,22 +24,6 @@
 #include "transport_eNB.h"
 #include "transport_proto.h"
 #include "transport_common_proto.h"
-// Mask for identifying subframe for MBMS
-#define MBSFN_TDD_SF3 0x80// for TDD
-#define MBSFN_TDD_SF4 0x40
-#define MBSFN_TDD_SF7 0x20
-#define MBSFN_TDD_SF8 0x10
-#define MBSFN_TDD_SF9 0x08
-
-
-
-#define MBSFN_FDD_SF1 0x80// for FDD
-#define MBSFN_FDD_SF2 0x40
-#define MBSFN_FDD_SF3 0x20
-#define MBSFN_FDD_SF6 0x10
-#define MBSFN_FDD_SF7 0x08
-#define MBSFN_FDD_SF8 0x04
-
 
 
 
diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c
index 9e0fa239f67050ea51b17a040480f713fab15842..eb46a8d663df1d670857d0ad247945467024dcc8 100644
--- a/openair1/PHY/LTE_TRANSPORT/prach.c
+++ b/openair1/PHY/LTE_TRANSPORT/prach.c
@@ -31,7 +31,7 @@
  */
 #include "PHY/sse_intrin.h"
 #include "PHY/defs_eNB.h"
-#include "PHY/phy_extern.h"
+//#include "PHY/phy_extern.h"
 //#include "prach.h"
 #include "PHY/LTE_TRANSPORT/if4_tools.h"
 
@@ -40,6 +40,7 @@
 #include "prach_extern.h"
 #include <openair1/PHY/LTE_TRANSPORT/transport_proto.h>
 #include <executables/split_headers.h>
+#include "common/utils/lte/prach_utils.h"
 
 void rx_prach0(PHY_VARS_eNB *eNB,
                RU_t *ru,
@@ -84,7 +85,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
   uint8_t aa;
   int32_t lev;
   int16_t levdB;
-  int fft_size,log2_ifft_size;
+  int fft_size=0,log2_ifft_size;
   int16_t prach_ifft_tmp[2048*2] __attribute__((aligned(32)));
   int32_t *prach_ifft=(int32_t *)NULL;
   int32_t **prach_ifftp=(int32_t **)NULL;
@@ -112,7 +113,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
     prach_ConfigIndex   = fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[ce_level];
     Ncs_config          = fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig;
     restricted_set      = fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag;
-    n_ra_prb            = get_prach_prb_offset(fp,prach_ConfigIndex,
+    n_ra_prb            = get_prach_prb_offset(fp->frame_type,fp->tdd_config,fp->N_RB_UL,fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[ce_level],
                           fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],
                           tdd_mapindex,Nf);
     // update pointers to results for ce_level
@@ -124,7 +125,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
     prach_ConfigIndex   = fp->prach_config_common.prach_ConfigInfo.prach_ConfigIndex;
     Ncs_config          = fp->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig;
     restricted_set      = fp->prach_config_common.prach_ConfigInfo.highSpeedFlag;
-    n_ra_prb            = get_prach_prb_offset(fp,prach_ConfigIndex,
+    n_ra_prb            = get_prach_prb_offset(fp->frame_type,fp->tdd_config,fp->N_RB_UL,fp->prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
                           fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,
                           tdd_mapindex,Nf);
   }
@@ -140,7 +141,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
       rxsigF              = eNB->prach_vars_br.rxsigF[ce_level];
 
       if (LOG_DEBUGFLAG(PRACH)) {
-        if (((frame_prach)&1023) < 20) LOG_I(PHY,
+        if (((frame_prach)&1023) < 20) LOG_D(PHY,
               "PRACH (eNB) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d, rootSequenceIndex %d, repetition number %d,numRepetitionsPrePreambleAttempt %d\n",
               br_flag,ce_level,frame_prach,subframe,
               fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],
@@ -153,24 +154,24 @@ void rx_prach0(PHY_VARS_eNB *eNB,
       prachF            = eNB->prach_vars.prachF;
       rxsigF            = eNB->prach_vars.rxsigF[0];
 
-      if (LOG_DEBUGFLAG(PRACH)) {
-        if (((frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n", subframe,
+      //if (LOG_DEBUGFLAG(PRACH)) {
+        if (((frame_prach)&1023) < 20) LOG_D(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n", subframe,
               fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex,rootSequenceIndex);
-      }
+      //}
     }
   } else {
     if (br_flag == 1) {
       rxsigF            = ru->prach_rxsigF_br[ce_level];
 
       if (LOG_DEBUGFLAG(PRACH)) {
-        if (((frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
+        if (((frame_prach)&1023) < 20) LOG_D(PHY,"PRACH (RU) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
               br_flag,ce_level,frame_prach,subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex);
       }
     } else {
       rxsigF            = ru->prach_rxsigF[0];
 
       if (LOG_DEBUGFLAG(PRACH)) {
-        if (((frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
+        if (((frame_prach)&1023) < 20) LOG_D(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
               subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex);
       }
     }
@@ -299,11 +300,13 @@ void rx_prach0(PHY_VARS_eNB *eNB,
         case 6:
           if (prach_fmt == 4) {
             dft(DFT_256,prach2,rxsigF[aa],1);
+            fft_size=256;
           } else {
             dft(DFT_1536,prach2,rxsigF[aa],1);
 
             if (prach_fmt>1)
               dft(DFT_1536,prach2+3072,rxsigF[aa]+3072,1);
+            fft_size=1536;
           }
 
           break;
@@ -311,13 +314,14 @@ void rx_prach0(PHY_VARS_eNB *eNB,
         case 15:
           if (prach_fmt == 4) {
             dft(DFT_256,prach2,rxsigF[aa],1);
+            fft_size=256;
           } else {
             dft(DFT_3072,prach2,rxsigF[aa],1);
 
             if (prach_fmt>1)
               dft(DFT_3072,prach2+6144,rxsigF[aa]+6144,1);
           }
-
+          fft_size=3072;
           break;
 
         case 25:
@@ -339,11 +343,13 @@ void rx_prach0(PHY_VARS_eNB *eNB,
         case 50:
           if (prach_fmt == 4) {
             dft(DFT_2048,prach2,rxsigF[aa],1);
+            fft_size=2048;
           } else {
             dft(DFT_12288,prach2,rxsigF[aa],1);
 
             if (prach_fmt>1)
               dft(DFT_12288,prach2+24576,rxsigF[aa]+24576,1);
+            fft_size=12288;
           }
 
           break;
@@ -351,11 +357,13 @@ void rx_prach0(PHY_VARS_eNB *eNB,
         case 75:
           if (prach_fmt == 4) {
             dft(DFT_3072,prach2,rxsigF[aa],1);
+            fft_size=3072;
           } else {
             dft(DFT_18432,prach2,rxsigF[aa],1);
 
             if (prach_fmt>1)
               dft(DFT_18432,prach2+36864,rxsigF[aa]+36864,1);
+            fft_size=18432;
           }
 
           break;
@@ -364,20 +372,24 @@ void rx_prach0(PHY_VARS_eNB *eNB,
           if (fp->threequarter_fs==0) {
             if (prach_fmt == 4) {
               dft(DFT_4096,prach2,rxsigF[aa],1);
+              fft_size=2048;
             } else {
               dft(DFT_24576,prach2,rxsigF[aa],1);
 
               if (prach_fmt>1)
                 dft(DFT_24576,prach2+49152,rxsigF[aa]+49152,1);
+              fft_size=24576;
             }
           } else {
             if (prach_fmt == 4) {
               dft(DFT_3072,prach2,rxsigF[aa],1);
+              fft_size=3072;
             } else {
               dft(DFT_18432,prach2,rxsigF[aa],1);
 
               if (prach_fmt>1)
                 dft(DFT_18432,prach2+36864,rxsigF[aa]+36864,1);
+              fft_size=18432;
             }
           }
 
@@ -547,7 +559,6 @@ void rx_prach0(PHY_VARS_eNB *eNB,
     }
 
     log2_ifft_size = 10;
-    fft_size = 6144;
 
     if (new_dft == 1) {
       new_dft = 0;
diff --git a/openair1/PHY/LTE_TRANSPORT/prach_common.c b/openair1/PHY/LTE_TRANSPORT/prach_common.c
index 393d4ca3f8bfd4c475dfbdfdbdfe9bef3f9582cb..e366e8edbc9008c1e5435fcdb4fb18405d6d4729 100644
--- a/openair1/PHY/LTE_TRANSPORT/prach_common.c
+++ b/openair1/PHY/LTE_TRANSPORT/prach_common.c
@@ -34,7 +34,7 @@
 #include "PHY/phy_extern.h"
 #include "PHY/phy_extern_ue.h"
 #include "common/utils/LOG/vcd_signal_dumper.h"
-
+#include "common/utils/lte/prach_utils.h"
 
 uint16_t NCS_unrestricted[16] = {0,13,15,18,22,26,32,38,46,59,76,93,119,167,279,419};
 uint16_t NCS_restricted[15]   = {15,18,22,26,32,38,46,55,68,82,100,128,158,202,237}; // high-speed case
@@ -44,6 +44,9 @@ int16_t ru[2*839]; // quantized roots of unity
 uint32_t ZC_inv[839]; // multiplicative inverse for roots u
 uint16_t du[838];
 
+extern PRACH_TDD_PREAMBLE_MAP tdd_preamble_map[64][7];
+
+/*
 // This is table 5.7.1-4 from 36.211
 PRACH_TDD_PREAMBLE_MAP tdd_preamble_map[64][7] = {
   // TDD Configuration Index 0
@@ -254,7 +257,7 @@ PRACH_TDD_PREAMBLE_MAP tdd_preamble_map[64][7] = {
   }
 };
 
-
+*/
 
 uint16_t prach_root_sequence_map0_3[838] = { 129, 710, 140, 699, 120, 719, 210, 629, 168, 671, 84, 755, 105, 734, 93, 746, 70, 769, 60, 779,
                                              2, 837, 1, 838,
@@ -378,192 +381,13 @@ uint8_t get_fid_prach_tdd(module_id_t Mod_id,uint8_t tdd_map_index) {
   return(tdd_preamble_map[fp->prach_config_common.prach_ConfigInfo.prach_ConfigIndex][fp->tdd_config].map[tdd_map_index].f_ra);
 }
 
-uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,lte_frame_type_t frame_type) {
-  if (frame_type == FDD) // FDD
-    return(prach_ConfigIndex>>4);
-  else {
-    if (prach_ConfigIndex < 20)
-      return (0);
-
-    if (prach_ConfigIndex < 30)
-      return (1);
-
-    if (prach_ConfigIndex < 40)
-      return (2);
-
-    if (prach_ConfigIndex < 48)
-      return (3);
-    else
-      return (4);
-  }
-}
-
-uint8_t get_prach_prb_offset(LTE_DL_FRAME_PARMS *frame_parms,
-                             uint8_t prach_ConfigIndex,
-                             uint8_t n_ra_prboffset,
-                             uint8_t tdd_mapindex, uint16_t Nf) {
-  lte_frame_type_t frame_type         = frame_parms->frame_type;
-  uint8_t tdd_config         = frame_parms->tdd_config;
-  uint8_t n_ra_prb;
-  uint8_t f_ra,t1_ra;
-  uint8_t prach_fmt = get_prach_fmt(prach_ConfigIndex,frame_type);
-  uint8_t Nsp=2;
-
-  if (frame_type == TDD) { // TDD
-    if (tdd_preamble_map[prach_ConfigIndex][tdd_config].num_prach==0) {
-      LOG_E(PHY, "Illegal prach_ConfigIndex %"PRIu8"", prach_ConfigIndex);
-      return(-1);
-    }
-
-    // adjust n_ra_prboffset for frequency multiplexing (p.36 36.211)
-    f_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[tdd_mapindex].f_ra;
-
-    if (prach_fmt < 4) {
-      if ((f_ra&1) == 0) {
-        n_ra_prb = n_ra_prboffset + 6*(f_ra>>1);
-      } else {
-        n_ra_prb = frame_parms->N_RB_UL - 6 - n_ra_prboffset + 6*(f_ra>>1);
-      }
-    } else {
-      if ((tdd_config >2) && (tdd_config<6))
-        Nsp = 2;
-
-      t1_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t1_ra;
-
-      if ((((Nf&1)*(2-Nsp)+t1_ra)&1) == 0) {
-        n_ra_prb = 6*f_ra;
-      } else {
-        n_ra_prb = frame_parms->N_RB_UL - 6*(f_ra+1);
-      }
-    }
-  } else { //FDD
-    n_ra_prb = n_ra_prboffset;
-  }
-
-  return(n_ra_prb);
-}
-
-int is_prach_subframe0(LTE_DL_FRAME_PARMS *frame_parms,uint8_t prach_ConfigIndex,uint32_t frame, uint8_t subframe) {
-  //  uint8_t prach_ConfigIndex  = frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex;
-  uint8_t tdd_config         = frame_parms->tdd_config;
-  uint8_t t0_ra;
-  uint8_t t1_ra;
-  uint8_t t2_ra;
-  int prach_mask = 0;
-
-  if (frame_parms->frame_type == FDD) { //FDD
-    //implement Table 5.7.1-2 from 36.211 (Rel-10, p.41)
-    if ((((frame&1) == 1) && (subframe < 9)) ||
-        (((frame&1) == 0) && (subframe == 9)))  // This is an odd frame, ignore even-only PRACH frames
-      if (((prach_ConfigIndex&0xf)<3) || // 0,1,2,16,17,18,32,33,34,48,49,50
-          ((prach_ConfigIndex&0x1f)==18) || // 18,50
-          ((prach_ConfigIndex&0xf)==15))   // 15,47
-        return(0);
-
-    switch (prach_ConfigIndex&0x1f) {
-      case 0:
-      case 3:
-        if (subframe==1) prach_mask = 1;
-
-        break;
-
-      case 1:
-      case 4:
-        if (subframe==4) prach_mask = 1;
-
-        break;
-
-      case 2:
-      case 5:
-        if (subframe==7) prach_mask = 1;
-
-        break;
-
-      case 6:
-        if ((subframe==1) || (subframe==6)) prach_mask=1;
-
-        break;
-
-      case 7:
-        if ((subframe==2) || (subframe==7)) prach_mask=1;
-
-        break;
-
-      case 8:
-        if ((subframe==3) || (subframe==8)) prach_mask=1;
-
-        break;
-
-      case 9:
-        if ((subframe==1) || (subframe==4) || (subframe==7)) prach_mask=1;
-
-        break;
-
-      case 10:
-        if ((subframe==2) || (subframe==5) || (subframe==8)) prach_mask=1;
-
-        break;
-
-      case 11:
-        if ((subframe==3) || (subframe==6) || (subframe==9)) prach_mask=1;
-
-        break;
-
-      case 12:
-        if ((subframe&1)==0) prach_mask=1;
-
-        break;
-
-      case 13:
-        if ((subframe&1)==1) prach_mask=1;
-
-        break;
-
-      case 14:
-        prach_mask=1;
-        break;
-
-      case 15:
-        if (subframe==9) prach_mask=1;
-
-        break;
-    }
-  } else { // TDD
-    AssertFatal(prach_ConfigIndex<64,
-                "Illegal prach_ConfigIndex %d for ",prach_ConfigIndex);
-    AssertFatal(tdd_preamble_map[prach_ConfigIndex][tdd_config].num_prach>0,
-                "Illegal prach_ConfigIndex %d for ",prach_ConfigIndex);
-    t0_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t0_ra;
-    t1_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t1_ra;
-    t2_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t2_ra;
-#ifdef PRACH_DEBUG
-    LOG_I(PHY,"[PRACH] Checking for PRACH format (ConfigIndex %d) in TDD subframe %d (%d,%d,%d)\n",
-          prach_ConfigIndex,
-          subframe,
-          t0_ra,t1_ra,t2_ra);
-#endif
-
-    if ((((t0_ra == 1) && ((frame &1)==0))||  // frame is even and PRACH is in even frames
-         ((t0_ra == 2) && ((frame &1)==1))||  // frame is odd and PRACH is in odd frames
-         (t0_ra == 0)) &&                                // PRACH is in all frames
-        (((subframe<5)&&(t1_ra==0)) ||                   // PRACH is in 1st half-frame
-         (((subframe>4)&&(t1_ra==1))))) {                // PRACH is in 2nd half-frame
-      if ((prach_ConfigIndex<48) &&                          // PRACH only in normal UL subframe
-          (((subframe%5)-2)==t2_ra)) prach_mask=1;
-      else if ((prach_ConfigIndex>47) && (((subframe%5)-1)==t2_ra)) prach_mask=1;      // PRACH can be in UpPTS
-    }
-  }
-
-  return(prach_mask);
-}
-
 int is_prach_subframe(LTE_DL_FRAME_PARMS *frame_parms, uint32_t frame, uint8_t subframe) {
   uint8_t prach_ConfigIndex  = frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex;
-  int prach_mask             = is_prach_subframe0(frame_parms, prach_ConfigIndex, frame, subframe);
+  int prach_mask             = is_prach_subframe0(frame_parms->tdd_config,frame_parms->frame_type, prach_ConfigIndex, frame, subframe);
 
   for (int i=0; i<4; i++) {
     if (frame_parms->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[i] == 1)
-      prach_mask |= (is_prach_subframe0(frame_parms, frame_parms->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[i],
+      prach_mask |= (is_prach_subframe0(frame_parms->tdd_config,frame_parms->frame_type, frame_parms->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[i],
                                         frame, subframe) << (i+1));
   }
 
diff --git a/openair1/PHY/LTE_TRANSPORT/prach_extern.h b/openair1/PHY/LTE_TRANSPORT/prach_extern.h
index 47fbd93ad7c964d2a15dd5215ca315e80a69f90b..3404646923adc9175b78a018f099f9ff2058a748 100644
--- a/openair1/PHY/LTE_TRANSPORT/prach_extern.h
+++ b/openair1/PHY/LTE_TRANSPORT/prach_extern.h
@@ -35,7 +35,7 @@
 
 #include "PHY/sse_intrin.h"
 #include "PHY/defs_eNB.h"
-#include "PHY/phy_extern.h"
+//#include "PHY/phy_extern.h"
 
 //#define PRACH_DEBUG 1
 //#define PRACH_WRITE_OUTPUT_DEBUG 1
@@ -74,17 +74,6 @@ uint8_t get_num_prach_tdd(module_id_t Mod_id);
 uint8_t get_fid_prach_tdd(module_id_t Mod_id,uint8_t tdd_map_index);
 
 
-uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,lte_frame_type_t frame_type);
-
-
-uint8_t get_prach_prb_offset(LTE_DL_FRAME_PARMS *frame_parms, 
-			     uint8_t prach_ConfigIndex, 
-			     uint8_t n_ra_prboffset,
-			     uint8_t tdd_mapindex, uint16_t Nf); 
-
-
-int is_prach_subframe0(LTE_DL_FRAME_PARMS *frame_parms,uint8_t prach_ConfigIndex,uint32_t frame, uint8_t subframe);
-
 int is_prach_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, uint8_t subframe);
 
 
diff --git a/openair1/PHY/LTE_TRANSPORT/pucch.c b/openair1/PHY/LTE_TRANSPORT/pucch.c
index c72fa1b4802ac37e10fde2517260856767b7cf64..585a9d92a5c623fb560cb467fef01e629bf6a598 100644
--- a/openair1/PHY/LTE_TRANSPORT/pucch.c
+++ b/openair1/PHY/LTE_TRANSPORT/pucch.c
@@ -65,10 +65,41 @@ int16_t cfo_pucch_ep[24*6] = {24278,-22005,29621,-14010,32412,-4808,32412,4807,2
 
 
 
+void dump_uci_stats(FILE *fd,PHY_VARS_eNB *eNB,int frame) {
+
+  int strpos=0;
+  char output[16384];
+
+  for (int i=0;i<NUMBER_OF_SCH_STATS_MAX;i++){
+    if (eNB->uci_stats[i].rnti>0) {
+      eNB_UCI_STATS_t *uci_stats = &eNB->uci_stats[i];
+      strpos+=sprintf(output+strpos,"UCI %d RNTI %x: pucch1_trials %d, pucch1_n0 %d dB, pucch1_thres %d dB, current pucch1_stat_pos %d dB, current pucch1_stat_neg %d dB, positive SR count %d\n",
+	i,uci_stats->rnti,uci_stats->pucch1_trials,eNB->measurements.n0_pucch_dB/*max(eNB->measurements.n0_subband_power_tot_dB[0], eNB->measurements.n0_subband_power_tot_dB[eNB->frame_parms.N_RB_UL-1])*/,uci_stats->pucch1_thres,dB_fixed(uci_stats->current_pucch1_stat_pos),dB_fixed(uci_stats->current_pucch1_stat_neg),uci_stats->pucch1_positive_SR);
+      strpos+=sprintf(output+strpos,"UCI %d RNTI %x: pucch1_low (%d,%d)dB pucch1_high (%d,%d)dB\n",
+	    i,uci_stats->rnti,
+            dB_fixed(uci_stats->pucch1_low_stat[0]),
+            dB_fixed(uci_stats->pucch1_low_stat[1]),
+            dB_fixed(uci_stats->pucch1_high_stat[0]),
+            dB_fixed(uci_stats->pucch1_high_stat[1]));
+      
+      strpos+=sprintf(output+strpos,"UCI %d RNTI %x: pucch1a_trials %d, pucch1a_stat (%d,%d), pucch1b_trials %d, pucch1b_stat (%d,%d) pucch1ab_DTX %d\n",
+            i,uci_stats->rnti,
+            uci_stats->pucch1a_trials,
+            uci_stats->current_pucch1a_stat_re,
+            uci_stats->current_pucch1a_stat_im,
+            uci_stats->pucch1b_trials,
+	    uci_stats->current_pucch1b_stat_re,
+	    uci_stats->current_pucch1b_stat_im,
+            uci_stats->pucch1ab_DTX);
+    }
+  }
+  if (fd) fprintf(fd,"%s",output);
+  else    printf("%s",output);  
+}
 /* PUCCH format3 >> */
 /* SubCarrier Demap */
 uint16_t pucchfmt3_subCarrierDeMapping( PHY_VARS_eNB *eNB,
-                                        int16_t SubCarrierDeMapData[NB_ANTENNAS_RX][14][12][2],
+                                        int16_t SubCarrierDeMapData[4][14][12][2],
                                         uint16_t n3_pucch ) {
   LTE_eNB_COMMON *eNB_common_vars  = &eNB->common_vars;
   LTE_DL_FRAME_PARMS  *frame_parms = &eNB->frame_parms;
@@ -118,8 +149,8 @@ uint16_t pucchfmt3_subCarrierDeMapping( PHY_VARS_eNB *eNB,
 }
 
 /* cyclic shift hopping remove */
-uint16_t pucchfmt3_Baseseq_csh_remove( int16_t SubCarrierDeMapData[NB_ANTENNAS_RX][14][12][2],
-                                       int16_t CshData_fmt3[NB_ANTENNAS_RX][14][12][2],
+uint16_t pucchfmt3_Baseseq_csh_remove( int16_t SubCarrierDeMapData[4][14][12][2],
+                                       int16_t CshData_fmt3[4][14][12][2],
                                        LTE_DL_FRAME_PARMS *frame_parms,
                                        uint8_t subframe,
                                        uint8_t ncs_cell[20][7] ) {
@@ -169,9 +200,9 @@ const int16_t TBL_3_SF5_GEN_N_DASH_NS[MAXROW_TBL_SF5_OS_IDX] = {0,3,6,8,10};
 const int16_t TBL_3_SF4_GEN_N_DASH_NS[MAXROW_TBL_SF4_OS_IDX] = {0,3,6,9};
 
 /* Channel estimation */
-uint16_t pucchfmt3_ChannelEstimation( int16_t SubCarrierDeMapData[NB_ANTENNAS_RX][14][12][2],
-                                      double delta_theta[NB_ANTENNAS_RX][12],
-                                      int16_t ChestValue[NB_ANTENNAS_RX][2][12][2],
+uint16_t pucchfmt3_ChannelEstimation( int16_t SubCarrierDeMapData[4][14][12][2],
+                                      double delta_theta[4][12],
+                                      int16_t ChestValue[4][2][12][2],
                                       int16_t *Interpw,
                                       uint8_t subframe,
                                       uint8_t shortened_format,
@@ -183,12 +214,12 @@ uint16_t pucchfmt3_ChannelEstimation( int16_t SubCarrierDeMapData[NB_ANTENNAS_RX
   int16_t         np, np_n, ip_ind=-1;
   //int16_t         npucch_sf;
   int16_t         calctmp[2];
-  int16_t         BsCshData[NB_ANTENNAS_RX][D_NSYM1SF][D_NSC1RB][2];
-  //int16_t         delta_theta_calctmp[NB_ANTENNAS_RX][4][D_NSC1RB][2], delta_theta_comp[NB_ANTENNAS_RX][D_NSC1RB][2];
-  int16_t         delta_theta_comp[NB_ANTENNAS_RX][D_NSC1RB][2];
-  int16_t         CsData_allavg[NB_ANTENNAS_RX][14][2];
-  int16_t         CsData_temp[NB_ANTENNAS_RX][D_NSYM1SF][D_NSC1RB][2];
-  int32_t         IP_CsData_allsfavg[NB_ANTENNAS_RX][14][4][2];
+  int16_t         BsCshData[4][D_NSYM1SF][D_NSC1RB][2];
+  //int16_t         delta_theta_calctmp[4][4][D_NSC1RB][2], delta_theta_comp[4][D_NSC1RB][2];
+  int16_t         delta_theta_comp[4][D_NSC1RB][2];
+  int16_t         CsData_allavg[4][14][2];
+  int16_t         CsData_temp[4][D_NSYM1SF][D_NSC1RB][2];
+  int32_t         IP_CsData_allsfavg[4][14][4][2];
   int32_t         IP_allavg[D_NPUCCH_SF5];
   //int16_t         temp_ch[2];
   int16_t         m[NUMBER_OF_UE_MAX], m_self=0, same_m_number;
@@ -432,9 +463,9 @@ uint16_t pucchfmt3_ChannelEstimation( int16_t SubCarrierDeMapData[NB_ANTENNAS_RX
 }
 
 /* Channel Equalization */
-uint16_t pucchfmt3_Equalization( int16_t CshData_fmt3[NB_ANTENNAS_RX][14][12][2],
-                                 int16_t ChdetAfterValue_fmt3[NB_ANTENNAS_RX][14][12][2],
-                                 int16_t ChestValue[NB_ANTENNAS_RX][2][12][2],
+uint16_t pucchfmt3_Equalization( int16_t CshData_fmt3[4][14][12][2],
+                                 int16_t ChdetAfterValue_fmt3[4][14][12][2],
+                                 int16_t ChestValue[4][2][12][2],
                                  LTE_DL_FRAME_PARMS *frame_parms) {
   int16_t aa, sltNo, symNo, k;
 
@@ -457,9 +488,9 @@ uint16_t pucchfmt3_Equalization( int16_t CshData_fmt3[NB_ANTENNAS_RX][14][12][2]
 }
 
 /* Frequency deviation remove AFC */
-uint16_t pucchfmt3_FrqDevRemove( int16_t ChdetAfterValue_fmt3[NB_ANTENNAS_RX][14][12][2],
-                                 double delta_theta[NB_ANTENNAS_RX][12],
-                                 int16_t RemoveFrqDev_fmt3[NB_ANTENNAS_RX][2][5][12][2],
+uint16_t pucchfmt3_FrqDevRemove( int16_t ChdetAfterValue_fmt3[4][14][12][2],
+                                 double delta_theta[4][12],
+                                 int16_t RemoveFrqDev_fmt3[4][2][5][12][2],
                                  LTE_DL_FRAME_PARMS *frame_parms ) {
   int16_t aa, sltNo, symNo1slt, k, n;
   double calctmp[2];
@@ -509,8 +540,8 @@ const int16_t TBL_3_SF4[MAXROW_TBL_SF4_fmt3][MAXCLM_TBL_SF4][2] = {
 };
 
 /* orthogonal sequence remove */
-uint16_t pucchfmt3_OrthSeqRemove( int16_t RemoveFrqDev_fmt3[NB_ANTENNAS_RX][2][5][12][2],
-                                  int16_t Fmt3xDataRmvOrth[NB_ANTENNAS_RX][2][5][12][2],
+uint16_t pucchfmt3_OrthSeqRemove( int16_t RemoveFrqDev_fmt3[4][2][5][12][2],
+                                  int16_t Fmt3xDataRmvOrth[4][2][5][12][2],
                                   uint8_t shortened_format,
                                   uint16_t n3_pucch,
                                   LTE_DL_FRAME_PARMS *frame_parms ) {
@@ -556,7 +587,7 @@ uint16_t pucchfmt3_OrthSeqRemove( int16_t RemoveFrqDev_fmt3[NB_ANTENNAS_RX][2][5
 }
 
 /* averaging antenna */
-uint16_t pucchfmt3_AvgAnt( int16_t Fmt3xDataRmvOrth[NB_ANTENNAS_RX][2][5][12][2],
+uint16_t pucchfmt3_AvgAnt( int16_t Fmt3xDataRmvOrth[4][2][5][12][2],
                            int16_t Fmt3xDataAvgAnt[2][5][12][2],
                            uint8_t shortened_format,
                            LTE_DL_FRAME_PARMS *frame_parms ) {
@@ -856,7 +887,7 @@ uint32_t calc_pucch_1x_interference(PHY_VARS_eNB *eNB,
 
 uint32_t rx_pucch(PHY_VARS_eNB *eNB,
                   PUCCH_FMT_t fmt,
-                  uint8_t UE_id,
+                  uint8_t UCI_id,
                   uint16_t n1_pucch,
                   uint16_t n2_pucch,
                   uint8_t shortened_format,
@@ -871,15 +902,15 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
   static int first_call = 1;
   LTE_eNB_COMMON *common_vars = &eNB->common_vars;
   LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
-  int8_t sigma2_dB = eNB->measurements.n0_pucch_dB;
+  int8_t sigma2_dB = /*max(eNB->measurements.n0_subband_power_tot_dB[0], eNB->measurements.n0_subband_power_tot_dB[eNB->frame_parms.N_RB_UL-1]); */eNB->measurements.n0_pucch_dB;
 
   uint32_t u,v,n,aa;
   uint32_t z[12*14];
   int16_t *zptr;
-  int16_t rxcomp[NB_ANTENNAS_RX][2*12*14];
+  int16_t rxcomp[4][2*12*14];
   uint8_t ns,N_UL_symb,nsymb,n_oc,n_oc0,n_oc1;
   uint8_t c = (frame_parms->Ncp==0) ? 3 : 2;
-  uint16_t nprime,nprime0,nprime1;
+  int16_t nprime,nprime0,nprime1;
   uint16_t i,j,re_offset,thres,h,off;
   uint8_t Nprime_div_deltaPUCCH_Shift,Nprime,d;
   uint8_t m,l,refs,phase,re,l2,phase_max=0;
@@ -887,12 +918,12 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
   int16_t tmp_re,tmp_im,W_re=0,W_im=0;
   int16_t *rxptr;
   uint32_t symbol_offset;
-  int16_t stat_ref_re,stat_ref_im,*cfo;
-  int16_t chest0_re[NB_ANTENNAS_RX][12],chest0_im[NB_ANTENNAS_RX][12];
-  int16_t chest1_re[NB_ANTENNAS_RX][12],chest1_im[NB_ANTENNAS_RX][12];
+  int16_t stat0_ref_re[4],stat0_ref_im[4],stat1_ref_re[4],stat1_ref_im[4],*cfo;
+  int16_t chest0_re[4][12],chest0_im[4][12];
+  int16_t chest1_re[4][12],chest1_im[4][12];
   int32_t chest_mag;
-  int32_t stat_re=0,stat_im=0;
-  uint32_t stat,stat_max=0;
+  int32_t stat0_re[4],stat1_re[4],stat0_im[4],stat1_im[4];
+  uint32_t stat0[4],stat1[4],stat_max=0,stat0_max[4],stat1_max[4]; 
   uint8_t log2_maxh;
   uint8_t deltaPUCCH_Shift          = frame_parms->pucch_config_common.deltaPUCCH_Shift;
   uint8_t NRB2                      = frame_parms->pucch_config_common.nRB_CQI;
@@ -905,13 +936,13 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
   int chL;
   /* PUCCH format3 >> */
   uint16_t Ret = 0;
-  int16_t SubCarrierDeMapData[NB_ANTENNAS_RX][14][12][2];       //[Antenna][Symbol][Subcarrier][Complex]
-  int16_t CshData_fmt3[NB_ANTENNAS_RX][14][12][2];              //[Antenna][Symbol][Subcarrier][Complex]
-  double delta_theta[NB_ANTENNAS_RX][12];                       //[Antenna][Subcarrier][Complex]
-  int16_t ChestValue[NB_ANTENNAS_RX][2][12][2];                 //[Antenna][Slot][Subcarrier][Complex]
-  int16_t ChdetAfterValue_fmt3[NB_ANTENNAS_RX][14][12][2];      //[Antenna][Symbol][Subcarrier][Complex]
-  int16_t RemoveFrqDev_fmt3[NB_ANTENNAS_RX][2][5][12][2];       //[Antenna][Slot][PUCCH_Symbol][Subcarrier][Complex]
-  int16_t Fmt3xDataRmvOrth[NB_ANTENNAS_RX][2][5][12][2];        //[Antenna][Slot][PUCCH_Symbol][Subcarrier][Complex]
+  int16_t SubCarrierDeMapData[4][14][12][2];       //[Antenna][Symbol][Subcarrier][Complex]
+  int16_t CshData_fmt3[4][14][12][2];              //[Antenna][Symbol][Subcarrier][Complex]
+  double delta_theta[4][12];                       //[Antenna][Subcarrier][Complex]
+  int16_t ChestValue[4][2][12][2];                 //[Antenna][Slot][Subcarrier][Complex]
+  int16_t ChdetAfterValue_fmt3[4][14][12][2];      //[Antenna][Symbol][Subcarrier][Complex]
+  int16_t RemoveFrqDev_fmt3[4][2][5][12][2];       //[Antenna][Slot][PUCCH_Symbol][Subcarrier][Complex]
+  int16_t Fmt3xDataRmvOrth[4][2][5][12][2];        //[Antenna][Slot][PUCCH_Symbol][Subcarrier][Complex]
   int16_t Fmt3xDataAvgAnt[2][5][12][2];                         //[Slot][PUCCH_Symbol][Subcarrier][Complex]
   int16_t Fmt3xDataAvgSym[2][12][2];                            //[Slot][Subcarrier][Complex]
   int16_t IFFTOutData_Fmt3[2][12][2];                           //[Slot][Subcarrier][Complex]
@@ -941,9 +972,20 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
 
     first_call=0;
   }
-
+  eNB_UCI_STATS_t *uci_stats = NULL;
   if(fmt!=pucch_format3) {  /* PUCCH format3 */
-
+ 
+    eNB_UCI_STATS_t *first_uci_stats=NULL;
+    for (int i=0;i<NUMBER_OF_SCH_STATS_MAX;i++) 
+      if (eNB->uci_stats[i].rnti == eNB->uci_vars[UCI_id].rnti) { 
+        uci_stats = &eNB->uci_stats[i];
+        break;
+      } else if (first_uci_stats == NULL && eNB->uci_stats[i].rnti == 0) first_uci_stats = &eNB->uci_stats[i];
+
+    if (uci_stats == NULL) { uci_stats=first_uci_stats; uci_stats->rnti = eNB->uci_vars[UCI_id].rnti;}
+
+    AssertFatal(uci_stats!=NULL,"No stat index found\n");
+    uci_stats->frame = frame;
     // TODO
     // "SR+ACK/NACK" length is only 7 bits.
     // This restriction will be lifted in the future.
@@ -1149,57 +1191,63 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
     // Do cfo correction and MRC across symbols
 
     if (fmt == pucch_format1) {
+      uci_stats->pucch1_trials++;
 #ifdef DEBUG_PUCCH_RX
       printf("Doing PUCCH detection for format 1\n");
 #endif
       stat_max = 0;
 
       for (phase=0; phase<7; phase++) {
-        stat=0;
-
+        int stat=0;
         for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
+	  stat0[aa]=0;stat1[aa]=0;
           for (re=0; re<12; re++) {
-            stat_re=0;
-            stat_im=0;
+	    stat0_re[aa]=0;
+	    stat0_im[aa]=0;
+	    stat1_re[aa]=0;
+	    stat1_im[aa]=0;
             off=re<<1;
             cfo =  (frame_parms->Ncp==0) ? &cfo_pucch_np[14*phase] : &cfo_pucch_ep[12*phase];
 
             for (l=0; l<(nsymb>>1); l++) {
-              stat_re += (((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15))/nsymb;
-              stat_im += (((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15))/nsymb;
+              stat0_re[aa] += (((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15))/nsymb;
+              stat0_im[aa] += (((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15))/nsymb;
               off+=2;
 #ifdef DEBUG_PUCCH_RX
               printf("[eNB] PUCCH subframe %d (%d,%d,%d) => (%d,%d) x (%d,%d) : (%d,%d) , stat %d\n",subframe,phase,l,re,
                      rxcomp[aa][off],rxcomp[aa][1+off],
                      cfo[l<<1],cfo[1+(l<<1)],
-                     stat_re,stat_im,stat);
+                     stat0_re[aa],stat0_im[aa],stat);
 #endif
             }
 
             for (l2=0,l=(nsymb>>1); l < nsymb; l++,l2++) {
-              stat_re += (((rxcomp[aa][off]*(int32_t)cfo[l2<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l2<<1)])>>15))/nsymb;
-              stat_im += (((rxcomp[aa][off]*(int32_t)cfo[1+(l2<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l2<<1)])>>15))/nsymb;
+              stat1_re[aa] += (((rxcomp[aa][off]*(int32_t)cfo[l2<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l2<<1)])>>15))/nsymb;
+              stat1_im[aa] += (((rxcomp[aa][off]*(int32_t)cfo[1+(l2<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l2<<1)])>>15))/nsymb;
               off+=2;
 #ifdef DEBUG_PUCCH_RX
               printf("[eNB] PUCCH subframe %d (%d,%d,%d) => (%d,%d) x (%d,%d) : (%d,%d), stat %d\n",subframe,phase,l2,re,
                      rxcomp[aa][off],rxcomp[aa][1+off],
                      cfo[l2<<1],cfo[1+(l2<<1)],
-                     stat_re,stat_im,stat);
+                     stat1_re[aa],stat1_im[aa],stat);
 #endif
             }
-
-            stat += ((stat_re*stat_re) + (stat_im*stat_im));
+           
+            stat0[aa] += ((stat0_re[aa]*stat0_re[aa]) + (stat0_im[aa]*stat0_im[aa]));
+	    stat1[aa] += ((stat1_re[aa]*stat1_re[aa]) + (stat1_im[aa]*stat1_im[aa]));
           } //re
+          stat+=(stat0[aa]+stat1[aa]);
         } // aa
-
         if (stat>stat_max) {
           stat_max = stat;
           phase_max = phase;
+          for (aa=0;aa<frame_parms->nb_antennas_rx;aa++) {
+             stat0_max[aa] = stat0[aa];
+             stat1_max[aa] = stat1[aa];
+          }
         }
       } //phase
 
-      //    stat_max *= nsymb;  // normalize to energy per symbol
-      //    stat_max /= (frame_parms->N_RB_UL*12); //
       stat_max /= 12;
 #ifdef DEBUG_PUCCH_RX
       printf("[eNB] PUCCH: stat %d, stat_max %d, phase_max %d\n", stat,stat_max,phase_max);
@@ -1207,12 +1255,14 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
 #ifdef DEBUG_PUCCH_RX
       LOG_I(PHY,"[eNB] PUCCH fmt1:  stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,eNB->measurements.n0_subband_power_tot_dBm[6],pucch1_thres,phase_max);
 #endif
-      eNB->pucch1_stats[UE_id][(subframe<<10)+eNB->pucch1_stats_cnt[UE_id][subframe]] = stat_max;
-      eNB->pucch1_stats_thres[UE_id][(subframe<<10)+eNB->pucch1_stats_cnt[UE_id][subframe]] = sigma2_dB+pucch1_thres;
-      eNB->pucch1_stats_cnt[UE_id][subframe] = (eNB->pucch1_stats_cnt[UE_id][subframe]+1)&1023;
-      T(T_ENB_PHY_PUCCH_1_ENERGY, T_INT(eNB->Mod_id), T_INT(eNB->uci_vars[UE_id].rnti), T_INT(frame), T_INT(subframe),
+      eNB->pucch1_stats[UCI_id][(subframe<<10)+eNB->pucch1_stats_cnt[UCI_id][subframe]] = stat_max;
+      eNB->pucch1_stats_thres[UCI_id][(subframe<<10)+eNB->pucch1_stats_cnt[UCI_id][subframe]] = sigma2_dB+pucch1_thres;
+      eNB->pucch1_stats_cnt[UCI_id][subframe] = (eNB->pucch1_stats_cnt[UCI_id][subframe]+1)&1023;
+      uci_stats->pucch1_thres = sigma2_dB+pucch1_thres;
+      T(T_ENB_PHY_PUCCH_1_ENERGY, T_INT(eNB->Mod_id), T_INT(eNB->uci_vars[UCI_id].rnti), T_INT(frame), T_INT(subframe),
         T_INT(stat_max), T_INT(sigma2_dB+pucch1_thres));
 
+      
       /*
       if (eNB->pucch1_stats_cnt[UE_id][subframe] == 0) {
         LOG_M("pucch_debug.m","pucch_energy",
@@ -1226,11 +1276,18 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
       // This is a moving average of the PUCCH1 statistics conditioned on being above or below the threshold
       if (sigma2_dB<(dB_fixed(stat_max)-pucch1_thres))  {
         *payload = 1;
+        uci_stats->current_pucch1_stat_pos = stat_max;
+        for (int aa=0;aa<frame_parms->nb_antennas_rx;aa++) {
+          uci_stats->pucch1_low_stat[aa]=stat0_max[aa];
+          uci_stats->pucch1_high_stat[aa]=stat1_max[aa];
+          uci_stats->pucch1_positive_SR++;
+        }
       } else {
+        uci_stats->current_pucch1_stat_neg = stat_max;
         *payload = 0;
       }
 
-      if (UE_id==0) {
+      if (UCI_id==0) {
         VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_SR_ENERGY,dB_fixed(stat_max));
         VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_SR_THRES,sigma2_dB+pucch1_thres);
       }
@@ -1239,29 +1296,30 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
 #ifdef DEBUG_PUCCH_RX
       LOG_D(PHY,"Doing PUCCH detection for format 1a/1b\n");
 #endif
-
+      int stat_re=0,stat_im=0;
       for (phase=0; phase<7; phase++) {
-        stat=0;
-
+        int stat=0;
         for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
+          stat0[aa]=0;
+          stat1[aa]=0;
           for (re=0; re<12; re++) {
             // compute received energy first slot, seperately for data and reference
             // by coherent combining across symbols but not resource elements
             // Note: assumption is that channel is stationary over symbols in slot after CFO
-            stat_re=0;
-            stat_im=0;
-            stat_ref_re=0;
-            stat_ref_im=0;
+            stat0_re[aa]=0;
+            stat0_im[aa]=0;
+            stat0_ref_re[aa]=0;
+            stat0_ref_im[aa]=0;
             off=re<<1;
             cfo =  (frame_parms->Ncp==0) ? &cfo_pucch_np[14*phase] : &cfo_pucch_ep[12*phase];
 
             for (l=0; l<(nsymb>>1); l++) {
               if ((l<2)||(l>(nsymb>>1) - 3)) {  //data symbols
-                stat_re += ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
-                stat_im += ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
+                stat0_re[aa] += ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
+                stat0_im[aa] += ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
               } else { //reference symbols
-                stat_ref_re += ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
-                stat_ref_im += ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
+                stat0_ref_re[aa] += ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
+                stat0_ref_im[aa] += ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
               }
 
               off+=2;
@@ -1274,26 +1332,21 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
             }
 
             // this is total energy received, summed over data and reference
-            if (fmt==pucch_format1a){
-                   stat += ((((stat_re*stat_re)) + ((stat_ref_re*stat_ref_re)) + ((stat_ref_im*stat_ref_im)))/nsymb);
-            }else{
-                   stat += ((((stat_re*stat_re)) + ((stat_im*stat_im)) +
-                             ((stat_ref_re*stat_ref_re)) + ((stat_ref_im*stat_ref_im)))/nsymb);
-            }
-
+            stat0[aa] += ((((stat0_re[aa]*stat0_re[aa])) + ((stat0_im[aa]*stat0_im[aa])) +
+                      ((stat0_ref_re[aa]*stat0_ref_re[aa])) + ((stat0_ref_im[aa]*stat0_ref_im[aa])))/nsymb);
             // now second slot
-            stat_re=0;
-            stat_im=0;
-            stat_ref_re=0;
-            stat_ref_im=0;
+            stat1_re[aa]=0;
+            stat1_im[aa]=0;
+            stat1_ref_re[aa]=0;
+            stat1_ref_im[aa]=0;
 
             for (l2=0,l=(nsymb>>1); l< nsymb; l++,l2++) {
               if ((l2<2) || ((l2>(nsymb>>1) - 3)) ) {  // data symbols
-                stat_re += ((rxcomp[aa][off]*(int32_t)cfo[l2<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l2<<1)])>>15);
-                stat_im += ((rxcomp[aa][off]*(int32_t)cfo[1+(l2<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l2<<1)])>>15);
+                stat1_re[aa] += ((rxcomp[aa][off]*(int32_t)cfo[l2<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l2<<1)])>>15);
+                stat1_im[aa] += ((rxcomp[aa][off]*(int32_t)cfo[1+(l2<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l2<<1)])>>15);
               } else { //reference_symbols
-                stat_ref_re += ((rxcomp[aa][off]*(int32_t)cfo[l2<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l2<<1)])>>15);
-                stat_ref_im += ((rxcomp[aa][off]*(int32_t)cfo[1+(l2<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l2<<1)])>>15);
+                stat1_ref_re[aa] += ((rxcomp[aa][off]*(int32_t)cfo[l2<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l2<<1)])>>15);
+                stat1_ref_im[aa] += ((rxcomp[aa][off]*(int32_t)cfo[1+(l2<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l2<<1)])>>15);
               }
 
               off+=2;
@@ -1308,20 +1361,16 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
 #ifdef DEBUG_PUCCH_RX
             printf("aa%d re %d : phase %d : stat %d\n",aa,re,phase,stat);
 #endif
-            if (fmt==pucch_format1a){
-                   stat += ((((stat_re*stat_re)) + ((stat_ref_re*stat_ref_re)) + ((stat_ref_im*stat_ref_im)))/nsymb);
-            }else{
-                   stat += ((((stat_re*stat_re)) + ((stat_im*stat_im)) +
-                             ((stat_ref_re*stat_ref_re)) + ((stat_ref_im*stat_ref_im)))/nsymb);
-            }
-
+            stat1[aa] += ((((stat1_re[aa]*stat1_re[aa])) + ((stat1_im[aa]*stat1_im[aa])) +
+                      ((stat1_ref_re[aa]*stat1_ref_re[aa])) + ((stat1_ref_im[aa]*stat1_ref_im[aa])))/nsymb);
           } //re
+          stat+=(stat0[aa]+stat1[aa]);
         } // aa
 
 #ifdef DEBUG_PUCCH_RX
         LOG_D(PHY,"Format 1A: phase %d : stat %d\n",phase,stat);
 #endif
-
+        
         if (stat>stat_max) {
           stat_max = stat;
           phase_max = phase;
@@ -1332,8 +1381,6 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
 #ifdef DEBUG_PUCCH_RX
       LOG_I(PHY,"[eNB] PUCCH fmt1a/b:  stat_max : %d (%d : sigma2 %d), phase_max : %d\n",stat_max,dB_fixed(stat_max),sigma2_dB,phase_max);
 #endif
-      stat_re=0;
-      stat_im=0;
       // Do detection now
 
 
@@ -1341,13 +1388,12 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
       // For instance i assume to skip pucch1_thres from the test below.
       // Not 100% sure
         
-        if (sigma2_dB<(dB_fixed(stat_max) - (IS_SOFTMODEM_IQPLAYER?0:pucch1_thres)) ) {//
+      if (sigma2_dB<(dB_fixed(stat_max) - (IS_SOFTMODEM_IQPLAYER?0:pucch1_thres)) ) {//
         chL = (nsymb>>1)-4;
         chest_mag=0;
         cfo =  (frame_parms->Ncp==0) ? &cfo_pucch_np[14*phase_max] : &cfo_pucch_ep[12*phase_max];
 
         for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
-          // channel estimates first
           for (re=0; re<12; re++) {
             // channel estimate for first slot
             chest0_re[aa][re]=0;
@@ -1381,6 +1427,11 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
 
         // now do channel matched filter
         for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
+          stat0_re[aa]=0;
+          stat0_im[aa]=0;
+          stat1_re[aa]=0;
+          stat1_im[aa]=0;
+
           for (re=0; re<12; re++) {
 #ifdef DEBUG_PUCCH_RX
             printf("[eNB] PUCCH subframe %d chest0[%d][%d] => (%d,%d)\n",subframe,aa,re,
@@ -1392,8 +1443,8 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
               off=(re<<1) + (24*l);
               tmp_re = ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
               tmp_im = ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
-              stat_re += (((tmp_re*chest0_re[aa][re])>>log2_maxh) + ((tmp_im*chest0_im[aa][re])>>log2_maxh));
-              stat_im += (((tmp_re*chest0_im[aa][re])>>log2_maxh) - ((tmp_im*chest0_re[aa][re])>>log2_maxh));
+              stat0_re[aa] += (((tmp_re*chest0_re[aa][re])>>log2_maxh) + ((tmp_im*chest0_im[aa][re])>>log2_maxh));
+              stat0_im[aa] += (((tmp_re*chest0_im[aa][re])>>log2_maxh) - ((tmp_im*chest0_re[aa][re])>>log2_maxh));
               off+=2;
 #ifdef DEBUG_PUCCH_RX
               printf("[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d) => (%d,%d)\n",subframe,l,re,
@@ -1409,8 +1460,8 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
               off=(re<<1) + (24*l);
               tmp_re = ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
               tmp_im = ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
-              stat_re += (((tmp_re*chest0_re[aa][re])>>log2_maxh) + ((tmp_im*chest0_im[aa][re])>>log2_maxh));
-              stat_im += (((tmp_re*chest0_im[aa][re])>>log2_maxh) - ((tmp_im*chest0_re[aa][re])>>log2_maxh));
+              stat0_re[aa] += (((tmp_re*chest0_re[aa][re])>>log2_maxh) + ((tmp_im*chest0_im[aa][re])>>log2_maxh));
+              stat0_im[aa] += (((tmp_re*chest0_im[aa][re])>>log2_maxh) - ((tmp_im*chest0_re[aa][re])>>log2_maxh));
               off+=2;
 #ifdef DEBUG_PUCCH_RX
               printf("[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d) => (%d,%d)\n",subframe,l,re,
@@ -1431,8 +1482,8 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
               off=(re<<1) + (24*l) + (nsymb>>1)*24;
               tmp_re = ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
               tmp_im = ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
-              stat_re += (((tmp_re*chest1_re[aa][re])>>log2_maxh) + ((tmp_im*chest1_im[aa][re])>>log2_maxh));
-              stat_im += (((tmp_re*chest1_im[aa][re])>>log2_maxh) - ((tmp_im*chest1_re[aa][re])>>log2_maxh));
+              stat1_re[aa] += (((tmp_re*chest1_re[aa][re])>>log2_maxh) + ((tmp_im*chest1_im[aa][re])>>log2_maxh));
+              stat1_im[aa] += (((tmp_re*chest1_im[aa][re])>>log2_maxh) - ((tmp_im*chest1_re[aa][re])>>log2_maxh));
               off+=2;
 #ifdef DEBUG_PUCCH_RX
               printf("[PHY][eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d) => (%d,%d)\n",subframe,l,re,
@@ -1448,8 +1499,8 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
               off=(re<<1) + (24*l) + (nsymb>>1)*24;
               tmp_re = ((rxcomp[aa][off]*(int32_t)cfo[l<<1])>>15)     - ((rxcomp[aa][1+off]*(int32_t)cfo[1+(l<<1)])>>15);
               tmp_im = ((rxcomp[aa][off]*(int32_t)cfo[1+(l<<1)])>>15) + ((rxcomp[aa][1+off]*(int32_t)cfo[(l<<1)])>>15);
-              stat_re += (((tmp_re*chest1_re[aa][re])>>log2_maxh) + ((tmp_im*chest1_im[aa][re])>>log2_maxh));
-              stat_im += (((tmp_re*chest1_im[aa][re])>>log2_maxh) - ((tmp_im*chest1_re[aa][re])>>log2_maxh));
+              stat1_re[aa] += (((tmp_re*chest1_re[aa][re])>>log2_maxh) + ((tmp_im*chest1_im[aa][re])>>log2_maxh));
+              stat1_im[aa] += (((tmp_re*chest1_im[aa][re])>>log2_maxh) - ((tmp_im*chest1_re[aa][re])>>log2_maxh));
               off+=2;
 #ifdef DEBUG_PUCCH_RX
               printf("[PHY][eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d) => (%d,%d)\n",subframe,l,re,
@@ -1464,29 +1515,42 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
             printf("aa%d re %d : stat %d,%d\n",aa,re,stat_re,stat_im);
 #endif
           } //re
+          stat_re+=stat0_re[aa]+stat1_re[aa];
+          stat_im+=stat0_im[aa]+stat1_im[aa];
         } // aa
 
         LOG_D(PHY,"PUCCH 1a/b: subframe %d : stat %d,%d (pos %d)\n",subframe,stat_re,stat_im,
-              (subframe<<10) + (eNB->pucch1ab_stats_cnt[UE_id][subframe]));
+              (subframe<<10) + (eNB->pucch1ab_stats_cnt[UCI_id][subframe]));
         LOG_D(PHY,"In pucch.c PUCCH 1a/b: ACK subframe %d : sigma2_dB %d, stat_max %d, pucch1_thres %d\n",subframe,sigma2_dB,dB_fixed(stat_max),pucch1_thres);
-        eNB->pucch1ab_stats[UE_id][(subframe<<11) + 2*(eNB->pucch1ab_stats_cnt[UE_id][subframe])] = (stat_re);
-        eNB->pucch1ab_stats[UE_id][(subframe<<11) + 1+2*(eNB->pucch1ab_stats_cnt[UE_id][subframe])] = (stat_im);
-        eNB->pucch1ab_stats_cnt[UE_id][subframe] = (eNB->pucch1ab_stats_cnt[UE_id][subframe]+1)&1023;
+        eNB->pucch1ab_stats[UCI_id][(subframe<<11) + 2*(eNB->pucch1ab_stats_cnt[UCI_id][subframe])] = (stat_re);
+        eNB->pucch1ab_stats[UCI_id][(subframe<<11) + 1+2*(eNB->pucch1ab_stats_cnt[UCI_id][subframe])] = (stat_im);
+        eNB->pucch1ab_stats_cnt[UCI_id][subframe] = (eNB->pucch1ab_stats_cnt[UCI_id][subframe]+1)&1023;
         /* frame not available here - set to -1 for the moment */
-        T(T_ENB_PHY_PUCCH_1AB_IQ, T_INT(eNB->Mod_id), T_INT(eNB->uci_vars[UE_id].rnti), T_INT(-1), T_INT(subframe), T_INT(stat_re), T_INT(stat_im));
+        T(T_ENB_PHY_PUCCH_1AB_IQ, T_INT(eNB->Mod_id), T_INT(eNB->uci_vars[UCI_id].rnti), T_INT(-1), T_INT(subframe), T_INT(stat_re), T_INT(stat_im));
         *payload = (stat_re<0) ? 1 : 2; // 1 == ACK, 2 == NAK
 
-        if (fmt==pucch_format1b)
+        if (fmt==pucch_format1b) {
+          uci_stats->pucch1b_trials++;
           *(1+payload) = (stat_im<0) ? 1 : 2;
+          uci_stats->current_pucch1b_stat_re = stat_re;
+          uci_stats->current_pucch1b_stat_im = stat_im;
+        }
+        else {
+          uci_stats->pucch1a_trials++;
+          uci_stats->current_pucch1a_stat_re = stat_re;
+          uci_stats->current_pucch1a_stat_im = stat_im;
+        }
+
       } else { // insufficient energy on PUCCH so NAK
         LOG_D(PHY,"In pucch.c PUCCH 1a/b: NAK subframe %d : sigma2_dB %d, stat_max %d, pucch1_thres %d\n",subframe,sigma2_dB,dB_fixed(stat_max),pucch1_thres);
         *payload = 4;  // DTX
-        ((int16_t *)&eNB->pucch1ab_stats[UE_id][(subframe<<10) + (eNB->pucch1ab_stats_cnt[UE_id][subframe])])[0] = (int16_t)(stat_re);
-        ((int16_t *)&eNB->pucch1ab_stats[UE_id][(subframe<<10) + (eNB->pucch1ab_stats_cnt[UE_id][subframe])])[1] = (int16_t)(stat_im);
-        eNB->pucch1ab_stats_cnt[UE_id][subframe] = (eNB->pucch1ab_stats_cnt[UE_id][subframe]+1)&1023;
+        ((int16_t *)&eNB->pucch1ab_stats[UCI_id][(subframe<<10) + (eNB->pucch1ab_stats_cnt[UCI_id][subframe])])[0] = (int16_t)(stat_re);
+        ((int16_t *)&eNB->pucch1ab_stats[UCI_id][(subframe<<10) + (eNB->pucch1ab_stats_cnt[UCI_id][subframe])])[1] = (int16_t)(stat_im);
+        eNB->pucch1ab_stats_cnt[UCI_id][subframe] = (eNB->pucch1ab_stats_cnt[UCI_id][subframe]+1)&1023;
 
         if (fmt==pucch_format1b)
           *(1+payload) = 4;
+        uci_stats->pucch1ab_DTX++;
       }
     } else {
       LOG_E(PHY,"[eNB] PUCCH fmt2/2a/2b not supported\n");
diff --git a/openair1/PHY/LTE_TRANSPORT/pucch_common.c b/openair1/PHY/LTE_TRANSPORT/pucch_common.c
index 5b939b08d25ae005f9ed136ba9bd320936b3ee4e..d7a500d5f77b50e80a2143356cda26bc54e251e1 100644
--- a/openair1/PHY/LTE_TRANSPORT/pucch_common.c
+++ b/openair1/PHY/LTE_TRANSPORT/pucch_common.c
@@ -31,7 +31,6 @@
 */
 #include "PHY/defs_eNB.h"
 #include "PHY/phy_extern.h" 
-#include "LAYER2/MAC/mac.h"
 
 #include "common/utils/LOG/vcd_signal_dumper.h"
 #include "common/utils/LOG/log.h"
diff --git a/openair1/PHY/LTE_TRANSPORT/transport_common.h b/openair1/PHY/LTE_TRANSPORT/transport_common.h
index ab2921c2b9405a65ae5ef8bce9d5b21840b73b39..7c1065736d77f70b7fa0d9fc7023da187ee3f549 100644
--- a/openair1/PHY/LTE_TRANSPORT/transport_common.h
+++ b/openair1/PHY/LTE_TRANSPORT/transport_common.h
@@ -35,9 +35,9 @@
 #include "dci.h"
 #include "mdci.h"
 //#include "uci.h"
-#ifndef STANDALONE_COMPILE
-  #include "UTIL/LISTS/list.h"
-#endif
+//#ifndef STANDALONE_COMPILE
+//  #include "UTIL/LISTS/list.h"
+//#endif
 
 #define MOD_TABLE_QPSK_OFFSET 1
 #define MOD_TABLE_16QAM_OFFSET 5
@@ -57,7 +57,7 @@
 
 // maximum of 3 segments before each coding block if data length exceeds 6144 bits.
 
-#define MAX_NUM_DLSCH_SEGMENTS 16
+#define MAX_NUM_DLSCH_SEGMENTS 13
 #define MAX_NUM_ULSCH_SEGMENTS MAX_NUM_DLSCH_SEGMENTS
 #define MAX_DLSCH_PAYLOAD_BYTES (MAX_NUM_DLSCH_SEGMENTS*768)
 #define MAX_ULSCH_PAYLOAD_BYTES (MAX_NUM_ULSCH_SEGMENTS*768)
diff --git a/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h b/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h
index 1944f06fab7a410dc21ee3a9130dba4f4c1bf311..622f37b3bcba54d22fc46e719e78c33e25603eb3 100644
--- a/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h
+++ b/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h
@@ -223,7 +223,9 @@ uint8_t get_num_prach_tdd(module_id_t Mod_id);
   @param frame_type 0-FDD, 1-TDD
   @returns 0-1 accordingly
 */
+/*
 uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,lte_frame_type_t frame_type);
+*/
 
 /*!
   \brief Helper for MAC, returns frequency index of PRACH resource in TDD for a particular configuration index
@@ -306,12 +308,12 @@ void init_scrambling_lut(void);
 
 void init_unscrambling_lut(void);
 
-
+/*
 uint8_t get_prach_prb_offset(LTE_DL_FRAME_PARMS *frame_parms,
                              uint8_t prach_ConfigIndex,
                              uint8_t n_ra_prboffset,
                              uint8_t tdd_mapindex, uint16_t Nf);
-
+*/
 uint8_t subframe2harq_pid(LTE_DL_FRAME_PARMS *frame_parms,frame_t frame,uint8_t subframe);
 uint8_t ul_subframe2pdcch_alloc_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t n);
 
@@ -319,6 +321,6 @@ uint32_t conv_1C_RIV(int32_t rballoc,uint32_t N_RB_DL);
 
 void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t *rb_alloc2);
 
-int16_t estimate_ue_tx_power(uint32_t tbs, uint32_t nb_rb, uint8_t control_only, lte_prefix_type_t ncp, uint8_t use_srs);
+int16_t estimate_ue_tx_power(int norm,uint32_t tbs, uint32_t nb_rb, uint8_t control_only, lte_prefix_type_t ncp, uint8_t use_srs);
 
 #endif
diff --git a/openair1/PHY/LTE_TRANSPORT/transport_eNB.h b/openair1/PHY/LTE_TRANSPORT/transport_eNB.h
index 5e446db5fdd1a11431d2e3075bcda66fdc5bd68a..b3985e973a9835b0de1ea5a7ffda266ea9bf84c4 100644
--- a/openair1/PHY/LTE_TRANSPORT/transport_eNB.h
+++ b/openair1/PHY/LTE_TRANSPORT/transport_eNB.h
@@ -36,9 +36,9 @@
 #include "dci.h"
 #include "mdci.h"
 #include "uci_common.h"
-#ifndef STANDALONE_COMPILE
-  #include "UTIL/LISTS/list.h"
-#endif
+//#ifndef STANDALONE_COMPILE
+//  #include "UTIL/LISTS/list.h"
+//#endif
 
 
 // structures below implement 36-211 and 36-212
diff --git a/openair1/PHY/LTE_TRANSPORT/transport_proto.h b/openair1/PHY/LTE_TRANSPORT/transport_proto.h
index 9e37821b0543219be9dcd5d5811e3b2769740131..19af50056c558160a86dd3888f08747ccbbe1afd 100644
--- a/openair1/PHY/LTE_TRANSPORT/transport_proto.h
+++ b/openair1/PHY/LTE_TRANSPORT/transport_proto.h
@@ -520,6 +520,9 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *PHY_vars_eNB,
 
 void dump_ulsch(PHY_VARS_eNB *phy_vars_eNB,int frame, int subframe, uint8_t UE_id,int round);
 
+void dump_ulsch_stats(FILE *fd,PHY_VARS_eNB *eNB,int frame);
+void dump_uci_stats(FILE *fd,PHY_VARS_eNB *eNB,int frame);
+
 
 
 
@@ -691,13 +694,11 @@ void conv_eMTC_rballoc(uint16_t resource_block_coding,
                        uint32_t N_RB_DL,
                        uint32_t *rb_alloc);
 
-int16_t find_dlsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type);
-
-int16_t find_ulsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type);
+int find_dlsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type);
 
-int16_t find_uci(uint16_t rnti, int frame, int subframe, PHY_VARS_eNB *eNB,find_type_t type);
+int find_ulsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type);
 
-uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,lte_frame_type_t frame_type);
+int find_uci(uint16_t rnti, int frame, int subframe, PHY_VARS_eNB *eNB,find_type_t type);
 
 uint32_t lte_gold_generic(uint32_t *x1, uint32_t *x2, uint8_t reset);
 
diff --git a/openair1/PHY/LTE_TRANSPORT/uci_tools.c b/openair1/PHY/LTE_TRANSPORT/uci_tools.c
index f8ade9afc86f8bb6a0f233d6bc078ccc95896a48..ae039bec2a24b9d2e7bee780632896baa5b01232 100644
--- a/openair1/PHY/LTE_TRANSPORT/uci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/uci_tools.c
@@ -37,12 +37,11 @@
 //#define DEBUG_UCI 1
 
 
-int16_t find_uci(uint16_t rnti, int frame, int subframe, PHY_VARS_eNB *eNB,find_type_t type) {
-  uint16_t i;
-  int16_t first_free_index=-1;
+int find_uci(uint16_t rnti, int frame, int subframe, PHY_VARS_eNB *eNB,find_type_t type) {
+  int first_free_index=-1;
   AssertFatal(eNB!=NULL,"eNB is null\n");
 
-  for (i=0; i<NUMBER_OF_UCI_VARS_MAX; i++) {
+  for (int i=0; i<NUMBER_OF_UCI_MAX; i++) {
     if ((eNB->uci_vars[i].active >0) &&
         (eNB->uci_vars[i].rnti==rnti) &&
         (eNB->uci_vars[i].frame==frame) &&
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
index 476d7028b11d77b54639573f3f040b67af05caea..ae8c666d18e659d3050f13a8396ac4afff0cadd1 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
@@ -468,6 +468,35 @@ unsigned int  ulsch_decoding(PHY_VARS_eNB *eNB,
         ulsch_harq->Nsymb_pusch,
         nb_rb);
   //#endif
+
+  eNB_SCH_STATS_t *stats=NULL;
+  int first_free=-1;
+  for (int i=0;i<NUMBER_OF_SCH_STATS_MAX;i++) {
+    if (eNB->ulsch_stats[i].rnti == 0 && first_free == -1) {
+      first_free = i;
+      stats=&eNB->ulsch_stats[i];
+    }
+    if (eNB->ulsch_stats[i].rnti == ulsch->rnti) {
+      stats=&eNB->ulsch_stats[i];
+      break;
+    }
+  }
+  if (stats) {
+    stats->rnti = ulsch->rnti;
+    stats->round_trials[ulsch_harq->round]++;
+    stats->frame=proc->frame_rx;
+  }
+  if (ulsch_harq->round == 0) {
+    if (stats) {
+      stats->current_Qm = Q_m;
+      stats->current_RI = 1;
+      stats->total_bytes_tx += ulsch_harq->TBS;
+      stats->current_TBS = ulsch_harq->TBS;
+      stats->current_G   = ulsch_harq->G;
+    }
+  }
+
+
   //if (ulsch_harq->round == 0) { // delete for RB shortage pattern
   // This is a new packet, so compute quantities regarding segmentation
   ulsch_harq->B = A+24;
@@ -1086,3 +1115,44 @@ unsigned int  ulsch_decoding(PHY_VARS_eNB *eNB,
   ret = ulsch_decoding_data_all(eNB,proc, UE_id,harq_pid,llr8_flag);
   return(ret);
 }
+
+#define STATSTRLEN 16384
+void dump_ulsch_stats(FILE *fd,PHY_VARS_eNB *eNB,int frame) {
+
+  char output[16384];
+  int stroff=0;
+  for (int i=0;i<NUMBER_OF_ULSCH_MAX;i++)
+    if (eNB->ulsch_stats[i].rnti>0 && eNB->ulsch_stats[i].round_trials[0]>100) { 
+      for (int aa=0;aa<eNB->frame_parms.nb_antennas_rx;aa++) 
+        stroff+=sprintf(output+stroff,"ULSCH RNTI %x: ulsch_power[%d] %d, ulsch_noise_power[%d] %d\n", 
+              eNB->ulsch_stats[i].rnti, aa,eNB->ulsch_stats[i].ulsch_power[aa],aa,eNB->ulsch_stats[i].ulsch_noise_power[aa]);
+      AssertFatal(stroff<(STATSTRLEN-1000),"Increase STATSTRLEN\n");
+      stroff+=sprintf(output+stroff,"ULSCH RNTI %x: round_trials %d(%1.1e):%d(%1.1e):%d(%1.1e):%d\n",
+            eNB->ulsch_stats[i].rnti,
+            eNB->ulsch_stats[i].round_trials[0],
+            (double)eNB->ulsch_stats[i].round_trials[1]/eNB->ulsch_stats[i].round_trials[0],
+            eNB->ulsch_stats[i].round_trials[1],
+            (double)eNB->ulsch_stats[i].round_trials[2]/eNB->ulsch_stats[i].round_trials[0],
+            eNB->ulsch_stats[i].round_trials[2],
+           (double)eNB->ulsch_stats[i].round_trials[3]/eNB->ulsch_stats[i].round_trials[0],
+            eNB->ulsch_stats[i].round_trials[3]);
+      stroff+=sprintf(output+stroff,"ULSCH RNTI %x:  current_Qm %d, current_G %d, current_TBS %d, current_rate %f,current_RI %d, timing_offset %d, total_bytes RX/SCHED %d/%d\n",
+            eNB->ulsch_stats[i].rnti,
+            eNB->ulsch_stats[i].current_Qm,
+	    eNB->ulsch_stats[i].current_G,
+	    eNB->ulsch_stats[i].current_TBS,
+	    (double)eNB->ulsch_stats[i].current_G/eNB->ulsch_stats[i].current_TBS,
+            eNB->ulsch_stats[i].current_RI,
+	    eNB->ulsch_stats[i].timing_offset,
+            eNB->ulsch_stats[i].total_bytes_rx,
+            eNB->ulsch_stats[i].total_bytes_tx);
+    }
+  fprintf(fd,"%s",output);
+}
+
+void clear_ulsch_stats(PHY_VARS_eNB *eNB) {
+
+  for (int i=0;i<NUMBER_OF_ULSCH_MAX;i++)
+    memset((void*)&eNB->ulsch_stats[i],0,sizeof(eNB->ulsch_stats[i]));
+}
+
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
index eeab61609718ac16693924f8e38fd12bb85200b1..3529df8e44504435ef2d7948925dbdde41423976 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
@@ -31,12 +31,12 @@
 */
 
 #include "PHY/defs_eNB.h"
-#include "PHY/phy_extern.h"
+//#include "PHY/phy_extern.h"
 #include "transport_eNB.h"
 #include "PHY/sse_intrin.h"
 #include "transport_common_proto.h"
 #include "PHY/LTE_ESTIMATION/lte_estimation.h"
-#include "PHY/MODULATION/modulation_eNB.h"
+//#include "PHY/MODULATION/modulation_eNB.h"
 
 #include "T.h"
 
@@ -45,8 +45,11 @@
 //extern int **ulchmag_eren;
 //eren
 
-static short jitter[8]  __attribute__ ((aligned(16))) = {1,0,0,1,0,1,1,0};
-static short jitterc[8] __attribute__ ((aligned(16))) = {0,1,1,0,1,0,0,1};
+static const short jitter[8]  __attribute__ ((aligned(16))) = {1,0,0,1,0,1,1,0};
+static const short jitterc[8] __attribute__ ((aligned(16))) = {0,1,1,0,1,0,0,1};
+static const short conjugate[8]__attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1};
+static const short conjugate2[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1};
+
 
 void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH) {
 #if defined(__x86_64__) || defined(__i386__)
@@ -511,7 +514,6 @@ void ulsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
   for (i=0; i<(nb_rb*3); i++) {
 #if defined(__x86_64__) || defined(__i386__)
     mmtmpU0 = _mm_abs_epi16(rxF[i]);
-    //    print_shorts("tmp0",&tmp0);
     mmtmpU0 = _mm_subs_epi16(ch_mag[i],mmtmpU0);
     (*llrp128)[0] = _mm_unpacklo_epi32(rxF[i],mmtmpU0);
     (*llrp128)[1] = _mm_unpackhi_epi32(rxF[i],mmtmpU0);
@@ -627,11 +629,15 @@ void ulsch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms,
                          uint8_t symbol,
                          uint16_t nb_rb) {
 #if defined(__x86_64__) || defined(__i386__)
-  __m128i *rxdataF_comp128_0,*ul_ch_mag128_0,*ul_ch_mag128_0b;
-  __m128i *rxdataF_comp128_1,*ul_ch_mag128_1,*ul_ch_mag128_1b;
+  __m128i *rxdataF_comp128_0=NULL,*ul_ch_mag128_0=NULL,*ul_ch_mag128_0b=NULL;
+  __m128i *rxdataF_comp128_1=NULL,*ul_ch_mag128_1=NULL,*ul_ch_mag128_1b=NULL;
+  __m128i *rxdataF_comp128_2=NULL,*ul_ch_mag128_2=NULL,*ul_ch_mag128_2b=NULL;
+  __m128i *rxdataF_comp128_3=NULL,*ul_ch_mag128_3=NULL,*ul_ch_mag128_3b=NULL;
 #elif defined(__arm__)
   int16x8_t *rxdataF_comp128_0,*ul_ch_mag128_0,*ul_ch_mag128_0b;
   int16x8_t *rxdataF_comp128_1,*ul_ch_mag128_1,*ul_ch_mag128_1b;
+  int16x8_t *rxdataF_comp128_2,*ul_ch_mag128_2,*ul_ch_mag128_2b;
+  int16x8_t *rxdataF_comp128_3,*ul_ch_mag128_3,*ul_ch_mag128_3b;
 #endif
   int32_t i;
 
@@ -643,15 +649,39 @@ void ulsch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms,
     ul_ch_mag128_1      = (__m128i *)&ul_ch_mag[1][symbol*frame_parms->N_RB_DL*12];
     ul_ch_mag128_0b     = (__m128i *)&ul_ch_magb[0][symbol*frame_parms->N_RB_DL*12];
     ul_ch_mag128_1b     = (__m128i *)&ul_ch_magb[1][symbol*frame_parms->N_RB_DL*12];
-
-    // MRC on each re of rb, both on MF output and magnitude (for 16QAM/64QAM llr computation)
-    for (i=0; i<nb_rb*3; i++) {
-      rxdataF_comp128_0[i] = _mm_adds_epi16(_mm_srai_epi16(rxdataF_comp128_0[i],1),_mm_srai_epi16(rxdataF_comp128_1[i],1));
-      ul_ch_mag128_0[i]    = _mm_adds_epi16(_mm_srai_epi16(ul_ch_mag128_0[i],1),_mm_srai_epi16(ul_ch_mag128_1[i],1));
-      ul_ch_mag128_0b[i]   = _mm_adds_epi16(_mm_srai_epi16(ul_ch_mag128_0b[i],1),_mm_srai_epi16(ul_ch_mag128_1b[i],1));
-      rxdataF_comp128_0[i] = _mm_add_epi16(rxdataF_comp128_0[i],(*(__m128i *)&jitterc[0]));
+    if (frame_parms->nb_antennas_rx>2) { 
+      rxdataF_comp128_2   = (__m128i *)&rxdataF_comp[2][symbol*frame_parms->N_RB_DL*12];
+      ul_ch_mag128_2      = (__m128i *)&ul_ch_mag[2][symbol*frame_parms->N_RB_DL*12];
+      ul_ch_mag128_2b     = (__m128i *)&ul_ch_magb[2][symbol*frame_parms->N_RB_DL*12];
+    }
+    if (frame_parms->nb_antennas_rx>3) { 
+      rxdataF_comp128_3   = (__m128i *)&rxdataF_comp[3][symbol*frame_parms->N_RB_DL*12];
+      ul_ch_mag128_3      = (__m128i *)&ul_ch_mag[3][symbol*frame_parms->N_RB_DL*12];
+      ul_ch_mag128_3b     = (__m128i *)&ul_ch_magb[3][symbol*frame_parms->N_RB_DL*12];
     }
 
+    // MRC on each re of rb, both on MF output and magnitude (for 16QAM/64QAM llr computation)
+    if (frame_parms->nb_antennas_rx==2) 
+      for (i=0; i<nb_rb*3; i++) {
+        rxdataF_comp128_0[i] = _mm_srai_epi16(_mm_adds_epi16(rxdataF_comp128_0[i],rxdataF_comp128_1[i]),1);
+        ul_ch_mag128_0[i]    = _mm_srai_epi16(_mm_adds_epi16(ul_ch_mag128_0[i],ul_ch_mag128_1[i]),1);
+        ul_ch_mag128_0b[i]   = _mm_srai_epi16(_mm_adds_epi16(ul_ch_mag128_0b[i],ul_ch_mag128_1b[i]),1);
+        rxdataF_comp128_0[i] = _mm_add_epi16(rxdataF_comp128_0[i],(*(__m128i *)&jitterc[0]));
+      }
+    if (frame_parms->nb_antennas_rx==3)
+      for (i=0; i<nb_rb*3; i++) {
+        rxdataF_comp128_0[i] = _mm_srai_epi16(_mm_adds_epi16(rxdataF_comp128_0[i],_mm_adds_epi16(rxdataF_comp128_1[i],rxdataF_comp128_2[i])),1);
+        ul_ch_mag128_0[i]    = _mm_srai_epi16(_mm_adds_epi16(ul_ch_mag128_0[i],_mm_adds_epi16(ul_ch_mag128_1[i],ul_ch_mag128_2[i])),1);
+        ul_ch_mag128_0b[i]   = _mm_srai_epi16(_mm_adds_epi16(ul_ch_mag128_0b[i],_mm_adds_epi16(ul_ch_mag128_1b[i],ul_ch_mag128_2b[i])),1);
+        rxdataF_comp128_0[i] = _mm_add_epi16(rxdataF_comp128_0[i],(*(__m128i *)&jitterc[0]));
+      }
+     if (frame_parms->nb_antennas_rx==4)
+      for (i=0; i<nb_rb*3; i++) {
+        rxdataF_comp128_0[i] = _mm_srai_epi16(_mm_adds_epi16(rxdataF_comp128_0[i],_mm_adds_epi16(rxdataF_comp128_1[i],_mm_adds_epi16(rxdataF_comp128_2[i],rxdataF_comp128_3[i]))),2);
+        ul_ch_mag128_0[i]    = _mm_srai_epi16(_mm_adds_epi16(ul_ch_mag128_0[i],_mm_adds_epi16(ul_ch_mag128_1[i],_mm_adds_epi16(ul_ch_mag128_2[i],ul_ch_mag128_3[i]))),2);
+        ul_ch_mag128_0b[i]   = _mm_srai_epi16(_mm_adds_epi16(ul_ch_mag128_0b[i],_mm_adds_epi16(ul_ch_mag128_1b[i],_mm_adds_epi16(ul_ch_mag128_2b[i],ul_ch_mag128_3b[i]))),2);
+        rxdataF_comp128_0[i] = _mm_add_epi16(rxdataF_comp128_0[i],(*(__m128i *)&jitterc[0]));
+      }
 #elif defined(__arm__)
     rxdataF_comp128_0   = (int16x8_t *)&rxdataF_comp[0][symbol*frame_parms->N_RB_DL*12];
     rxdataF_comp128_1   = (int16x8_t *)&rxdataF_comp[1][symbol*frame_parms->N_RB_DL*12];
@@ -795,7 +825,7 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
       mmtmpU0 = _mm_srai_epi32(mmtmpU0,output_shift);
       mmtmpU1 = _mm_packs_epi32(mmtmpU0,mmtmpU0);
       ul_ch_mag128[2] = _mm_unpacklo_epi16(mmtmpU1,mmtmpU1);
-      LOG_D(PHY,"comp: symbol %d rb %d => %d,%d,%d (output_shift %d)\n",symbol,rb,*((int16_t *)&ul_ch_mag128[0]),*((int16_t *)&ul_ch_mag128[1]),*((int16_t *)&ul_ch_mag128[2]),output_shift);
+      //LOG_I(PHY,"comp: ant %d symbol %d rb %d => %d,%d,%d (output_shift %d)\n",aarx,symbol,rb,*((int16_t *)&ul_ch_mag128[0]),*((int16_t *)&ul_ch_mag128[1]),*((int16_t *)&ul_ch_mag128[2]),output_shift);
 #elif defined(__arm__)
       mmtmpU0 = vmull_s16(ul_ch128[0], ul_ch128[0]);
       mmtmpU0 = vqshlq_s32(vqaddq_s32(mmtmpU0,vrev64q_s32(mmtmpU0)),-output_shift128);
@@ -834,6 +864,7 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
       //  print_ints("c1",&mmtmpU3);
       rxdataF_comp128[0] = _mm_packs_epi32(mmtmpU2,mmtmpU3);
       /*
+              LOG_I(PHY,"Antenna %d:",aarx); 
               print_shorts("rx:",&rxdataF128[0]);
               print_shorts("ch:",&ul_ch128[0]);
               print_shorts("pack:",&rxdataF_comp128[0]);
@@ -851,9 +882,12 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
       mmtmpU2 = _mm_unpacklo_epi32(mmtmpU0,mmtmpU1);
       mmtmpU3 = _mm_unpackhi_epi32(mmtmpU0,mmtmpU1);
       rxdataF_comp128[1] = _mm_packs_epi32(mmtmpU2,mmtmpU3);
-      //        print_shorts("rx:",rxdataF128[1]);
-      //        print_shorts("ch:",ul_ch128[1]);
-      //        print_shorts("pack:",rxdataF_comp128[1]);
+      /*
+        LOG_I(PHY,"Antenna %d:",aarx);
+              print_shorts("rx:",&rxdataF128[1]);
+              print_shorts("ch:",&ul_ch128[1]);
+              print_shorts("pack:",&rxdataF_comp128[1]);
+      */
       //       multiply by conjugated channel
       mmtmpU0 = _mm_madd_epi16(ul_ch128[2],rxdataF128[2]);
       // mmtmpU0 contains real part of 4 consecutive outputs (32-bit)
@@ -867,9 +901,12 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
       mmtmpU2 = _mm_unpacklo_epi32(mmtmpU0,mmtmpU1);
       mmtmpU3 = _mm_unpackhi_epi32(mmtmpU0,mmtmpU1);
       rxdataF_comp128[2] = _mm_packs_epi32(mmtmpU2,mmtmpU3);
-      //        print_shorts("rx:",rxdataF128[2]);
-      //        print_shorts("ch:",ul_ch128[2]);
-      //        print_shorts("pack:",rxdataF_comp128[2]);
+      /*
+              LOG_I(PHY,"Antenna %d:",aarx);
+              print_shorts("rx:",&rxdataF128[2]);
+              print_shorts("ch:",&ul_ch128[2]);
+              print_shorts("pack:",&rxdataF_comp128[2]);
+      */
       // Add a jitter to compensate for the saturation in "packs" resulting in a bias on the DC after IDFT
       rxdataF_comp128[0] = _mm_add_epi16(rxdataF_comp128[0],(*(__m128i *)&jitter[0]));
       rxdataF_comp128[1] = _mm_add_epi16(rxdataF_comp128[1],(*(__m128i *)&jitter[0]));
@@ -1078,6 +1115,15 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
   }
 
   for (i=0; i<frame_parms->nb_antennas_rx; i++) {
+    pusch_vars->ulsch_power[i] = signal_energy_nodc(pusch_vars->drs_ch_estimates[i],
+                                 ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)/correction_factor;
+    LOG_D(PHY,"%4.4d.%d power harq_pid %d rb %2.2d TBS %2.2d (MPR_times_Ks %d correction %d)  power %d dBtimes10\n", proc->frame_rx, proc->subframe_rx, harq_pid,
+          ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->TBS,MPR_times_100Ks,correction_factor,dB_fixed_x10(pusch_vars->ulsch_power[i]));
+    pusch_vars->ulsch_noise_power[i]=0;
+    for (int rb=0;rb<ulsch[UE_id]->harq_processes[harq_pid]->nb_rb;rb++)
+      pusch_vars->ulsch_noise_power[i]+=eNB->measurements.n0_subband_power[i][rb]/ulsch[UE_id]->harq_processes[harq_pid]->nb_rb;
+    LOG_D(PHY,"noise power[%d] %d\n",i,dB_fixed_x10(pusch_vars->ulsch_noise_power[i]));
+/* Check this modification w.r.t to new PUSCH modifications
     //symbol 3
     int symbol_offset = frame_parms->N_RB_UL*12*(3 - frame_parms->Ncp);
     pusch_vars->ulsch_interference_power[i] = interference_power(&pusch_vars->drs_ch_estimates[i][symbol_offset],ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12);
@@ -1100,7 +1146,7 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
     }
 
     LOG_D(PHY,"%4.4d.%d power harq_pid %d rb %2.2d TBS %2.2d (MPR_times_Ks %d correction %d)  power %d dBtimes10\n", proc->frame_rx, proc->subframe_rx, harq_pid, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->TBS,MPR_times_100Ks,correction_factor,dB_fixed_x10(pusch_vars->ulsch_power[i]));
-     
+  */   
   }
 
   ulsch_channel_level(pusch_vars->drs_ch_estimates,
@@ -1113,8 +1159,7 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
   for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++)
     avgs = cmax(avgs,avgU[aarx]);
 
-  //      log2_maxh = 4+(log2_approx(avgs)/2);
-  log2_maxh = (log2_approx(avgs)/2)+ log2_approx(frame_parms->nb_antennas_rx-1)+4;
+  log2_maxh = 4+(log2_approx(avgs)/2); 
   LOG_D(PHY,"[ULSCH] log2_maxh = %d (%d,%d)\n",log2_maxh,avgU[0],avgs);
 
   for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) {
@@ -1221,67 +1266,56 @@ void dump_ulsch(PHY_VARS_eNB *eNB,int frame,int subframe,uint8_t UE_id,int round
   uint8_t harq_pid;
   char fname[100],vname[100];
   harq_pid = subframe2harq_pid(&eNB->frame_parms,frame,subframe);
-  LOG_UI(PHY,"Dumping ULSCH in subframe %d with harq_pid %d, round %d for NB_rb %d, TBS %d, Qm %d, N_symb %d\n",
+  LOG_UI(PHY,"Dumping ULSCH in subframe %d with harq_pid %d, round %d for NB_rb %d, first_rb %d, TBS %d, Qm %d, N_symb %d\n",
          subframe,harq_pid,round,eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
+         eNB->ulsch[UE_id]->harq_processes[harq_pid]->first_rb,
          eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS,eNB->ulsch[UE_id]->harq_processes[harq_pid]->Qm,
          eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_pusch);
+  for (int aa=0;aa<eNB->frame_parms.nb_antennas_rx;aa++)
+     LOG_UI(PHY,"ulsch_power[%d] %d, ulsch_noise_power[%d] %d\n",aa,dB_fixed_x10(eNB->pusch_vars[UE_id]->ulsch_power[aa]),aa,dB_fixed_x10(eNB->pusch_vars[UE_id]->ulsch_noise_power[aa]));
   sprintf(fname,"/tmp/ulsch_r%d_d",round);
   sprintf(vname,"/tmp/ulsch_r%d_dseq",round);
   LOG_UM(fname,vname,&eNB->ulsch[UE_id]->harq_processes[harq_pid]->d[0][96],
          eNB->ulsch[UE_id]->harq_processes[harq_pid]->Kplus*3,1,0);
 
   if (eNB->common_vars.rxdata) {
-    sprintf(fname,"/tmp/rxsig0_r%d.m",round);
-    sprintf(vname,"rxs0_r%d",round);
-    LOG_UM(fname,vname, &eNB->common_vars.rxdata[0][0],eNB->frame_parms.samples_per_tti*10,1,1);
-
-    if (eNB->frame_parms.nb_antennas_rx>1)
-      if (eNB->common_vars.rxdata) {
-        sprintf(fname,"/tmp/rxsig1_r%d.m",round);
-        sprintf(vname,"rxs1_r%d",round);
-        LOG_UM(fname,vname, &eNB->common_vars.rxdata[1][0],eNB->frame_parms.samples_per_tti*10,1,1);
-      }
-  }
+    for (int aarx=0;aarx<eNB->frame_parms.nb_antennas_rx;aarx++) {
+       sprintf(fname,"/tmp/rxsig%d_r%d.m",aarx,round);
+       sprintf(vname,"rxs%d_r%d",aarx,round);
+       LOG_UM(fname,vname, &eNB->common_vars.rxdata[aarx][0],eNB->frame_parms.samples_per_tti*10,1,1);
 
-  sprintf(fname,"/tmp/rxsigF0_r%d.m",round);
-  sprintf(vname,"rxsF0_r%d",round);
-  LOG_UM(fname,vname, (void *)&eNB->common_vars.rxdataF[0][0],eNB->frame_parms.ofdm_symbol_size*nsymb,1,1);
-
-  if (eNB->frame_parms.nb_antennas_rx>1) {
-    sprintf(fname,"/tmp/rxsigF1_r%d.m",round);
-    sprintf(vname,"rxsF1_r%d",round);
-    LOG_UM(vname,fname, &eNB->common_vars.rxdataF[1][0],eNB->frame_parms.ofdm_symbol_size*nsymb,1,1);
+    }
   }
-
-  sprintf(fname,"/tmp/rxsigF0_ext_r%d.m",round);
-  sprintf(vname,"rxsF0_ext_r%d",round);
-  LOG_UM(fname,vname, &eNB->pusch_vars[UE_id]->rxdataF_ext[0][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
-
-  if (eNB->frame_parms.nb_antennas_rx>1) {
-    sprintf(fname,"/tmp/rxsigF1_ext_r%d.m",round);
-    sprintf(vname,"rxsF1_ext_r%d",round);
-    LOG_UM(fname,vname,&eNB->pusch_vars[UE_id]->rxdataF_ext[1][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
+  if (eNB->common_vars.rxdataF) {
+   for (int aarx=0;aarx<eNB->frame_parms.nb_antennas_rx;aarx++) {
+       sprintf(fname,"/tmp/rxsigF%d_r%d.m",aarx,round);
+       sprintf(vname,"rxsF%d_r%d",aarx,round);
+       LOG_UM(fname,vname, (void *)&eNB->common_vars.rxdataF[aarx][0],eNB->frame_parms.ofdm_symbol_size*nsymb,1,1);
+    }
+  }
+  if (eNB->pusch_vars[UE_id]->rxdataF_ext) {
+    for (int aarx=0;aarx<eNB->frame_parms.nb_antennas_rx;aarx++) {
+      sprintf(fname,"/tmp/rxsigF%d_ext_r%d.m",aarx,round);
+      sprintf(vname,"rxsF%d_ext_r%d",aarx,round);
+      LOG_UM(fname,vname, &eNB->pusch_vars[UE_id]->rxdataF_ext[aarx][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
+    }
   }
-
   /*
   if (eNB->srs_vars[UE_id].srs_ch_estimates) LOG_UM("/tmp/srs_est0.m","srsest0",eNB->srs_vars[UE_id].srs_ch_estimates[0],eNB->frame_parms.ofdm_symbol_size,1,1);
 
   if (eNB->frame_parms.nb_antennas_rx>1)
     if (eNB->srs_vars[UE_id].srs_ch_estimates) LOG_UM("/tmp/srs_est1.m","srsest1",eNB->srs_vars[UE_id].srs_ch_estimates[1],eNB->frame_parms.ofdm_symbol_size,1,1);
   */
-  sprintf(fname,"/tmp/drs_est0_r%d.m",round);
-  sprintf(vname,"drsest0_r%d",round);
-  LOG_UM(fname,vname,eNB->pusch_vars[UE_id]->drs_ch_estimates[0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
-
-  if (eNB->frame_parms.nb_antennas_rx>1) {
-    sprintf(fname,"/tmp/drs_est1_r%d.m",round);
-    sprintf(vname,"drsest1_r%d",round);
-    LOG_UM(fname,vname,eNB->pusch_vars[UE_id]->drs_ch_estimates[1],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
+  for (int aarx=0;aarx<eNB->frame_parms.nb_antennas_rx;aarx++) {
+    sprintf(fname,"/tmp/drs_est%d_r%d.m",aarx,round);
+    sprintf(vname,"drsest%d_r%d",aarx,round);
+    LOG_UM(fname,vname,eNB->pusch_vars[UE_id]->drs_ch_estimates[aarx],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
+
+    sprintf(fname,"/tmp/ulsch%d_rxF_comp0_r%d.m",aarx,round);
+    sprintf(vname,"ulsch_rxF%d_comp0_r%d",aarx,round);
+    LOG_UM(fname,vname,&eNB->pusch_vars[UE_id]->rxdataF_comp[aarx][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
   }
 
-  sprintf(fname,"/tmp/ulsch0_rxF_comp0_r%d.m",round);
-  sprintf(vname,"ulsch0_rxF_comp0_r%d",round);
-  LOG_UM(fname,vname,&eNB->pusch_vars[UE_id]->rxdataF_comp[0][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
   //  LOG_M("ulsch_rxF_comp1.m","ulsch0_rxF_comp1",&eNB->pusch_vars[UE_id]->rxdataF_comp[0][1][0],eNB->frame_parms.N_RB_UL*12*nsymb,1,1);
   sprintf(fname,"/tmp/ulsch_rxF_llr_r%d.m",round);
   sprintf(vname,"ulsch_llr_r%d",round);
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c
index 7442a0ae7e0ff225c9486ff8442308d811127ea2..39900113b7bf3ebcf83fd5cdcebf56cd4db8f6f2 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c
@@ -78,7 +78,7 @@ LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_
 
   switch (N_RB_DL) {
     case 6:
-      bw_scaling =16;
+      bw_scaling =4;
       break;
 
     case 25:
@@ -276,7 +276,7 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
 
   switch (frame_parms->N_RB_DL) {
     case 6:
-      bw_scaling =16;
+      bw_scaling =4;
       break;
 
     case 25:
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c
index ab7c2b90910d4df9eff3fe17d0139843bd73038c..929f63e9fc0092f56ac42203f7a8e5d1d54676b8 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c
@@ -41,6 +41,7 @@
 #include "common/utils/LOG/vcd_signal_dumper.h"
 
 #include "../LTE_TRANSPORT/prach_extern.h"
+#include "common/utils/lte/prach_utils.h"
 
 //#define PRACH_DEBUG 1
 
@@ -115,7 +116,9 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
     NCS = NCS_restricted[Ncs_config];
   }
 
-  n_ra_prb = get_prach_prb_offset(&(ue->frame_parms),
+  n_ra_prb = get_prach_prb_offset(ue->frame_parms.frame_type,
+				  ue->frame_parms.tdd_config,
+				  ue->frame_parms.N_RB_UL,
                                   ue->frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
                                   ue->frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset,
                                   tdd_mapindex, Nf);
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h b/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h
index 3299401443c83799e0823fafdd1ad0f19709a03e..7ab795cae9a0eced9d89f06d39814256cc270713 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h
+++ b/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h
@@ -1740,10 +1740,5 @@ double computeRhoB_UE(PDSCH_CONFIG_DEDICATED  *pdsch_config_dedicated,
   LTE_UE_DLSCH_t *dlsch_ue);
 */
 
-uint8_t get_prach_prb_offset(LTE_DL_FRAME_PARMS *frame_parms,
-                             uint8_t prach_ConfigIndex,
-                             uint8_t n_ra_prboffset,
-                             uint8_t tdd_mapindex, uint16_t Nf);
-
 /**@}*/
 #endif
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h b/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h
index 4c433a5683b05be6a2899bb74c0ce449abe0bb25..6b84a5f9693981e816767a68a8e09704d83895c3 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h
+++ b/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h
@@ -36,9 +36,11 @@
 #include "../LTE_TRANSPORT/mdci.h"
 #include "../LTE_TRANSPORT/uci_common.h"
 #include "../LTE_TRANSPORT/transport_common.h"
+/*
 #ifndef STANDALONE_COMPILE
 #include "UTIL/LISTS/list.h"
 #endif
+*/
 
 #include "../LTE_TRANSPORT/transport_common.h"
 
diff --git a/openair1/PHY/MODULATION/beamforming.c b/openair1/PHY/MODULATION/beamforming.c
index 4405c46abf828a1b811a2369bd470cb20e3e8322..d592aa466e416da54d805dd279de0519158594c0 100644
--- a/openair1/PHY/MODULATION/beamforming.c
+++ b/openair1/PHY/MODULATION/beamforming.c
@@ -44,7 +44,6 @@
  
 #include "PHY/defs_common.h"
 #include "PHY/defs_eNB.h"
-#include "PHY/phy_extern.h"
 #include "PHY/CODING/coding_defs.h"
 #include "PHY/CODING/coding_extern.h"
 #include "PHY/CODING/lte_interleaver_inline.h"
diff --git a/openair1/PHY/MODULATION/slot_fep_ul.c b/openair1/PHY/MODULATION/slot_fep_ul.c
index 746f8dbc0e1535dcca3bcdded7a83b6edee24a91..ccb7ee5f3e405ede1709e7ecfcac9b532f7ed533 100644
--- a/openair1/PHY/MODULATION/slot_fep_ul.c
+++ b/openair1/PHY/MODULATION/slot_fep_ul.c
@@ -20,8 +20,8 @@
  */
 
 #include "PHY/defs_eNB.h"
-#include "PHY/phy_extern.h"
-#include "modulation_eNB.h"
+//#include "PHY/phy_extern.h"
+//#include "modulation_eNB.h"
 //#define DEBUG_FEP
 
 
diff --git a/openair1/PHY/MODULATION/ul_7_5_kHz.c b/openair1/PHY/MODULATION/ul_7_5_kHz.c
index a5b428a813a1619774e70cbfbb9569e58e97caa2..384b9d621c59ddb0246b83d96e4c5602b70eaa54 100644
--- a/openair1/PHY/MODULATION/ul_7_5_kHz.c
+++ b/openair1/PHY/MODULATION/ul_7_5_kHz.c
@@ -20,7 +20,6 @@
  */
 
 #include "PHY/defs_eNB.h"
-#include "PHY/phy_extern.h"
 #include <math.h>
 #include "PHY/sse_intrin.h"
 #include "modulation_extern.h"
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c b/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c
index 3814c782952a7d6dbe8ac2007fb039b2d360fb61..a1a7201c1b1f3273d9c2f90e0f3a81eb2e4e434c 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c
@@ -239,7 +239,7 @@ void nr_fill_dci(PHY_VARS_gNB *gNB,
     //uint64_t *dci_pdu = (uint64_t*)pdcch_pdu_rel15->dci_pdu[i].Payload;
 
     int dlsch_id = find_nr_dlsch(pdcch_pdu_rel15->dci_pdu[i].RNTI,gNB,SEARCH_EXIST_OR_FREE);
-    if( (dlsch_id<0) || (dlsch_id>=NUMBER_OF_NR_DLSCH_MAX) ){
+    if( (dlsch_id<0) || (dlsch_id>=gNB->number_of_nr_dlsch_max) ){
       LOG_E(PHY,"illegal dlsch_id found!!! rnti %04x dlsch_id %d\n",(unsigned int)pdcch_pdu_rel15->dci_pdu[i].RNTI,dlsch_id);
       return;
     }
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
index 2d43fb5aede2e8c20a86f4ffd2f3e414afd3daf0..96918792a03792e74d2cf9daf304b9cbb273d7e5 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
@@ -132,7 +132,7 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
   time_stats_t *dlsch_interleaving_stats=&gNB->dlsch_interleaving_stats;
   time_stats_t *dlsch_segmentation_stats=&gNB->dlsch_segmentation_stats;
 
-  for (int dlsch_id=0;dlsch_id<NUMBER_OF_NR_DLSCH_MAX;dlsch_id++) {
+  for (int dlsch_id=0;dlsch_id<gNB->number_of_nr_dlsch_max;dlsch_id++) {
     dlsch = gNB->dlsch[dlsch_id][0];
     if (dlsch->slot_tx[slot] == 0) continue;
 
@@ -159,7 +159,7 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
     uint16_t nb_re = ((12*rel15->NrOfSymbols)-nb_re_dmrs*dmrs_len-xOverhead)*rel15->rbSize*rel15->nrOfLayers;
     uint8_t Qm = rel15->qamModOrder[0];
     uint32_t encoded_length = nb_re*Qm;
-    int16_t mod_dmrs[14][n_dmrs<<1] __attribute__ ((aligned(16)));
+    int16_t mod_dmrs[n_dmrs<<1] __attribute__ ((aligned(16)));
 
     /* PTRS */
     uint16_t beta_ptrs = 1;
@@ -264,24 +264,6 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
 	printf("\n");
       }
 #endif
-    
-    /// DMRS QPSK modulation
-    // TODO: performance improvement, we can skip the modulation of DMRS symbols outside the bandwidth part
-    for (int l=rel15->StartSymbolIndex; l<rel15->StartSymbolIndex+rel15->NrOfSymbols; l++) {
-      if (rel15->dlDmrsSymbPos & (1 << l)) {
-        nr_modulation(pdsch_dmrs[l][0], n_dmrs*2, DMRS_MOD_ORDER, mod_dmrs[l]); // currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
-
-#ifdef DEBUG_DLSCH
-        printf("DMRS modulation (symbol %d, %d symbols, type %d):\n", l, n_dmrs, dmrs_Type);
-        for (int i=0; i<n_dmrs>>4; i++) {
-          for (int j=0; j<8; j++) {
-            printf("%d %d\t", mod_dmrs[l][((i<<3)+j)<<1], mod_dmrs[l][(((i<<3)+j)<<1)+1]);
-          }
-          printf("\n");
-        }
-#endif
-      }
-    }
 
     /// Resource mapping
     
@@ -349,6 +331,21 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
           }
         }
 
+        /// DMRS QPSK modulation
+        if (rel15->dlDmrsSymbPos & (1 << l)) {
+          nr_modulation(pdsch_dmrs[l][0], n_dmrs*2, DMRS_MOD_ORDER, mod_dmrs); // currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
+
+#ifdef DEBUG_DLSCH
+          printf("DMRS modulation (symbol %d, %d symbols, type %d):\n", l, n_dmrs, dmrs_Type);
+          for (int i=0; i<n_dmrs>>4; i++) {
+            for (int j=0; j<8; j++) {
+              printf("%d %d\t", mod_dmrs[((i<<3)+j)<<1], mod_dmrs[(((i<<3)+j)<<1)+1]);
+            }
+            printf("\n");
+          }
+#endif
+        }
+
         /* calculate if current symbol is PTRS symbols */
         ptrs_idx = 0;
 
@@ -379,8 +376,8 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
 
           /* Map DMRS Symbol */
           if ( ( dmrs_symbol_map & (1 << l) ) && (k == ((start_sc+get_dmrs_freq_idx(n, k_prime, delta, dmrs_Type))%(frame_parms->ofdm_symbol_size)))) {
-            txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) +     (2*txdataF_offset)] = (Wt[l_prime]*Wf[k_prime]*amp*mod_dmrs[l][dmrs_idx<<1]) >> 15;
-            txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)] = (Wt[l_prime]*Wf[k_prime]*amp*mod_dmrs[l][(dmrs_idx<<1) + 1]) >> 15;
+            txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) +     (2*txdataF_offset)] = (Wt[l_prime]*Wf[k_prime]*amp*mod_dmrs[dmrs_idx<<1]) >> 15;
+            txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)] = (Wt[l_prime]*Wf[k_prime]*amp*mod_dmrs[(dmrs_idx<<1) + 1]) >> 15;
 #ifdef DEBUG_DLSCH_MAPPING
             printf("dmrs_idx %d\t l %d \t k %d \t k_prime %d \t n %d \t txdataF: %d %d\n",
                    dmrs_idx, l, k, k_prime, n, txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + (2*txdataF_offset)],
@@ -543,6 +540,6 @@ void dump_pdsch_stats(PHY_VARS_gNB *gNB) {
 
 void clear_pdsch_stats(PHY_VARS_gNB *gNB) {
 
-  for (int i=0;i<NUMBER_OF_NR_DLSCH_MAX;i++)
+  for (int i=0;i<gNB->number_of_nr_dlsch_max;i++)
     memset((void*)&gNB->dlsch_stats[i],0,sizeof(gNB->dlsch_stats[i]));
 }
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch_tools.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch_tools.c
index 05d6c4c112bbe35ccc906425545ca63d25a85989..543002827d65b9f36e9414c11d36e0705161b5b3 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dlsch_tools.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch_tools.c
@@ -260,7 +260,7 @@ int16_t find_nr_dlsch(uint16_t rnti, PHY_VARS_gNB *gNB,find_type_t type) {
    int16_t first_free_index=-1;
  
    AssertFatal(gNB!=NULL,"gNB is null\n");
-   for (i=0; i<NUMBER_OF_NR_DLSCH_MAX; i++) {
+   for (i=0; i<gNB->number_of_nr_dlsch_max; i++) {
      AssertFatal(gNB->dlsch[i]!=NULL,"gNB->dlsch[%d] is null\n",i);
      AssertFatal(gNB->dlsch[i][0]!=NULL,"gNB->dlsch[%d][0] is null\n",i);
      LOG_D(PHY,"searching for rnti %x : dlsch_index %d=> harq_mask %x, rnti %x, first_free_index %d\n", rnti,i,
@@ -286,7 +286,7 @@ void nr_fill_dlsch(PHY_VARS_gNB *gNB,
   nfapi_nr_dl_tti_pdsch_pdu_rel15_t *rel15 = &pdsch_pdu->pdsch_pdu_rel15;
  
   int dlsch_id = find_nr_dlsch(rel15->rnti,gNB,SEARCH_EXIST);
-  AssertFatal( (dlsch_id>=0) && (dlsch_id<NUMBER_OF_NR_DLSCH_MAX),
+  AssertFatal( (dlsch_id>=0) && (dlsch_id<gNB->number_of_nr_dlsch_max),
               "illegal or no dlsch_id found!!! rnti %04x dlsch_id %d\n",rel15->rnti,dlsch_id);
   NR_gNB_DLSCH_t  *dlsch = gNB->dlsch[dlsch_id][0];
   NR_DL_gNB_HARQ_t *harq  = &dlsch->harq_process;
diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
index e5e81109e492d005bf0a4709dfa3fcf66d0d5918..6b22ece2bd97d2bd43c8fe47e04de39d27932af8 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
+++ b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
@@ -133,15 +133,13 @@ NR_gNB_DLSCH_t *new_gNB_dlsch(NR_DL_FRAME_PARMS *frame_parms,
     @param ue Pointer to PHY variables
     @param UE_id id of current UE
     @param frame Frame number
-    @param nr_tti_rx TTI number
-    @param symbol Symbol on which to act (within-in nr_TTI_rx)
+    @param slot Slot number
     @param harq_pid HARQ process ID
 */
 int nr_rx_pusch(PHY_VARS_gNB *gNB,
                 uint8_t UE_id,
                 uint32_t frame,
-                uint8_t nr_tti_rx,
-                unsigned char symbol,
+                uint8_t slot,
                 unsigned char harq_pid);
 
 /** \brief This function performs RB extraction (signal and channel estimates) (currently signal only until channel estimation and compensation are implemented)
diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch.c
index 0040f015445ac40edec1723fac14353dfac93abc..e6e8fdb01b11e0cb19bb32bb297bea37ec40728e 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch.c
@@ -41,7 +41,7 @@ int16_t find_nr_ulsch(uint16_t rnti, PHY_VARS_gNB *gNB,find_type_t type) {
   int16_t first_free_index=-1;
 
   AssertFatal(gNB!=NULL,"gNB is null\n");
-  for (i=0; i<NUMBER_OF_NR_ULSCH_MAX; i++) {
+  for (i=0; i<gNB->number_of_nr_ulsch_max; i++) {
     AssertFatal(gNB->ulsch[i]!=NULL,"gNB->ulsch[%d] is null\n",i);
     AssertFatal(gNB->ulsch[i][0]!=NULL,"gNB->ulsch[%d][0] is null\n",i);
     LOG_D(PHY,"searching for rnti %x : ulsch_index %d=> harq_mask %x, rnti %x, first_free_index %d\n", rnti,i,gNB->ulsch[i][0]->harq_mask,gNB->ulsch[i][0]->rnti,first_free_index);
@@ -62,7 +62,7 @@ void nr_fill_ulsch(PHY_VARS_gNB *gNB,
 
  
   int ulsch_id = find_nr_ulsch(ulsch_pdu->rnti,gNB,SEARCH_EXIST_OR_FREE);
-  AssertFatal( (ulsch_id>=0) && (ulsch_id<NUMBER_OF_NR_ULSCH_MAX),
+  AssertFatal( (ulsch_id>=0) && (ulsch_id<gNB->number_of_nr_ulsch_max),
               "illegal or no ulsch_id found!!! rnti %04x ulsch_id %d\n",ulsch_pdu->rnti,ulsch_id);
 
   NR_gNB_ULSCH_t  *ulsch = gNB->ulsch[ulsch_id][0];
@@ -139,7 +139,7 @@ void nr_ulsch_unscrambling_optim(int16_t* llr,
 
 void dump_pusch_stats(PHY_VARS_gNB *gNB) {
 
-  for (int i=0;i<NUMBER_OF_NR_ULSCH_MAX;i++)
+  for (int i=0;i<gNB->number_of_nr_ulsch_max;i++)
     if (gNB->ulsch_stats[i].rnti>0) 
       LOG_I(PHY,"ULSCH RNTI %x: round_trials %d(%1.1e):%d(%1.1e):%d(%1.1e):%d, current_Qm %d, current_RI %d, total_bytes RX/SCHED %d/%d\n",
 	    gNB->ulsch_stats[i].rnti,
@@ -159,6 +159,6 @@ void dump_pusch_stats(PHY_VARS_gNB *gNB) {
 
 void clear_pusch_stats(PHY_VARS_gNB *gNB) {
 
-  for (int i=0;i<NUMBER_OF_NR_ULSCH_MAX;i++)
+  for (int i=0;i<gNB->number_of_nr_ulsch_max;i++)
     memset((void*)&gNB->ulsch_stats[i],0,sizeof(gNB->ulsch_stats[i]));
 }
diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
index c1bca8d2a0a6682402106514454e4292bb8abefc..72db5488c493cc3e976f20873f134cf89a3046e0 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
@@ -12,6 +12,8 @@
 //#define DEBUG_RB_EXT
 //#define DEBUG_CH_MAG
 
+#define INVALID_VALUE 255
+
 void nr_idft(int32_t *z, uint32_t Msc_PUSCH)
 {
 
@@ -1157,12 +1159,11 @@ void nr_ulsch_detection_mrc(NR_DL_FRAME_PARMS *frame_parms,
 int nr_rx_pusch(PHY_VARS_gNB *gNB,
                 uint8_t ulsch_id,
                 uint32_t frame,
-                uint8_t nr_tti_rx,
-                unsigned char symbol,
+                uint8_t slot,
                 unsigned char harq_pid)
 {
 
-  uint8_t aarx, aatx, dmrs_symbol_flag; // dmrs_symbol_flag, a flag to indicate DMRS REs in current symbol
+  uint8_t aarx, aatx;
   uint32_t nb_re_pusch, bwp_start_subcarrier;
   int avgs;
   int avg[4];
@@ -1170,204 +1171,194 @@ int nr_rx_pusch(PHY_VARS_gNB *gNB,
   NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms;
   nfapi_nr_pusch_pdu_t *rel15_ul = &gNB->ulsch[ulsch_id][0]->harq_processes[harq_pid]->ulsch_pdu;
 
-  dmrs_symbol_flag = 0;
-
-  if(symbol == rel15_ul->start_symbol_index){
-    gNB->pusch_vars[ulsch_id]->dmrs_symbol = 0;
-    gNB->pusch_vars[ulsch_id]->cl_done = 0;
-  }
-
+  gNB->pusch_vars[ulsch_id]->dmrs_symbol = INVALID_VALUE;
+  gNB->pusch_vars[ulsch_id]->cl_done = 0;
 
   bwp_start_subcarrier = ((rel15_ul->rb_start + rel15_ul->bwp_start)*NR_NB_SC_PER_RB + frame_parms->first_carrier_offset) % frame_parms->ofdm_symbol_size;
-
-  dmrs_symbol_flag = ((rel15_ul->ul_dmrs_symb_pos)>>symbol)&0x01;
-
-  LOG_D(PHY,"symbol %d bwp_start_subcarrier %d, rb_start %d, first_carrier_offset %d\n",symbol,bwp_start_subcarrier,rel15_ul->rb_start,frame_parms->first_carrier_offset);
+  LOG_D(PHY,"bwp_start_subcarrier %d, rb_start %d, first_carrier_offset %d\n", bwp_start_subcarrier, rel15_ul->rb_start, frame_parms->first_carrier_offset);
   LOG_D(PHY,"ul_dmrs_symb_pos %x\n",rel15_ul->ul_dmrs_symb_pos);
 
-  if (dmrs_symbol_flag == 1){
-    if (((rel15_ul->ul_dmrs_symb_pos)>>((symbol+1)%frame_parms->symbols_per_slot))&0x01)
-      AssertFatal(1==0,"Double DMRS configuration is not yet supported\n");
-
-    if (rel15_ul->dmrs_config_type == 0) {
-      // if no data in dmrs cdm group is 1 only even REs have no data
-      // if no data in dmrs cdm group is 2 both odd and even REs have no data
-      nb_re_pusch = rel15_ul->rb_size *(12 - (rel15_ul->num_dmrs_cdm_grps_no_data*6));
-    }
-    else {
-      nb_re_pusch = rel15_ul->rb_size *(12 - (rel15_ul->num_dmrs_cdm_grps_no_data*4));
-    }
-    LOG_D(PHY,"dmrs_symbol: nb_re_pusch %d\n",nb_re_pusch);
-    gNB->pusch_vars[ulsch_id]->dmrs_symbol = symbol;
-
-  } else {
-    nb_re_pusch = rel15_ul->rb_size * NR_NB_SC_PER_RB;
-  }
-
   //----------------------------------------------------------
   //--------------------- Channel estimation ---------------------
   //----------------------------------------------------------
   start_meas(&gNB->ulsch_channel_estimation_stats);
-  if (dmrs_symbol_flag == 1) {
-    nr_pusch_channel_estimation(gNB,
-                                nr_tti_rx,
-                                0, // p
-                                symbol,
-                                ulsch_id,
-                                bwp_start_subcarrier,
-                                rel15_ul);
+  for(uint8_t symbol = rel15_ul->start_symbol_index; symbol < (rel15_ul->start_symbol_index + rel15_ul->nr_of_symbols); symbol++) {
+    uint8_t dmrs_symbol_flag = (rel15_ul->ul_dmrs_symb_pos >> symbol) & 0x01;
+    LOG_D(PHY,"symbol %d, dmrs_symbol_flag :%d\n", symbol, dmrs_symbol_flag);
+    if (dmrs_symbol_flag == 1) {
+      if (gNB->pusch_vars[ulsch_id]->dmrs_symbol == INVALID_VALUE)
+        gNB->pusch_vars[ulsch_id]->dmrs_symbol = symbol;
+
+      nr_pusch_channel_estimation(gNB,
+                                  slot,
+                                  0, // p
+                                  symbol,
+                                  ulsch_id,
+                                  bwp_start_subcarrier,
+                                  rel15_ul);
 
-    nr_gnb_measurements(gNB, ulsch_id, harq_pid, symbol);
+      nr_gnb_measurements(gNB, ulsch_id, harq_pid, symbol);
 
-    for (aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) {
-      gNB->pusch_vars[ulsch_id]->ulsch_power[aarx] = signal_energy_nodc(&gNB->pusch_vars[ulsch_id]->ul_ch_estimates[aarx][symbol*frame_parms->ofdm_symbol_size],
-                                                                        rel15_ul->rb_size*12);
-      if (gNB->pusch_vars[ulsch_id]->ulsch_power[aarx]==1) return (1);
+      for (aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) {
+        gNB->pusch_vars[ulsch_id]->ulsch_power[aarx] = signal_energy_nodc(&gNB->pusch_vars[ulsch_id]->ul_ch_estimates[aarx][symbol*frame_parms->ofdm_symbol_size],
+                                                                          rel15_ul->rb_size*12);
+        if (gNB->pusch_vars[ulsch_id]->ulsch_power[aarx] == 1)
+          return 1;
+      }
     }
-
   }
   stop_meas(&gNB->ulsch_channel_estimation_stats);
-  //----------------------------------------------------------
-  //--------------------- RBs extraction ---------------------
-  //----------------------------------------------------------
 
-  gNB->pusch_vars[ulsch_id]->ul_valid_re_per_slot[symbol] = nb_re_pusch;
+#ifdef __AVX2__
+  int off = ((rel15_ul->rb_size&1) == 1)? 4:0;
+#else
+  int off = 0;
+#endif
+  uint32_t rxdataF_ext_offset = 0;
 
-  if (nb_re_pusch > 0) {
+  for(uint8_t symbol = rel15_ul->start_symbol_index; symbol < (rel15_ul->start_symbol_index + rel15_ul->nr_of_symbols); symbol++) {
+    uint8_t dmrs_symbol_flag = (rel15_ul->ul_dmrs_symb_pos >> symbol) & 0x01;
+    if (dmrs_symbol_flag == 1) {
+      if ((rel15_ul->ul_dmrs_symb_pos >> ((symbol + 1) % frame_parms->symbols_per_slot)) & 0x01)
+        AssertFatal(1==0,"Double DMRS configuration is not yet supported\n");
 
-    start_meas(&gNB->ulsch_rbs_extraction_stats);
-    nr_ulsch_extract_rbs_single(gNB->common_vars.rxdataF,
-                                gNB->pusch_vars[ulsch_id],
-                                symbol,
-                                dmrs_symbol_flag,
-                                rel15_ul,
-                                frame_parms);
-    stop_meas(&gNB->ulsch_rbs_extraction_stats);
+      gNB->pusch_vars[ulsch_id]->dmrs_symbol = symbol;
 
-    //----------------------------------------------------------
-    //--------------------- Channel Scaling --------------------
-    //----------------------------------------------------------
+      if (rel15_ul->dmrs_config_type == 0) {
+        // if no data in dmrs cdm group is 1 only even REs have no data
+        // if no data in dmrs cdm group is 2 both odd and even REs have no data
+        nb_re_pusch = rel15_ul->rb_size *(12 - (rel15_ul->num_dmrs_cdm_grps_no_data*6));
+      }
+      else {
+        nb_re_pusch = rel15_ul->rb_size *(12 - (rel15_ul->num_dmrs_cdm_grps_no_data*4));
+      }
+    } else {
+      nb_re_pusch = rel15_ul->rb_size * NR_NB_SC_PER_RB;
+    }
 
-    nr_ulsch_scale_channel(gNB->pusch_vars[ulsch_id]->ul_ch_estimates_ext,
-                           frame_parms,
-                           gNB->ulsch[ulsch_id],
-                           symbol,
-                           dmrs_symbol_flag,
-                           rel15_ul->rb_size,
-                           rel15_ul->dmrs_config_type);
+    gNB->pusch_vars[ulsch_id]->ul_valid_re_per_slot[symbol] = nb_re_pusch;
+    LOG_D(PHY,"symbol %d: nb_re_pusch %d, DMRS symbl used for Chest :%d \n", symbol, nb_re_pusch, gNB->pusch_vars[ulsch_id]->dmrs_symbol);
 
+    //----------------------------------------------------------
+    //--------------------- RBs extraction ---------------------
+    //----------------------------------------------------------
+    if (nb_re_pusch > 0) {
 
-    if (gNB->pusch_vars[ulsch_id]->cl_done==0) {
+      start_meas(&gNB->ulsch_rbs_extraction_stats);
+      nr_ulsch_extract_rbs_single(gNB->common_vars.rxdataF,
+                                  gNB->pusch_vars[ulsch_id],
+                                  symbol,
+                                  dmrs_symbol_flag,
+                                  rel15_ul,
+                                  frame_parms);
+      stop_meas(&gNB->ulsch_rbs_extraction_stats);
+
+      //----------------------------------------------------------
+      //--------------------- Channel Scaling --------------------
+      //----------------------------------------------------------
+      nr_ulsch_scale_channel(gNB->pusch_vars[ulsch_id]->ul_ch_estimates_ext,
+                            frame_parms,
+                            gNB->ulsch[ulsch_id],
+                            symbol,
+                            dmrs_symbol_flag,
+                            rel15_ul->rb_size,
+                            rel15_ul->dmrs_config_type);
+
+      if (gNB->pusch_vars[ulsch_id]->cl_done==0) {
+        nr_ulsch_channel_level(gNB->pusch_vars[ulsch_id]->ul_ch_estimates_ext,
+                              frame_parms,
+                              avg,
+                              symbol,
+                              nb_re_pusch,
+                              rel15_ul->rb_size);
+
+        avgs = 0;
+
+        for (aatx=0;aatx<nb_antennas_ue_tx;aatx++)
+          for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++)
+            avgs = cmax(avgs,avg[(aatx<<1)+aarx]);
+
+        gNB->pusch_vars[ulsch_id]->log2_maxh = (log2_approx(avgs)/2)+3;
+        gNB->pusch_vars[ulsch_id]->cl_done = 1;
+      }
 
-      nr_ulsch_channel_level(gNB->pusch_vars[ulsch_id]->ul_ch_estimates_ext,
-                             frame_parms,
-                             avg,
+      //----------------------------------------------------------
+      //--------------------- Channel Compensation ---------------
+      //----------------------------------------------------------
+      start_meas(&gNB->ulsch_channel_compensation_stats);
+      nr_ulsch_channel_compensation(gNB->pusch_vars[ulsch_id]->rxdataF_ext,
+                                    gNB->pusch_vars[ulsch_id]->ul_ch_estimates_ext,
+                                    gNB->pusch_vars[ulsch_id]->ul_ch_mag0,
+                                    gNB->pusch_vars[ulsch_id]->ul_ch_magb0,
+                                    gNB->pusch_vars[ulsch_id]->rxdataF_comp,
+                                    (nb_antennas_ue_tx>1) ? gNB->pusch_vars[ulsch_id]->rho : NULL,
+                                    frame_parms,
+                                    symbol,
+                                    dmrs_symbol_flag,
+                                    rel15_ul->qam_mod_order,
+                                    rel15_ul->rb_size,
+                                    gNB->pusch_vars[ulsch_id]->log2_maxh);
+      stop_meas(&gNB->ulsch_channel_compensation_stats);
+
+      start_meas(&gNB->ulsch_mrc_stats);
+      nr_ulsch_detection_mrc(frame_parms,
+                             gNB->pusch_vars[ulsch_id]->rxdataF_comp,
+                             gNB->pusch_vars[ulsch_id]->ul_ch_mag,
+                             gNB->pusch_vars[ulsch_id]->ul_ch_magb,
                              symbol,
-                             nb_re_pusch,
                              rel15_ul->rb_size);
+      stop_meas(&gNB->ulsch_mrc_stats);
 
-      avgs = 0;
-
-      for (aatx=0;aatx<nb_antennas_ue_tx;aatx++)
-        for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++)
-          avgs = cmax(avgs,avg[(aatx<<1)+aarx]);
-
-      gNB->pusch_vars[ulsch_id]->log2_maxh = (log2_approx(avgs)/2)+3;
-      gNB->pusch_vars[ulsch_id]->cl_done = 1;
-    }
+      if (rel15_ul->transform_precoding == transform_precoder_enabled) {
 
-    //----------------------------------------------------------
-    //--------------------- Channel Compensation ---------------
-    //----------------------------------------------------------
-
-    start_meas(&gNB->ulsch_channel_compensation_stats);
-    nr_ulsch_channel_compensation(gNB->pusch_vars[ulsch_id]->rxdataF_ext,
-                                  gNB->pusch_vars[ulsch_id]->ul_ch_estimates_ext,
-                                  gNB->pusch_vars[ulsch_id]->ul_ch_mag0,
-                                  gNB->pusch_vars[ulsch_id]->ul_ch_magb0,
-                                  gNB->pusch_vars[ulsch_id]->rxdataF_comp,
-                                  (nb_antennas_ue_tx>1) ? gNB->pusch_vars[ulsch_id]->rho : NULL,
-                                  frame_parms,
-                                  symbol,
-                                  dmrs_symbol_flag,
-                                  rel15_ul->qam_mod_order,
-                                  rel15_ul->rb_size,
-                                  gNB->pusch_vars[ulsch_id]->log2_maxh);
-    stop_meas(&gNB->ulsch_channel_compensation_stats);
-
-    start_meas(&gNB->ulsch_mrc_stats);
-    nr_ulsch_detection_mrc(frame_parms,
-			   gNB->pusch_vars[ulsch_id]->rxdataF_comp,
-			   gNB->pusch_vars[ulsch_id]->ul_ch_mag,
-			   gNB->pusch_vars[ulsch_id]->ul_ch_magb,
-			   symbol,
-			   rel15_ul->rb_size);
-    stop_meas(&gNB->ulsch_mrc_stats);
-
-
-    if (rel15_ul->transform_precoding == transform_precoder_enabled) { 
-      
       #ifdef __AVX2__
         // For odd number of resource blocks need byte alignment to multiple of 8
         int nb_re_pusch2 = nb_re_pusch + (nb_re_pusch&7);
       #else
         int nb_re_pusch2 = nb_re_pusch;
-      #endif      
-      
-      // perform IDFT operation on the compensated rxdata if transform precoding is enabled
-      nr_idft(&gNB->pusch_vars[ulsch_id]->rxdataF_comp[0][symbol * nb_re_pusch2], nb_re_pusch);
-      LOG_D(PHY,"Transform precoding being done on data- symbol: %d, nb_re_pusch: %d\n", symbol, nb_re_pusch);      
-    }
-
+      #endif
 
-    //----------------------------------------------------------
-    //--------------------- PTRS Processing --------------------
-    //----------------------------------------------------------
+        // perform IDFT operation on the compensated rxdata if transform precoding is enabled
+        nr_idft(&gNB->pusch_vars[ulsch_id]->rxdataF_comp[0][symbol * nb_re_pusch2], nb_re_pusch);
+        LOG_D(PHY,"Transform precoding being done on data- symbol: %d, nb_re_pusch: %d\n", symbol, nb_re_pusch);
+      }
 
-    /* In case PTRS is enabled then LLR will be calculated after PTRS symbols are processed *
-     * otherwise LLR are calculated for each symbol based upon DMRS channel estimates only. */
-    if (rel15_ul->pdu_bit_map & PUSCH_PDU_BITMAP_PUSCH_PTRS)
-    {
-      start_meas(&gNB->ulsch_ptrs_processing_stats);
-      nr_pusch_ptrs_processing(gNB,
-                               frame_parms,
-                               rel15_ul,
-                               ulsch_id,
-                               nr_tti_rx,
-                               symbol,
-                               nb_re_pusch);
-      stop_meas(&gNB->ulsch_ptrs_processing_stats);
-
-      /*  Subtract total PTRS RE's in the symbol from PUSCH RE's */
-      gNB->pusch_vars[ulsch_id]->ul_valid_re_per_slot[symbol] -= gNB->pusch_vars[ulsch_id]->ptrs_re_per_slot;
-    }
-  }
+      //----------------------------------------------------------
+      //--------------------- PTRS Processing --------------------
+      //----------------------------------------------------------
+      /* In case PTRS is enabled then LLR will be calculated after PTRS symbols are processed *
+      * otherwise LLR are calculated for each symbol based upon DMRS channel estimates only. */
+      if (rel15_ul->pdu_bit_map & PUSCH_PDU_BITMAP_PUSCH_PTRS) {
+        start_meas(&gNB->ulsch_ptrs_processing_stats);
+        nr_pusch_ptrs_processing(gNB,
+                                 frame_parms,
+                                 rel15_ul,
+                                 ulsch_id,
+                                 slot,
+                                 symbol,
+                                 nb_re_pusch);
+        stop_meas(&gNB->ulsch_ptrs_processing_stats);
+
+        /*  Subtract total PTRS RE's in the symbol from PUSCH RE's */
+        gNB->pusch_vars[ulsch_id]->ul_valid_re_per_slot[symbol] -= gNB->pusch_vars[ulsch_id]->ptrs_re_per_slot;
+      }
 
-  /*---------------------------------------------------------------------------------------------------- */
-  /*--------------------  LLRs computation  -------------------------------------------------------------*/
-  /*-----------------------------------------------------------------------------------------------------*/
-  if(symbol == (rel15_ul->start_symbol_index + rel15_ul->nr_of_symbols -1)) {
-  
-#ifdef __AVX2__
-    int off = ((rel15_ul->rb_size&1) == 1)? 4:0;
-#else
-    int off = 0;
-#endif
-    uint32_t rxdataF_ext_offset = 0;
-    for(uint8_t i =rel15_ul->start_symbol_index; i< (rel15_ul->start_symbol_index + rel15_ul->nr_of_symbols);i++) {
+      /*---------------------------------------------------------------------------------------------------- */
+      /*--------------------  LLRs computation  -------------------------------------------------------------*/
+      /*-----------------------------------------------------------------------------------------------------*/
       start_meas(&gNB->ulsch_llr_stats);
-      nr_ulsch_compute_llr(&gNB->pusch_vars[ulsch_id]->rxdataF_comp[0][i * (off + rel15_ul->rb_size * NR_NB_SC_PER_RB)],
-                          gNB->pusch_vars[ulsch_id]->ul_ch_mag0,
-                          gNB->pusch_vars[ulsch_id]->ul_ch_magb0,
-                          &gNB->pusch_vars[ulsch_id]->llr[rxdataF_ext_offset * rel15_ul->qam_mod_order],
-                          rel15_ul->rb_size,
-                          gNB->pusch_vars[ulsch_id]->ul_valid_re_per_slot[i],
-                          i,
-                          rel15_ul->qam_mod_order);
+      nr_ulsch_compute_llr(&gNB->pusch_vars[ulsch_id]->rxdataF_comp[0][symbol * (off + rel15_ul->rb_size * NR_NB_SC_PER_RB)],
+                           gNB->pusch_vars[ulsch_id]->ul_ch_mag0,
+                           gNB->pusch_vars[ulsch_id]->ul_ch_magb0,
+                           &gNB->pusch_vars[ulsch_id]->llr[rxdataF_ext_offset * rel15_ul->qam_mod_order],
+                           rel15_ul->rb_size,
+                           gNB->pusch_vars[ulsch_id]->ul_valid_re_per_slot[symbol],
+                           symbol,
+                           rel15_ul->qam_mod_order);
       stop_meas(&gNB->ulsch_llr_stats);
-      rxdataF_ext_offset += gNB->pusch_vars[ulsch_id]->ul_valid_re_per_slot[i];
-    }// symbol loop
-  }// last symbol check
-  
-  return (0);
+      rxdataF_ext_offset += gNB->pusch_vars[ulsch_id]->ul_valid_re_per_slot[symbol];
+    }
+  } // symbol loop
+
+  return 0;
 }
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
index aa32ecc8c9dc5c32a9abaf306ff0027f5fa3b1c3..f3cca9e33db0a9a7aa38bf50f6f0e2c10d735fdb 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
@@ -38,10 +38,10 @@
 
 //#include "PHY/defs_nr_UE.h"
 #include "../NR_TRANSPORT/nr_transport_common_proto.h"
-#ifndef STANDALONE_COMPILE
+/*#ifndef STANDALONE_COMPILE
 #include "UTIL/LISTS/list.h"
 #endif
-
+*/
 #include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h"
 
 
diff --git a/openair1/PHY/TOOLS/oai_dfts.c b/openair1/PHY/TOOLS/oai_dfts.c
index 6e85bca38464403e0f7dce82edea901f7a8e9f3e..83207426fde1a4906866a2bdc1b082debcaa6441 100644
--- a/openair1/PHY/TOOLS/oai_dfts.c
+++ b/openair1/PHY/TOOLS/oai_dfts.c
@@ -32,17 +32,17 @@
 #define M_PI 3.14159265358979323846
 #endif
 #define OAIDFTS_MAIN
-#ifndef MR_MAIN
-#include "PHY/defs_common.h"
-#include "PHY/impl_defs_top.h"
-#else
+//#ifndef MR_MAIN
+//#include "PHY/defs_common.h"
+//#include "PHY/impl_defs_top.h"
+//#else
 #include "time_meas.h"
 #include "LOG/log.h"
 #define debug_msg
 #define ONE_OVER_SQRT2_Q15 23170
 
-int oai_exit=0;
-#endif
+//int oai_exit=0;
+//#endif
 
 #define ONE_OVER_SQRT3_Q15 18919
 
@@ -50,6 +50,8 @@ int oai_exit=0;
 
 #include "assertions.h"
 
+#include "tools_defs.h"
+
 #define print_shorts(s,x) printf("%s %d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7])
 #define print_shorts256(s,x) printf("%s %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7],(x)[8],(x)[9],(x)[10],(x)[11],(x)[12],(x)[13],(x)[14],(x)[15])
 
diff --git a/openair1/PHY/defs_RU.h b/openair1/PHY/defs_RU.h
index 86c94421f25780afa0dc022cf4d8b48debcc6fec..66cb51adc607dabf4d08e661b582a19cbac042a3 100644
--- a/openair1/PHY/defs_RU.h
+++ b/openair1/PHY/defs_RU.h
@@ -436,6 +436,14 @@ typedef enum {
 typedef struct RU_t_s {
   /// index of this ru
   uint32_t idx;
+  /// pointer to first RU
+  struct RU_t_s *ru0;
+  /// pointer to ru_mask
+  uint64_t *ru_mask;
+  /// pointer to ru_mutex
+  pthread_mutex_t *ru_mutex;
+  /// pointer to ru_cond
+  pthread_cond_t *ru_cond;
   /// Pointer to configuration file
   char *rf_config_file;
   /// southbound interface
@@ -446,6 +454,12 @@ typedef struct RU_t_s {
   node_function_t function;
   /// Ethernet parameters for fronthaul interface
   eth_params_t eth_params;
+  /// flag to indicate RF emulation mode
+  int emulate_rf;
+  /// numerology index
+  int numerology;
+  /// flag to indicate basicsim operation
+  int basicsim;
   /// flag to indicate the RU is in sync with a master reference
   int in_synch;
   /// timing offset
diff --git a/openair1/PHY/defs_common.h b/openair1/PHY/defs_common.h
index 1a8016054a488d65a68948b5d689a9de735b1fac..b9c776f1c8477a6a837d31525c437b2f9bce11a9 100644
--- a/openair1/PHY/defs_common.h
+++ b/openair1/PHY/defs_common.h
@@ -944,6 +944,23 @@ extern int sync_var;
 #define DECODE_NUM_FPTR              13
 
 
+// Mask for identifying subframe for MBMS
+#define MBSFN_TDD_SF3 0x80// for TDD
+#define MBSFN_TDD_SF4 0x40
+#define MBSFN_TDD_SF7 0x20
+#define MBSFN_TDD_SF8 0x10
+#define MBSFN_TDD_SF9 0x08
+
+
+
+#define MBSFN_FDD_SF1 0x80// for FDD
+#define MBSFN_FDD_SF2 0x40
+#define MBSFN_FDD_SF3 0x20
+#define MBSFN_FDD_SF6 0x10
+#define MBSFN_FDD_SF7 0x08
+#define MBSFN_FDD_SF8 0x04
+
+
 typedef uint8_t(decoder_if_t)(int16_t *y,
                               int16_t *y2,
                               uint8_t *decoded_bytes,
diff --git a/openair1/PHY/defs_eNB.h b/openair1/PHY/defs_eNB.h
index 0f1bf75114b96b4f0d52f3de43ad2120f3f32dc4..030d50bc048f74190379cf184c5dae5c1eb87b38 100644
--- a/openair1/PHY/defs_eNB.h
+++ b/openair1/PHY/defs_eNB.h
@@ -164,10 +164,10 @@ typedef struct {
   /// - first index: rx antenna id [0..nb_antennas_rx[
   /// - second index: ? [0..12*N_RB_UL*frame_parms->symbols_per_tti[
   int32_t **ul_ch_magb;
-  /// measured RX power based on DRS
-  int ulsch_power[2];
-  /// measured Interference power based on DRS
-  int ulsch_interference_power[2];
+  /// measured RX power based on DMRS
+  int ulsch_power[4];
+  /// measured RX power of noise
+  int ulsch_noise_power[4];
   /// \brief llr values.
   /// - first index: ? [0..1179743] (hard coded)
   int16_t *llr;
@@ -217,6 +217,58 @@ typedef struct {
   int ret;
 } td_params;
 
+/// Context data structure for RX/TX portion of subframe processing
+typedef struct {
+  /// Component Carrier index
+  uint8_t              CC_id;
+  /// timestamp transmitted to HW
+  openair0_timestamp timestamp_tx;
+  openair0_timestamp timestamp_rx;
+  /// subframe to act upon for transmission
+  int subframe_tx;
+  /// subframe to act upon for reception
+  int subframe_rx;
+  /// frame to act upon for transmission
+  int frame_tx;
+  /// frame to act upon for reception
+  int frame_rx;
+  int frame_prach;
+  int subframe_prach;
+  int frame_prach_br;
+  int subframe_prach_br;
+  /// \brief Instance count for RXn-TXnp4 processing thread.
+  /// \internal This variable is protected by \ref mutex_rxtx.
+  int instance_cnt;
+  /// pthread structure for RXn-TXnp4 processing thread
+  pthread_t pthread;
+  /// pthread attributes for RXn-TXnp4 processing thread
+  pthread_attr_t attr;
+  /// condition variable for tx processing thread
+  pthread_cond_t cond;
+  /// mutex for RXn-TXnp4 processing thread
+  pthread_mutex_t mutex;
+  /// scheduling parameters for RXn-TXnp4 thread
+  struct sched_param sched_param_rxtx;
+
+  /// \internal This variable is protected by \ref mutex_RUs.
+  int instance_cnt_RUs;
+  /// condition variable for tx processing thread
+  pthread_cond_t cond_RUs;
+  /// mutex for RXn-TXnp4 processing thread
+  pthread_mutex_t mutex_RUs;
+  tpool_t *threadPool;
+  int nbEncode;
+  int nbDecode;
+  notifiedFIFO_t *respEncode;
+  notifiedFIFO_t *respDecode;
+    pthread_mutex_t mutex_emulateRF;
+  int instance_cnt_emulateRF;
+  pthread_t pthread_emulateRF;
+  pthread_attr_t attr_emulateRF;
+  pthread_cond_t cond_emulateRF;
+  int first_rx;
+} L1_rxtx_proc_t;
+
 typedef struct {
   struct PHY_VARS_eNB_s *eNB;
   LTE_eNB_DLSCH_t *dlsch;
@@ -362,8 +414,11 @@ typedef struct L1_proc_t_s {
   L1_rxtx_proc_t L1_proc,L1_proc_tx;
   /// stats thread pthread descriptor
   pthread_t process_stats_thread;
+  /// L1 stats pthread descriptor
+  pthread_t L1_stats_thread;
   /// for waking up tx procedure
   RU_proc_t *ru_proc;
+  struct PHY_VARS_eNB_s *eNB;
 } L1_proc_t;
 
 
@@ -395,36 +450,73 @@ typedef struct {
   short n0_subband_power_avg_dB;
   // eNB measurements (per user)
   //! estimated received spatial signal power (linear)
-  unsigned int   rx_spatial_power[NUMBER_OF_UE_MAX][2][2];
+  unsigned int   rx_spatial_power[NUMBER_OF_SRS_MAX][2][2];
   //! estimated received spatial signal power (dB)
-  unsigned short rx_spatial_power_dB[NUMBER_OF_UE_MAX][2][2];
+  unsigned short rx_spatial_power_dB[NUMBER_OF_SRS_MAX][2][2];
   //! estimated rssi (dBm)
-  short          rx_rssi_dBm[NUMBER_OF_UE_MAX];
+  short          rx_rssi_dBm[NUMBER_OF_SRS_MAX];
   //! estimated correlation (wideband linear) between spatial channels (computed in dlsch_demodulation)
-  int            rx_correlation[NUMBER_OF_UE_MAX][2];
+  int            rx_correlation[NUMBER_OF_SRS_MAX][2];
   //! estimated correlation (wideband dB) between spatial channels (computed in dlsch_demodulation)
-  int            rx_correlation_dB[NUMBER_OF_UE_MAX][2];
+  int            rx_correlation_dB[NUMBER_OF_SRS_MAX][2];
 
   /// Wideband CQI (= SINR)
-  int            wideband_cqi[NUMBER_OF_UE_MAX][MAX_NUM_RU_PER_eNB];
+  int            wideband_cqi[NUMBER_OF_SRS_MAX][MAX_NUM_RU_PER_eNB];
   /// Wideband CQI in dB (= SINR dB)
-  int            wideband_cqi_dB[NUMBER_OF_UE_MAX][MAX_NUM_RU_PER_eNB];
+  int            wideband_cqi_dB[NUMBER_OF_SRS_MAX][MAX_NUM_RU_PER_eNB];
   /// Wideband CQI (sum of all RX antennas, in dB)
-  char           wideband_cqi_tot[NUMBER_OF_UE_MAX];
+  char           wideband_cqi_tot[NUMBER_OF_SRS_MAX];
   /// Subband CQI per RX antenna and RB (= SINR)
-  int            subband_cqi[NUMBER_OF_UE_MAX][MAX_NUM_RU_PER_eNB][100];
+  int            subband_cqi[NUMBER_OF_SRS_MAX][MAX_NUM_RU_PER_eNB][100];
   /// Total Subband CQI and RB (= SINR)
   int            subband_cqi_tot[NUMBER_OF_UE_MAX][100];
   /// Subband CQI in dB and RB (= SINR dB)
-  int            subband_cqi_dB[NUMBER_OF_UE_MAX][MAX_NUM_RU_PER_eNB][100];
+  int            subband_cqi_dB[NUMBER_OF_SRS_MAX][MAX_NUM_RU_PER_eNB][100];
   /// Total Subband CQI and RB
-  int            subband_cqi_tot_dB[NUMBER_OF_UE_MAX][100];
+  int            subband_cqi_tot_dB[NUMBER_OF_SRS_MAX][100];
   /// PRACH background noise level
   int            prach_I0;
   /// PUCCH background noise level
   int            n0_pucch_dB;
 } PHY_MEASUREMENTS_eNB;
 
+typedef struct {
+  uint16_t rnti;
+  int frame;
+  int round_trials[8];
+  int total_bytes_tx;
+  int total_bytes_rx;
+  int current_G;
+  int current_TBS;
+  int current_Qm;
+  int current_mcs;
+  int current_RI;
+  int timing_offset;
+  int ulsch_power[4];
+  int ulsch_noise_power[4];
+} eNB_SCH_STATS_t;
+
+typedef struct {
+  uint16_t rnti;
+  int frame;
+  int pucch1_trials;
+  int pucch1_thres;
+  int current_pucch1_stat_pos;
+  int current_pucch1_stat_neg;
+  int pucch1_positive_SR;
+  int pucch1_low_stat[4];
+  int pucch1_high_stat[4];
+  int pucch1_phase;
+  int pucch1a_trials;
+  int current_pucch1a_stat_re;
+  int current_pucch1a_stat_im;
+  int pucch1ab_DTX;
+  int pucch1b_trials;
+  int current_pucch1b_stat_re;
+  int current_pucch1b_stat_im;
+  int pucch3_trials;
+  int current_pucch3_stat;
+} eNB_UCI_STATS_t;
 
 /// Top-level PHY Data Structure for eNB
 typedef struct PHY_VARS_eNB_s {
@@ -472,13 +564,13 @@ typedef struct PHY_VARS_eNB_s {
   LTE_eNB_MPDCCH       mpdcch_vars[2];
   LTE_eNB_PRACH        prach_vars_br;
   LTE_eNB_COMMON       common_vars;
-  LTE_eNB_UCI          uci_vars[NUMBER_OF_UCI_VARS_MAX];
-  LTE_eNB_SRS          srs_vars[NUMBER_OF_UE_MAX];
+  LTE_eNB_UCI          uci_vars[NUMBER_OF_UCI_MAX];
+  LTE_eNB_SRS          srs_vars[NUMBER_OF_SRS_MAX];
   LTE_eNB_PBCH         pbch;
-  LTE_eNB_PUSCH       *pusch_vars[NUMBER_OF_UE_MAX];
+  LTE_eNB_PUSCH       *pusch_vars[NUMBER_OF_ULSCH_MAX];
   LTE_eNB_PRACH        prach_vars;
-  LTE_eNB_DLSCH_t     *dlsch[NUMBER_OF_UE_MAX][2];   // Nusers times two spatial streams
-  LTE_eNB_ULSCH_t     *ulsch[NUMBER_OF_UE_MAX+1];      // Nusers + number of RA
+  LTE_eNB_DLSCH_t     *dlsch[NUMBER_OF_DLSCH_MAX][2];   // Num active DLSCH contexts times two spatial streams
+  LTE_eNB_ULSCH_t     *ulsch[NUMBER_OF_ULSCH_MAX];      // Num active ULSCH contexts
   LTE_eNB_DLSCH_t     *dlsch_SI,*dlsch_ra,*dlsch_p;
   LTE_eNB_DLSCH_t     *dlsch_MCH;
   LTE_eNB_DLSCH_t     *dlsch_PCH;
@@ -489,7 +581,7 @@ typedef struct PHY_VARS_eNB_s {
   uint32_t         lte_gold_table[20][2][14];
 
   /// UE-specific reference symbols (p=5), TM 7
-  uint32_t         lte_gold_uespec_port5_table[NUMBER_OF_UE_MAX][20][38];
+  uint32_t         lte_gold_uespec_port5_table[NUMBER_OF_DLSCH_MAX][20][38];
 
   /// UE-specific reference symbols (p=7...14), TM 8/9/10
   uint32_t         lte_gold_uespec_table[2][20][2][21];
@@ -521,6 +613,9 @@ typedef struct PHY_VARS_eNB_s {
   uint8_t pbch_pdu[4]; //PBCH_PDU_SIZE
   char eNB_generate_rar;
 
+  /// indicator that eNB signal generation uses DTX (i.e. signal is cleared in each subframe
+  int use_DTX;
+  int32_t **subframe_mask;
   /// Indicator set to 0 after first SR
   uint8_t first_sr[NUMBER_OF_UE_MAX];
 
@@ -592,7 +687,12 @@ typedef struct PHY_VARS_eNB_s {
   /// Information regarding TM5
   MU_MIMO_mode mu_mimo_mode[NUMBER_OF_UE_MAX];
 
-
+  /// statistics for DLSCH measurement collection
+  eNB_SCH_STATS_t dlsch_stats[NUMBER_OF_SCH_STATS_MAX];
+  /// statistics for ULSCH measurement collection
+  eNB_SCH_STATS_t ulsch_stats[NUMBER_OF_SCH_STATS_MAX];
+  /// statis for UCI (PUCCH) measurement collection
+  eNB_UCI_STATS_t uci_stats[NUMBER_OF_SCH_STATS_MAX];
   /// target_ue_dl_mcs : only for debug purposes
   uint32_t target_ue_dl_mcs;
   /// target_ue_ul_mcs : only for debug purposes
diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h
index edb19f7501f0931d795a188e8d22a50cfb2784d3..d815c755675232350bfde0faf319aa560660655a 100644
--- a/openair1/PHY/defs_gNB.h
+++ b/openair1/PHY/defs_gNB.h
@@ -715,7 +715,6 @@ typedef struct PHY_VARS_gNB_s {
   
   //  nfapi_nr_dl_tti_pdcch_pdu    *pdcch_pdu;
   //  nfapi_nr_ul_dci_request_pdus_t  *ul_dci_pdu;
-
   uint16_t num_pdsch_rnti[80];
   NR_gNB_SSB_t       ssb[64];
   NR_gNB_PBCH        pbch;
@@ -848,6 +847,8 @@ typedef struct PHY_VARS_gNB_s {
   tpool_t *threadPool;
   int nbDecode;
   uint8_t pusch_proc_threads;
+  int number_of_nr_dlsch_max;
+  int number_of_nr_ulsch_max;
   void * scopeData;
 } PHY_VARS_gNB;
 
diff --git a/openair1/PHY/impl_defs_nr.h b/openair1/PHY/impl_defs_nr.h
index fad578c8b01920268afdf2e1db169c2c3413f4f5..a74c3675a445a65da95b4d5287e4ca5df23fe6b7 100644
--- a/openair1/PHY/impl_defs_nr.h
+++ b/openair1/PHY/impl_defs_nr.h
@@ -36,7 +36,6 @@
 
 #include <stdbool.h>
 #include "types.h"
-#include "NR_PDSCH-TimeDomainResourceAllocation.h"
 
 #ifdef DEFINE_VARIABLES_PHY_IMPLEMENTATION_DEFS_NR_H
 #define EXTERN
@@ -395,6 +394,13 @@ typedef struct{
 typedef struct{
 // to be defined FIXME!!!
 }zp_CSI_RS_Resource_t;
+
+typedef struct{
+        int   k0;    
+        int     mappingType;
+        int     startSymbolAndLength;
+
+}PDSCH_TimeDomainResourceAllocation_t;
 typedef struct {
 /*
  * resourceAllocation
@@ -447,7 +453,8 @@ typedef struct {
 */
   maxNrofCodeWordsScheduledByDCI_t maxNrofCodeWordsScheduledByDCI;
 
-  NR_PDSCH_TimeDomainResourceAllocation_t *pdsch_TimeDomainResourceAllocation[MAX_NR_OF_DL_ALLOCATIONS];
+
+  PDSCH_TimeDomainResourceAllocation_t *pdsch_TimeDomainResourceAllocation[MAX_NR_OF_DL_ALLOCATIONS];
 
 } PDSCH_Config_t;
 
diff --git a/openair1/PHY/phy_extern.h b/openair1/PHY/phy_extern.h
index 4ba5e328e3f960fc733d1a4aba45d4d605fc862f..d5fea5aec66b0ce4d9acf4ac0f75c7275ca4b2eb 100644
--- a/openair1/PHY/phy_extern.h
+++ b/openair1/PHY/phy_extern.h
@@ -23,7 +23,6 @@
 #define __PHY_EXTERN_H__
 
 #include "PHY/defs_common.h"
-#include "common/ran_context.h"
 
 extern  char* namepointer_chMag ;
 extern char* namepointer_log2;
@@ -33,14 +32,13 @@ extern unsigned int RX_DMA_BUFFER[4][NB_ANTENNAS_RX];
 extern unsigned int TX_DMA_BUFFER[4][NB_ANTENNAS_TX];
 
 #include "PHY/LTE_TRANSPORT/transport_extern.h"
-//#include "SIMULATION/ETH_TRANSPORT/extern.h"
+#include "PHY/defs_RU.h"
 
 extern unsigned int DAQ_MBOX;
 extern int number_of_cards;
 
 extern const short conjugate[8],conjugate2[8];
 
-extern RAN_CONTEXT_t RC;
 
 extern short primary_synch0[144];
 extern short primary_synch1[144];
diff --git a/openair1/PHY/phy_extern_ue.h b/openair1/PHY/phy_extern_ue.h
index fdaf6eaa8904eef42d148866aef80ae02e685459..9f227806fd6b577a241a2708bc68e06041dc5e66 100644
--- a/openair1/PHY/phy_extern_ue.h
+++ b/openair1/PHY/phy_extern_ue.h
@@ -23,7 +23,6 @@
 #define __PHY_EXTERN_UE__H__
 
 #include "PHY/defs_UE.h"
-#include "common/ran_context.h"
 
 extern  char* namepointer_chMag ;
 extern char* namepointer_log2;
diff --git a/openair1/PHY/phy_vars.h b/openair1/PHY/phy_vars.h
index dadb1649ec68ee10cfbb756b4e03246c05642f4d..9edb7031b95cf70370b90596ead42c977f4c3255 100644
--- a/openair1/PHY/phy_vars.h
+++ b/openair1/PHY/phy_vars.h
@@ -25,7 +25,6 @@
 #include "PHY/types.h"
 #include "PHY/defs_eNB.h"
 #include "PHY/defs_UE.h"
-#include "common/ran_context.h"
 
 char* namepointer_chMag ;
 char fmageren_name2[512];
@@ -38,9 +37,10 @@ char* namepointer_log2;
 #include "PHY/LTE_TRANSPORT/transport_vars.h"
 #include "PHY/MODULATION/modulation_vars.h"
 
+#include "nfapi/oai_integration/vendor_ext.h"
+
 
 PHY_VARS_UE ***PHY_vars_UE_g;
-RAN_CONTEXT_t RC;
 UL_RCC_IND_t UL_RCC_INFO;
 
 unsigned short rev[2048],rev_times4[8192],rev_half[1024];
diff --git a/openair1/SCHED/fapi_l1.c b/openair1/SCHED/fapi_l1.c
index 3f342802b4906d4d66c223ad9990d486266b1473..ecfec02193d498d9f167bb1e5278a46f3c5eafee 100644
--- a/openair1/SCHED/fapi_l1.c
+++ b/openair1/SCHED/fapi_l1.c
@@ -32,11 +32,15 @@
 
 #include "PHY/defs_eNB.h"
 #include "PHY/LTE_TRANSPORT/transport_proto.h"
+#include "PHY/LTE_TRANSPORT/transport_extern.h"
 #include "SCHED/sched_eNB.h"
 #include "nfapi/oai_integration/vendor_ext.h"
 #include "nfapi_pnf_interface.h"
 #include "fapi_l1.h"
 
+#include "common/ran_context.h"
+extern RAN_CONTEXT_t RC;
+
 int oai_nfapi_dl_config_req(nfapi_dl_config_request_t *dl_config_req);
 int oai_nfapi_tx_req(nfapi_tx_request_t *tx_req);
 int oai_nfapi_hi_dci0_req(nfapi_hi_dci0_request_t *hi_dci0_req);
@@ -209,13 +213,13 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,L1_rxtx_pro
 
   UE_id = find_dlsch(rel8->rnti,eNB,SEARCH_EXIST_OR_FREE);
 
-  if( (UE_id<0) || (UE_id>=NUMBER_OF_UE_MAX) ) {
+  if( (UE_id<0) || (UE_id>=NUMBER_OF_DLSCH_MAX) ) {
     LOG_E(PHY,"illegal UE_id found!!! rnti %04x UE_id %d\n",rel8->rnti,UE_id);
     return;
   }
 
   //AssertFatal(UE_id!=-1,"no free or exiting dlsch_context\n");
-  //AssertFatal(UE_id<NUMBER_OF_UE_MAX,"returned UE_id %d >= %d(NUMBER_OF_UE_MAX)\n",UE_id,NUMBER_OF_UE_MAX);
+  //AssertFatal(UE_id<NUMBER_OF_DLSCH_MAX,"returned UE_id %d >= %d(NUMBER_OF_DLSCHMAX)\n",UE_id,NUMBER_OF_DLSCH_MAX);
   dlsch0 = eNB->dlsch[UE_id][0];
   dlsch1 = eNB->dlsch[UE_id][1];
 
@@ -291,7 +295,7 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,L1_rxtx_pro
   if ((rel13->pdsch_payload_type <2) && (rel13->ue_type>0)) { // this is a BR/CE UE and SIB1-BR/SI-BR
     UE_id = find_dlsch(rel8->rnti,eNB,SEARCH_EXIST_OR_FREE);
     AssertFatal(UE_id!=-1,"no free or exiting dlsch_context\n");
-    AssertFatal(UE_id<NUMBER_OF_UE_MAX,"returned UE_id %d >= %d(NUMBER_OF_UE_MAX)\n",UE_id,NUMBER_OF_UE_MAX);
+    AssertFatal(UE_id<NUMBER_OF_DLSCH_MAX,"returned UE_id %d >= %d(NUMBER_OF_DLSCH_MAX)\n",UE_id,NUMBER_OF_DLSCH_MAX);
     dlsch0 = eNB->dlsch[UE_id][0];
     dlsch0->harq_mask = 1;
     dlsch0_harq     = dlsch0->harq_processes[0];
@@ -366,7 +370,7 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,L1_rxtx_pro
   } else {
     UE_id = find_dlsch(rel8->rnti,eNB,SEARCH_EXIST_OR_FREE);
     AssertFatal(UE_id!=-1,"no free or exiting dlsch_context\n");
-    AssertFatal(UE_id<NUMBER_OF_UE_MAX,"returned UE_id %d >= %d(NUMBER_OF_UE_MAX)\n",UE_id,NUMBER_OF_UE_MAX);
+    AssertFatal(UE_id<NUMBER_OF_DLSCH_MAX,"returned UE_id %d >= %d(NUMBER_OF_DLSCH_MAX)\n",UE_id,NUMBER_OF_DLSCH_MAX);
     dlsch0 = eNB->dlsch[UE_id][0];
     dlsch1 = eNB->dlsch[UE_id][1];
     dlsch0->sib1_br_flag=0;
@@ -596,7 +600,7 @@ void handle_uci_sr_pdu(PHY_VARS_eNB *eNB,
   uci->frame               = frame;
   uci->subframe            = subframe;
   uci->rnti                = ul_config_pdu->uci_sr_pdu.ue_information.ue_information_rel8.rnti;
-  uci->ue_id               = find_ulsch(ul_config_pdu->uci_sr_pdu.ue_information.ue_information_rel8.rnti,eNB,SEARCH_EXIST_OR_FREE);
+  uci->ue_id              = find_ulsch(ul_config_pdu->uci_sr_pdu.ue_information.ue_information_rel8.rnti,eNB,SEARCH_EXIST_OR_FREE);
   uci->type                = SR;
   uci->pucch_fmt           = pucch_format1;
   uci->num_antenna_ports   = 1;
@@ -622,7 +626,7 @@ void handle_uci_sr_harq_pdu(PHY_VARS_eNB *eNB,int UE_id,nfapi_ul_config_request_
   uci->frame               = frame;
   uci->subframe            = subframe;
   uci->rnti                = ul_config_pdu->uci_sr_harq_pdu.ue_information.ue_information_rel8.rnti;
-  uci->ue_id               = find_ulsch(ul_config_pdu->uci_sr_harq_pdu.ue_information.ue_information_rel8.rnti,eNB,SEARCH_EXIST_OR_FREE);
+  uci->ue_id              = find_ulsch(ul_config_pdu->uci_sr_harq_pdu.ue_information.ue_information_rel8.rnti,eNB,SEARCH_EXIST_OR_FREE);
   uci->type                = HARQ_SR;
   uci->num_antenna_ports   = 1;
   uci->num_pucch_resources = 1;
@@ -660,7 +664,7 @@ void handle_srs_pdu(PHY_VARS_eNB *eNB,nfapi_ul_config_request_pdu_t *ul_config_p
 
   if (NFAPI_MODE==NFAPI_MODE_VNF) return;
 
-  for (i=0; i<NUMBER_OF_UE_MAX; i++) {
+  for (i=0; i<NUMBER_OF_SRS_MAX; i++) {
     if (eNB->soundingrs_ul_config_dedicated[i].active==1) continue;
 
     eNB->soundingrs_ul_config_dedicated[i].active               = 1;
@@ -676,7 +680,7 @@ void handle_srs_pdu(PHY_VARS_eNB *eNB,nfapi_ul_config_request_pdu_t *ul_config_p
     break;
   }
 
-  AssertFatal(i<NUMBER_OF_UE_MAX,"No room for SRS processing\n");
+  AssertFatal(i<NUMBER_OF_SRS_MAX,"No room for SRS processing\n");
 }
 
 void handle_nfapi_ul_pdu(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc,
@@ -745,7 +749,8 @@ void handle_nfapi_ul_pdu(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc,
   }
 }
 
-void schedule_response(Sched_Rsp_t *Sched_INFO, L1_rxtx_proc_t *proc) {
+void schedule_response(Sched_Rsp_t *Sched_INFO, void *arg) {
+  L1_rxtx_proc_t *proc = (L1_rxtx_proc_t *)arg;
   PHY_VARS_eNB *eNB;
   // copy data from L2 interface into L1 structures
   module_id_t               Mod_id       = Sched_INFO->module_id;
@@ -780,7 +785,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO, L1_rxtx_proc_t *proc) {
   nfapi_dl_config_request_pdu_t *dl_config_pdu;
   nfapi_hi_dci0_request_pdu_t   *hi_dci0_req_pdu;
   nfapi_ul_config_request_pdu_t *ul_config_pdu;
-  int i;
+
   eNB->pdcch_vars[subframe&1].num_pdcch_symbols = number_pdcch_ofdm_symbols;
   eNB->pdcch_vars[subframe&1].num_dci           = 0;
   eNB->phich_vars[subframe&1].num_hi            = 0;
@@ -811,8 +816,8 @@ void schedule_response(Sched_Rsp_t *Sched_INFO, L1_rxtx_proc_t *proc) {
 
     // clear DCI allocation maps for new subframe
     if (NFAPI_MODE!=NFAPI_MODE_VNF)
-      for (i=0; i<NUMBER_OF_UE_MAX; i++) {
-        if (eNB->ulsch[i]) {
+      for (int i=0; i<NUMBER_OF_ULSCH_MAX; i++) {
+        if (eNB->ulsch[i]!=NULL) {
           ulsch_harq = eNB->ulsch[i]->harq_processes[harq_pid];
           ulsch_harq->dci_alloc=0;
           ulsch_harq->rar_alloc=0;
@@ -820,7 +825,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO, L1_rxtx_proc_t *proc) {
       }
   }
 
-  for (i=0; i<number_dl_pdu; i++) {
+  for (int i=0; i<number_dl_pdu; i++) {
     dl_config_pdu = &DL_req->dl_config_request_body.dl_config_pdu_list[i];
 
     //LOG_D(PHY,"NFAPI: dl_pdu %d : type %d\n",i,dl_config_pdu->pdu_type);
@@ -969,7 +974,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO, L1_rxtx_proc_t *proc) {
   }
 
   if (NFAPI_MODE!=NFAPI_MODE_VNF)
-    for (i=0; i<number_hi_dci0_pdu; i++) {
+    for (int i=0; i<number_hi_dci0_pdu; i++) {
       hi_dci0_req_pdu = &HI_DCI0_req->hi_dci0_request_body.hi_dci0_pdu_list[i];
       LOG_D(PHY,"NFAPI: hi_dci0_pdu %d : type %d\n",i,hi_dci0_req_pdu->pdu_type);
 
@@ -993,7 +998,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO, L1_rxtx_proc_t *proc) {
   if (NFAPI_MODE!=NFAPI_MONOLITHIC) {
     if (number_ul_pdu>0) {
       uint8_t ulsch_pdu_num = 0;
-      for (i=0; i<number_ul_pdu; i++) {
+      for (int i=0; i<number_ul_pdu; i++) {
         if((UL_req->ul_config_request_body.ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE) ||
            (UL_req->ul_config_request_body.ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE) ||
            (UL_req->ul_config_request_body.ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE) ||
@@ -1020,7 +1025,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO, L1_rxtx_proc_t *proc) {
       }
     }
   } else {
-    for (i=0; i<number_ul_pdu; i++) {
+    for (int i=0; i<number_ul_pdu; i++) {
       ul_config_pdu = &UL_req->ul_config_request_body.ul_config_pdu_list[i];
       LOG_D(PHY,"NFAPI: ul_pdu %d : type %d\n",i,ul_config_pdu->pdu_type);
       AssertFatal(ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE ||
diff --git a/openair1/SCHED/fapi_l1.h b/openair1/SCHED/fapi_l1.h
index 6b9121e17ff4acc088552ab1458431e8fd75a039..b8f0ae1dd89a96f8b5b6b6d688c0852b57f806ce 100644
--- a/openair1/SCHED/fapi_l1.h
+++ b/openair1/SCHED/fapi_l1.h
@@ -31,8 +31,6 @@
  */
 
 #include "PHY/defs_eNB.h"
-#include "PHY/defs_gNB.h"
-#include "PHY/phy_extern.h"
 #include "PHY/LTE_TRANSPORT/transport_proto.h"
 #include "SCHED/sched_eNB.h"
 #include "SCHED/sched_common.h"
@@ -82,4 +80,4 @@ void handle_uci_harq_pdu(PHY_VARS_eNB *eNB,int UE_id,nfapi_ul_config_request_pdu
 
 void handle_srs_pdu(PHY_VARS_eNB *eNB,nfapi_ul_config_request_pdu_t *ul_config_pdu,uint16_t frame,uint8_t subframe);
 
-void schedule_response(Sched_Rsp_t *Sched_INFO, L1_rxtx_proc_t *proc);
+void schedule_response(Sched_Rsp_t *Sched_INFO, void *proc);
diff --git a/openair1/SCHED/phy_procedures_lte_common.c b/openair1/SCHED/phy_procedures_lte_common.c
index 0b592b9c55ab60044c71ae1d053a6baf22e0285f..7033c5270138ee50f5527987b59c185d37e0738b 100644
--- a/openair1/SCHED/phy_procedures_lte_common.c
+++ b/openair1/SCHED/phy_procedures_lte_common.c
@@ -1085,73 +1085,3 @@ void compute_srs_pos(lte_frame_type_t frameType,uint16_t isrs,uint16_t *psrsPeri
 	
       }
 }
-
-// uint8_t eNB_id,uint8_t harq_pid, uint8_t UE_id,
-int16_t estimate_ue_tx_power(uint32_t tbs, uint32_t nb_rb, uint8_t control_only, lte_prefix_type_t ncp, uint8_t use_srs)
-{
-
-  /// The payload + CRC size in bits, "B"
-  uint32_t B;
-  /// Number of code segments
-  uint32_t C;
-  /// Number of "small" code segments
-  uint32_t Cminus;
-  /// Number of "large" code segments
-  uint32_t Cplus;
-  /// Number of bits in "small" code segments (<6144)
-  uint32_t Kminus;
-  /// Number of bits in "large" code segments (<6144)
-  uint32_t Kplus;
-  /// Total number of bits across all segments
-  uint32_t sumKr;
-  /// Number of "Filler" bits
-  uint32_t F;
-  // num resource elements
-  uint32_t num_re=0.0;
-  // num symbols
-  uint32_t num_symb=0.0;
-  /// effective spectral efficiency of the PUSCH
-  uint32_t MPR_x100=0;
-  /// beta_offset
-  uint16_t beta_offset_pusch_x8=8;
-  /// delta mcs
-  float delta_mcs=0.0;
-  /// bandwidth factor
-  float bw_factor=0.0;
-
-  B= tbs+24;
-  lte_segmentation(NULL,
-                   NULL,
-                   B,
-                   &C,
-                   &Cplus,
-                   &Cminus,
-                   &Kplus,
-                   &Kminus,
-                   &F);
-
-
-  sumKr = Cminus*Kminus + Cplus*Kplus;
-  num_symb = 12-(ncp<<1)-(use_srs==0?0:1);
-  num_re = num_symb * nb_rb * 12;
-
-  if (num_re == 0)
-    return(0);
-
-  MPR_x100 = 100*sumKr/num_re;
-
-  if (control_only == 1 )
-    beta_offset_pusch_x8=8; // fixme
-
-  //(beta_offset_pusch_x8=ue->ulsch[eNB_id]->harq_processes[harq_pid]->control_only == 1) ? ue->ulsch[eNB_id]->beta_offset_cqi_times8:8;
-
-  // if deltamcs_enabledm
-  delta_mcs = ((hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_x10((beta_offset_pusch_x8)>>3))/100.0);
-  bw_factor = (hundred_times_log10_NPRB[nb_rb-1]/100.0);
-#ifdef DEBUG_SEGMENTATION
-  printf("estimated ue tx power %d (num_re %d, sumKr %d, mpr_x100 %d, delta_mcs %f, bw_factor %f)\n",
-         (int16_t)ceil(delta_mcs + bw_factor), num_re, sumKr, MPR_x100, delta_mcs, bw_factor);
-#endif
-  return (int16_t)ceil(delta_mcs + bw_factor);
-
-}
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index d894061acd55c8e78a8f1e35ac81356e2ccc637b..f40f760f45b825db200a243cb3ee6f93e0aae64a 100644
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -52,21 +52,25 @@
 
 #define MBMS_NFAPI_SCHEDULER
 
+#include "common/ran_context.h"
+extern RAN_CONTEXT_t RC;
 
-int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *eNB,uint16_t UE_id,uint8_t harq_pid, uint8_t bw_factor) {
+nfapi_ue_release_request_body_t release_rntis;
+
+int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *eNB,uint16_t ULSCH_id,uint8_t harq_pid, uint8_t bw_factor) {
   uint32_t Nre,sumKr,MPR_x100,Kr,r;
   uint16_t beta_offset_pusch;
-  DevAssert( UE_id < NUMBER_OF_UE_MAX+1 );
+  DevAssert( ULSCH_id < NUMBER_OF_ULSCH_MAX+1 );
   DevAssert( harq_pid < 8 );
-  Nre = eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_initial *
-        eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12;
+  Nre = eNB->ulsch[ULSCH_id]->harq_processes[harq_pid]->Nsymb_initial *
+        eNB->ulsch[ULSCH_id]->harq_processes[harq_pid]->nb_rb*12;
   sumKr = 0;
 
-  for (r=0; r<eNB->ulsch[UE_id]->harq_processes[harq_pid]->C; r++) {
-    if (r<eNB->ulsch[UE_id]->harq_processes[harq_pid]->Cminus)
-      Kr = eNB->ulsch[UE_id]->harq_processes[harq_pid]->Kminus;
+  for (r=0; r<eNB->ulsch[ULSCH_id]->harq_processes[harq_pid]->C; r++) {
+    if (r<eNB->ulsch[ULSCH_id]->harq_processes[harq_pid]->Cminus)
+      Kr = eNB->ulsch[ULSCH_id]->harq_processes[harq_pid]->Kminus;
     else
-      Kr = eNB->ulsch[UE_id]->harq_processes[harq_pid]->Kplus;
+      Kr = eNB->ulsch[ULSCH_id]->harq_processes[harq_pid]->Kplus;
 
     sumKr += Kr;
   }
@@ -79,14 +83,14 @@ int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *eNB,uint16_t UE_id,uint8_t
   // FK 20140908 sumKr is only set after the ulsch_encoding
   beta_offset_pusch = 8;
   //(eNB->ulsch[UE_id]->harq_processes[harq_pid]->control_only == 1) ? eNB->ulsch[UE_id]->beta_offset_cqi_times8:8;
-  DevAssert( UE_id < NUMBER_OF_UE_MAX );
+  DevAssert( ULSCH_id < NUMBER_OF_ULSCH_MAX );
   //#warning "This condition happens sometimes. Need more investigation" // navid
   //DevAssert( MPR_x100/6 < 100 );
 
   if (1==1) { //eNB->ul_power_control_dedicated[UE_id].deltaMCS_Enabled == 1) {
     // This is the formula from Section 5.1.1.1 in 36.213 10*log10(deltaIF_PUSCH = (2^(MPR*Ks)-1)*beta_offset_pusch)
     if (bw_factor == 1) {
-      uint8_t nb_rb = eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb;
+      uint8_t nb_rb = eNB->ulsch[ULSCH_id]->harq_processes[harq_pid]->nb_rb;
       return(hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_x10((beta_offset_pusch)>>3)) + hundred_times_log10_NPRB[nb_rb-1];
     } else
       return(hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_x10((beta_offset_pusch)>>3));
@@ -97,21 +101,21 @@ int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *eNB,uint16_t UE_id,uint8_t
 
 
 int16_t get_hundred_times_delta_IF_mac(module_id_t module_idP, uint8_t CC_id, rnti_t rnti, uint8_t harq_pid) {
-  int8_t UE_id;
+  int8_t ULSCH_id;
 
   if ((RC.eNB == NULL) || (module_idP > RC.nb_inst) || (CC_id > RC.nb_CC[module_idP])) {
     LOG_E(PHY,"get_UE_stats: No eNB found (or not allocated) for Mod_id %d,CC_id %d\n",module_idP,CC_id);
     return -1;
   }
 
-  UE_id = find_ulsch( rnti, RC.eNB[module_idP][CC_id],SEARCH_EXIST);
+  ULSCH_id = find_ulsch( rnti, RC.eNB[module_idP][CC_id],SEARCH_EXIST);
 
-  if (UE_id == -1) {
+  if (ULSCH_id == -1) {
     // not found
     return 0;
   }
 
-  return get_hundred_times_delta_IF_eNB( RC.eNB[module_idP][CC_id], UE_id, harq_pid, 0 );
+  return get_hundred_times_delta_IF_eNB( RC.eNB[module_idP][CC_id], ULSCH_id, harq_pid, 0 );
 }
 
 int oai_nfapi_rach_ind(nfapi_rach_indication_t *rach_ind);
@@ -499,9 +503,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
                            int do_meas) {
   int frame=proc->frame_tx;
   int subframe=proc->subframe_tx;
-  uint32_t i,aa;
   uint8_t harq_pid;
-  int16_t UE_id=0;
   uint8_t num_pdcch_symbols=0;
   uint8_t num_dci=0;
   uint8_t         num_mdci = 0;
@@ -516,12 +518,15 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX+(eNB->CC_id),1);
 
   if (do_meas==1) start_meas(&eNB->phy_proc_tx);
-
   if (do_meas==1) start_meas(&eNB->dlsch_common_and_dci);
 
   // clear the transmit data array for the current subframe
-  for (aa = 0; aa < fp->nb_antenna_ports_eNB; aa++) {
-    memset (&eNB->common_vars.txdataF[aa][subframe * fp->ofdm_symbol_size * (fp->symbols_per_tti)], 0, fp->ofdm_symbol_size * (fp->symbols_per_tti) * sizeof (int32_t));
+  for (int aa = 0; aa < fp->nb_antenna_ports_eNB; aa++) {
+    if (eNB->use_DTX==0) 
+      memcpy(&eNB->common_vars.txdataF[aa][subframe * fp->ofdm_symbol_size * (fp->symbols_per_tti)],
+	     &eNB->subframe_mask[aa][subframe*fp->ofdm_symbol_size*fp->symbols_per_tti],
+	     fp->ofdm_symbol_size * (fp->symbols_per_tti) * sizeof (int32_t));
+    else memset(&eNB->common_vars.txdataF[aa][subframe * fp->ofdm_symbol_size * (fp->symbols_per_tti)], 0, fp->ofdm_symbol_size * (fp->symbols_per_tti) * sizeof (int32_t));
   }
 
   if (NFAPI_MODE==NFAPI_MONOLITHIC || NFAPI_MODE==NFAPI_MODE_PNF) {
@@ -556,7 +561,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
   ul_frame = pdcch_alloc2ul_frame (fp, frame, subframe);
 
   // clear previous allocation information for all UEs
-  for (i = 0; i < NUMBER_OF_UE_MAX; i++) {
+  for (volatile int i = 0; i < NUMBER_OF_DLSCH_MAX; i++) {
     if (eNB->dlsch[i][0])
       eNB->dlsch[i][0]->subframe_tx[subframe] = 0;
   }
@@ -565,7 +570,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
   //if ((ul_subframe < 10)&&
   //    (subframe_select(fp,ul_subframe)==SF_UL)) { // This means that there is a potential UL subframe that will be scheduled here
   if (ul_subframe < 10) { // This means that there is a potential UL subframe that will be scheduled here
-    for (i=0; i<NUMBER_OF_UE_MAX; i++) {
+    for (volatile int i=0; i<NUMBER_OF_DLSCH_MAX; i++) {
       if (eNB->ulsch[i] && eNB->ulsch[i]->ue_type >0) harq_pid = 0;
 
       else
@@ -651,9 +656,9 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
   // Now scan UE specific DLSCH
   LTE_eNB_DLSCH_t *dlsch0,*dlsch1;
 
-  for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
-    dlsch0 = eNB->dlsch[(uint8_t)UE_id][0];
-    dlsch1 = eNB->dlsch[(uint8_t)UE_id][1];
+  for (int DLSCH_id=0; DLSCH_id<NUMBER_OF_DLSCH_MAX; DLSCH_id++) {
+    dlsch0 = eNB->dlsch[(uint8_t)DLSCH_id][0];
+    dlsch1 = eNB->dlsch[(uint8_t)DLSCH_id][1];
 
     if ((dlsch0)&&(dlsch0->rnti>0)&&
 #ifdef PHY_TX_THREAD
@@ -663,12 +668,13 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
 #endif
        ) {
       // get harq_pid
-      harq_pid = dlsch0->harq_ids[frame%2][subframe];
+        harq_pid = dlsch0->harq_ids[frame%2][subframe];
       //AssertFatal(harq_pid>=0,"harq_pid is negative\n");
 
       if((harq_pid < 0) || (harq_pid >= dlsch0->Mdlharq)) {
+
         if (dlsch0->ue_type==0)
-          LOG_E(PHY,"harq_pid:%d corrupt must be 0-7 UE_id:%d frame:%d subframe:%d rnti:%x [ %1d.%1d.%1d.%1d.%1d.%1d.%1d.%1d\n", harq_pid,UE_id,frame,subframe,dlsch0->rnti,
+          LOG_E(PHY,"harq_pid:%d corrupt must be 0-7 DLSCH_id:%d frame:%d subframe:%d rnti:%x [ %1d.%1d.%1d.%1d.%1d.%1d.%1d.%1d\n", harq_pid,DLSCH_id,frame,subframe,dlsch0->rnti,
                 dlsch0->harq_ids[frame%2][0],
                 dlsch0->harq_ids[frame%2][1],
                 dlsch0->harq_ids[frame%2][2],
@@ -682,7 +688,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
                              proc,
                              harq_pid,
                              dlsch0,
-                             &eNB->UE_stats[(uint32_t)UE_id])) {
+                             &eNB->UE_stats[(uint32_t)DLSCH_id])) {
           // if we generate dlsch, we must generate pdsch
           pdsch_procedures(eNB,
                            proc,
@@ -717,6 +723,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
   if (do_meas==1) stop_meas(&eNB->phy_proc_tx);
 }
 
+/* This has to be updated with FAPI structures*/
 
 void srs_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
   LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms;
@@ -728,7 +735,7 @@ void srs_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
     // Do SRS processing
     // check if there is SRS and we have to use shortened format
     // TODO: check for exceptions in transmission of SRS together with ACK/NACK
-    for (i = 0; i < NUMBER_OF_UE_MAX; i++) {
+    for (i = 0; i < NUMBER_OF_SRS_MAX; i++) {
       if (eNB->soundingrs_ul_config_dedicated[i].active == 1) {
         if (lte_srs_channel_estimation (fp, &eNB->common_vars, &eNB->srs_vars[i], &eNB->soundingrs_ul_config_dedicated[i], subframe, 0 /*eNB_id */ )) {
           LOG_E (PHY, "problem processing SRS\n");
@@ -793,7 +800,7 @@ uci_procedures(PHY_VARS_eNB *eNB,
 
   calc_pucch_1x_interference(eNB, frame, subframe, 0);
   
-  for (int i = 0; i < NUMBER_OF_UCI_VARS_MAX; i++) {
+  for (int i = 0; i < NUMBER_OF_UCI_MAX; i++) {
     uci = &(eNB->uci_vars[i]);
 
     if ((uci->active == 1) && (uci->frame == frame) && (uci->subframe == subframe)) {
@@ -850,7 +857,7 @@ uci_procedures(PHY_VARS_eNB *eNB,
           int pucch1_thres = (uci->ue_type == 0) ? eNB->pucch1_DTX_threshold : eNB->pucch1_DTX_threshold_emtc[0];
           metric_SR = rx_pucch(eNB,
                                uci->pucch_fmt,
-                               uci->ue_id,
+                               i,//uci->ue_id,
                                uci->n_pucch_1_0_sr[0],
                                0, // n2_pucch
                                uci->srs_active, // shortened format
@@ -1275,7 +1282,7 @@ uci_procedures(PHY_VARS_eNB *eNB,
 
 #ifdef DEBUG_PHY_PROC
             LOG_D (PHY, "[eNB %d][PDSCH %x] Frame %d subframe %d ACK/NAK metric 0 %d, metric 1 %d, (%d,%d)\n", eNB->Mod_id,
-                   eNB->dlsch[UE_id][0]->rnti, frame, subframe, metric0, metric1, pucch_b0b1[0], pucch_b0b1[1]);
+                   eNB->dlsch[DLSCH_id][0]->rnti, frame, subframe, metric0, metric1, pucch_b0b1[0], pucch_b0b1[1]);
 #endif
           }
 
@@ -1298,7 +1305,7 @@ uci_procedures(PHY_VARS_eNB *eNB,
           }
       }
     } // end if ((uci->active == 1) && (uci->frame == frame) && (uci->subframe == subframe)) {
-  } // end loop for (int i = 0; i < NUMBER_OF_UE_MAX; i++) {
+  } // end loop for (int i = 0; i < NUMBER_OF_UCI_MAX; i++) {
 }
 
 void postDecode(L1_rxtx_proc_t *proc, notifiedFIFO_elt_t *req) {
@@ -1325,7 +1332,7 @@ void postDecode(L1_rxtx_proc_t *proc, notifiedFIFO_elt_t *req) {
       int nb=abortTpool(proc->threadPool, req->key);
       nb+=abortNotifiedFIFO(proc->respDecode, req->key);
       proc->nbDecode-=nb;
-      LOG_I(PHY,"uplink segment error %d/%d, aborted %d segments\n",rdata->segment_r,rdata->nbSegments, nb);
+      LOG_D(PHY,"uplink segment error %d/%d, aborted %d segments\n",rdata->segment_r,rdata->nbSegments, nb);
       AssertFatal(ulsch_harq->processedSegments+nb == rdata->nbSegments,"processed: %d, aborted: %d, total %d\n",
 		  ulsch_harq->processedSegments, nb, rdata->nbSegments);
       ulsch_harq->processedSegments=rdata->nbSegments;
@@ -1381,6 +1388,15 @@ void postDecode(L1_rxtx_proc_t *proc, notifiedFIFO_elt_t *req) {
 	fill_rx_indication(eNB,i,rdata->frame,rdata->subframe);  // indicate SDU to MAC
 	ulsch_harq->status = SCH_IDLE;
 	ulsch->harq_mask &= ~(1 << rdata->harq_pid);
+	for (int j=0;j<NUMBER_OF_ULSCH_MAX;j++) 
+           if (eNB->ulsch_stats[j].rnti == ulsch->rnti) {
+              eNB->ulsch_stats[j].total_bytes_rx+=ulsch_harq->TBS;
+              for (int aa=0;aa<eNB->frame_parms.nb_antennas_rx;aa++) {
+                eNB->ulsch_stats[j].ulsch_power[aa] = dB_fixed_x10(eNB->pusch_vars[rdata->UEid]->ulsch_power[aa]);
+                eNB->ulsch_stats[j].ulsch_noise_power[aa] = dB_fixed_x10(eNB->pusch_vars[rdata->UEid]->ulsch_noise_power[aa]); 
+              }
+              break;
+           }
         T (T_ENB_PHY_ULSCH_UE_ACK, T_INT(eNB->Mod_id), T_INT(rdata->frame), T_INT(rdata->subframe), T_INT(ulsch->rnti),
            T_INT(rdata->harq_pid));
       }  // ulsch not in error
@@ -1401,8 +1417,9 @@ void pusch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
   const int frame    = proc->frame_rx;
   uint32_t harq_pid0 = subframe2harq_pid(&eNB->frame_parms,frame,subframe);
 
-  for (i = 0; i < NUMBER_OF_UE_MAX; i++) {
+  for (i = 0; i < NUMBER_OF_ULSCH_MAX; i++) {
     ulsch = eNB->ulsch[i];
+    if (!ulsch) continue; 
 
     if (ulsch->ue_type > 0) harq_pid = 0;
     else harq_pid=harq_pid0;
@@ -1411,10 +1428,9 @@ void pusch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
 
     if (ulsch->rnti>0) LOG_D(PHY,"eNB->ulsch[%d]->harq_processes[harq_pid:%d] SFN/SF:%04d%d: PUSCH procedures, UE %d/%x ulsch_harq[status:%d SFN/SF:%04d%d handled:%d]\n",
                                i, harq_pid, frame,subframe,i,ulsch->rnti,
-                               ulsch_harq->status, ulsch_harq->frame, ulsch_harq->subframe, ulsch_harq->handled);
+                              ulsch_harq->status, ulsch_harq->frame, ulsch_harq->subframe, ulsch_harq->handled);
 
-    if ((ulsch) &&
-        (ulsch->rnti>0) &&
+    if ((ulsch->rnti>0) &&
         (ulsch_harq->status == ACTIVE) &&
         ((ulsch_harq->frame == frame)	    || (ulsch_harq->repetition_number >1) ) &&
         ((ulsch_harq->subframe == subframe) || (ulsch_harq->repetition_number >1) ) &&
@@ -1459,6 +1475,17 @@ void pusch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
                            ulsch_harq->V_UL_DAI,
                            ulsch_harq->nb_rb>20 ? 1 : 0);
       stop_meas(&eNB->ulsch_decoding_stats);
+/*
+      int ulsch_id=-1;
+      for  (ulsch_id=0;ulsch_id<NUMBER_OF_ULSCH_MAX;ulsch_id++)
+         if (ulsch->rnti == eNB->ulsch_stats[ulsch_id].rnti) break;
+      AssertFatal(ulsch_id>=0,"no ulsch_id found\n");
+
+      if (eNB->ulsch_stats[ulsch_id].round_trials[0]>100) {
+         dump_ulsch(eNB,frame,subframe,i,ulsch_harq->round);
+         AssertFatal(1==0,"exiting\n");
+      }
+*/
     }
     else if ((ulsch) &&
              (ulsch->rnti>0) &&
@@ -1472,7 +1499,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
       ulsch->harq_mask &= ~(1 << harq_pid);
       LOG_W (PHY, "Removing stale ULSCH config for UE %x harq_pid %d (harq_mask is now 0x%2.2x)\n", ulsch->rnti, harq_pid, ulsch->harq_mask);
     }
-  }   //   for (i=0; i<NUMBER_OF_UE_MAX; i++)
+  }   //   for (i=0; i<NUMBER_OF_ULSCH_MAX; i++)
   
   while (proc->nbDecode > 0) {
     notifiedFIFO_elt_t *req=pullTpool(proc->respDecode, proc->threadPool);
@@ -1537,7 +1564,7 @@ void kill_te_thread(PHY_VARS_eNB *eNB) {
 }
 
 void fill_rx_indication(PHY_VARS_eNB *eNB,
-                        int UE_id,
+                        int ULSCH_id,
                         int frame,
                         int subframe) {
   nfapi_rx_indication_pdu_t *pdu;
@@ -1545,7 +1572,7 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,
   int             sync_pos;
   uint32_t        harq_pid;
 
-  if (eNB->ulsch[UE_id]->ue_type > 0) harq_pid = 0;
+  if (eNB->ulsch[ULSCH_id]->ue_type > 0) harq_pid = 0;
   else {
     harq_pid = subframe2harq_pid (&eNB->frame_parms,
                                   frame, subframe);
@@ -1555,19 +1582,22 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,
   eNB->UL_INFO.rx_ind.sfn_sf                    = frame<<4| subframe;
   eNB->UL_INFO.rx_ind.rx_indication_body.tl.tag = NFAPI_RX_INDICATION_BODY_TAG;
   pdu                                    = &eNB->UL_INFO.rx_ind.rx_indication_body.rx_pdu_list[eNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus];
-  //  pdu->rx_ue_information.handle          = eNB->ulsch[UE_id]->handle;
+  //  pdu->rx_ue_information.handle          = eNB->ulsch[ULSCH_id]->handle;
   pdu->rx_ue_information.tl.tag          = NFAPI_RX_UE_INFORMATION_TAG;
-  pdu->rx_ue_information.rnti            = eNB->ulsch[UE_id]->rnti;
+  pdu->rx_ue_information.rnti            = eNB->ulsch[ULSCH_id]->rnti;
   pdu->rx_indication_rel8.tl.tag         = NFAPI_RX_INDICATION_REL8_TAG;
-  pdu->rx_indication_rel8.length         = eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS>>3;
+  pdu->rx_indication_rel8.length         = eNB->ulsch[ULSCH_id]->harq_processes[harq_pid]->TBS>>3;
   pdu->rx_indication_rel8.offset         = 1;   // DJP - I dont understand - but broken unless 1 ????  0;  // filled in at the end of the UL_INFO formation
-  pdu->data                              = eNB->ulsch[UE_id]->harq_processes[harq_pid]->decodedBytes;
+  pdu->data                              = eNB->ulsch[ULSCH_id]->harq_processes[harq_pid]->decodedBytes;
   // estimate timing advance for MAC
-  sync_pos                               = lte_est_timing_advance_pusch(&eNB->frame_parms, eNB->pusch_vars[UE_id]->drs_ch_estimates_time);
-  timing_advance_update                  = sync_pos; // - eNB->frame_parms.nb_prefix_samples/4; //to check
-
-  //  if (timing_advance_update > 10) { dump_ulsch(eNB,frame,subframe,UE_id); exit(-1);}
-  //  if (timing_advance_update < -10) { dump_ulsch(eNB,frame,subframe,UE_id); exit(-1);}
+  sync_pos                               = lte_est_timing_advance_pusch(&eNB->frame_parms, eNB->pusch_vars[ULSCH_id]->drs_ch_estimates_time);
+  timing_advance_update                  = sync_pos; 
+
+  for (int i=0;i<NUMBER_OF_SCH_STATS_MAX;i++) 
+      if (eNB->ulsch_stats[i].rnti == eNB->ulsch[ULSCH_id]->rnti) 
+         eNB->ulsch_stats[i].timing_offset = sync_pos;
+  //  if (timing_advance_update > 10) { dump_ulsch(eNB,frame,subframe,ULSCH_id); exit(-1);}
+  //  if (timing_advance_update < -10) { dump_ulsch(eNB,frame,subframe,ULSCH_id); exit(-1);}
   switch (eNB->frame_parms.N_RB_DL) {
     case 6:                      /* nothing to do */
       break;
@@ -1607,7 +1637,13 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,
 
   pdu->rx_indication_rel8.timing_advance = timing_advance_update;
   // estimate UL_CQI for MAC 
-  int SNRtimes10 = dB_fixed_x10(eNB->pusch_vars[UE_id]->ulsch_power[0] + ((eNB->frame_parms.nb_antennas_rx>1) ?eNB->pusch_vars[UE_id]->ulsch_power[1] : 0 ) ) - dB_fixed_x10(eNB->pusch_vars[UE_id]->ulsch_interference_power[0]+((eNB->frame_parms.nb_antennas_rx>1) ?eNB->pusch_vars[UE_id]->ulsch_interference_power[1] : 0 ) );
+  int total_power=0, avg_noise_power=0;  
+  for (int i=0;i<eNB->frame_parms.nb_antennas_rx;i++) {
+     total_power+=(eNB->pusch_vars[ULSCH_id]->ulsch_power[i]);
+     avg_noise_power+=(eNB->pusch_vars[ULSCH_id]->ulsch_noise_power[i])/eNB->frame_parms.nb_antennas_rx;
+  }
+  int SNRtimes10 = dB_fixed_x10(total_power) - 
+                   dB_fixed_x10(avg_noise_power);
 
   if (SNRtimes10 < -640)
     pdu->rx_indication_rel8.ul_cqi = 0;
@@ -1616,9 +1652,11 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,
   else
     pdu->rx_indication_rel8.ul_cqi = (640 + SNRtimes10) / 5;
 
-  LOG_D(PHY,"[PUSCH %d] Frame %d Subframe %d Filling RX_indication with SNR %d (%d,%d), timing_advance %d (update %d)\n",
-        harq_pid,frame,subframe,SNRtimes10,pdu->rx_indication_rel8.ul_cqi,eNB->measurements.n0_subband_power_avg_dB,pdu->rx_indication_rel8.timing_advance,
-        timing_advance_update);
+  LOG_D(PHY,"[PUSCH %d] Frame %d Subframe %d Filling RX_indication with SNR %d (%d,%d,%d), timing_advance %d (update %d,sync_pos %d)\n",
+        harq_pid,frame,subframe,SNRtimes10,pdu->rx_indication_rel8.ul_cqi,dB_fixed_x10(total_power),dB_fixed_x10(avg_noise_power),pdu->rx_indication_rel8.timing_advance,timing_advance_update,sync_pos);
+  for (int i=0;i<eNB->frame_parms.nb_antennas_rx;i++)
+	LOG_D(PHY,"antenna %d: ulsch_power %d, noise_power %d\n",i,dB_fixed_x10(eNB->pusch_vars[ULSCH_id]->ulsch_power[i]),dB_fixed_x10(eNB->pusch_vars[ULSCH_id]->ulsch_noise_power[i]));
+
   eNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus++;
   eNB->UL_INFO.rx_ind.sfn_sf = frame<<4 | subframe;
   pthread_mutex_unlock(&eNB->UL_INFO_mutex);
@@ -1629,7 +1667,7 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,
  * Release the harq process if its round is >= 'after_rounds'
  */
 static void do_release_harq(PHY_VARS_eNB *eNB,
-                            int UE_id,
+                            int DLSCH_id,
                             int tb,
                             uint16_t frame,
                             uint8_t subframe,
@@ -1644,10 +1682,10 @@ static void do_release_harq(PHY_VARS_eNB *eNB,
   int harq_pid;
   int subframe_tx;
   int frame_tx;
-  AssertFatal(UE_id != -1, "No existing dlsch context\n");
-  AssertFatal(UE_id < NUMBER_OF_UE_MAX, "Returned UE_id %d >= %d (NUMBER_OF_UE_MAX)\n", UE_id, NUMBER_OF_UE_MAX);
-  dlsch0 = eNB->dlsch[UE_id][0];
-  dlsch1 = eNB->dlsch[UE_id][1];
+  AssertFatal(DLSCH_id != -1, "No existing dlsch context\n");
+  AssertFatal(DLSCH_id < NUMBER_OF_DLSCH_MAX, "Returned DLSCH_id %d >= %d (NUMBER_OF_DLSCH_MAX)\n", DLSCH_id, NUMBER_OF_DLSCH_MAX);
+  dlsch0 = eNB->dlsch[DLSCH_id][0];
+  dlsch1 = eNB->dlsch[DLSCH_id][1];
 
   if (eNB->frame_parms.frame_type == FDD) {
     subframe_tx = (subframe + 6) % 10;
@@ -1746,13 +1784,13 @@ static void do_release_harq(PHY_VARS_eNB *eNB,
   } // end if TDD
 }
 
-static void release_harq(PHY_VARS_eNB *eNB,int UE_id,int tb,uint16_t frame,uint8_t subframe,uint16_t mask, int is_ack) {
+static void release_harq(PHY_VARS_eNB *eNB,int DLSCH_id,int tb,uint16_t frame,uint8_t subframe,uint16_t mask, int is_ack) {
   /*
    * Maximum number of DL transmissions = 4.
    * TODO: get the value from configuration.
    * If is_ack is true then we release immediately. The value -1 can be used for that.
    */
-  do_release_harq(eNB, UE_id, tb, frame, subframe, mask, is_ack ? -1 : 4);
+  do_release_harq(eNB, DLSCH_id, tb, frame, subframe, mask, is_ack ? -1 : 4);
 }
 
 int getM(PHY_VARS_eNB *eNB,int frame,int subframe) {
@@ -1832,14 +1870,14 @@ void fill_ulsch_cqi_indication (PHY_VARS_eNB *eNB, uint16_t frame, uint8_t subfr
 }
 
 void fill_ulsch_harq_indication (PHY_VARS_eNB *eNB, LTE_UL_eNB_HARQ_t *ulsch_harq, uint16_t rnti, int frame, int subframe, int bundling) {
-  int UE_id = find_dlsch(rnti,eNB,SEARCH_EXIST);
+  int DLSCH_id = find_dlsch(rnti,eNB,SEARCH_EXIST);
 
-  if( (UE_id<0) || (UE_id>=NUMBER_OF_UE_MAX) ) {
-    LOG_E(PHY,"illegal UE_id found!!! rnti %04x UE_id %d\n",rnti,UE_id);
+  if( (DLSCH_id<0) || (DLSCH_id>=NUMBER_OF_DLSCH_MAX) ) {
+    LOG_E(PHY,"illegal DLSCH_id found!!! rnti %04x DLSCH_id %d\n",rnti,DLSCH_id);
     return;
   }
 
-  //AssertFatal(UE_id>=0,"UE_id doesn't exist\n");
+  //AssertFatal(DLSCH_id>=0,"DLSCH_id doesn't exist\n");
   pthread_mutex_lock(&eNB->UL_INFO_mutex);
   nfapi_harq_indication_pdu_t *pdu =   &eNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list[eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs];
   int M;
@@ -1861,7 +1899,7 @@ void fill_ulsch_harq_indication (PHY_VARS_eNB *eNB, LTE_UL_eNB_HARQ_t *ulsch_har
       AssertFatal (ulsch_harq->o_ACK[i] == 0 || ulsch_harq->o_ACK[i] == 1, "harq_ack[%d] is %d, should be 1,2 or 4\n", i, ulsch_harq->o_ACK[i]);
       pdu->harq_indication_fdd_rel13.harq_tb_n[i] = 2 - ulsch_harq->o_ACK[i];
       // release DLSCH if needed
-      release_harq(eNB,UE_id,i,frame,subframe,0xffff, ulsch_harq->o_ACK[i] == 1);
+      release_harq(eNB,DLSCH_id,i,frame,subframe,0xffff, ulsch_harq->o_ACK[i] == 1);
     }
   } else {                      // TDD
     M = ul_ACK_subframe2_M (&eNB->frame_parms, subframe);
@@ -1877,14 +1915,14 @@ void fill_ulsch_harq_indication (PHY_VARS_eNB *eNB, LTE_UL_eNB_HARQ_t *ulsch_har
        * We have to release the proper HARQ in case of ACK or NACK if max retransmission reached.
        * Basically, call release_harq with 1 as last argument when ACK and 0 when NACK.
        */
-      release_harq(eNB,UE_id,i,frame,subframe,0xffff, ulsch_harq->o_ACK[i] == 1);
+      release_harq(eNB,DLSCH_id,i,frame,subframe,0xffff, ulsch_harq->o_ACK[i] == 1);
 
-      if      (M==1 && ulsch_harq->O_ACK==1 && ulsch_harq->o_ACK[i] == 1) release_harq(eNB,UE_id,0,frame,subframe,0xffff, ulsch_harq->o_ACK[i] == 1);
-      else if (M==1 && ulsch_harq->O_ACK==2 && ulsch_harq->o_ACK[i] == 1) release_harq(eNB,UE_id,i,frame,subframe,0xffff, ulsch_harq->o_ACK[i] == 1);
+      if      (M==1 && ulsch_harq->O_ACK==1 && ulsch_harq->o_ACK[i] == 1) release_harq(eNB,DLSCH_id,0,frame,subframe,0xffff, ulsch_harq->o_ACK[i] == 1);
+      else if (M==1 && ulsch_harq->O_ACK==2 && ulsch_harq->o_ACK[i] == 1) release_harq(eNB,DLSCH_id,i,frame,subframe,0xffff, ulsch_harq->o_ACK[i] == 1);
       else if (M>1 && ulsch_harq->o_ACK[i] == 1) {
         // spatial bundling
-        release_harq(eNB,UE_id,0,frame,subframe,1<<i, ulsch_harq->o_ACK[i] == 1);
-        release_harq(eNB,UE_id,1,frame,subframe,1<<i, ulsch_harq->o_ACK[i] == 1);
+        release_harq(eNB,DLSCH_id,0,frame,subframe,1<<i, ulsch_harq->o_ACK[i] == 1);
+        release_harq(eNB,DLSCH_id,1,frame,subframe,1<<i, ulsch_harq->o_ACK[i] == 1);
       }
     }
   }
@@ -1900,10 +1938,10 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
     return;
   }
   
-  int UE_id=find_dlsch(uci->rnti,eNB,SEARCH_EXIST);
+  int DLSCH_id=find_dlsch(uci->rnti,eNB,SEARCH_EXIST);
 
-  //AssertFatal(UE_id>=0,"UE_id doesn't exist rnti:%x\n", uci->rnti);
-  if (UE_id < 0) {
+  //AssertFatal(DLSCH_id>=0,"DLSCH_id doesn't exist rnti:%x\n", uci->rnti);
+  if (DLSCH_id < 0) {
     LOG_E(PHY,"SFN/SF:%04d%d Unable to find rnti:%x do not send HARQ\n", frame, subframe, uci->rnti);
     return;
   }
@@ -1943,7 +1981,7 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
       AssertFatal (harq_ack[0] == 1 || harq_ack[0] == 2 || harq_ack[0] == 4, "harq_ack[0] is %d, should be 1,2 or 4\n", harq_ack[0]);
       pdu->harq_indication_fdd_rel13.harq_tb_n[0] = harq_ack[0];
       // release DLSCH if needed
-      release_harq(eNB,UE_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
+      release_harq(eNB,DLSCH_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
     } else if (uci->pucch_fmt == pucch_format1b) {
       pdu->harq_indication_fdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_FDD_REL13_TAG;
       pdu->harq_indication_fdd_rel13.mode = 0;
@@ -1953,8 +1991,8 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
       pdu->harq_indication_fdd_rel13.harq_tb_n[0] = harq_ack[0];
       pdu->harq_indication_fdd_rel13.harq_tb_n[1] = harq_ack[1];
       // release DLSCH if needed
-      release_harq(eNB,UE_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
-      release_harq(eNB,UE_id,1,frame,subframe,0xffff, harq_ack[1] == 1);
+      release_harq(eNB,DLSCH_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
+      release_harq(eNB,DLSCH_id,1,frame,subframe,0xffff, harq_ack[1] == 1);
     } else AssertFatal(1==0,"only format 1a/b for now, received %d\n",uci->pucch_fmt);
   } else { // TDD
     AssertFatal (tdd_mapping_mode == 0 || tdd_mapping_mode == 1 || tdd_mapping_mode == 2, "Illegal tdd_mapping_mode %d\n", tdd_mapping_mode);
@@ -1972,7 +2010,7 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
           AssertFatal(harq_ack[0] == 1 || harq_ack[0] == 2 || harq_ack[0] == 4, "harq_ack[0] is %d, should be 1,2 or 4\n",harq_ack[0]);
           pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = harq_ack[0];
           // release all bundled DLSCH if needed
-          release_harq(eNB,UE_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
+          release_harq(eNB,DLSCH_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
         } else if (uci->pucch_fmt == pucch_format1b) {
           pdu->harq_indication_tdd_rel13.number_of_ack_nack = 2;
           AssertFatal(harq_ack[0] == 1 || harq_ack[0] == 2 || harq_ack[1] == 4, "harq_ack[0] is %d, should be 0,1 or 4\n",harq_ack[0]);
@@ -1981,8 +2019,8 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
           pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = harq_ack[0];
           pdu->harq_indication_tdd_rel13.harq_data[1].bundling.value_0 = harq_ack[1];
           // release all DLSCH if needed
-          release_harq(eNB,UE_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
-          release_harq(eNB,UE_id,1,frame,subframe,0xffff, harq_ack[1] == 1);
+          release_harq(eNB,DLSCH_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
+          release_harq(eNB,DLSCH_id,1,frame,subframe,0xffff, harq_ack[1] == 1);
         }
 
         break;
@@ -1996,7 +2034,7 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
           AssertFatal(harq_ack[0] == 1 || harq_ack[0] == 2 || harq_ack[0] == 4, "harq_ack[0] is %d, should be 1,2 or 4\n",harq_ack[0]);
           pdu->harq_indication_tdd_rel13.harq_data[0].multiplex.value_0 = harq_ack[0];
           // release all DLSCH if needed
-          release_harq(eNB,UE_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
+          release_harq(eNB,DLSCH_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
         } else if (uci->num_pucch_resources == 1 && uci->pucch_fmt == pucch_format1b) {
           pdu->harq_indication_tdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_TDD_REL13_TAG;
           pdu->harq_indication_tdd_rel13.number_of_ack_nack = 2;
@@ -2005,8 +2043,8 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
           pdu->harq_indication_tdd_rel13.harq_data[0].multiplex.value_0 = harq_ack[0];
           pdu->harq_indication_tdd_rel13.harq_data[1].multiplex.value_0 = harq_ack[1];
           // release all DLSCH if needed
-          release_harq(eNB,UE_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
-          release_harq(eNB,UE_id,1,frame,subframe,0xffff, harq_ack[1] == 1);
+          release_harq(eNB,DLSCH_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
+          release_harq(eNB,DLSCH_id,1,frame,subframe,0xffff, harq_ack[1] == 1);
         } else { // num_pucch_resources (M) > 1
           pdu->harq_indication_tdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_TDD_REL13_TAG;
           pdu->harq_indication_tdd_rel13.number_of_ack_nack = uci->num_pucch_resources;
@@ -2018,8 +2056,8 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
           if (uci->num_pucch_resources == 4)  pdu->harq_indication_tdd_rel13.harq_data[3].multiplex.value_0 = harq_ack[3];
 
           // spatial-bundling in this case so release both HARQ if necessary
-          release_harq(eNB,UE_id,0,frame,subframe,tdd_multiplexing_mask, 1 /* force release? previous code was unconditional */);
-          release_harq(eNB,UE_id,1,frame,subframe,tdd_multiplexing_mask, 1 /* force release? previous code was unconditional */);
+          release_harq(eNB,DLSCH_id,0,frame,subframe,tdd_multiplexing_mask, 1 /* force release? previous code was unconditional */);
+          release_harq(eNB,DLSCH_id,1,frame,subframe,tdd_multiplexing_mask, 1 /* force release? previous code was unconditional */);
         }
 
         break;
@@ -2043,8 +2081,8 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
             if (uci->num_pucch_resources == 1 || uci->num_pucch_resources == 4 ||
                 tdd_config5_sf2scheds == 1 || tdd_config5_sf2scheds == 4 || tdd_config5_sf2scheds == 7) {
               pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 1;
-              release_harq(eNB,UE_id,0,frame,subframe,0xffff, 1);
-              release_harq(eNB,UE_id,1,frame,subframe,0xffff, 1);
+              release_harq(eNB,DLSCH_id,0,frame,subframe,0xffff, 1);
+              release_harq(eNB,DLSCH_id,1,frame,subframe,0xffff, 1);
             } else {
               pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 0;
             }
@@ -2055,8 +2093,8 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
             if (uci->num_pucch_resources == 2 || tdd_config5_sf2scheds == 2 ||
                 tdd_config5_sf2scheds == 5 || tdd_config5_sf2scheds == 8) {
               pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 1;
-              release_harq(eNB,UE_id,0,frame,subframe,0xffff, 1);
-              release_harq(eNB,UE_id,1,frame,subframe,0xffff, 1);
+              release_harq(eNB,DLSCH_id,0,frame,subframe,0xffff, 1);
+              release_harq(eNB,DLSCH_id,1,frame,subframe,0xffff, 1);
             } else {
               pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 0;
             }
@@ -2067,8 +2105,8 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
             if (uci->num_pucch_resources == 3 || tdd_config5_sf2scheds == 3 ||
                 tdd_config5_sf2scheds == 6 || tdd_config5_sf2scheds == 9) {
               pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 1;
-              release_harq(eNB,UE_id,0,frame,subframe,0xffff, 1);
-              release_harq(eNB,UE_id,1,frame,subframe,0xffff, 1);
+              release_harq(eNB,DLSCH_id,0,frame,subframe,0xffff, 1);
+              release_harq(eNB,DLSCH_id,1,frame,subframe,0xffff, 1);
             } else {
               pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = 0;
             }
@@ -2085,7 +2123,7 @@ void fill_uci_harq_indication (int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci, in
   pthread_mutex_unlock(&eNB->UL_INFO_mutex);
 }
 
-void fill_crc_indication (PHY_VARS_eNB *eNB, int UE_id, int frame, int subframe, uint8_t crc_flag) {
+void fill_crc_indication (PHY_VARS_eNB *eNB, int ULSCH_id, int frame, int subframe, uint8_t crc_flag) {
   pthread_mutex_lock(&eNB->UL_INFO_mutex);
   nfapi_crc_indication_pdu_t *pdu =   &eNB->UL_INFO.crc_ind.crc_indication_body.crc_pdu_list[eNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs];
   eNB->UL_INFO.crc_ind.sfn_sf                         = frame<<4 | subframe;
@@ -2094,7 +2132,7 @@ void fill_crc_indication (PHY_VARS_eNB *eNB, int UE_id, int frame, int subframe,
   pdu->instance_length = 0;     // don't know what to do with this
   //  pdu->rx_ue_information.handle                       = handle;
   pdu->rx_ue_information.tl.tag                       = NFAPI_RX_UE_INFORMATION_TAG;
-  pdu->rx_ue_information.rnti                         = eNB->ulsch[UE_id]->rnti;
+  pdu->rx_ue_information.rnti                         = eNB->ulsch[ULSCH_id]->rnti;
   pdu->crc_indication_rel8.tl.tag                     = NFAPI_CRC_INDICATION_REL8_TAG;
   pdu->crc_indication_rel8.crc_flag                   = crc_flag;
   eNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs++;
@@ -2133,20 +2171,24 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
   }
 
   lte_eNB_I0_measurements (eNB, subframe, 0, eNB->first_run_I0_measurements);
-  int min_I0=1000,max_I0=0;
-  int amin=0,amax=0;
-  if ((frame==0) && (subframe==3)) {
-    for (int i=0; i<eNB->frame_parms.N_RB_UL; i++) {
-      if (i==(eNB->frame_parms.N_RB_UL>>1) - 1) i+=2;
-
-      if (eNB->measurements.n0_subband_power_tot_dB[i]<min_I0) {min_I0 = eNB->measurements.n0_subband_power_tot_dB[i]; amin=i;}
-
-      if (eNB->measurements.n0_subband_power_tot_dB[i]>max_I0) {max_I0 = eNB->measurements.n0_subband_power_tot_dB[i]; amax=i;}
-    }
 
-    LOG_I (PHY, "max_I0 %d (rb %d), min_I0 %d (rb %d), avg I0 %d\n", max_I0, amax, min_I0, amin, eNB->measurements.n0_subband_power_avg_dB);
+  // clear unused statistics after 2 seconds
+  for (int i=0;i<NUMBER_OF_SCH_STATS_MAX;i++) {
+     if (eNB->ulsch_stats[i].frame <= frame) {
+         if ((eNB->ulsch_stats[i].frame + 200) < frame) memset(&eNB->ulsch_stats[i],0,sizeof(eNB->ulsch_stats[i]));
+     }
+     else {
+         if (eNB->ulsch_stats[i].frame + 200 < (frame+1024)) memset(&eNB->ulsch_stats[i],0,sizeof(eNB->ulsch_stats[i]));
+     }
+     if (eNB->uci_stats[i].frame <= frame) {
+         if ((eNB->uci_stats[i].frame + 200) < frame) memset(&eNB->uci_stats[i],0,sizeof(eNB->uci_stats[i]));
+     }
+     else {
+         if (eNB->uci_stats[i].frame + 200 < (frame+1024)) memset(&eNB->uci_stats[i],0,sizeof(eNB->uci_stats[i]));
+     }
   }
 
+
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC, 0 );
 }
 
@@ -2163,13 +2205,7 @@ void release_rnti_of_phy(module_id_t mod_id) {
       eNB_PHY = RC.eNB[mod_id][CC_id];
       rnti = release_rntis.ue_release_request_TLVs_list[i].rnti;
 
-      for (j=0; j<NUMBER_OF_UE_MAX; j++) {
-        ulsch = eNB_PHY->ulsch[j];
-
-        if((ulsch != NULL) && (ulsch->rnti == rnti)) {
-          LOG_I(PHY, "clean_eNb_ulsch ulsch[%d] UE %x\n", j, rnti);
-          clean_eNb_ulsch(ulsch);
-        }
+      for (j=0; j<NUMBER_OF_DLSCH_MAX; j++) {
 
         dlsch = eNB_PHY->dlsch[j][0];
 
@@ -2179,14 +2215,18 @@ void release_rnti_of_phy(module_id_t mod_id) {
         }
       }
 
-      ulsch = eNB_PHY->ulsch[j];
+      for (j=0;j<NUMBER_OF_ULSCH_MAX; j++) {
+        ulsch = eNB_PHY->ulsch[j];
 
-      if((ulsch != NULL) && (ulsch->rnti == rnti)) {
-        LOG_I(PHY, "clean_eNb_ulsch ulsch[%d] UE %x\n", j, rnti);
-        clean_eNb_ulsch(ulsch);
+        if((ulsch != NULL) && (ulsch->rnti == rnti)) {
+          LOG_I(PHY, "clean_eNb_ulsch ulsch[%d] UE %x\n", j, rnti);
+          clean_eNb_ulsch(ulsch);
+          for (j=0;j<NUMBER_OF_ULSCH_MAX;j++)
+             if (eNB_PHY->ulsch_stats[j].rnti == rnti) {eNB_PHY->ulsch_stats[j].rnti=0; break;}
+        }
       }
 
-      for(j=0; j<NUMBER_OF_UCI_VARS_MAX; j++) {
+      for(j=0; j<NUMBER_OF_UCI_MAX; j++) {
         if(eNB_PHY->uci_vars[j].rnti == rnti) {
           LOG_I(PHY, "clean eNb uci_vars[%d] UE %x \n",j, rnti);
           memset(&eNB_PHY->uci_vars[i],0,sizeof(LTE_eNB_UCI));
diff --git a/openair1/SCHED/prach_procedures.c b/openair1/SCHED/prach_procedures.c
index b99bb2ee7d742155f5384a47b3835383abbecc07..4d0fe428e84de72f10712063e27cb673f46c77e3 100644
--- a/openair1/SCHED/prach_procedures.c
+++ b/openair1/SCHED/prach_procedures.c
@@ -31,8 +31,6 @@
  */
 
 #include "PHY/defs_eNB.h"
-#include "PHY/phy_extern.h"
-#include "SCHED/sched_eNB.h"
 #include "nfapi_interface.h"
 #include "fapi_l1.h"
 #include "nfapi_pnf.h"
@@ -46,7 +44,6 @@
 
 #include <time.h>
 
-#include "intertask_interface.h"
 
 
 extern int oai_nfapi_rach_ind(nfapi_rach_indication_t *rach_ind);
@@ -188,7 +185,7 @@ void prach_procedures(PHY_VARS_eNB *eNB,
     else {
       eNB->measurements.prach_I0 = ((eNB->measurements.prach_I0*900)>>10) + ((avg_preamble_energy[0]*124)>>10);
 
-      if (frame==0) LOG_I(PHY,"prach_I0 = %d.%d dB\n",eNB->measurements.prach_I0/10,eNB->measurements.prach_I0%10);
+      if (frame==0) LOG_D(PHY,"prach_I0 = %d.%d dB\n",eNB->measurements.prach_I0/10,eNB->measurements.prach_I0%10);
 
       if (eNB->prach_energy_counter < 100) eNB->prach_energy_counter++;
     }
diff --git a/openair1/SCHED/ru_procedures.c b/openair1/SCHED/ru_procedures.c
index 70399f0a23a14ab21fb6f1df72f8b201d551fc1f..15eba7b5bc4f59bfacbd13b83d6383c5451680e9 100644
--- a/openair1/SCHED/ru_procedures.c
+++ b/openair1/SCHED/ru_procedures.c
@@ -54,7 +54,6 @@
 
 
 #include "PHY/defs_eNB.h"
-#include "PHY/phy_extern.h"
 #include "SCHED/sched_eNB.h"
 #include "PHY/MODULATION/modulation_eNB.h"
 #include "PHY/LTE_TRANSPORT/if4_tools.h"
@@ -140,27 +139,26 @@ void feptx0(RU_t *ru,
 	      int num_symb = 7;
 
 	      if (subframe_select(fp,subframe) == SF_S)
-             num_symb = fp->dl_symbols_in_S_subframe+1;
+                num_symb = fp->dl_symbols_in_S_subframe+1;
 
-	      if (ru->generate_dmrs_sync == 1 && slot == 0 && subframe == 1 && aa==0) {
+	      if (ru->generate_dmrs_sync == 1 && slot == 2 && aa==0) {
             //int32_t dmrs[ru->frame_parms.ofdm_symbol_size*14] __attribute__((aligned(32)));
             //int32_t *dmrsp[2] ={dmrs,NULL}; //{&dmrs[(3-ru->frame_parms.Ncp)*ru->frame_parms.ofdm_symbol_size],NULL};
-
-            generate_drs_pusch((PHY_VARS_UE *)NULL,
-                               (UE_rxtx_proc_t*)NULL,
-                               fp,
-                               ru->common.txdataF_BF,
-                               0,
-                               AMP,
-                               0,
-                               0,
-                               fp->N_RB_DL,
-                               aa);
+                  generate_drs_pusch((PHY_VARS_UE *)NULL,
+                                     (UE_rxtx_proc_t*)NULL,
+                                     fp,
+                                     ru->common.txdataF_BF,
+                                     0,
+                                     AMP,
+                                     0,
+                                     0,
+                                     fp->N_RB_DL,
+                                     aa);
 	      } 
-          normal_prefix_mod(&ru->common.txdataF_BF[aa][(slot&1)*slot_sizeF],
-                            (int*)&ru->common.txdata[aa][slot_offset],
-                            num_symb,
-                            fp);
+              normal_prefix_mod(&ru->common.txdataF_BF[aa][(slot&1)*slot_sizeF],
+                                (int*)&ru->common.txdata[aa][slot_offset],
+                                num_symb,
+                                fp);
       }
     }
 
@@ -474,15 +472,16 @@ void feptx_prec(RU_t *ru,
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+ru->idx , 1);
 
     for (aa=0;aa<ru->nb_tx;aa++) {
-      memset(ru->common.txdataF_BF[aa],0,sizeof(int32_t)*fp->ofdm_symbol_size*fp->symbols_per_tti);
-      for (int p=0;p<NB_ANTENNA_PORTS_ENB;p++) {
-    	if (ru->do_precoding == 0) {
-	      if (p==0)
-	        memcpy((void*)ru->common.txdataF_BF[aa],
-	        (void*)&eNB->common_vars.txdataF[aa][subframe*fp->symbols_per_tti*fp->ofdm_symbol_size],
-	        sizeof(int32_t)*fp->ofdm_symbol_size*fp->symbols_per_tti);
-    	} else {
-    	  if (p<fp->nb_antenna_ports_eNB) {
+      if (ru->do_precoding == 0) {
+          memcpy((void*)ru->common.txdataF_BF[aa],
+                 (void*)&eNB->common_vars.txdataF[aa%fp->nb_antenna_ports_eNB][subframe*fp->symbols_per_tti*fp->ofdm_symbol_size],
+                 sizeof(int32_t)*fp->ofdm_symbol_size*fp->symbols_per_tti);
+
+      }
+      else {
+         memset(ru->common.txdataF_BF[aa],0,sizeof(int32_t)*fp->ofdm_symbol_size*fp->symbols_per_tti);
+         for (int p=0;p<NB_ANTENNA_PORTS_ENB;p++) {
+    	    if (p<fp->nb_antenna_ports_eNB) {
 	        // For the moment this does nothing different than below, except ignore antenna ports 5,7,8.
 	        for (l=0;l<pdcch_vars->num_pdcch_symbols;l++)
 	          beam_precoding(eNB->common_vars.txdataF,
@@ -494,10 +493,10 @@ void feptx_prec(RU_t *ru,
                              aa,
                              p,
                              eNB->Mod_id);
-	      } //if (p<fp->nb_antenna_ports_eNB)
+	    } //if (p<fp->nb_antenna_ports_eNB)
 	  
 	      // PDSCH region
-    	  if (p<fp->nb_antenna_ports_eNB || p==5 || p==7 || p==8) {
+    	    if (p<fp->nb_antenna_ports_eNB || p==5 || p==7 || p==8) {
 	        for (l=pdcch_vars->num_pdcch_symbols;l<fp->symbols_per_tti;l++) {
 	          beam_precoding(eNB->common_vars.txdataF,
                              ru->common.txdataF_BF,
@@ -510,8 +509,8 @@ void feptx_prec(RU_t *ru,
                              eNB->Mod_id);
 	        } // for (l=pdcch_vars ....)
 	      } // if (p<fp->nb_antenna_ports_eNB) ...
-	    } // ru->do_precoding!=0
-      } // for (p=0...)
+           } // for (p=0...)
+        } // if do_precoding
     } // for (aa=0 ...)
     
     if(ru->idx<2)
@@ -658,7 +657,7 @@ void ru_fep_full_2thread(RU_t *ru,
 
   struct timespec wait;
 
-  if ((fp->frame_type == TDD) && (subframe_select(fp,subframe) != SF_UL)) return;
+  if ((fp->frame_type == TDD) && (subframe_select(fp,subframe) == SF_DL)) return;
 
   if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 1 );
 
@@ -705,7 +704,7 @@ void ru_fep_full_2thread(RU_t *ru,
 
   if (proc->tti_rx/*proc->subframe_rx*/==1 && ru->is_slave==1/* && ru->state == RU_CHECK_SYNC*/)
   {
-    //LOG_I(PHY,"Running check synchronization procedure for frame %d\n", proc->frame_rx);
+    LOG_I(PHY,"Running check synchronization procedure for frame %d\n", proc->frame_rx);
   	ulsch_extract_rbs_single(ru->common.rxdataF,
                              calibration->rxdataF_ext,
                              0,
@@ -731,9 +730,10 @@ void ru_fep_full_2thread(RU_t *ru,
 	check_sync_pos = lte_est_timing_advance_pusch(ru->frame_parms, ru->calibration.drs_ch_estimates_time); 
         if (ru->state == RU_CHECK_SYNC) {
           if ((check_sync_pos >= 0 && check_sync_pos<8) || (check_sync_pos < 0 && check_sync_pos>-8)) {
-    		  LOG_I(PHY,"~~~~~~~~~~~    check_sync_pos %d, frame %d, cnt %d\n",check_sync_pos,proc->frame_rx,ru->wait_check); 
+//    		  LOG_I(PHY,"~~~~~~~~~~~    check_sync_pos %d, frame %d, cnt %d\n",check_sync_pos,proc->frame_rx,ru->wait_check); 
                   ru->wait_check++;
           }
+          LOG_I(PHY,"~~~~~~~~~~~    check_sync_pos %d, frame %d, cnt %d\n",check_sync_pos,proc->frame_rx,ru->wait_check);
 
           if (ru->wait_check==20) { 
             ru->state = RU_RUN;
@@ -743,10 +743,11 @@ void ru_fep_full_2thread(RU_t *ru,
             rru_config_msg.len  = sizeof(RRU_CONFIG_msg_t); // TODO: set to correct msg len
             LOG_I(PHY,"Sending RRU_sync_ok to RAU\n");
             AssertFatal((ru->ifdevice.trx_ctlsend_func(&ru->ifdevice,&rru_config_msg,rru_config_msg.len)!=-1),"Failed to send msg to RAU %d\n",ru->idx);
+/*
                 //LOG_I(PHY,"~~~~~~~~~ RU_RUN\n");
-          	/*LOG_M("dmrs_time.m","dmrstime",calibration->drs_ch_estimates_time[0], (fp->ofdm_symbol_size),1,1);
+          	LOG_M("dmrs_time.m","dmrstime",calibration->drs_ch_estimates_time[0], (fp->ofdm_symbol_size),1,1);
 		LOG_M("rxdataF_ext.m","rxdataFext",&calibration->rxdataF_ext[0][36*fp->N_RB_DL], 12*(fp->N_RB_DL),1,1);		
-		LOG_M("drs_seq0.m","drsseq0",ul_ref_sigs_rx[0][0][23],600,1,1);
+		//LOG_M("drs_seq0.m","drsseq0",ul_ref_sigs_rx[0][0][23],600,1,1);
 		LOG_M("rxdata.m","rxdata",&ru->common.rxdata[0][0], fp->samples_per_tti*2,1,1);
 		exit(-1);*/
           }
diff --git a/openair1/SCHED/sched_common.h b/openair1/SCHED/sched_common.h
index f3e43d516ece342271860bad060b5669da6bb01b..c9fc3386865b6931fc7fdbb98f694f61d078806f 100644
--- a/openair1/SCHED/sched_common.h
+++ b/openair1/SCHED/sched_common.h
@@ -311,7 +311,7 @@ void get_cqipmiri_params(PHY_VARS_UE *ue,uint8_t eNB_id);
 
 int8_t get_PHR(uint8_t Mod_id, uint8_t CC_id, uint8_t eNB_index);
 
-void schedule_response(Sched_Rsp_t *Sched_INFO, L1_rxtx_proc_t *proc);
+void schedule_response(Sched_Rsp_t *Sched_INFO, void *proc);
 
 LTE_eNB_UE_stats* get_UE_stats(uint8_t Mod_id, uint8_t CC_id,uint16_t rnti);
 
diff --git a/openair1/SCHED/sched_eNB.h b/openair1/SCHED/sched_eNB.h
index f04bec2e5c45f691d75fb0e39aeaae07c34d409f..de987b0ac7eece4820e24f208798954a658d7572 100644
--- a/openair1/SCHED/sched_eNB.h
+++ b/openair1/SCHED/sched_eNB.h
@@ -193,7 +193,7 @@ int8_t find_ue_ulsch(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB);
 
 
 
-void schedule_response(Sched_Rsp_t *Sched_INFO, L1_rxtx_proc_t *proc);
+void schedule_response(Sched_Rsp_t *Sched_INFO, void *proc);
 
 LTE_eNB_UE_stats *get_UE_stats(uint8_t Mod_id, uint8_t CC_id,uint16_t rnti);
 
diff --git a/openair1/SCHED_NR/fapi_nr_l1.c b/openair1/SCHED_NR/fapi_nr_l1.c
index 88f3dca070ce092aea91a0759d285729330125f5..012e088dff78d1ad9f4f0248093f3ab6e9b9f0fe 100644
--- a/openair1/SCHED_NR/fapi_nr_l1.c
+++ b/openair1/SCHED_NR/fapi_nr_l1.c
@@ -168,7 +168,7 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO){
 
   int pdcch_received=0;
   gNB->num_pdsch_rnti[slot]=0;
-  for (int i=0; i<NUMBER_OF_NR_DLSCH_MAX; i++) {
+  for (int i=0; i<gNB->number_of_nr_dlsch_max; i++) {
     gNB->dlsch[i][0]->rnti=0;
     gNB->dlsch[i][0]->harq_mask=0;
   }
diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c
index 1b2baf03f53f9bce7f63a7d14f0c7595dbc7fde9..c8042ecec35682290a85b2577a45eb4c0a35b2ef 100644
--- a/openair1/SCHED_NR/nr_ru_procedures.c
+++ b/openair1/SCHED_NR/nr_ru_procedures.c
@@ -31,15 +31,12 @@
  */
 
 #include "PHY/defs_gNB.h"
-#include "PHY/phy_extern.h"
 #include "sched_nr.h"
 #include "PHY/MODULATION/modulation_common.h"
 #include "PHY/MODULATION/nr_modulation.h"
 #include "PHY/LTE_TRANSPORT/if4_tools.h"
 #include "PHY/LTE_TRANSPORT/if5_tools.h"
 
-#include "LAYER2/NR_MAC_COMMON/nr_mac_extern.h"
-#include "LAYER2/MAC/mac.h"
 #include "common/utils/LOG/log.h"
 #include "common/utils/system.h"
 #include "common/utils/LOG/vcd_signal_dumper.h"
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index d68cacece2f9fc901a07da298f29e929acd4d91b..6dea9050f8c41ac8f55f07923a58d88f5a6c03a6 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -460,7 +460,7 @@ void fill_ul_rb_mask(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
           }
         }
       }
-      for (int ULSCH_id=0;ULSCH_id<NUMBER_OF_NR_ULSCH_MAX;ULSCH_id++) {
+      for (int ULSCH_id=0;ULSCH_id<gNB->number_of_nr_ulsch_max;ULSCH_id++) {
         NR_gNB_ULSCH_t *ulsch = gNB->ulsch[ULSCH_id][0];
         int harq_pid;
         NR_UL_gNB_HARQ_t *ulsch_harq;
@@ -600,7 +600,7 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
     }
   }
 
-  for (int ULSCH_id=0;ULSCH_id<NUMBER_OF_NR_ULSCH_MAX;ULSCH_id++) {
+  for (int ULSCH_id=0;ULSCH_id<gNB->number_of_nr_ulsch_max;ULSCH_id++) {
     NR_gNB_ULSCH_t *ulsch = gNB->ulsch[ULSCH_id][0];
     int harq_pid;
     int no_sig;
@@ -646,19 +646,15 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
 
           pusch_decode_done = 1;
 
-          uint8_t symbol_start = ulsch_harq->ulsch_pdu.start_symbol_index;
-          uint8_t symbol_end = symbol_start + ulsch_harq->ulsch_pdu.nr_of_symbols;
           VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_NR_RX_PUSCH,1);
-	  start_meas(&gNB->rx_pusch_stats);
-	  for(uint8_t symbol = symbol_start; symbol < symbol_end; symbol++) {
-	    no_sig = nr_rx_pusch(gNB, ULSCH_id, frame_rx, slot_rx, symbol, harq_pid);
-            if (no_sig && (get_softmodem_params()->phy_test == 0)) {
-              LOG_I(PHY, "PUSCH not detected in symbol %d\n",symbol);
-              nr_fill_indication(gNB,frame_rx, slot_rx, ULSCH_id, harq_pid, 1);
-              return;
-            }
-	  }
-	  stop_meas(&gNB->rx_pusch_stats);
+          start_meas(&gNB->rx_pusch_stats);
+          no_sig = nr_rx_pusch(gNB, ULSCH_id, frame_rx, slot_rx, harq_pid);
+          if (no_sig && (get_softmodem_params()->phy_test == 0)) {
+            LOG_I(PHY, "PUSCH not detected in frame %d, slot %d\n", frame_rx, slot_rx);
+            nr_fill_indication(gNB, frame_rx, slot_rx, ULSCH_id, harq_pid, 1);
+            return;
+          }
+          stop_meas(&gNB->rx_pusch_stats);
           VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_NR_RX_PUSCH,0);
           //LOG_M("rxdataF_comp.m","rxF_comp",gNB->pusch_vars[0]->rxdataF_comp[0],6900,1,1);
           //LOG_M("rxdataF_ext.m","rxF_ext",gNB->pusch_vars[0]->rxdataF_ext[0],6900,1,1);
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c
index 895545428234d896ea27e97d0ccc49ba13f1836c..adfda7a0c85229dfa7ef9c153b7780c0c5685709 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim.c
@@ -60,7 +60,7 @@
 #include "dummy_functions.c"
 #include "executables/thread-common.h"
 #include "executables/split_headers.h"
-
+#include "common/ran_context.h"
 void feptx_ofdm(RU_t *ru, int frame, int subframe);
 void feptx_prec(RU_t *ru, int frame, int subframe);
 
@@ -85,6 +85,7 @@ double DS_TDL = .03;
 static int cmpdouble(const void *p1, const void *p2) {
   return *(double *)p1 > *(double *)p2;
 }
+RAN_CONTEXT_t RC;
 
 int emulate_rf = 0;
 int split73=0;
@@ -936,9 +937,10 @@ int main(int argc, char **argv) {
 
     NB_RB = conv_nprb(0,DLSCH_RB_ALLOC,N_RB_DL);
   } else {
-    if (rballocset==0) NB_RB = 8;
+    if (rballocset==0) NB_RB = 2+TPC;
     else               NB_RB = DLSCH_RB_ALLOC;
 
+    printf("Common PDSCH: NB_RB = %d\n",NB_RB);
     AssertFatal(NB_RB <= N_RB_DL,"illegal NB_RB %d\n",NB_RB);
   }
 
diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c
index c6049bc31d9e3a9b4aa10e7899dad725b1c88801..0d39e6e533fd4159dd23fd9528b8f7e4dfcad641 100644
--- a/openair1/SIMULATION/LTE_PHY/ulsim.c
+++ b/openair1/SIMULATION/LTE_PHY/ulsim.c
@@ -55,6 +55,8 @@
 #include "executables/thread-common.h"
 #include "targets/RT/USER/lte-softmodem.h"
 #include "executables/split_headers.h"
+#include "common/ran_context.h"
+#include "PHY/LTE_ESTIMATION/lte_estimation.h"
 
 double cpuf;
 #define inMicroS(a) (((double)(a))/(get_cpu_freq_GHz()*1000.0))
@@ -87,7 +89,7 @@ static int cmpdouble(const void *p1, const void *p2) {
   return *(double *)p1 > *(double *)p2;
 }
 
-
+RAN_CONTEXT_t RC;
 int split73=0;
 void sendFs6Ul(PHY_VARS_eNB *eNB, int UE_id, int harq_pid, int segmentID, int16_t *data, int dataLen, int r_offset) {
   AssertFatal(false, "Must not be called in this context\n");
@@ -345,7 +347,6 @@ int main(int argc, char **argv) {
   int UE_id = 0;
   static int nb_rb=25,first_rb=0,mcs=0,round=0;
   //unsigned char l;
-  static int awgn_flag = 0 ;
   SCM_t channel_model=Rice1;
   unsigned char *input_buffer=0,harq_pid;
   unsigned short input_buffer_length;
@@ -407,7 +408,7 @@ int main(int argc, char **argv) {
   printf("Detected cpu_freq %f GHz\n",cpu_freq_GHz);
   AssertFatal(load_configmodule(argc,argv,CONFIG_ENABLECMDLINEONLY) != NULL, "Cannot load configuration module, exiting\n");
   logInit();
-  set_glog(OAILOG_WARNING);
+  set_glog(OAILOG_INFO);
   T_stdout = 1;
   // enable these lines if you need debug info
   // however itti will catch all signals, so ctrl-c won't work anymore
@@ -1089,14 +1090,12 @@ int main(int argc, char **argv) {
             }
           }
 
-          if (awgn_flag == 0) {
-            if (UE2eNB->max_Doppler == 0) {
-              multipath_channel(UE2eNB,s_re,s_im,r_re,r_im,
-                                eNB->frame_parms.samples_per_tti,hold_channel,0);
-            } else {
-              multipath_tv_channel(UE2eNB,s_re,s_im,r_re,r_im,
-                                   2*eNB->frame_parms.samples_per_tti,hold_channel);
-            }
+          if (UE2eNB->max_Doppler == 0) {
+            multipath_channel(UE2eNB,s_re,s_im,r_re,r_im,
+                              eNB->frame_parms.samples_per_tti,hold_channel,0);
+          } else {
+            multipath_tv_channel(UE2eNB,s_re,s_im,r_re,r_im,
+                                 2*eNB->frame_parms.samples_per_tti,hold_channel);
           }
 
           if(abstx) {
@@ -1139,6 +1138,15 @@ int main(int argc, char **argv) {
                          sqrt(sigma2/2)*gaussdouble(0.0,1.0));
             }
           }
+          if (n_frames==1)
+            for (i=0; i<eNB->frame_parms.samples_per_tti; i++) {
+              for (aa=0; aa<eNB->frame_parms.nb_antennas_rx; aa++) {
+                ((short *) &ru->common.rxdata[aa][eNB->frame_parms.samples_per_tti*(subframe+1)%10])[2*i] =
+                  (short) (sqrt(sigma2/2)*gaussdouble(0.0,1.0));
+                ((short *) &ru->common.rxdata[aa][eNB->frame_parms.samples_per_tti*(subframe+1)%10])[2*i+1] =
+                  (short) (sqrt(sigma2/2)*gaussdouble(0.0,1.0));
+              }
+            }
 
           if (n_frames<=10) {
             printf("rx_level Null symbol %f\n",10*log10((double)signal_energy((int *)
@@ -1164,9 +1172,10 @@ int main(int argc, char **argv) {
           start_meas(&eNB->phy_proc_rx);
           ru->feprx = (get_thread_worker_conf() == WORKER_ENABLE) ? ru_fep_full_2thread        : fep_full;
           ru->feprx(ru,subframe);
+          if (n_frames==1) lte_eNB_I0_measurements(eNB,(subframe+1)%10,0,1);
+
           phy_procedures_eNB_uespec_RX(eNB,proc_rxtx);
           stop_meas(&eNB->phy_proc_rx);
-
           if (cqi_flag > 0) {
             cqi_error = 0;
 
@@ -1206,6 +1215,9 @@ int main(int argc, char **argv) {
                           eNB->ulsch[0]->harq_processes[harq_pid]->uci_format,0,eNB->frame_parms.N_RB_DL);
 
               dump_ulsch(eNB,eNB->proc.frame_rx,subframe,0,round);
+              dump_I0_stats(stdout,eNB);
+              dump_ulsch_stats(stdout,eNB,0);
+
               exit(-1);
             }
 
@@ -1266,14 +1278,16 @@ int main(int argc, char **argv) {
         if (t_rx > 2000 )
           n_rx_dropped++;
 
-        appendVarArray(table_tx, &t_tx);
-        appendVarArray(table_tx_ifft, &t_tx_ifft);
-        appendVarArray(table_tx_mod, &t_tx_mod );
-        appendVarArray(table_tx_enc, &t_tx_enc );
-        appendVarArray(table_rx, &t_rx );
-        appendVarArray(table_rx_fft, &t_rx_fft );
-        appendVarArray(table_rx_demod, &t_rx_demod );
-        appendVarArray(table_rx_dec, &t_rx_dec );
+        if (trials < 1000) {
+         appendVarArray(table_tx, &t_tx);
+         appendVarArray(table_tx_ifft, &t_tx_ifft);
+         appendVarArray(table_tx_mod, &t_tx_mod );
+         appendVarArray(table_tx_enc, &t_tx_enc );
+         appendVarArray(table_rx, &t_rx );
+         appendVarArray(table_rx_fft, &t_rx_fft );
+         appendVarArray(table_rx_demod, &t_rx_demod );
+         appendVarArray(table_rx_dec, &t_rx_dec );
+       }
       }   //trials
 
       // sort table
@@ -1292,6 +1306,7 @@ int main(int argc, char **argv) {
         LOG_UDUMPMSG(SIM,dataArray(table_rx),table_rx->size,LOG_DUMP_DOUBLE,"The receiver raw data: \n");
       }
 
+      dump_ulsch_stats(stdout,eNB,0);
       printf("\n**********rb: %d ***mcs : %d  *********SNR = %f dB (%f): TX %u dB (gain %f dB), N0W %f dB, I0 %u dB, delta_IF %d [ (%d,%d) dB / (%u,%u) dB ]**************************\n",
              nb_rb,mcs,SNR,SNR2,
              tx_lev_dB,
diff --git a/openair1/SIMULATION/NR_PHY/dlschsim.c b/openair1/SIMULATION/NR_PHY/dlschsim.c
index 12b0b1d1f0adb5a21b7f29370d690d02083e25cd..633a214699ae8bd82daff00d7356c0ac239becce 100644
--- a/openair1/SIMULATION/NR_PHY/dlschsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlschsim.c
@@ -357,7 +357,7 @@ int main(int argc, char **argv)
 	frame_parms->Ncp = extended_prefix_flag ? EXTENDED : NORMAL;
 	crcTableInit();
 	nr_phy_config_request_sim(gNB, N_RB_DL, N_RB_DL, mu, Nid_cell,SSB_positions);
-	phy_init_nr_gNB(gNB, 0, 0);
+	phy_init_nr_gNB(gNB, 0, 1); //lowmem
 	//init_eNB_afterRU();
 	frame_length_complex_samples = frame_parms->samples_per_subframe;
 	//frame_length_complex_samples_no_prefix = frame_parms->samples_per_subframe_wCP;
diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c
index 13747694b00e743078c146093de6af3e7971f317..730e78c162acaf20a8960327dd6aa37322c0e1bd 100644
--- a/openair1/SIMULATION/NR_PHY/dlsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlsim.c
@@ -69,6 +69,8 @@
 #include <openair2/LAYER2/MAC/mac_vars.h>
 #include <openair2/RRC/LTE/rrc_vars.h>
 
+#include <executables/softmodem-common.h>
+
 LCHAN_DESC DCCH_LCHAN_DESC,DTCH_DL_LCHAN_DESC,DTCH_UL_LCHAN_DESC;
 rlc_info_t Rlc_info_um,Rlc_info_am_config;
 
@@ -758,7 +760,7 @@ int main(int argc, char **argv)
   // reset preprocessor to the one of DLSIM after it has been set during
   // rrc_mac_config_req_gNB
   gNB_mac->pre_processor_dl = nr_dlsim_preprocessor;
-  phy_init_nr_gNB(gNB,0,0);
+  phy_init_nr_gNB(gNB,0,1);
   N_RB_DL = gNB->frame_parms.N_RB_DL;
   NR_UE_info_t *UE_info = &RC.nrmac[0]->UE_info;
   UE_info->num_UEs=1;
@@ -1402,15 +1404,62 @@ void update_dmrs_config(NR_CellGroupConfig_t *scg,PHY_VARS_NR_UE *ue, int8_t* dm
   }
   else if (dmrs_arg[0] == 1) {
     mapping_type = typeB;
+  } else {
+    AssertFatal(1==0,"Incorrect Mappingtype, valid options 0-typeA, 1-typeB\n");
   }
-  /* Additional DMRS positions 0 ,1 and 2 */
-  if(dmrs_arg[1] >= 0 && dmrs_arg[1] <3 ) {
+
+  /* Additional DMRS positions 0 ,1 ,2 and 3 */
+  if(dmrs_arg[1] >= 0 && dmrs_arg[1] <4 ) {
     add_pos = dmrs_arg[1];
+  } else {
+    AssertFatal(1==0,"Incorrect Additional Position, valid options 0-pos1, 1-pos1, 2-pos2, 3-pos3\n");
   }
 
   if(scg != NULL) {
     NR_BWP_Downlink_t *bwp = scg->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.array[0];
-    *bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition = add_pos;
+
+    AssertFatal((bwp->bwp_Dedicated->pdsch_Config != NULL && bwp->bwp_Dedicated->pdsch_Config->choice.setup != NULL), "Base RRC reconfig structures are not allocated.\n");
+
+    if (bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA == NULL) {
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA));
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->present= NR_SetupRelease_DMRS_DownlinkConfig_PR_setup;
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup));
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type=NULL;//calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type));
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->maxLength=NULL;
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->scramblingID0=NULL;
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->scramblingID1=NULL;
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS=NULL;
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition = NULL;
+      printf("DLSIM: Allocated Mapping TypeA in RRC reconfig message\n");
+    } else if (bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB == NULL) {
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB));
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->present= NR_SetupRelease_DMRS_DownlinkConfig_PR_setup;
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup));
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->dmrs_Type=NULL;//calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type));
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->maxLength=NULL;
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->scramblingID0=NULL;
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->scramblingID1=NULL;
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->phaseTrackingRS=NULL;
+      bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->dmrs_AdditionalPosition = NULL;
+      printf("DLSIM: Allocated Mapping TypeB in RRC reconfig message\n");
+    }
+
+    struct NR_SetupRelease_DMRS_DownlinkConfig	*dmrs_MappingtypeA = bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA;
+    struct NR_SetupRelease_DMRS_DownlinkConfig	*dmrs_MappingtypeB = bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB;
+
+
+    NR_DMRS_DownlinkConfig_t *dmrs_config = (mapping_type == typeA) ? dmrs_MappingtypeA->choice.setup : dmrs_MappingtypeB->choice.setup;
+
+    if (add_pos != 2) { // pos0,pos1,pos3
+      if (dmrs_config->dmrs_AdditionalPosition == NULL) {
+        dmrs_config->dmrs_AdditionalPosition = calloc(1,sizeof(*dmrs_MappingtypeA->choice.setup->dmrs_AdditionalPosition));
+      }
+      *dmrs_config->dmrs_AdditionalPosition = add_pos;
+    } else { // if NULL, Value pos2
+      free(dmrs_config->dmrs_AdditionalPosition);
+      dmrs_config->dmrs_AdditionalPosition = NULL;
+    }
+
     for (int i=0;i<bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.count;i++) {
       bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.array[i]->mappingType = mapping_type; 
     }
diff --git a/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c b/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c
index 32b6b104123aab8116c5dc2844c48396d357e2f0..24ed8a930c699d4597b8fcbc7e7de75425b0eb37 100644
--- a/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c
+++ b/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c
@@ -1,3 +1,5 @@
+#include "nfapi/oai_integration/vendor_ext.h"
+
 int oai_nfapi_hi_dci0_req(nfapi_hi_dci0_request_t *hi_dci0_req)             { return(0);  }
 int oai_nfapi_tx_req(nfapi_tx_request_t *tx_req)                            { return(0);  }
 int oai_nfapi_dl_config_req(nfapi_dl_config_request_t *dl_config_req)       { return(0);  }
diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c
index c24a841c4bbf028e1be84a37b199217a840ed6bb..548b76db6985940202d8a9729de113b9f7bc255f 100644
--- a/openair1/SIMULATION/NR_PHY/pbchsim.c
+++ b/openair1/SIMULATION/NR_PHY/pbchsim.c
@@ -47,7 +47,7 @@
 #include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
 #include "openair1/SIMULATION/NR_PHY/nr_dummy_functions.c"
 #include "openair1/PHY/MODULATION/nr_modulation.h"
-
+#include <executables/softmodem-common.h>
 //#define DEBUG_NR_PBCHSIM
 
 PHY_VARS_gNB *gNB;
@@ -415,7 +415,7 @@ int main(int argc, char **argv)
   frame_parms->ssb_type = nr_ssb_type_C;
 
   nr_phy_config_request_sim_pbchsim(gNB,N_RB_DL,N_RB_DL,mu,Nid_cell,SSB_positions);
-  phy_init_nr_gNB(gNB,0,0);
+  phy_init_nr_gNB(gNB,0,1);
   nr_set_ssb_first_subcarrier(&gNB->gNB_config,frame_parms);
 
   uint8_t n_hf = 0;
diff --git a/openair1/SIMULATION/NR_PHY/prachsim.c b/openair1/SIMULATION/NR_PHY/prachsim.c
index 54ec6ab9da6a62ded8ac281c42122c7195b6a082..bba0a6996f1a24daf08f17a895b5e0283849b152 100644
--- a/openair1/SIMULATION/NR_PHY/prachsim.c
+++ b/openair1/SIMULATION/NR_PHY/prachsim.c
@@ -48,10 +48,10 @@
 #include "OCG_vars.h"
 #include <openair2/LAYER2/MAC/mac_vars.h>
 #include <openair2/RRC/LTE/rrc_vars.h>
+#include <executables/softmodem-common.h>
 #include <openair2/RRC/NR_UE/rrc_defs.h>
 //#include "openair1/SIMULATION/NR_PHY/nr_dummy_functions.c"
 
-
 #define NR_PRACH_DEBUG 1
 #define PRACH_WRITE_OUTPUT_DEBUG 1
 
@@ -522,7 +522,8 @@ int main(int argc, char **argv){
   ru->if_south       = LOCAL_RF;
   ru->nb_tx          = n_tx;
   ru->nb_rx          = n_rx;
-
+  ru->num_gNB        = 1;
+  ru->gNB_list[0]    = gNB;
   gNB->gNB_config.carrier_config.num_tx_ant.value = 1;
   gNB->gNB_config.carrier_config.num_rx_ant.value = 1;
   if (mu==1)
@@ -623,7 +624,7 @@ int main(int argc, char **argv){
 
   memcpy((void*)&ru->config,(void*)&RC.gNB[0]->gNB_config,sizeof(ru->config));
   RC.nb_nr_L1_inst=1;
-  phy_init_nr_gNB(gNB,0,0);
+  phy_init_nr_gNB(gNB,0,1); //lowmem
   nr_phy_init_RU(ru);
   gNB->common_vars.rxdata = ru->common.rxdata;
   set_tdd_config_nr(&gNB->gNB_config, mu, 7, 6, 2, 4);
diff --git a/openair1/SIMULATION/NR_PHY/pucchsim.c b/openair1/SIMULATION/NR_PHY/pucchsim.c
index 4cef1213c9787b9f6c60d9062f6aa579605aba42..758afc6b3cf99a0e150d45d84f01576034765526 100644
--- a/openair1/SIMULATION/NR_PHY/pucchsim.c
+++ b/openair1/SIMULATION/NR_PHY/pucchsim.c
@@ -46,6 +46,7 @@
 #include "openair1/SIMULATION/NR_PHY/nr_unitary_defs.h"
 #include "openair1/SIMULATION/NR_PHY/nr_dummy_functions.c"
 
+
 PHY_VARS_gNB *gNB;
 PHY_VARS_NR_UE *UE;
 RAN_CONTEXT_t RC;
diff --git a/openair1/SIMULATION/NR_PHY/ulschsim.c b/openair1/SIMULATION/NR_PHY/ulschsim.c
index f84e5536833f893e717ae4bbcb5b88c2f4ab2e15..c889e6dcb994803a39e906429178e2e0991fc3e7 100644
--- a/openair1/SIMULATION/NR_PHY/ulschsim.c
+++ b/openair1/SIMULATION/NR_PHY/ulschsim.c
@@ -394,7 +394,7 @@ int main(int argc, char **argv)
 
   nr_phy_config_request_sim(gNB, N_RB_UL, N_RB_UL, mu, Nid_cell, SSB_positions);
 
-  phy_init_nr_gNB(gNB, 0, 0);
+  phy_init_nr_gNB(gNB, 0, 1); //lowmem
 
   //configure UE
   UE = malloc(sizeof(PHY_VARS_NR_UE));
diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c
index 6911a3f4a9522b4020badaae69cdffafb0ba1b46..ee7eca21bdbaa4f97cbaef3dd1b82a1ea55da0fe 100644
--- a/openair1/SIMULATION/NR_PHY/ulsim.c
+++ b/openair1/SIMULATION/NR_PHY/ulsim.c
@@ -63,8 +63,8 @@
 #include <openair2/LAYER2/MAC/mac_vars.h>
 #include <openair2/RRC/LTE/rrc_vars.h>
 
+#include <executables/softmodem-common.h>
 #include "PHY/NR_REFSIG/ul_ref_seq_nr.h"
-
 //#define DEBUG_ULSIM
 
 LCHAN_DESC DCCH_LCHAN_DESC,DTCH_DL_LCHAN_DESC,DTCH_UL_LCHAN_DESC;
@@ -222,6 +222,7 @@ double s_re1[122880],s_im1[122880],r_re1[122880],r_im1[122880];
 double r_re2[122880],r_im2[122880];
 double r_re3[122880],r_im3[122880];
 
+
 int main(int argc, char **argv)
 {
   char c;
@@ -690,7 +691,7 @@ int main(int argc, char **argv)
   rrc_mac_config_req_gNB(0,0,n_tx,n_rx,pusch_tgt_snrx10,pucch_tgt_snrx10,scc,0,0,NULL);
   // UE dedicated configuration
   rrc_mac_config_req_gNB(0,0,1,1,pusch_tgt_snrx10,pucch_tgt_snrx10,NULL,1,secondaryCellGroup->spCellConfig->reconfigurationWithSync->newUE_Identity,secondaryCellGroup);
-  phy_init_nr_gNB(gNB,0,0);
+  phy_init_nr_gNB(gNB,0,1);
   N_RB_DL = gNB->frame_parms.N_RB_DL;
 
 
@@ -815,7 +816,7 @@ int main(int argc, char **argv)
   }
 
   uint8_t  length_dmrs         = pusch_len1;
-  uint16_t l_prime_mask        = get_l_prime(nb_symb_sch, mapping_type, add_pos, length_dmrs);
+  uint16_t l_prime_mask        = get_l_prime(nb_symb_sch, mapping_type, add_pos, length_dmrs, start_symbol, NR_MIB__dmrs_TypeA_Position_pos2);
   uint16_t number_dmrs_symbols = get_dmrs_symbols_in_slot(l_prime_mask, nb_symb_sch);
   uint8_t  nb_re_dmrs          = (dmrs_config_type == pusch_dmrs_type1) ? 6 : 4;
 
@@ -1001,7 +1002,7 @@ int main(int argc, char **argv)
       pusch_pdu->transform_precoding = transform_precoding;
       pusch_pdu->data_scrambling_id = *scc->physCellId;
       pusch_pdu->nrOfLayers = 1;
-      pusch_pdu->ul_dmrs_symb_pos = l_prime_mask << start_symbol;
+      pusch_pdu->ul_dmrs_symb_pos = l_prime_mask;
       pusch_pdu->dmrs_config_type = dmrs_config_type;
       pusch_pdu->ul_dmrs_scrambling_id =  *scc->physCellId;
       pusch_pdu->scid = 0;
@@ -1064,7 +1065,7 @@ int main(int argc, char **argv)
       ul_config.ul_config_list[0].pusch_config_pdu.rb_start = start_rb;
       ul_config.ul_config_list[0].pusch_config_pdu.nr_of_symbols = nb_symb_sch;
       ul_config.ul_config_list[0].pusch_config_pdu.start_symbol_index = start_symbol;
-      ul_config.ul_config_list[0].pusch_config_pdu.ul_dmrs_symb_pos = l_prime_mask << start_symbol;
+      ul_config.ul_config_list[0].pusch_config_pdu.ul_dmrs_symb_pos = l_prime_mask;
       ul_config.ul_config_list[0].pusch_config_pdu.dmrs_config_type = dmrs_config_type;
       ul_config.ul_config_list[0].pusch_config_pdu.mcs_index = Imcs;
       ul_config.ul_config_list[0].pusch_config_pdu.mcs_table = mcs_table;
diff --git a/openair1/SIMULATION/TOOLS/multipath_channel.c b/openair1/SIMULATION/TOOLS/multipath_channel.c
index 683526a8f010c308d9eb433953aefca43faa295b..3608eb7da25d623cfaa5a87d69bc41c6de8abfb9 100644
--- a/openair1/SIMULATION/TOOLS/multipath_channel.c
+++ b/openair1/SIMULATION/TOOLS/multipath_channel.c
@@ -39,13 +39,13 @@ uint8_t multipath_channel_nosigconv(channel_desc_t *desc)
 //#define CHANNEL_SSE
 #ifdef CHANNEL_SSE
 void multipath_channel(channel_desc_t *desc,
-                       double tx_sig_re[2][30720*2],
-                       double tx_sig_im[2][30720*2],
-                       double rx_sig_re[2][30720*2],
-                       double rx_sig_im[2][30720*2],
+                       double tx_sig_re[NB_ANTENNAS_TX][30720*2],
+                       double tx_sig_im[NB_ANTENANS_TX][30720*2],
+                       double rx_sig_re[NB_ANTENNAS_RX][30720*2],
+                       double rx_sig_im[NB_ANTENNAS_RX][30720*2],
                        uint32_t length,
                        uint8_t keep_channel,
-		       int log_channel)
+             		       int log_channel)
 {
 
   int i,ii,j,l;
@@ -146,13 +146,13 @@ void multipath_channel(channel_desc_t *desc,
 
 #else
 void multipath_channel(channel_desc_t *desc,
-                       double *tx_sig_re[2],
-                       double *tx_sig_im[2],
-                       double *rx_sig_re[2],
-                       double *rx_sig_im[2],
+                       double *tx_sig_re[NB_ANTENNAS_TX],
+                       double *tx_sig_im[NB_ANTENNAS_TX],
+                       double *rx_sig_re[NB_ANTENNAS_RX],
+                       double *rx_sig_im[NB_ANTENNAS_RX],
                        uint32_t length,
                        uint8_t keep_channel,
-		       int log_channel)
+		                   int log_channel)
 {
 
   int i,ii,j,l;
@@ -198,21 +198,22 @@ void multipath_channel(channel_desc_t *desc,
 
           rx_tmp.x += (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].x) - (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].y);
           rx_tmp.y += (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].x) + (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].y);
-	  if (i==0 && log_channel == 1) {
-	    printf("channel[%d][%d][%d] = %f dB (%e,%e)\n",ii,j,l,10*log10(pow(desc->ch[ii+(j*desc->nb_rx)][l].x,2.0)+pow(desc->ch[ii+(j*desc->nb_rx)][l].y,2.0)),
-		   desc->ch[ii+(j*desc->nb_rx)][l].x,
-		   desc->ch[ii+(j*desc->nb_rx)][l].y);
-	  }
+
+          if (i==0 && log_channel == 1) {
+	           printf("channel[%d][%d][%d] = %f dB (%e,%e)\n",ii,j,l,10*log10(pow(desc->ch[ii+(j*desc->nb_rx)][l].x,2.0)+pow(desc->ch[ii+(j*desc->nb_rx)][l].y,2.0)),
+		         desc->ch[ii+(j*desc->nb_rx)][l].x,
+		         desc->ch[ii+(j*desc->nb_rx)][l].y);
+	        }
         } //l
       }  // j
 
       rx_sig_re[ii][i+dd] = rx_tmp.x*path_loss;
       rx_sig_im[ii][i+dd] = rx_tmp.y*path_loss;
-      
-      /*      if ((ii==0)&&((i%32)==0)) {
-	printf("%p %p %f,%f => %e,%e\n",rx_sig_re[ii],rx_sig_im[ii],rx_tmp.x,rx_tmp.y,rx_sig_re[ii][i-dd],rx_sig_im[ii][i-dd]);
-	}*/
-      
+#ifdef DEBUG_CHANNEL      
+      if ((i%32)==0) {
+	       printf("rx aa %d: %p %p %f,%f => %e,%e\n",ii,rx_sig_re[ii],rx_sig_im[ii],rx_tmp.x,rx_tmp.y,rx_sig_re[ii][i-dd],rx_sig_im[ii][i-dd]);
+      }	
+#endif      
       //rx_sig_re[ii][i] = sqrt(.5)*(tx_sig_re[0][i] + tx_sig_re[1][i]);
       //rx_sig_im[ii][i] = sqrt(.5)*(tx_sig_im[0][i] + tx_sig_im[1][i]);
 
diff --git a/openair1/SIMULATION/TOOLS/random_channel.c b/openair1/SIMULATION/TOOLS/random_channel.c
index 4e26d9a9547226a748f9d9b39d8a7e10ce8fa5ec..d2339954bdff175513e2c8094750e19a6d62f7db 100644
--- a/openair1/SIMULATION/TOOLS/random_channel.c
+++ b/openair1/SIMULATION/TOOLS/random_channel.c
@@ -2034,7 +2034,6 @@ static int channelmod_modify_cmd(char *buff, int debug, telnet_printfunc_t prnt)
       prnt("ERROR: %s, unknown channel parameter\n",param);
       return CMDSTATUS_FOUND;
     }
-
     display_channelmodel(defined_channels[cd_id],debug,prnt);
     free(param);
     free(value);
diff --git a/openair1/SIMULATION/TOOLS/sim.h b/openair1/SIMULATION/TOOLS/sim.h
index 7696f9202f8a0cd0c4ad7f444a7223a45b7cf5ee..78e260b73f196142dc9d08da8fbe401e011583aa 100644
--- a/openair1/SIMULATION/TOOLS/sim.h
+++ b/openair1/SIMULATION/TOOLS/sim.h
@@ -339,10 +339,10 @@ void set_channeldesc_name(channel_desc_t *cdesc,char *modelname);
 int random_channel(channel_desc_t *desc, uint8_t abstraction_flag);
 
 /**\fn void multipath_channel(channel_desc_t *desc,
-           double tx_sig_re[2],
-           double tx_sig_im[2],
-           double rx_sig_re[2],
-           double rx_sig_im[2],
+           double tx_sig_re[NB_ANTENNAS_TX],
+           double tx_sig_im[NB_ANTENANS_TX],
+           double rx_sig_re[NB_ANTENNAS_RX],
+           double rx_sig_im[NB_ANTENNAS_RX],
            uint32_t length,
            uint8_t keep_channel,
 	   int log_channel)
@@ -359,10 +359,10 @@ int random_channel(channel_desc_t *desc, uint8_t abstraction_flag);
 */
 
 void multipath_channel(channel_desc_t *desc,
-                       double *tx_sig_re[2],
-                       double *tx_sig_im[2],
-                       double *rx_sig_re[2],
-                       double *rx_sig_im[2],
+                       double *tx_sig_re[NB_ANTENNAS_TX],
+                       double *tx_sig_im[NB_ANTENNAS_TX],
+                       double *rx_sig_re[NB_ANTENNAS_RX],
+                       double *rx_sig_im[NB_ANTENNAS_RX],
                        uint32_t length,
                        uint8_t keep_channel,
 		       int log_channel);
@@ -510,7 +510,6 @@ double N_RB2channel_bandwidth(uint16_t N_RB);
 void InitSinLUT( void );
 void phase_noise(double ts, int16_t * InRe, int16_t * InIm);
 
-#include "targets/RT/USER/rfsim.h"
 
 void do_DL_sig(sim_t *sim,
                uint16_t subframe,
diff --git a/openair2/COMMON/platform_constants.h b/openair2/COMMON/platform_constants.h
index 3915f12bb9afeeba231a45240474f4307db97b1b..f1e6271ed88ba51e842801da80bb78fd682b5c40 100644
--- a/openair2/COMMON/platform_constants.h
+++ b/openair2/COMMON/platform_constants.h
@@ -28,12 +28,19 @@
 
  ***************************************************************************/
 
-#include "LTE_asn_constant.h"
-#include "NR_asn_constant.h"
 
 #ifndef __PLATFORM_CONSTANTS_H__
 #    define __PLATFORM_CONSTANTS_H__
 
+#ifndef NO_RRC
+#include "LTE_asn_constant.h"
+#include "NR_asn_constant.h"
+#else 
+#define LTE_maxDRB 14
+#define LTE_maxDRB_NB_r13 5
+#define NR_MAXDRB 14
+#endif
+
 #ifdef JUMBO_FRAME
   #define NL_MAX_PAYLOAD 18000  /* this should cover the max mtu size*/
 #else
@@ -87,13 +94,6 @@
   #define MAX_gNB                      2
 #endif
 
-#define NUMBER_OF_NR_DLSCH_MAX 2//16
-#define NUMBER_OF_NR_ULSCH_MAX 2//16
-#define NUMBER_OF_NR_SCH_STATS_MAX 16
-#define NUMBER_OF_NR_PUCCH_MAX 16
-#define NUMBER_OF_NR_SR_MAX 16
-#define NUMBER_OF_NR_PDCCH_MAX 16
-
 #define MAX_MANAGED_ENB_PER_MOBILE  2
 #define MAX_MANAGED_GNB_PER_MOBILE  2
 
diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c
index 7ca466e8ffc654db733ee4e3b016d5b13b3df5c0..51e495b0278795b82f46d62f01daa3ee68db4955 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c
+++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c
@@ -42,6 +42,9 @@
 
 #include <dlfcn.h>
 
+#include "common/ran_context.h"
+extern RAN_CONTEXT_t RC;
+
 /*Array containing the Agent-MAC interfaces*/
 AGENT_MAC_xface *agent_mac_xface[NUM_MAX_ENB];
 
diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c
index 42246c3ebf165606037ec207ed49303ef216d09f..e05fa988542c6bb584103de8d467d292b01e0045 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c
+++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c
@@ -33,6 +33,9 @@
 #include "flexran_agent_mac_internal.h"
 #include "flexran_agent_mac_slice_verification.h"
 
+#include "common/ran_context.h"
+extern RAN_CONTEXT_t RC;
+
 extern SLIST_HEAD(flexran_so_handle,
                   flexran_agent_so_handle_s) flexran_handles[NUM_MAX_ENB];
 
diff --git a/openair2/ENB_APP/MACRLC_paramdef.h b/openair2/ENB_APP/MACRLC_paramdef.h
index fcee6142f0bc7cce1a0cec70f4b19e93267e669a..11cbe445b84a765d14f22f5b4b3e3f819bf79a1c 100644
--- a/openair2/ENB_APP/MACRLC_paramdef.h
+++ b/openair2/ENB_APP/MACRLC_paramdef.h
@@ -56,10 +56,14 @@
 #define CONFIG_STRING_MACRLC_LOCAL_S_PORTD                 "local_s_portd"
 #define CONFIG_STRING_MACRLC_REMOTE_S_PORTD                "remote_s_portd"
 #define CONFIG_STRING_MACRLC_SCHED_MODE                    "scheduler_mode"
-#define CONFIG_MACRLC_PUSCH10xSNR                          "puSch10xSnr"
-#define CONFIG_MACRLC_PUCCH10xSNR                          "puCch10xSnr"
+#define CONFIG_STRING_MACRLC_PUSCH10xSNR                   "puSch10xSnr"
+#define CONFIG_STRING_MACRLC_PUCCH10xSNR                   "puCch10xSnr"
 #define CONFIG_STRING_MACRLC_DEFAULT_SCHED_DL_ALGO         "default_sched_dl_algo"
-
+#define CONFIG_STRING_MACRLC_UE_MULTIPLE_MAX               "ue_multiple_max"
+#define CONFIG_STRING_MACRLC_USE_MCS_OFFSET                "use_mcs_offset"
+#define CONFIG_STRING_MACRLC_BLER_TARGET_LOWER             "bler_target_lower"
+#define CONFIG_STRING_MACRLC_BLER_TARGET_UPPER             "bler_target_upper"
+#define CONFIG_STRING_MACRLC_MAX_UL_RB_INDEX               "max_ul_rb_index"
 /*-------------------------------------------------------------------------------------------------------------------------------------------------------*/
 /*                                            MacRLC  configuration parameters                                                                           */
 /*   optname                                            helpstr   paramflags    XXXptr              defXXXval                  type           numelt     */
@@ -83,10 +87,15 @@
 {CONFIG_STRING_MACRLC_LOCAL_S_PORTD,                     NULL,     0,          uptr:NULL,           defintval:50021,           TYPE_UINT,     0},        \
 {CONFIG_STRING_MACRLC_REMOTE_S_PORTD,                    NULL,     0,          uptr:NULL,           defintval:50021,           TYPE_UINT,     0},        \
 {CONFIG_STRING_MACRLC_SCHED_MODE,                        NULL,     0,          strptr:NULL,         defstrval:"default",       TYPE_STRING,   0},        \
-{CONFIG_MACRLC_PUSCH10xSNR,  		                 NULL,     0,          iptr:NULL,           defintval:200,             TYPE_INT,      0},        \
-{CONFIG_MACRLC_PUCCH10xSNR,  		                 NULL,     0,          iptr:NULL,           defintval:200,             TYPE_INT,      0},        \
-{CONFIG_STRING_MACRLC_DEFAULT_SCHED_DL_ALGO,             NULL,     0,          strptr:NULL,         defstrval:"round_robin_dl", TYPE_STRING,   0},        \
-}
+{CONFIG_STRING_MACRLC_PUSCH10xSNR,                       NULL,     0,          iptr:NULL,           defintval:200,             TYPE_INT,      0},        \
+{CONFIG_STRING_MACRLC_PUCCH10xSNR,  	                 NULL,     0,          iptr:NULL,           defintval:200,             TYPE_INT,      0},        \
+{CONFIG_STRING_MACRLC_DEFAULT_SCHED_DL_ALGO,             NULL,     0,          strptr:NULL,         defstrval:"round_robin_dl", TYPE_STRING,  0},        \
+{CONFIG_STRING_MACRLC_UE_MULTIPLE_MAX,                   NULL,     0,          iptr:NULL,           defintval:4,               TYPE_INT,      0},        \
+{CONFIG_STRING_MACRLC_USE_MCS_OFFSET,                    NULL,     0,          iptr:NULL,           defintval:1,               TYPE_INT,      0},        \
+{CONFIG_STRING_MACRLC_BLER_TARGET_LOWER,                 NULL,     0,          dblptr:NULL,           defdblval:.5,               TYPE_DOUBLE,      0}, \
+{CONFIG_STRING_MACRLC_BLER_TARGET_UPPER,                 NULL,     0,          dblptr:NULL,           defdblval:2,               TYPE_DOUBLE,      0}, \
+{CONFIG_STRING_MACRLC_MAX_UL_RB_INDEX,                   NULL,     0,          iptr:NULL,           defintval:22,              TYPE_INT, 0}}
+
 #define MACRLC_CC_IDX                                          0
 #define MACRLC_TRANSPORT_N_PREFERENCE_IDX                      1
 #define MACRLC_LOCAL_N_IF_NAME_IDX                             2
@@ -108,6 +117,11 @@
 #define MACRLC_PUSCH10xSNR_IDX                                 18
 #define MACRLC_PUCCH10xSNR_IDX                                 19 
 #define MACRLC_DEFAULT_SCHED_DL_ALGO_IDX                       20
+#define MACRLC_UE_MULTIPLE_MAX_IDX                             21
+#define MACRLC_USE_MCS_OFFSET_IDX                              22
+#define MACRLC_BLER_TARGET_LOWER_IDX                           23
+#define MACRLC_BLER_TARGET_UPPER_IDX                           24
+#define MACRLC_MAX_UL_RB_INDEX_IDX                             25
 /*---------------------------------------------------------------------------------------------------------------------------------------------------------*/
 
 #endif
diff --git a/openair2/ENB_APP/NB_IoT_interface.c b/openair2/ENB_APP/NB_IoT_interface.c
index 7355233d71d766e033efac6efa2a1ab08e81aed3..8fc6de78afae35443d8be62161f0a26de73bed34 100644
--- a/openair2/ENB_APP/NB_IoT_interface.c
+++ b/openair2/ENB_APP/NB_IoT_interface.c
@@ -35,6 +35,9 @@
 #define NBIOT_INTERFACE_SOURCE
 #include "NB_IoT_interface.h"
 
+#include "common/ran_context.h"
+extern RAN_CONTEXT_t RC;
+
 
 
 
diff --git a/openair2/ENB_APP/NB_IoT_interface.h b/openair2/ENB_APP/NB_IoT_interface.h
index b3454b077bc1cc64aa514c5abed78c7a8c53138e..c13f6dd1cb25905b2b766bd053a755adbc935429 100644
--- a/openair2/ENB_APP/NB_IoT_interface.h
+++ b/openair2/ENB_APP/NB_IoT_interface.h
@@ -31,6 +31,7 @@
 
 
 #define NBIOT_MODULENAME "NB_IoT"
+#include "common/ran_context.h"
 
 typedef void(*RCConfig_NbIoT_f_t)(RAN_CONTEXT_t *RC);
 #define NBIOT_RCCONFIG_FNAME "RCConfig_NbIoT"
diff --git a/openair2/ENB_APP/enb_app.c b/openair2/ENB_APP/enb_app.c
index 5080157c3f77f4d3cd9fcd206b58a894c8b9f2f8..9f134f826ea26d0863892547e7f75fde30f2e3a6 100644
--- a/openair2/ENB_APP/enb_app.c
+++ b/openair2/ENB_APP/enb_app.c
@@ -244,6 +244,8 @@ void *eNB_app_task(void *args_p) {
 
   }
 
+  LOG_I(ENB_APP,"TASK_ENB_APP is ready\n");
+
   do {
     // Wait for a message
     itti_receive_msg (TASK_ENB_APP, &msg_p);
diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c
index b53a6feda1be09f3000d788a8469e739d648fd56..fe706b214379b0369f118199ae57ea4bef871c0c 100644
--- a/openair2/ENB_APP/enb_config.c
+++ b/openair2/ENB_APP/enb_config.c
@@ -64,6 +64,8 @@ extern uint32_t to_earfcn_UL(int eutra_bandP, uint32_t ul_CarrierFreq, uint32_t
 extern char *parallel_config;
 extern char *worker_config;
 
+RAN_CONTEXT_t RC;
+
 void RCconfig_flexran() {
   /* get number of eNBs */
   paramdef_t ENBSParams[] = ENBSPARAMS_DESC;
@@ -218,13 +220,26 @@ void RCconfig_macrlc(int macrlc_has_f1[MAX_MAC_INST]) {
     for (j = 0; j < RC.nb_macrlc_inst; j++) {
       RC.mac[j]->puSch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUSCH10xSNR_IDX ].iptr);
       RC.mac[j]->puCch10xSnr = *(MacRLC_ParamList.paramarray[j][MACRLC_PUCCH10xSNR_IDX ].iptr);
+      RC.mac[j]->ue_multiple_max = *(MacRLC_ParamList.paramarray[j][MACRLC_UE_MULTIPLE_MAX_IDX ].iptr);
+      RC.mac[j]->use_mcs_offset = *(MacRLC_ParamList.paramarray[j][MACRLC_USE_MCS_OFFSET_IDX ].iptr);
+      RC.mac[j]->bler_lower = *(MacRLC_ParamList.paramarray[j][MACRLC_BLER_TARGET_LOWER_IDX ].dblptr);
+      RC.mac[j]->bler_upper = *(MacRLC_ParamList.paramarray[j][MACRLC_BLER_TARGET_UPPER_IDX ].dblptr);
+      RC.mac[j]->max_ul_rb_index = *(MacRLC_ParamList.paramarray[j][MACRLC_MAX_UL_RB_INDEX_IDX ].iptr);
       RC.nb_mac_CC[j] = *(MacRLC_ParamList.paramarray[j][MACRLC_CC_IDX].iptr);
-
+      LOG_I(ENB_APP,"MAC instance %d parameters : pusch_snr %lf, pucch_snr %lf, ue_multiple_max %d, use_mcs_offset %d, bler_lower %lf, bler_upper %lf,max_ul_rb_index %d\n",
+	j,
+	RC.mac[j]->puSch10xSnr/10.0,
+	RC.mac[j]->puCch10xSnr/10.0,
+	RC.mac[j]->ue_multiple_max,
+	RC.mac[j]->use_mcs_offset,
+	RC.mac[j]->bler_lower,
+	RC.mac[j]->bler_upper,
+	RC.mac[j]->max_ul_rb_index);
       if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_RRC") == 0) {
         // check number of instances is same as RRC/PDCP
-        printf("Configuring local RRC for MACRLC\n");
+        LOG_I(ENB_APP,"Configuring local RRC for MACRLC\n");
       } else if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "f1") == 0) {
-        printf("Configuring F1 interfaces for MACRLC\n");
+        LOG_I(ENB_APP,"Configuring F1 interfaces for MACRLC\n");
         RC.mac[j]->eth_params_n.local_if_name            = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_IF_NAME_IDX].strptr));
         RC.mac[j]->eth_params_n.my_addr                  = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_ADDRESS_IDX].strptr));
         RC.mac[j]->eth_params_n.remote_addr              = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_ADDRESS_IDX].strptr));
@@ -1993,7 +2008,7 @@ int RCconfig_DU_F1(MessageDef *msg_p, uint32_t i) {
           F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.nrb                 = rrc->carrier[0].mib.message.dl_Bandwidth;
           F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.num_frequency_bands = 1;
           F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.nr_band[0]          = rrc->carrier[0].sib1->freqBandIndicator;
-          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].fdd.sul_active          = 0;
+          F1AP_SETUP_REQ (msg_p).nr_mode_info[k].tdd.sul_active          = 0;
         } else {
           LOG_I(ENB_APP,"ngran_DU: Configuring Cell %d for FDD\n",k);
           F1AP_SETUP_REQ (msg_p).fdd_flag = 1;
@@ -2779,12 +2794,13 @@ int RCconfig_X2(MessageDef *msg_p, uint32_t i) {
                         "value of X2ParamList.numelt %d must be lower than X2AP_MAX_NB_ENB_IP_ADDRESS %d value: reconsider to increase X2AP_MAX_NB_ENB_IP_ADDRESS\n",
                         X2ParamList.numelt,X2AP_MAX_NB_ENB_IP_ADDRESS);
             X2AP_REGISTER_ENB_REQ (msg_p).nb_x2 = 0;
-
+            LOG_I(X2AP,"X2ParamList.numelt %d\n",X2ParamList.numelt);
             for (l = 0; l < X2ParamList.numelt; l++) {
               X2AP_REGISTER_ENB_REQ (msg_p).nb_x2 += 1;
               strcpy(X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv4_address,*(X2ParamList.paramarray[l][ENB_X2_IPV4_ADDRESS_IDX].strptr));
               strcpy(X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv6_address,*(X2ParamList.paramarray[l][ENB_X2_IPV6_ADDRESS_IDX].strptr));
 
+              LOG_I(X2AP,"registering with ip : %s\n",*(X2ParamList.paramarray[l][ENB_X2_IPV4_ADDRESS_IDX].strptr));
               if (strcmp(*(X2ParamList.paramarray[l][ENB_X2_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) {
                 X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv4 = 1;
                 X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv6 = 0;
@@ -2964,7 +2980,7 @@ void extract_and_decode_SI(int inst,int si_ind,uint8_t *si_container,int si_cont
   eNB_RRC_INST *rrc = RC.rrc[inst];
   rrc_eNB_carrier_data_t *carrier = &rrc->carrier[0];
   LTE_BCCH_DL_SCH_Message_t *bcch_message ;
-  AssertFatal(si_ind==0,"Can only handle a single SI block for now\n");
+  AssertFatal(si_ind==2,"Can only handle a single SI block for now\n");
   LOG_I(ENB_APP, "rrc inst %d: Trying to decode SI block %d @ %p, length %d\n",inst,si_ind,si_container,si_container_length);
   // point to first SI block
   bcch_message = &carrier->systemInformation;
@@ -3151,15 +3167,19 @@ void handle_f1ap_setup_resp(f1ap_setup_resp_t *resp) {
           (check_plmn_identity(carrier, resp->mcc[j], resp->mnc[j], resp->mnc_digit_length[j])>0 &&
            resp->nrpci[j] == carrier->physCellId)) {
         // copy system information and decode it
-        for (si_ind=0; si_ind<resp->num_SI[j]; si_ind++)  {
+        for (si_ind=2; si_ind<10; si_ind++)  {
           //printf("SI %d size %d: ", si_ind, resp->SI_container_length[j][si_ind]);
           //for (int n=0;n<resp->SI_container_length[j][si_ind];n++)
           //  printf("%02x ",resp->SI_container[j][si_ind][n]);
           //printf("\n");
-          extract_and_decode_SI(i,
-                                si_ind,
-                                resp->SI_container[j][si_ind],
-                                resp->SI_container_length[j][si_ind]);
+          if (si_ind==6) si_ind=9;
+          if (resp->SI_container[j][si_ind] != NULL) {
+            extract_and_decode_SI(i,	
+                                  si_ind,
+                                  resp->SI_container[j][si_ind],
+                                  resp->SI_container_length[j][si_ind]);
+          }
+          
         }
 
         // perform MAC/L1 common configuration
diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h
index 4bc4f5bf2244e306c998d95f8843880a13d324c3..b95bf90f70d918b65a6d5b8bc2f0657447ddb9bb 100644
--- a/openair2/ENB_APP/enb_config.h
+++ b/openair2/ENB_APP/enb_config.h
@@ -100,7 +100,6 @@ typedef struct ru_config_s {
   uint8_t   if_compress;
 } ru_config_t;
 
-extern void RCconfig_RU(void);
 extern void RCconfig_flexran(void);
 extern void RCconfig_L1(void);
 extern void RCconfig_macrlc(int macrlc_has_f1[MAX_MAC_INST]);
diff --git a/openair2/ENB_APP/flexran_agent.c b/openair2/ENB_APP/flexran_agent.c
index 33182f3593a64db3a8a7a1e4f2d78c18b7fc1494..af7ff6ff6f06e6fb3876d6bdb8375d9e2865f2c9 100644
--- a/openair2/ENB_APP/flexran_agent.c
+++ b/openair2/ENB_APP/flexran_agent.c
@@ -33,6 +33,9 @@
 #include <pthread.h>
 #include <arpa/inet.h>
 
+#include "common/ran_context.h"
+extern RAN_CONTEXT_t RC;
+
 int agent_task_created = 0;
 /* 
  * enb agent task mainly wakes up the tx thread for periodic and oneshot messages to the controller 
diff --git a/openair2/ENB_APP/flexran_agent_common.c b/openair2/ENB_APP/flexran_agent_common.c
index 1af59eab87c82ab4906b644816ba75ba2dbbf7ef..55a1c61b254fadc6e9297e0b20d7dd5710c777c8 100644
--- a/openair2/ENB_APP/flexran_agent_common.c
+++ b/openair2/ENB_APP/flexran_agent_common.c
@@ -53,6 +53,9 @@
 #include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
 #include "rrc_eNB_UE_context.h"
 
+#include "common/ran_context.h"
+extern RAN_CONTEXT_t RC;
+
 /*
  * message primitives
  */
diff --git a/openair2/ENB_APP/flexran_agent_ran_api.c b/openair2/ENB_APP/flexran_agent_ran_api.c
index ff219718108304bd488db398590a9f088151c595..070ce1be03776f8e04328ba7e91eca7b3bd6d91d 100644
--- a/openair2/ENB_APP/flexran_agent_ran_api.c
+++ b/openair2/ENB_APP/flexran_agent_ran_api.c
@@ -32,6 +32,9 @@
 #include "s1ap_eNB_management_procedures.h"
 #include "openair2/LAYER2/MAC/slicing/slicing.h"
 
+#include "common/ran_context.h"
+extern RAN_CONTEXT_t RC;
+
 static inline int phy_is_present(mid_t mod_id, uint8_t cc_id) {
   return RC.eNB && RC.eNB[mod_id] && RC.eNB[mod_id][cc_id];
 }
diff --git a/openair2/F1AP/MESSAGES/ASN1/R16.3.1/38473-g31.asn b/openair2/F1AP/MESSAGES/ASN1/R16.3.1/38473-g31.asn
new file mode 100644
index 0000000000000000000000000000000000000000..c821c520103780434b33e149df6fe38d455c24e4
--- /dev/null
+++ b/openair2/F1AP/MESSAGES/ASN1/R16.3.1/38473-g31.asn
@@ -0,0 +1,10721 @@
+-- ASN1START 
+-- **************************************************************
+--
+-- Elementary Procedure definitions
+--
+-- **************************************************************
+
+F1AP-PDU-Descriptions  { 
+itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
+ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-PDU-Descriptions (0)}
+
+DEFINITIONS AUTOMATIC TAGS ::= 
+
+BEGIN
+
+-- **************************************************************
+--
+-- IE parameter types from other modules.
+--
+-- **************************************************************
+
+IMPORTS
+	Criticality,
+	ProcedureCode
+
+FROM F1AP-CommonDataTypes
+	Reset,
+	ResetAcknowledge,
+	F1SetupRequest,
+	F1SetupResponse,
+	F1SetupFailure, 
+	GNBDUConfigurationUpdate,
+	GNBDUConfigurationUpdateAcknowledge,
+	GNBDUConfigurationUpdateFailure,
+	GNBCUConfigurationUpdate,
+	GNBCUConfigurationUpdateAcknowledge,
+	GNBCUConfigurationUpdateFailure,
+	UEContextSetupRequest,
+	UEContextSetupResponse,
+	UEContextSetupFailure,
+	UEContextReleaseCommand,
+	UEContextReleaseComplete,
+	UEContextModificationRequest,
+	UEContextModificationResponse,
+	UEContextModificationFailure,
+	UEContextModificationRequired,
+	UEContextModificationConfirm,
+	ErrorIndication,
+	UEContextReleaseRequest,
+	DLRRCMessageTransfer,
+	ULRRCMessageTransfer,
+	GNBDUResourceCoordinationRequest,
+	GNBDUResourceCoordinationResponse,
+	PrivateMessage,
+	UEInactivityNotification,
+	InitialULRRCMessageTransfer,
+	SystemInformationDeliveryCommand,
+	Paging,
+	Notify,
+	WriteReplaceWarningRequest,
+	WriteReplaceWarningResponse,
+	PWSCancelRequest,
+	PWSCancelResponse,
+	PWSRestartIndication,
+	PWSFailureIndication,
+	GNBDUStatusIndication,
+	RRCDeliveryReport,
+	UEContextModificationRefuse,
+	F1RemovalRequest,
+	F1RemovalResponse,
+	F1RemovalFailure,
+	NetworkAccessRateReduction,
+	TraceStart,
+	DeactivateTrace,
+	DUCURadioInformationTransfer,
+	CUDURadioInformationTransfer,
+	BAPMappingConfiguration,
+	BAPMappingConfigurationAcknowledge,
+	GNBDUResourceConfiguration,
+	GNBDUResourceConfigurationAcknowledge,
+	IABTNLAddressRequest,
+	IABTNLAddressResponse,
+	IABUPConfigurationUpdateRequest,
+	IABUPConfigurationUpdateResponse,
+	IABUPConfigurationUpdateFailure,
+	ResourceStatusRequest,
+	ResourceStatusResponse,
+	ResourceStatusFailure,
+	ResourceStatusUpdate,
+	AccessAndMobilityIndication,
+	ReferenceTimeInformationReportingControl,
+	ReferenceTimeInformationReport,
+	AccessSuccess,
+	CellTrafficTrace,
+	PositioningMeasurementRequest,
+	PositioningMeasurementResponse,
+	PositioningMeasurementFailure,
+	PositioningAssistanceInformationControl,
+	PositioningAssistanceInformationFeedback,
+	PositioningMeasurementReport,
+	PositioningMeasurementAbort,
+	PositioningMeasurementFailureIndication,
+	PositioningMeasurementUpdate,
+	TRPInformationRequest,
+	TRPInformationResponse,
+	TRPInformationFailure,
+	PositioningInformationRequest,
+	PositioningInformationResponse,
+	PositioningInformationFailure,
+	PositioningActivationRequest,
+	PositioningActivationResponse,
+	PositioningActivationFailure,
+	PositioningDeactivation,
+	PositioningInformationUpdate,
+	E-CIDMeasurementInitiationRequest,
+	E-CIDMeasurementInitiationResponse,
+	E-CIDMeasurementInitiationFailure,
+	E-CIDMeasurementFailureIndication,
+	E-CIDMeasurementReport,
+	E-CIDMeasurementTerminationCommand
+
+
+
+FROM F1AP-PDU-Contents
+	id-Reset,
+	id-F1Setup,
+	id-gNBDUConfigurationUpdate,
+	id-gNBCUConfigurationUpdate,
+	id-UEContextSetup,
+	id-UEContextRelease,
+	id-UEContextModification,
+	id-UEContextModificationRequired,
+	id-ErrorIndication, 
+	id-UEContextReleaseRequest,
+	id-DLRRCMessageTransfer,
+	id-ULRRCMessageTransfer,
+	id-GNBDUResourceCoordination,
+	id-privateMessage,
+	id-UEInactivityNotification,
+	id-InitialULRRCMessageTransfer,
+	id-SystemInformationDeliveryCommand,
+	id-Paging,
+	id-Notify,
+	id-WriteReplaceWarning,
+	id-PWSCancel,
+	id-PWSRestartIndication,
+	id-PWSFailureIndication,
+	id-GNBDUStatusIndication,
+	id-RRCDeliveryReport,
+	id-F1Removal,
+	id-NetworkAccessRateReduction,
+	id-TraceStart,
+	id-DeactivateTrace,
+	id-DUCURadioInformationTransfer,
+	id-CUDURadioInformationTransfer,
+	id-BAPMappingConfiguration,
+	id-GNBDUResourceConfiguration,
+	id-IABTNLAddressAllocation,
+	id-IABUPConfigurationUpdate,
+	id-resourceStatusReportingInitiation,
+	id-resourceStatusReporting,
+	id-accessAndMobilityIndication,
+	id-ReferenceTimeInformationReportingControl,
+	id-ReferenceTimeInformationReport,
+	id-accessSuccess,
+	id-cellTrafficTrace,
+	id-PositioningMeasurementExchange,
+	id-PositioningAssistanceInformationControl,
+	id-PositioningAssistanceInformationFeedback,
+	id-PositioningMeasurementReport,
+	id-PositioningMeasurementAbort,
+	id-PositioningMeasurementFailureIndication,
+	id-PositioningMeasurementUpdate,
+	id-TRPInformationExchange,
+	id-PositioningInformationExchange,
+	id-PositioningActivation,
+	id-PositioningDeactivation,
+	id-PositioningInformationUpdate,
+	id-E-CIDMeasurementInitiation,
+	id-E-CIDMeasurementFailureIndication,
+	id-E-CIDMeasurementReport,
+	id-E-CIDMeasurementTermination
+
+
+FROM F1AP-Constants
+
+	ProtocolIE-SingleContainer{},
+	F1AP-PROTOCOL-IES
+
+FROM F1AP-Containers;
+
+
+-- **************************************************************
+--
+-- Interface Elementary Procedure Class
+--
+-- **************************************************************
+
+F1AP-ELEMENTARY-PROCEDURE ::= CLASS {
+	&InitiatingMessage				,
+	&SuccessfulOutcome							OPTIONAL,
+	&UnsuccessfulOutcome						OPTIONAL,
+	&procedureCode				ProcedureCode 	UNIQUE,
+	&criticality				Criticality 	DEFAULT ignore
+}
+WITH SYNTAX {
+	INITIATING MESSAGE			&InitiatingMessage
+	[SUCCESSFUL OUTCOME			&SuccessfulOutcome]
+	[UNSUCCESSFUL OUTCOME		&UnsuccessfulOutcome]
+	PROCEDURE CODE				&procedureCode
+	[CRITICALITY				&criticality]
+}
+
+-- **************************************************************
+--
+-- Interface PDU Definition
+--
+-- **************************************************************
+
+F1AP-PDU ::= CHOICE {
+	initiatingMessage	InitiatingMessage,
+	successfulOutcome	SuccessfulOutcome,
+	unsuccessfulOutcome	UnsuccessfulOutcome, 
+	choice-extension	ProtocolIE-SingleContainer { { F1AP-PDU-ExtIEs} }
+}
+
+F1AP-PDU-ExtIEs F1AP-PROTOCOL-IES ::= { -- this extension is not used
+	...
+}
+
+InitiatingMessage ::= SEQUENCE {
+	procedureCode	F1AP-ELEMENTARY-PROCEDURE.&procedureCode		({F1AP-ELEMENTARY-PROCEDURES}),
+	criticality		F1AP-ELEMENTARY-PROCEDURE.&criticality			({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
+	value			F1AP-ELEMENTARY-PROCEDURE.&InitiatingMessage	({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
+}
+
+SuccessfulOutcome ::= SEQUENCE {
+	procedureCode	F1AP-ELEMENTARY-PROCEDURE.&procedureCode		({F1AP-ELEMENTARY-PROCEDURES}),
+	criticality		F1AP-ELEMENTARY-PROCEDURE.&criticality			({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
+	value			F1AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome	({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
+}
+
+UnsuccessfulOutcome ::= SEQUENCE {
+	procedureCode	F1AP-ELEMENTARY-PROCEDURE.&procedureCode		({F1AP-ELEMENTARY-PROCEDURES}),
+	criticality		F1AP-ELEMENTARY-PROCEDURE.&criticality			({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
+	value			F1AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome	({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
+}
+
+-- **************************************************************
+--
+-- Interface Elementary Procedure List
+--
+-- **************************************************************
+
+F1AP-ELEMENTARY-PROCEDURES F1AP-ELEMENTARY-PROCEDURE ::= {
+	F1AP-ELEMENTARY-PROCEDURES-CLASS-1			|
+	F1AP-ELEMENTARY-PROCEDURES-CLASS-2,	
+	...
+}
+
+
+F1AP-ELEMENTARY-PROCEDURES-CLASS-1 F1AP-ELEMENTARY-PROCEDURE ::= {
+	reset							|
+	f1Setup							|
+	gNBDUConfigurationUpdate		|
+	gNBCUConfigurationUpdate		|
+	uEContextSetup					|
+	uEContextRelease				|
+	uEContextModification			|
+	uEContextModificationRequired	|
+	writeReplaceWarning				|
+	pWSCancel					|
+	gNBDUResourceCoordination		|
+	f1Removal						|
+	bAPMappingConfiguration			|
+	gNBDUResourceConfiguration		|
+	iABTNLAddressAllocation			|
+	iABUPConfigurationUpdate		|
+	resourceStatusReportingInitiation	|
+	positioningMeasurementExchange	|
+	tRPInformationExchange			|
+	positioningInformationExchange	|
+	positioningActivation			|
+	e-CIDMeasurementInitiation,
+	...
+}
+
+F1AP-ELEMENTARY-PROCEDURES-CLASS-2 F1AP-ELEMENTARY-PROCEDURE ::= {	
+	errorIndication							|
+	uEContextReleaseRequest					|
+	dLRRCMessageTransfer					|
+	uLRRCMessageTransfer					|
+	uEInactivityNotification				|
+	privateMessage							|
+	initialULRRCMessageTransfer				|
+	systemInformationDelivery				|
+	paging									|
+	notify									|
+	pWSRestartIndication					|
+	pWSFailureIndication					|
+	gNBDUStatusIndication					|
+	rRCDeliveryReport						|
+	networkAccessRateReduction				|
+	traceStart								|
+	deactivateTrace							|
+	dUCURadioInformationTransfer			|
+	cUDURadioInformationTransfer			|
+	resourceStatusReporting					|
+	accessAndMobilityIndication				|
+	referenceTimeInformationReportingControl|
+	referenceTimeInformationReport			|
+	accessSuccess							|
+	cellTrafficTrace						|
+	positioningAssistanceInformationControl		|
+	positioningAssistanceInformationFeedback	|
+	positioningMeasurementReport				|
+	positioningMeasurementAbort					|
+	positioningMeasurementFailureIndication		|
+	positioningMeasurementUpdate				|
+	positioningDeactivation						|
+	e-CIDMeasurementFailureIndication			|
+	e-CIDMeasurementReport						|
+	e-CIDMeasurementTermination					|
+	positioningInformationUpdate,
+	...
+}
+-- **************************************************************
+--
+-- Interface Elementary Procedures
+--
+-- **************************************************************
+
+reset F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		Reset
+	SUCCESSFUL OUTCOME		ResetAcknowledge
+	PROCEDURE CODE			id-Reset
+	CRITICALITY				reject
+}
+
+f1Setup F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		F1SetupRequest
+	SUCCESSFUL OUTCOME		F1SetupResponse
+	UNSUCCESSFUL OUTCOME	F1SetupFailure
+	PROCEDURE CODE			id-F1Setup
+	CRITICALITY				reject
+}
+
+gNBDUConfigurationUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		GNBDUConfigurationUpdate
+	SUCCESSFUL OUTCOME		GNBDUConfigurationUpdateAcknowledge
+	UNSUCCESSFUL OUTCOME	GNBDUConfigurationUpdateFailure
+	PROCEDURE CODE			id-gNBDUConfigurationUpdate
+	CRITICALITY				reject
+}
+
+gNBCUConfigurationUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		GNBCUConfigurationUpdate
+	SUCCESSFUL OUTCOME		GNBCUConfigurationUpdateAcknowledge
+	UNSUCCESSFUL OUTCOME	GNBCUConfigurationUpdateFailure
+	PROCEDURE CODE			id-gNBCUConfigurationUpdate
+	CRITICALITY				reject
+}
+
+uEContextSetup F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		UEContextSetupRequest
+	SUCCESSFUL OUTCOME		UEContextSetupResponse
+	UNSUCCESSFUL OUTCOME	UEContextSetupFailure
+	PROCEDURE CODE			id-UEContextSetup
+	CRITICALITY				reject
+}
+
+uEContextRelease F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		UEContextReleaseCommand
+	SUCCESSFUL OUTCOME		UEContextReleaseComplete
+	PROCEDURE CODE			id-UEContextRelease
+	CRITICALITY				reject
+}
+
+uEContextModification F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		UEContextModificationRequest
+	SUCCESSFUL OUTCOME		UEContextModificationResponse
+	UNSUCCESSFUL OUTCOME	UEContextModificationFailure
+	PROCEDURE CODE			id-UEContextModification
+	CRITICALITY				reject
+}
+
+uEContextModificationRequired F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		UEContextModificationRequired
+	SUCCESSFUL OUTCOME		UEContextModificationConfirm
+	UNSUCCESSFUL OUTCOME	UEContextModificationRefuse
+	PROCEDURE CODE			id-UEContextModificationRequired
+	CRITICALITY				reject
+}
+
+writeReplaceWarning F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		WriteReplaceWarningRequest
+	SUCCESSFUL OUTCOME		WriteReplaceWarningResponse
+	PROCEDURE CODE			id-WriteReplaceWarning
+	CRITICALITY				reject
+}
+
+pWSCancel F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PWSCancelRequest
+	SUCCESSFUL OUTCOME		PWSCancelResponse
+	PROCEDURE CODE			id-PWSCancel
+	CRITICALITY				reject
+}
+
+errorIndication F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		ErrorIndication
+	PROCEDURE CODE			id-ErrorIndication
+	CRITICALITY				ignore
+}
+
+uEContextReleaseRequest F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		UEContextReleaseRequest
+	PROCEDURE CODE			id-UEContextReleaseRequest
+	CRITICALITY				ignore
+}
+
+
+initialULRRCMessageTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		InitialULRRCMessageTransfer
+	PROCEDURE CODE			id-InitialULRRCMessageTransfer
+	CRITICALITY				ignore
+}
+
+dLRRCMessageTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		DLRRCMessageTransfer
+	PROCEDURE CODE			id-DLRRCMessageTransfer
+	CRITICALITY				ignore
+}
+
+uLRRCMessageTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		ULRRCMessageTransfer
+	PROCEDURE CODE			id-ULRRCMessageTransfer
+	CRITICALITY				ignore
+}
+
+
+uEInactivityNotification  F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		UEInactivityNotification
+	PROCEDURE CODE			id-UEInactivityNotification
+	CRITICALITY				ignore
+}
+
+gNBDUResourceCoordination F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		GNBDUResourceCoordinationRequest
+	SUCCESSFUL OUTCOME		GNBDUResourceCoordinationResponse
+	PROCEDURE CODE			id-GNBDUResourceCoordination
+	CRITICALITY				reject
+}
+
+privateMessage F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PrivateMessage
+	PROCEDURE CODE			id-privateMessage
+	CRITICALITY				ignore
+}
+
+systemInformationDelivery F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		SystemInformationDeliveryCommand
+	PROCEDURE CODE			id-SystemInformationDeliveryCommand
+	CRITICALITY				ignore
+}
+
+
+paging F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		Paging
+	PROCEDURE CODE			id-Paging
+	CRITICALITY				ignore
+}
+
+notify F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		Notify
+	PROCEDURE CODE			id-Notify
+	CRITICALITY				ignore
+}
+
+networkAccessRateReduction F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		NetworkAccessRateReduction
+	PROCEDURE CODE			id-NetworkAccessRateReduction
+	CRITICALITY				ignore
+}
+
+
+pWSRestartIndication F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PWSRestartIndication
+	PROCEDURE CODE			id-PWSRestartIndication
+	CRITICALITY				ignore
+}
+
+pWSFailureIndication F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PWSFailureIndication
+	PROCEDURE CODE			id-PWSFailureIndication
+	CRITICALITY				ignore
+}
+
+gNBDUStatusIndication 	F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		GNBDUStatusIndication
+	PROCEDURE CODE			id-GNBDUStatusIndication
+	CRITICALITY				ignore
+}
+
+
+rRCDeliveryReport F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		RRCDeliveryReport
+	PROCEDURE CODE			id-RRCDeliveryReport
+	CRITICALITY				ignore
+}
+
+f1Removal F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		F1RemovalRequest
+	SUCCESSFUL OUTCOME		F1RemovalResponse
+	UNSUCCESSFUL OUTCOME	F1RemovalFailure
+	PROCEDURE CODE			id-F1Removal
+	CRITICALITY				reject
+}
+
+traceStart F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		TraceStart
+	PROCEDURE CODE			id-TraceStart
+	CRITICALITY				ignore
+}
+
+deactivateTrace F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		DeactivateTrace
+	PROCEDURE CODE			id-DeactivateTrace
+	CRITICALITY				ignore
+}
+
+dUCURadioInformationTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		DUCURadioInformationTransfer
+	PROCEDURE CODE			id-DUCURadioInformationTransfer
+	CRITICALITY				ignore
+}
+
+cUDURadioInformationTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		CUDURadioInformationTransfer
+	PROCEDURE CODE			id-CUDURadioInformationTransfer
+	CRITICALITY				ignore
+}
+
+bAPMappingConfiguration F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		BAPMappingConfiguration
+	SUCCESSFUL OUTCOME		BAPMappingConfigurationAcknowledge
+	PROCEDURE CODE			id-BAPMappingConfiguration
+	CRITICALITY				reject
+}
+
+gNBDUResourceConfiguration F1AP-ELEMENTARY-PROCEDURE ::= { 
+	INITIATING MESSAGE		GNBDUResourceConfiguration
+	SUCCESSFUL OUTCOME		GNBDUResourceConfigurationAcknowledge
+	PROCEDURE CODE			id-GNBDUResourceConfiguration
+	CRITICALITY				reject
+}
+
+iABTNLAddressAllocation F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		IABTNLAddressRequest
+	SUCCESSFUL OUTCOME		IABTNLAddressResponse
+	PROCEDURE CODE			id-IABTNLAddressAllocation
+	CRITICALITY				reject
+}
+
+iABUPConfigurationUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		IABUPConfigurationUpdateRequest
+	SUCCESSFUL OUTCOME		IABUPConfigurationUpdateResponse
+	UNSUCCESSFUL OUTCOME	IABUPConfigurationUpdateFailure
+	PROCEDURE CODE			id-IABUPConfigurationUpdate
+	CRITICALITY				reject
+}
+
+resourceStatusReportingInitiation F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		ResourceStatusRequest
+	SUCCESSFUL OUTCOME		ResourceStatusResponse
+	UNSUCCESSFUL OUTCOME	ResourceStatusFailure
+	PROCEDURE CODE			id-resourceStatusReportingInitiation
+	CRITICALITY				reject
+}
+
+resourceStatusReporting F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		ResourceStatusUpdate
+	PROCEDURE CODE			id-resourceStatusReporting
+	CRITICALITY				ignore
+}
+
+accessAndMobilityIndication F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		AccessAndMobilityIndication
+	PROCEDURE CODE			id-accessAndMobilityIndication
+	CRITICALITY				ignore
+}
+
+referenceTimeInformationReportingControl F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		ReferenceTimeInformationReportingControl
+	PROCEDURE CODE			id-ReferenceTimeInformationReportingControl
+	CRITICALITY				ignore
+}
+
+referenceTimeInformationReport F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		ReferenceTimeInformationReport
+	PROCEDURE CODE			id-ReferenceTimeInformationReport
+	CRITICALITY				ignore
+}
+
+accessSuccess F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		AccessSuccess
+	PROCEDURE CODE			id-accessSuccess
+	CRITICALITY				ignore
+}
+
+cellTrafficTrace F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		CellTrafficTrace
+	PROCEDURE CODE			id-cellTrafficTrace
+	CRITICALITY				ignore
+}
+
+positioningAssistanceInformationControl F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningAssistanceInformationControl
+	PROCEDURE CODE			id-PositioningAssistanceInformationControl
+	CRITICALITY				ignore
+}
+
+positioningAssistanceInformationFeedback F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningAssistanceInformationFeedback
+	PROCEDURE CODE			id-PositioningAssistanceInformationFeedback
+	CRITICALITY				ignore
+}
+
+positioningMeasurementExchange F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningMeasurementRequest
+	SUCCESSFUL OUTCOME		PositioningMeasurementResponse
+	UNSUCCESSFUL OUTCOME	PositioningMeasurementFailure
+	PROCEDURE CODE			id-PositioningMeasurementExchange
+	CRITICALITY				reject
+}
+
+positioningMeasurementReport F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningMeasurementReport
+	PROCEDURE CODE			id-PositioningMeasurementReport
+	CRITICALITY				ignore
+}
+
+positioningMeasurementAbort F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningMeasurementAbort
+	PROCEDURE CODE			id-PositioningMeasurementAbort
+	CRITICALITY				ignore
+}
+
+positioningMeasurementFailureIndication F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningMeasurementFailureIndication
+	PROCEDURE CODE			id-PositioningMeasurementFailureIndication
+	CRITICALITY				ignore
+}
+
+positioningMeasurementUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningMeasurementUpdate
+	PROCEDURE CODE			id-PositioningMeasurementUpdate
+	CRITICALITY				ignore
+}
+
+
+tRPInformationExchange F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		TRPInformationRequest
+	SUCCESSFUL OUTCOME		TRPInformationResponse
+	UNSUCCESSFUL OUTCOME	TRPInformationFailure
+	PROCEDURE CODE			id-TRPInformationExchange
+	CRITICALITY				reject
+}
+
+positioningInformationExchange F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningInformationRequest
+	SUCCESSFUL OUTCOME		PositioningInformationResponse
+	UNSUCCESSFUL OUTCOME	PositioningInformationFailure
+	PROCEDURE CODE			id-PositioningInformationExchange
+	CRITICALITY				reject
+}
+
+positioningActivation F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningActivationRequest
+	SUCCESSFUL OUTCOME		PositioningActivationResponse
+	UNSUCCESSFUL OUTCOME	PositioningActivationFailure
+	PROCEDURE CODE			id-PositioningActivation
+	CRITICALITY				reject
+}
+
+positioningDeactivation F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningDeactivation
+	PROCEDURE CODE			id-PositioningDeactivation
+	CRITICALITY				ignore
+}
+
+e-CIDMeasurementInitiation F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		E-CIDMeasurementInitiationRequest
+	SUCCESSFUL OUTCOME		E-CIDMeasurementInitiationResponse
+	UNSUCCESSFUL OUTCOME	E-CIDMeasurementInitiationFailure
+	PROCEDURE CODE			id-E-CIDMeasurementInitiation
+	CRITICALITY				reject
+}
+
+e-CIDMeasurementFailureIndication F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		E-CIDMeasurementFailureIndication
+	PROCEDURE CODE			id-E-CIDMeasurementFailureIndication
+	CRITICALITY				ignore
+}
+
+e-CIDMeasurementReport F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		E-CIDMeasurementReport
+	PROCEDURE CODE			id-E-CIDMeasurementReport
+	CRITICALITY				ignore
+}
+
+e-CIDMeasurementTermination F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		E-CIDMeasurementTerminationCommand
+	PROCEDURE CODE			id-E-CIDMeasurementTermination
+	CRITICALITY				ignore
+}
+
+positioningInformationUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningInformationUpdate
+	PROCEDURE CODE			id-PositioningInformationUpdate
+	CRITICALITY				ignore
+}
+
+
+END
+-- ASN1STOP 
+
+-- ASN1START 
+-- **************************************************************
+--
+-- PDU definitions for F1AP.
+--
+-- **************************************************************
+
+F1AP-PDU-Contents { 
+itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
+ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-PDU-Contents (1) }
+
+DEFINITIONS AUTOMATIC TAGS ::= 
+
+BEGIN
+
+-- **************************************************************
+--
+-- IE parameter types from other modules.
+--
+-- **************************************************************
+
+IMPORTS
+	Candidate-SpCell-Item,
+	Cause,
+	Cells-Failed-to-be-Activated-List-Item,
+	Cells-Status-Item,
+	Cells-to-be-Activated-List-Item,
+	Cells-to-be-Deactivated-List-Item, 
+	CellULConfigured,
+	CriticalityDiagnostics, 
+	C-RNTI,
+	CUtoDURRCInformation, 
+	DRB-Activity-Item,
+	DRBID,
+	DRBs-FailedToBeModified-Item,
+	DRBs-FailedToBeSetup-Item,
+	DRBs-FailedToBeSetupMod-Item,
+	DRB-Notify-Item,
+	DRBs-ModifiedConf-Item,
+	DRBs-Modified-Item,
+	DRBs-Required-ToBeModified-Item,
+	DRBs-Required-ToBeReleased-Item,
+	DRBs-Setup-Item,
+	DRBs-SetupMod-Item,
+	DRBs-ToBeModified-Item,
+	DRBs-ToBeReleased-Item,
+	DRBs-ToBeSetup-Item,
+	DRBs-ToBeSetupMod-Item,
+	DRXCycle,
+	DRXConfigurationIndicator,
+	DUtoCURRCInformation,
+	EUTRANQoS,
+	ExecuteDuplication,
+	FullConfiguration,
+	GNB-CU-UE-F1AP-ID,
+	GNB-DU-UE-F1AP-ID,
+	GNB-DU-ID,
+	GNB-DU-Served-Cells-Item,
+	GNB-DU-System-Information, 
+	GNB-CU-Name,
+	GNB-DU-Name,
+	InactivityMonitoringRequest,
+	InactivityMonitoringResponse,
+	LowerLayerPresenceStatusChange,
+	NotificationControl,
+	NRCGI,
+	NRPCI,
+	UEContextNotRetrievable,
+	Potential-SpCell-Item,
+	RAT-FrequencyPriorityInformation,
+	RequestedSRSTransmissionCharacteristics,
+	ResourceCoordinationTransferContainer,
+	RRCContainer,
+	RRCContainer-RRCSetupComplete,
+	RRCReconfigurationCompleteIndicator,
+	SCellIndex,
+	SCell-ToBeRemoved-Item,
+	SCell-ToBeSetup-Item,
+	SCell-ToBeSetupMod-Item,
+	SCell-FailedtoSetup-Item,
+	SCell-FailedtoSetupMod-Item, 
+	ServCellIndex,
+	Served-Cell-Information,
+	Served-Cells-To-Add-Item,
+	Served-Cells-To-Delete-Item,
+	Served-Cells-To-Modify-Item,
+	ServingCellMO,
+	SRBID,
+	SRBs-FailedToBeSetup-Item,
+	SRBs-FailedToBeSetupMod-Item,
+	SRBs-Required-ToBeReleased-Item,
+	SRBs-ToBeReleased-Item,
+	SRBs-ToBeSetup-Item,
+	SRBs-ToBeSetupMod-Item,
+	SRBs-Modified-Item,
+	SRBs-Setup-Item,
+	SRBs-SetupMod-Item,
+	TimeToWait,
+	TransactionID,
+	TransmissionActionIndicator,
+	UE-associatedLogicalF1-ConnectionItem,
+	DUtoCURRCContainer,
+	PagingCell-Item, 
+	SItype-List,
+	UEIdentityIndexValue,
+	GNB-CU-TNL-Association-Setup-Item,
+	GNB-CU-TNL-Association-Failed-To-Setup-Item,
+	GNB-CU-TNL-Association-To-Add-Item,
+	GNB-CU-TNL-Association-To-Remove-Item,
+	GNB-CU-TNL-Association-To-Update-Item,
+	MaskedIMEISV,
+	PagingDRX,
+	PagingPriority,
+	PagingIdentity,
+	Cells-to-be-Barred-Item,
+	PWSSystemInformation,
+	Broadcast-To-Be-Cancelled-Item,
+	Cells-Broadcast-Cancelled-Item,
+	NR-CGI-List-For-Restart-Item,
+	PWS-Failed-NR-CGI-Item,
+	RepetitionPeriod,
+	NumberofBroadcastRequest,
+	Cells-To-Be-Broadcast-Item,
+	Cells-Broadcast-Completed-Item,
+	Cancel-all-Warning-Messages-Indicator,
+	EUTRA-NR-CellResourceCoordinationReq-Container,
+	EUTRA-NR-CellResourceCoordinationReqAck-Container,
+	RequestType,
+	PLMN-Identity,
+	RLCFailureIndication, 
+	UplinkTxDirectCurrentListInformation,
+	SULAccessIndication,
+	Protected-EUTRA-Resources-Item,
+	GNB-DUConfigurationQuery,
+	BitRate,
+	RRC-Version,
+	GNBDUOverloadInformation,
+	RRCDeliveryStatusRequest,
+	NeedforGap,
+	RRCDeliveryStatus,
+	ResourceCoordinationTransferInformation,
+	Dedicated-SIDelivery-NeededUE-Item,
+	Associated-SCell-Item,
+	IgnoreResourceCoordinationContainer,
+	PagingOrigin,
+	UAC-Assistance-Info,
+	RANUEID,
+	GNB-DU-TNL-Association-To-Remove-Item,
+	NotificationInformation,
+	TraceActivation,
+	TraceID,
+	Neighbour-Cell-Information-Item,
+	SymbolAllocInSlot,
+	NumDLULSymbols,
+	AdditionalRRMPriorityIndex,
+	DUCURadioInformationType,
+	CUDURadioInformationType,
+	Transport-Layer-Address-Info,
+	BHChannels-ToBeSetup-Item,
+	BHChannels-Setup-Item,
+	BHChannels-FailedToBeSetup-Item,
+	BHChannels-ToBeModified-Item,
+	BHChannels-ToBeReleased-Item,
+	BHChannels-ToBeSetupMod-Item,
+	BHChannels-FailedToBeModified-Item,
+	BHChannels-FailedToBeSetupMod-Item,
+	BHChannels-Modified-Item,
+	BHChannels-SetupMod-Item,
+	BHChannels-Required-ToBeReleased-Item,
+	BAPAddress,
+	BAPPathID,
+	BAPRoutingID,
+	BH-Routing-Information-Added-List-Item,
+	BH-Routing-Information-Removed-List-Item,
+	Child-Nodes-List,
+	Child-Nodes-List-Item,
+	Child-Node-Cells-List,
+	Child-Node-Cells-List-Item,
+	Activated-Cells-to-be-Updated-List,
+	Activated-Cells-to-be-Updated-List-Item,
+	UL-BH-Non-UP-Traffic-Mapping,
+	IABTNLAddressesRequested,
+	IABIPv6RequestType,
+	IAB-TNL-Addresses-To-Remove-Item,
+	IABTNLAddress,
+	IAB-Allocated-TNL-Address-Item,
+	IABv4AddressesRequested,
+	TrafficMappingInfo,
+	UL-UP-TNL-Information-to-Update-List-Item,
+	UL-UP-TNL-Address-to-Update-List-Item,
+	DL-UP-TNL-Address-to-Update-List-Item,
+	NRV2XServicesAuthorized,
+	LTEV2XServicesAuthorized,
+	NRUESidelinkAggregateMaximumBitrate,
+	LTEUESidelinkAggregateMaximumBitrate,
+	SLDRBs-SetupMod-Item,
+	SLDRBs-ModifiedConf-Item,
+	SLDRBID,
+	SLDRBs-FailedToBeModified-Item,
+	SLDRBs-FailedToBeSetup-Item,
+	SLDRBs-FailedToBeSetupMod-Item,
+	SLDRBs-Modified-Item,
+	SLDRBs-Required-ToBeModified-Item,
+	SLDRBs-Required-ToBeReleased-Item,
+	SLDRBs-Setup-Item,
+	SLDRBs-ToBeModified-Item,
+	SLDRBs-ToBeReleased-Item,
+	SLDRBs-ToBeSetup-Item,
+	SLDRBs-ToBeSetupMod-Item,
+	GNBCUMeasurementID,
+	GNBDUMeasurementID,
+	RegistrationRequest,
+	ReportCharacteristics,
+	CellToReportList,
+	HardwareLoadIndicator,
+	CellMeasurementResultList,
+	ReportingPeriodicity,
+	TNLCapacityIndicator,
+	RACHReportInformationList,
+	RLFReportInformationList,
+	ReportingRequestType,
+	TimeReferenceInformation,
+	ConditionalInterDUMobilityInformation,
+	ConditionalIntraDUMobilityInformation,
+	TargetCellList,
+	MDTPLMNList,
+	PrivacyIndicator,
+	TransportLayerAddress,
+	URI-address,
+	NID,
+	PosAssistance-Information,
+	PosBroadcast,
+	PositioningBroadcastCells,
+	RoutingID,
+	PosAssistanceInformationFailureList,
+	PosMeasurementQuantities,
+	PosMeasurementResultList,
+	PosMeasurementPeriodicity,
+	PosReportCharacteristics,
+	TRPInformationTypeItem,
+	TRPInformationItem,
+	LMF-MeasurementID,
+	RAN-MeasurementID,
+	SRSResourceSetID,
+	SRSSpatialRelation,
+	SRSResourceTrigger,
+	SRSConfiguration,
+	TRPList,
+	E-CID-MeasurementQuantities,
+	E-CID-MeasurementPeriodicity,
+	E-CID-MeasurementResult,
+	Cell-Portion-ID,
+	LMF-UE-MeasurementID,
+	RAN-UE-MeasurementID,
+	SFNInitialisationTime,
+	SystemFrameNumber,
+	SlotNumber,
+	AbortTransmission,
+	TRP-MeasurementRequestList,
+	MeasurementBeamInfoRequest,
+	E-CID-ReportCharacteristics,
+	Extended-GNB-CU-Name,
+	Extended-GNB-DU-Name
+
+
+
+FROM F1AP-IEs
+
+	PrivateIE-Container{},
+	ProtocolExtensionContainer{},
+	ProtocolIE-Container{},
+	ProtocolIE-ContainerPair{},
+	ProtocolIE-SingleContainer{},
+	F1AP-PRIVATE-IES,
+	F1AP-PROTOCOL-EXTENSION,
+	F1AP-PROTOCOL-IES,
+	F1AP-PROTOCOL-IES-PAIR
+
+FROM F1AP-Containers
+
+	id-Candidate-SpCell-Item,
+	id-Candidate-SpCell-List,
+	id-Cause,
+	id-Cancel-all-Warning-Messages-Indicator,
+	id-Cells-Failed-to-be-Activated-List,
+	id-Cells-Failed-to-be-Activated-List-Item, 
+	id-Cells-Status-Item,
+	id-Cells-Status-List,
+	id-Cells-to-be-Activated-List,
+	id-Cells-to-be-Activated-List-Item,
+	id-Cells-to-be-Deactivated-List,
+	id-Cells-to-be-Deactivated-List-Item,
+	id-ConfirmedUEID,
+	id-CriticalityDiagnostics,
+	id-C-RNTI,
+	id-CUtoDURRCInformation,
+	id-DRB-Activity-Item,
+	id-DRB-Activity-List,
+	id-DRBs-FailedToBeModified-Item,
+	id-DRBs-FailedToBeModified-List,
+	id-DRBs-FailedToBeSetup-Item,
+	id-DRBs-FailedToBeSetup-List,
+	id-DRBs-FailedToBeSetupMod-Item,
+	id-DRBs-FailedToBeSetupMod-List,
+	id-DRBs-ModifiedConf-Item,
+	id-DRBs-ModifiedConf-List,
+	id-DRBs-Modified-Item,
+	id-DRBs-Modified-List,
+	id-DRB-Notify-Item,
+	id-DRB-Notify-List,
+	id-DRBs-Required-ToBeModified-Item,
+	id-DRBs-Required-ToBeModified-List,
+	id-DRBs-Required-ToBeReleased-Item,
+	id-DRBs-Required-ToBeReleased-List,
+	id-DRBs-Setup-Item,
+	id-DRBs-Setup-List,
+	id-DRBs-SetupMod-Item,
+	id-DRBs-SetupMod-List,
+	id-DRBs-ToBeModified-Item,
+	id-DRBs-ToBeModified-List,
+	id-DRBs-ToBeReleased-Item,
+	id-DRBs-ToBeReleased-List,
+	id-DRBs-ToBeSetup-Item,
+	id-DRBs-ToBeSetup-List,
+	id-DRBs-ToBeSetupMod-Item,
+	id-DRBs-ToBeSetupMod-List,
+	id-DRXCycle,
+	id-DUtoCURRCInformation,
+	id-ExecuteDuplication,
+	id-FullConfiguration,
+	id-gNB-CU-UE-F1AP-ID,
+	id-gNB-DU-UE-F1AP-ID,
+	id-gNB-DU-ID,
+	id-GNB-DU-Served-Cells-Item,
+	id-gNB-DU-Served-Cells-List, 
+	id-gNB-CU-Name,
+	id-gNB-DU-Name,
+	id-Extended-GNB-CU-Name,
+	id-Extended-GNB-DU-Name,
+	id-InactivityMonitoringRequest,
+	id-InactivityMonitoringResponse,
+	id-new-gNB-CU-UE-F1AP-ID,
+	id-new-gNB-DU-UE-F1AP-ID,
+	id-oldgNB-DU-UE-F1AP-ID,
+	id-PLMNAssistanceInfoForNetShar,
+	id-Potential-SpCell-Item,
+	id-Potential-SpCell-List,
+	id-RAT-FrequencyPriorityInformation, 
+	id-RedirectedRRCmessage,
+	id-ResetType,
+	id-RequestedSRSTransmissionCharacteristics,
+	id-ResourceCoordinationTransferContainer,
+	id-RRCContainer,
+	id-RRCContainer-RRCSetupComplete,
+	id-RRCReconfigurationCompleteIndicator,
+	id-SCell-FailedtoSetup-List,
+	id-SCell-FailedtoSetup-Item,
+	id-SCell-FailedtoSetupMod-List,
+	id-SCell-FailedtoSetupMod-Item,
+	id-SCell-ToBeRemoved-Item,
+	id-SCell-ToBeRemoved-List,
+	id-SCell-ToBeSetup-Item,
+	id-SCell-ToBeSetup-List,
+	id-SCell-ToBeSetupMod-Item,
+	id-SCell-ToBeSetupMod-List,
+	id-SelectedPLMNID,
+	id-Served-Cells-To-Add-Item,
+	id-Served-Cells-To-Add-List,
+	id-Served-Cells-To-Delete-Item,
+	id-Served-Cells-To-Delete-List,
+	id-Served-Cells-To-Modify-Item,
+	id-Served-Cells-To-Modify-List,
+	id-ServCellIndex,
+	id-ServingCellMO,
+	id-SpCell-ID,
+	id-SpCellULConfigured,
+	id-SRBID,
+	id-SRBs-FailedToBeSetup-Item,
+	id-SRBs-FailedToBeSetup-List,
+	id-SRBs-FailedToBeSetupMod-Item,
+	id-SRBs-FailedToBeSetupMod-List,
+	id-SRBs-Required-ToBeReleased-Item,
+	id-SRBs-Required-ToBeReleased-List,
+	id-SRBs-ToBeReleased-Item,
+	id-SRBs-ToBeReleased-List, 
+	id-SRBs-ToBeSetup-Item,
+	id-SRBs-ToBeSetup-List,
+	id-SRBs-ToBeSetupMod-Item,
+	id-SRBs-ToBeSetupMod-List,
+	id-SRBs-Modified-Item,
+	id-SRBs-Modified-List,
+	id-SRBs-Setup-Item,
+	id-SRBs-Setup-List,
+	id-SRBs-SetupMod-Item,
+	id-SRBs-SetupMod-List,
+	id-TimeToWait,
+	id-TransactionID,
+	id-TransmissionActionIndicator, 
+	id-UEContextNotRetrievable,
+	id-UE-associatedLogicalF1-ConnectionItem,
+	id-UE-associatedLogicalF1-ConnectionListResAck,
+	id-DUtoCURRCContainer,
+	id-NRCGI,
+	id-PagingCell-Item,
+	id-PagingCell-List,
+	id-PagingDRX,
+	id-PagingPriority,
+	id-SItype-List,
+	id-UEIdentityIndexValue,
+	id-GNB-CU-TNL-Association-Setup-List,
+	id-GNB-CU-TNL-Association-Setup-Item,
+	id-GNB-CU-TNL-Association-Failed-To-Setup-List,
+	id-GNB-CU-TNL-Association-Failed-To-Setup-Item,
+	id-GNB-CU-TNL-Association-To-Add-Item,
+	id-GNB-CU-TNL-Association-To-Add-List,
+	id-GNB-CU-TNL-Association-To-Remove-Item,
+	id-GNB-CU-TNL-Association-To-Remove-List,
+	id-GNB-CU-TNL-Association-To-Update-Item,
+	id-GNB-CU-TNL-Association-To-Update-List,
+	id-MaskedIMEISV,
+	id-PagingIdentity,
+	id-Cells-to-be-Barred-List,
+	id-Cells-to-be-Barred-Item,
+	id-PWSSystemInformation,
+	id-RepetitionPeriod,
+	id-NumberofBroadcastRequest,
+	id-Cells-To-Be-Broadcast-List,
+	id-Cells-To-Be-Broadcast-Item,
+	id-Cells-Broadcast-Completed-List,
+	id-Cells-Broadcast-Completed-Item,
+	id-Broadcast-To-Be-Cancelled-List,
+	id-Broadcast-To-Be-Cancelled-Item,
+	id-Cells-Broadcast-Cancelled-List,
+	id-Cells-Broadcast-Cancelled-Item,
+	id-NR-CGI-List-For-Restart-List,
+	id-NR-CGI-List-For-Restart-Item,
+	id-PWS-Failed-NR-CGI-List,
+	id-PWS-Failed-NR-CGI-Item,
+	id-EUTRA-NR-CellResourceCoordinationReq-Container,
+	id-EUTRA-NR-CellResourceCoordinationReqAck-Container,
+	id-Protected-EUTRA-Resources-List,
+	id-RequestType,
+	id-ServingPLMN,
+	id-DRXConfigurationIndicator,
+	id-RLCFailureIndication,
+	id-UplinkTxDirectCurrentListInformation,
+	id-SULAccessIndication,
+	id-Protected-EUTRA-Resources-Item,
+	id-GNB-DUConfigurationQuery,
+	id-GNB-DU-UE-AMBR-UL,
+	id-GNB-CU-RRC-Version,
+	id-GNB-DU-RRC-Version,
+	id-GNBDUOverloadInformation,
+	id-NeedforGap,
+	id-RRCDeliveryStatusRequest,
+	id-RRCDeliveryStatus,
+	id-Dedicated-SIDelivery-NeededUE-List,
+	id-Dedicated-SIDelivery-NeededUE-Item,
+	id-ResourceCoordinationTransferInformation,
+	id-Associated-SCell-List,
+	id-Associated-SCell-Item,
+	id-IgnoreResourceCoordinationContainer,
+	id-UAC-Assistance-Info,
+	id-RANUEID,
+	id-PagingOrigin,
+	id-GNB-DU-TNL-Association-To-Remove-Item,
+	id-GNB-DU-TNL-Association-To-Remove-List,
+	id-NotificationInformation,
+	id-TraceActivation,
+	id-TraceID,
+	id-Neighbour-Cell-Information-List,
+	id-Neighbour-Cell-Information-Item,
+	id-SymbolAllocInSlot,
+	id-NumDLULSymbols,
+	id-AdditionalRRMPriorityIndex,
+	id-DUCURadioInformationType,
+	id-CUDURadioInformationType,
+	id-LowerLayerPresenceStatusChange,
+	id-Transport-Layer-Address-Info,
+	id-BHChannels-ToBeSetup-List,
+	id-BHChannels-ToBeSetup-Item,
+	id-BHChannels-Setup-List,
+	id-BHChannels-Setup-Item,
+	id-BHChannels-ToBeModified-Item,
+	id-BHChannels-ToBeModified-List,
+	id-BHChannels-ToBeReleased-Item,
+	id-BHChannels-ToBeReleased-List,
+	id-BHChannels-ToBeSetupMod-Item,
+	id-BHChannels-ToBeSetupMod-List,
+	id-BHChannels-FailedToBeSetup-Item,
+	id-BHChannels-FailedToBeSetup-List,
+	id-BHChannels-FailedToBeModified-Item,
+	id-BHChannels-FailedToBeModified-List,
+	id-BHChannels-FailedToBeSetupMod-Item,
+	id-BHChannels-FailedToBeSetupMod-List,
+	id-BHChannels-Modified-Item,
+	id-BHChannels-Modified-List,
+	id-BHChannels-SetupMod-Item,
+	id-BHChannels-SetupMod-List,
+	id-BHChannels-Required-ToBeReleased-Item,
+	id-BHChannels-Required-ToBeReleased-List,
+	id-BAPAddress,
+	id-ConfiguredBAPAddress,
+	id-BH-Routing-Information-Added-List,
+	id-BH-Routing-Information-Added-List-Item,
+	id-BH-Routing-Information-Removed-List,
+	id-BH-Routing-Information-Removed-List-Item,
+	id-UL-BH-Non-UP-Traffic-Mapping,
+	id-Child-Nodes-List,
+	id-Activated-Cells-to-be-Updated-List, 
+	id-IABIPv6RequestType,
+	id-IAB-TNL-Addresses-To-Remove-List,
+	id-IAB-TNL-Addresses-To-Remove-Item,
+	id-IAB-Allocated-TNL-Address-List,
+	id-IAB-Allocated-TNL-Address-Item,
+	id-IABv4AddressesRequested,
+	id-TrafficMappingInformation,
+	id-UL-UP-TNL-Information-to-Update-List,
+	id-UL-UP-TNL-Information-to-Update-List-Item,
+	id-UL-UP-TNL-Address-to-Update-List,
+	id-UL-UP-TNL-Address-to-Update-List-Item,
+	id-DL-UP-TNL-Address-to-Update-List,
+	id-DL-UP-TNL-Address-to-Update-List-Item,
+	id-NRV2XServicesAuthorized,
+	id-LTEV2XServicesAuthorized,
+	id-NRUESidelinkAggregateMaximumBitrate,
+	id-LTEUESidelinkAggregateMaximumBitrate,
+	id-PC5LinkAMBR,
+	id-SLDRBs-FailedToBeModified-Item,
+	id-SLDRBs-FailedToBeModified-List,
+	id-SLDRBs-FailedToBeSetup-Item,
+	id-SLDRBs-FailedToBeSetup-List,
+	id-SLDRBs-Modified-Item,
+	id-SLDRBs-Modified-List,
+	id-SLDRBs-Required-ToBeModified-Item,
+	id-SLDRBs-Required-ToBeModified-List,
+	id-SLDRBs-Required-ToBeReleased-Item,
+	id-SLDRBs-Required-ToBeReleased-List,
+	id-SLDRBs-Setup-Item,
+	id-SLDRBs-Setup-List,
+	id-SLDRBs-ToBeModified-Item,
+	id-SLDRBs-ToBeModified-List,
+	id-SLDRBs-ToBeReleased-Item,
+	id-SLDRBs-ToBeReleased-List,
+	id-SLDRBs-ToBeSetup-Item,
+	id-SLDRBs-ToBeSetup-List,
+	id-SLDRBs-ToBeSetupMod-Item,
+	id-SLDRBs-ToBeSetupMod-List,
+	id-SLDRBs-SetupMod-List,
+	id-SLDRBs-FailedToBeSetupMod-List,
+	id-SLDRBs-SetupMod-Item,
+	id-SLDRBs-FailedToBeSetupMod-Item,
+	id-SLDRBs-ModifiedConf-List,
+	id-SLDRBs-ModifiedConf-Item,
+	id-gNBCUMeasurementID,
+	id-gNBDUMeasurementID,
+	id-RegistrationRequest,
+	id-ReportCharacteristics,
+	id-CellToReportList,
+	id-CellMeasurementResultList,
+	id-HardwareLoadIndicator,
+	id-ReportingPeriodicity, 
+	id-TNLCapacityIndicator, 
+	id-RACHReportInformationList,
+	id-RLFReportInformationList,
+	id-ReportingRequestType,
+	id-TimeReferenceInformation,
+	id-ConditionalInterDUMobilityInformation,
+	id-ConditionalIntraDUMobilityInformation,
+	id-targetCellsToCancel,
+	id-requestedTargetCellGlobalID,
+	id-TraceCollectionEntityIPAddress,
+	id-ManagementBasedMDTPLMNList,
+	id-PrivacyIndicator,
+	id-TraceCollectionEntityURI,
+	id-ServingNID,
+	id-PosAssistance-Information,
+	id-PosBroadcast,
+	id-PositioningBroadcastCells,
+	id-RoutingID,
+	id-PosAssistanceInformationFailureList,
+	id-PosMeasurementQuantities,
+	id-PosMeasurementResultList,
+	id-PosMeasurementPeriodicity,
+	id-PosReportCharacteristics,
+	id-TRPInformationTypeListTRPReq,
+	id-TRPInformationTypeItem,
+	id-TRPInformationListTRPResp,
+	id-TRPInformationItem,
+	id-LMF-MeasurementID,
+	id-RAN-MeasurementID,
+	id-SRSType,
+	id-ActivationTime,
+	id-AbortTransmission,
+	id-SRSConfiguration,
+	id-TRPList,
+	id-E-CID-MeasurementQuantities,
+	id-E-CID-MeasurementPeriodicity,
+	id-E-CID-MeasurementResult,
+	id-Cell-Portion-ID,
+	id-LMF-UE-MeasurementID,
+	id-RAN-UE-MeasurementID,
+	id-SFNInitialisationTime,
+	id-SystemFrameNumber,
+	id-SlotNumber,
+	id-TRP-MeasurementRequestList,
+	id-MeasurementBeamInfoRequest,
+	id-E-CID-ReportCharacteristics,
+
+	maxCellingNBDU,
+	maxnoofCandidateSpCells,
+	maxnoofDRBs,
+	maxnoofErrors,
+	maxnoofIndividualF1ConnectionsToReset,
+	maxnoofPotentialSpCells,
+	maxnoofSCells,
+	maxnoofSRBs,
+	maxnoofPagingCells,
+	maxnoofTNLAssociations,
+	maxCellineNB,
+	maxnoofUEIDs,
+	maxnoofBHRLCChannels,
+	maxnoofRoutingEntries,
+	maxnoofChildIABNodes,
+	maxnoofServedCellsIAB,
+	maxnoofTLAsIAB,
+	maxnoofULUPTNLInformationforIAB,
+	maxnoofUPTNLAddresses,
+	maxnoofSLDRBs,
+	maxnoofTRPInfoTypes,
+	maxnoofTRPs
+
+
+
+FROM F1AP-Constants;
+
+
+-- **************************************************************
+--
+-- RESET ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Reset
+--
+-- **************************************************************
+
+Reset ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {ResetIEs} },
+	...
+}
+
+ResetIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-ResetType					CRITICALITY reject	TYPE ResetType					PRESENCE mandatory	},
+	...
+}
+
+ResetType ::= CHOICE {
+	f1-Interface					ResetAll,
+	partOfF1-Interface				UE-associatedLogicalF1-ConnectionListRes, 
+	choice-extension				ProtocolIE-SingleContainer { { ResetType-ExtIEs} }
+}
+
+ResetType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+
+ResetAll ::= ENUMERATED {
+	reset-all,
+	...
+}
+
+UE-associatedLogicalF1-ConnectionListRes ::= SEQUENCE (SIZE(1.. maxnoofIndividualF1ConnectionsToReset)) OF ProtocolIE-SingleContainer { { UE-associatedLogicalF1-ConnectionItemRes } }
+
+UE-associatedLogicalF1-ConnectionItemRes F1AP-PROTOCOL-IES ::= {
+	{ ID id-UE-associatedLogicalF1-ConnectionItem	CRITICALITY reject	TYPE UE-associatedLogicalF1-ConnectionItem	PRESENCE mandatory},
+	...
+}
+
+
+-- **************************************************************
+--
+-- Reset Acknowledge
+--
+-- **************************************************************
+
+ResetAcknowledge ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {ResetAcknowledgeIEs} },
+	...
+}
+
+ResetAcknowledgeIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID									CRITICALITY reject	TYPE TransactionID													PRESENCE mandatory	}|
+	{ ID id-UE-associatedLogicalF1-ConnectionListResAck		CRITICALITY ignore	TYPE UE-associatedLogicalF1-ConnectionListResAck			PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional	},
+	...
+}
+
+UE-associatedLogicalF1-ConnectionListResAck ::= SEQUENCE (SIZE(1.. maxnoofIndividualF1ConnectionsToReset)) OF ProtocolIE-SingleContainer { { UE-associatedLogicalF1-ConnectionItemResAck } }
+
+UE-associatedLogicalF1-ConnectionItemResAck 	F1AP-PROTOCOL-IES ::= {
+	{ ID id-UE-associatedLogicalF1-ConnectionItem	 CRITICALITY ignore 	TYPE UE-associatedLogicalF1-ConnectionItem  	PRESENCE mandatory },
+	...
+}
+
+-- **************************************************************
+--
+-- ERROR INDICATION ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Error Indication
+--
+-- **************************************************************
+
+ErrorIndication ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ErrorIndicationIEs}},
+	...
+}
+
+ErrorIndicationIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory}|
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-CU-UE-F1AP-ID			PRESENCE optional	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID			PRESENCE optional	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+-- F1 SETUP ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- F1 Setup Request
+--
+-- **************************************************************
+
+F1SetupRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {F1SetupRequestIEs} },
+	...
+}
+
+F1SetupRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID						PRESENCE mandatory	}|
+	{ ID id-gNB-DU-ID						CRITICALITY reject	TYPE GNB-DU-ID							PRESENCE mandatory	}|
+	{ ID id-gNB-DU-Name						CRITICALITY ignore	TYPE GNB-DU-Name						PRESENCE optional	}|
+	{ ID id-gNB-DU-Served-Cells-List		CRITICALITY reject	TYPE GNB-DU-Served-Cells-List			PRESENCE optional	}|
+	{ ID id-GNB-DU-RRC-Version				CRITICALITY reject	TYPE RRC-Version						PRESENCE mandatory	}|
+	{ ID id-Transport-Layer-Address-Info	CRITICALITY ignore	TYPE Transport-Layer-Address-Info		PRESENCE optional	}|
+	{ ID id-BAPAddress						CRITICALITY ignore	TYPE BAPAddress							PRESENCE optional	}|
+	{ ID id-Extended-GNB-CU-Name			CRITICALITY ignore	TYPE Extended-GNB-CU-Name				PRESENCE optional	},
+	...
+} 
+
+
+GNB-DU-Served-Cells-List 	::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { GNB-DU-Served-Cells-ItemIEs } }
+
+GNB-DU-Served-Cells-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-GNB-DU-Served-Cells-Item		CRITICALITY reject	TYPE		GNB-DU-Served-Cells-Item	PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- F1 Setup Response
+--
+-- **************************************************************
+
+F1SetupResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {F1SetupResponseIEs} },
+	...
+}
+
+
+F1SetupResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID						PRESENCE mandatory	}|
+	{ ID id-gNB-CU-Name						CRITICALITY ignore	TYPE GNB-CU-Name						PRESENCE optional	}|
+	{ ID id-Cells-to-be-Activated-List		CRITICALITY reject	TYPE Cells-to-be-Activated-List			PRESENCE optional	}|
+	{ ID id-GNB-CU-RRC-Version				CRITICALITY reject	TYPE RRC-Version						PRESENCE mandatory	}|
+	{ ID id-Transport-Layer-Address-Info	CRITICALITY ignore	TYPE Transport-Layer-Address-Info		PRESENCE optional	}|
+	{ ID id-UL-BH-Non-UP-Traffic-Mapping	CRITICALITY reject	TYPE UL-BH-Non-UP-Traffic-Mapping		PRESENCE optional	}|
+	{ ID id-BAPAddress						CRITICALITY ignore	TYPE BAPAddress							PRESENCE optional	}|
+	{ ID id-Extended-GNB-DU-Name			CRITICALITY ignore	TYPE Extended-GNB-DU-Name				PRESENCE optional	},
+	...
+}
+
+
+Cells-to-be-Activated-List	::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Cells-to-be-Activated-List-ItemIEs } }
+
+Cells-to-be-Activated-List-ItemIEs	F1AP-PROTOCOL-IES::= {
+	{ ID id-Cells-to-be-Activated-List-Item				CRITICALITY reject	TYPE Cells-to-be-Activated-List-Item						PRESENCE mandatory},
+	...
+}
+
+
+
+-- **************************************************************
+--
+-- F1 Setup Failure
+--
+-- **************************************************************
+
+F1SetupFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {F1SetupFailureIEs} },
+	...
+}
+
+F1SetupFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-TimeToWait					CRITICALITY ignore	TYPE TimeToWait					PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- GNB-DU CONFIGURATION UPDATE ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- GNB-DU CONFIGURATION UPDATE
+--
+-- **************************************************************
+
+GNBDUConfigurationUpdate::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {GNBDUConfigurationUpdateIEs} },
+	...
+}
+
+GNBDUConfigurationUpdateIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID												PRESENCE mandatory	}|
+	{ ID id-Served-Cells-To-Add-List				CRITICALITY reject	TYPE Served-Cells-To-Add-List								PRESENCE optional	}|
+	{ ID id-Served-Cells-To-Modify-List				CRITICALITY reject	TYPE Served-Cells-To-Modify-List							PRESENCE optional	}|
+	{ ID id-Served-Cells-To-Delete-List				CRITICALITY reject	TYPE Served-Cells-To-Delete-List							PRESENCE optional	}|
+	{ ID id-Cells-Status-List						CRITICALITY reject	TYPE Cells-Status-List											PRESENCE optional	}|
+	{ ID id-Dedicated-SIDelivery-NeededUE-List		CRITICALITY ignore	TYPE Dedicated-SIDelivery-NeededUE-List					PRESENCE optional	}|
+	{ ID id-gNB-DU-ID								CRITICALITY reject	TYPE GNB-DU-ID													PRESENCE optional	}|
+	{ ID id-GNB-DU-TNL-Association-To-Remove-List	CRITICALITY reject	TYPE GNB-DU-TNL-Association-To-Remove-List				PRESENCE optional	}|
+	{ ID id-Transport-Layer-Address-Info			CRITICALITY ignore	TYPE Transport-Layer-Address-Info							PRESENCE optional	},
+	...
+} 
+
+Served-Cells-To-Add-List		::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Served-Cells-To-Add-ItemIEs } }
+Served-Cells-To-Modify-List	::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Served-Cells-To-Modify-ItemIEs } }
+Served-Cells-To-Delete-List	::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Served-Cells-To-Delete-ItemIEs } }
+Cells-Status-List	::= SEQUENCE (SIZE(0.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Cells-Status-ItemIEs } }
+
+Dedicated-SIDelivery-NeededUE-List::= SEQUENCE (SIZE(1.. maxnoofUEIDs))	OF ProtocolIE-SingleContainer { { Dedicated-SIDelivery-NeededUE-ItemIEs } }
+
+GNB-DU-TNL-Association-To-Remove-List	::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations))	OF ProtocolIE-SingleContainer { { GNB-DU-TNL-Association-To-Remove-ItemIEs } }
+
+
+Served-Cells-To-Add-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Served-Cells-To-Add-Item		CRITICALITY reject	TYPE	Served-Cells-To-Add-Item				PRESENCE mandatory	},
+	...
+}
+
+Served-Cells-To-Modify-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Served-Cells-To-Modify-Item			CRITICALITY reject	TYPE		Served-Cells-To-Modify-Item							PRESENCE mandatory	},
+	...
+}
+
+Served-Cells-To-Delete-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Served-Cells-To-Delete-Item				CRITICALITY reject	TYPE		Served-Cells-To-Delete-Item					PRESENCE mandatory	},
+	...
+}
+
+Cells-Status-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Cells-Status-Item				CRITICALITY reject	TYPE		Cells-Status-Item					PRESENCE mandatory	},
+	...
+}
+
+Dedicated-SIDelivery-NeededUE-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Dedicated-SIDelivery-NeededUE-Item		CRITICALITY ignore	TYPE	Dedicated-SIDelivery-NeededUE-Item				PRESENCE mandatory	},
+	...
+} 
+
+GNB-DU-TNL-Association-To-Remove-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-GNB-DU-TNL-Association-To-Remove-Item		CRITICALITY reject	TYPE	 GNB-DU-TNL-Association-To-Remove-Item			PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- GNB-DU CONFIGURATION UPDATE ACKNOWLEDGE
+--
+-- **************************************************************
+
+GNBDUConfigurationUpdateAcknowledge ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {GNBDUConfigurationUpdateAcknowledgeIEs} },
+	...
+}
+
+
+GNBDUConfigurationUpdateAcknowledgeIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID						CRITICALITY reject	TYPE TransactionID								PRESENCE mandatory	}|
+	{ ID id-Cells-to-be-Activated-List			CRITICALITY reject	TYPE Cells-to-be-Activated-List				PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics				CRITICALITY ignore	TYPE CriticalityDiagnostics						PRESENCE optional	}|
+	{ ID id-Cells-to-be-Deactivated-List		CRITICALITY reject	TYPE Cells-to-be-Deactivated-List			PRESENCE optional	}|
+	{ ID id-Transport-Layer-Address-Info		CRITICALITY ignore	TYPE Transport-Layer-Address-Info			PRESENCE optional	}|
+	{ ID id-UL-BH-Non-UP-Traffic-Mapping		CRITICALITY reject	TYPE UL-BH-Non-UP-Traffic-Mapping			PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+-- GNB-DU CONFIGURATION UPDATE FAILURE
+--
+-- **************************************************************
+
+GNBDUConfigurationUpdateFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {GNBDUConfigurationUpdateFailureIEs} },
+	...
+}
+
+GNBDUConfigurationUpdateFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-TimeToWait					CRITICALITY ignore	TYPE TimeToWait					PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+-- GNB-CU CONFIGURATION UPDATE ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- GNB-CU CONFIGURATION UPDATE
+--
+-- **************************************************************
+
+GNBCUConfigurationUpdate ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { GNBCUConfigurationUpdateIEs} },
+	...
+}
+
+GNBCUConfigurationUpdateIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID												PRESENCE mandatory	}|
+	{ ID id-Cells-to-be-Activated-List				CRITICALITY reject	TYPE	 Cells-to-be-Activated-List						PRESENCE optional	}|
+	{ ID id-Cells-to-be-Deactivated-List			CRITICALITY reject	TYPE	 Cells-to-be-Deactivated-List						PRESENCE optional	}|
+	{ ID id-GNB-CU-TNL-Association-To-Add-List		CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-To-Add-List				PRESENCE optional	}|
+	{ ID id-GNB-CU-TNL-Association-To-Remove-List	CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-To-Remove-List			PRESENCE optional	}|
+	{ ID id-GNB-CU-TNL-Association-To-Update-List	CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-To-Update-List			PRESENCE optional	}|
+	{ ID id-Cells-to-be-Barred-List					CRITICALITY ignore	TYPE	 Cells-to-be-Barred-List							PRESENCE optional	}|
+	{ ID id-Protected-EUTRA-Resources-List			CRITICALITY reject	TYPE	 Protected-EUTRA-Resources-List					PRESENCE optional	}|
+	{ ID id-Neighbour-Cell-Information-List			CRITICALITY ignore	TYPE	 Neighbour-Cell-Information-List					PRESENCE optional	}|
+	{ ID id-Transport-Layer-Address-Info			CRITICALITY ignore	TYPE	 Transport-Layer-Address-Info						PRESENCE optional	}|
+	{ ID id-UL-BH-Non-UP-Traffic-Mapping			CRITICALITY reject	TYPE	 UL-BH-Non-UP-Traffic-Mapping						PRESENCE optional	},
+	...
+} 
+
+Cells-to-be-Deactivated-List	::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Cells-to-be-Deactivated-List-ItemIEs } }
+GNB-CU-TNL-Association-To-Add-List		::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations))	OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-To-Add-ItemIEs } }
+GNB-CU-TNL-Association-To-Remove-List	::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations))	OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-To-Remove-ItemIEs } }
+GNB-CU-TNL-Association-To-Update-List	::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations))	OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-To-Update-ItemIEs } }
+Cells-to-be-Barred-List			::= SEQUENCE(SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Cells-to-be-Barred-ItemIEs } }
+
+
+Cells-to-be-Deactivated-List-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Cells-to-be-Deactivated-List-Item						CRITICALITY reject	TYPE	Cells-to-be-Deactivated-List-Item					PRESENCE mandatory	},
+	...
+}
+
+
+GNB-CU-TNL-Association-To-Add-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-GNB-CU-TNL-Association-To-Add-Item		CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-To-Add-Item			PRESENCE mandatory	},
+	...
+}
+
+GNB-CU-TNL-Association-To-Remove-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-GNB-CU-TNL-Association-To-Remove-Item		CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-To-Remove-Item			PRESENCE mandatory	},
+	...
+}
+
+GNB-CU-TNL-Association-To-Update-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-GNB-CU-TNL-Association-To-Update-Item		CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-To-Update-Item			PRESENCE mandatory	},
+	...
+}
+
+Cells-to-be-Barred-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Cells-to-be-Barred-Item		CRITICALITY ignore	TYPE	 Cells-to-be-Barred-Item				PRESENCE mandatory	},
+	...
+}
+
+Protected-EUTRA-Resources-List ::= SEQUENCE (SIZE(1.. maxCellineNB))	OF ProtocolIE-SingleContainer { { Protected-EUTRA-Resources-ItemIEs } }
+Protected-EUTRA-Resources-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Protected-EUTRA-Resources-Item 					CRITICALITY reject 	TYPE Protected-EUTRA-Resources-Item							PRESENCE mandatory},
+	...
+}
+
+Neighbour-Cell-Information-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Neighbour-Cell-Information-ItemIEs } }
+Neighbour-Cell-Information-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Neighbour-Cell-Information-Item 					CRITICALITY ignore 	TYPE Neighbour-Cell-Information-Item							PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- GNB-CU CONFIGURATION UPDATE ACKNOWLEDGE
+--
+-- **************************************************************
+
+GNBCUConfigurationUpdateAcknowledge ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { GNBCUConfigurationUpdateAcknowledgeIEs} },
+	...
+}
+
+
+GNBCUConfigurationUpdateAcknowledgeIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID								CRITICALITY reject	TYPE TransactionID											PRESENCE mandatory	}|
+	{ ID id-Cells-Failed-to-be-Activated-List			CRITICALITY reject	TYPE Cells-Failed-to-be-Activated-List				PRESENCE optional}|
+	{ ID id-CriticalityDiagnostics							CRITICALITY ignore	TYPE CriticalityDiagnostics								PRESENCE optional	}|
+	{ ID id-GNB-CU-TNL-Association-Setup-List			CRITICALITY ignore	TYPE GNB-CU-TNL-Association-Setup-List				PRESENCE optional	}|
+	{ ID id-GNB-CU-TNL-Association-Failed-To-Setup-List	CRITICALITY ignore	TYPE GNB-CU-TNL-Association-Failed-To-Setup-List	PRESENCE optional	}|
+	{ ID id-Dedicated-SIDelivery-NeededUE-List				CRITICALITY ignore	TYPE Dedicated-SIDelivery-NeededUE-List				PRESENCE optional	}|
+	{ ID id-Transport-Layer-Address-Info				CRITICALITY ignore	TYPE Transport-Layer-Address-Info						PRESENCE optional	},
+	...
+}
+
+Cells-Failed-to-be-Activated-List	::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Cells-Failed-to-be-Activated-List-ItemIEs } }
+GNB-CU-TNL-Association-Setup-List ::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations))	OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-Setup-ItemIEs } }
+GNB-CU-TNL-Association-Failed-To-Setup-List ::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations))	OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-Failed-To-Setup-ItemIEs } }
+
+Cells-Failed-to-be-Activated-List-ItemIEs F1AP-PROTOCOL-IES		::= {
+	{ ID id-Cells-Failed-to-be-Activated-List-Item		CRITICALITY reject	TYPE Cells-Failed-to-be-Activated-List-Item		PRESENCE mandatory	},
+	...
+}
+
+GNB-CU-TNL-Association-Setup-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-GNB-CU-TNL-Association-Setup-Item		CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-Setup-Item			PRESENCE mandatory	},
+	...
+}
+
+
+GNB-CU-TNL-Association-Failed-To-Setup-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-GNB-CU-TNL-Association-Failed-To-Setup-Item		CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-Failed-To-Setup-Item			PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- GNB-CU CONFIGURATION UPDATE FAILURE
+--
+-- **************************************************************
+
+GNBCUConfigurationUpdateFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { GNBCUConfigurationUpdateFailureIEs} },
+	...
+}
+
+GNBCUConfigurationUpdateFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-TimeToWait					CRITICALITY ignore	TYPE TimeToWait					PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- GNB-DU RESOURCE COORDINATION REQUEST 
+--
+-- **************************************************************
+
+GNBDUResourceCoordinationRequest ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{{GNBDUResourceCoordinationRequest-IEs}},
+	...
+}
+
+GNBDUResourceCoordinationRequest-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID									CRITICALITY reject	TYPE TransactionID									PRESENCE mandatory	}|
+	{ ID id-RequestType										CRITICALITY reject	TYPE RequestType										PRESENCE mandatory	}|
+	{ ID id-EUTRA-NR-CellResourceCoordinationReq-Container	CRITICALITY reject	TYPE EUTRA-NR-CellResourceCoordinationReq-Container	PRESENCE mandatory}|
+	{ ID id-IgnoreResourceCoordinationContainer				CRITICALITY reject	TYPE IgnoreResourceCoordinationContainer		PRESENCE optional },
+	...
+}
+
+
+-- **************************************************************
+--
+-- GNB-DU RESOURCE COORDINATION RESPONSE 
+--
+-- **************************************************************
+
+GNBDUResourceCoordinationResponse ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{{GNBDUResourceCoordinationResponse-IEs}},
+	...
+}
+
+GNBDUResourceCoordinationResponse-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID										CRITICALITY reject	TYPE TransactionID						PRESENCE mandatory	}|
+	{ ID id-EUTRA-NR-CellResourceCoordinationReqAck-Container	CRITICALITY reject	TYPE EUTRA-NR-CellResourceCoordinationReqAck-Container		PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- UE Context Setup ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- UE CONTEXT SETUP REQUEST
+--
+-- **************************************************************
+
+UEContextSetupRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextSetupRequestIEs} },
+	...
+}
+
+UEContextSetupRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID									PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID						CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID									PRESENCE optional 	}|
+	{ ID id-SpCell-ID								CRITICALITY reject	TYPE NRCGI												PRESENCE mandatory	}|
+	{ ID id-ServCellIndex							CRITICALITY reject	TYPE ServCellIndex										PRESENCE mandatory	}|
+	{ ID id-SpCellULConfigured						CRITICALITY ignore	TYPE CellULConfigured									PRESENCE optional	}|
+	{ ID id-CUtoDURRCInformation					CRITICALITY reject	TYPE CUtoDURRCInformation								PRESENCE mandatory}|
+	{ ID id-Candidate-SpCell-List					CRITICALITY ignore	TYPE Candidate-SpCell-List							PRESENCE optional	}|
+	{ ID id-DRXCycle								CRITICALITY ignore	TYPE DRXCycle											PRESENCE optional	}|
+	{ ID id-ResourceCoordinationTransferContainer	CRITICALITY ignore	TYPE ResourceCoordinationTransferContainer		PRESENCE optional	}|
+	{ ID id-SCell-ToBeSetup-List					CRITICALITY ignore	TYPE SCell-ToBeSetup-List								PRESENCE optional	}|
+	{ ID id-SRBs-ToBeSetup-List						CRITICALITY reject	TYPE SRBs-ToBeSetup-List								PRESENCE optional	}|
+	{ ID id-DRBs-ToBeSetup-List						CRITICALITY reject	TYPE DRBs-ToBeSetup-List								PRESENCE optional	}|
+	{ ID id-InactivityMonitoringRequest				CRITICALITY reject	TYPE InactivityMonitoringRequest					PRESENCE optional	}|
+	{ ID id-RAT-FrequencyPriorityInformation		CRITICALITY reject	TYPE RAT-FrequencyPriorityInformation				PRESENCE optional	}|
+	{ ID id-RRCContainer							CRITICALITY ignore	TYPE RRCContainer										PRESENCE optional	}|
+	{ ID id-MaskedIMEISV							CRITICALITY ignore	TYPE MaskedIMEISV										PRESENCE optional	}|
+	{ ID id-ServingPLMN								CRITICALITY ignore	TYPE PLMN-Identity										PRESENCE optional	}|
+	{ ID id-GNB-DU-UE-AMBR-UL						CRITICALITY ignore	TYPE BitRate											PRESENCE conditional }|
+	{ ID id-RRCDeliveryStatusRequest				CRITICALITY ignore	TYPE RRCDeliveryStatusRequest						PRESENCE optional }|
+	{ ID id-ResourceCoordinationTransferInformation	CRITICALITY ignore	TYPE ResourceCoordinationTransferInformation	PRESENCE optional	}|
+	{ ID id-ServingCellMO							CRITICALITY ignore	TYPE ServingCellMO										PRESENCE optional	}|
+	{ ID id-new-gNB-CU-UE-F1AP-ID					CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID									PRESENCE optional }|
+	{ ID id-RANUEID									CRITICALITY ignore	TYPE RANUEID											PRESENCE optional	}|
+	{ ID id-TraceActivation							CRITICALITY ignore	TYPE TraceActivation									PRESENCE optional	}|
+	{ ID id-AdditionalRRMPriorityIndex				CRITICALITY ignore	TYPE AdditionalRRMPriorityIndex						PRESENCE optional }|
+	{ ID id-BHChannels-ToBeSetup-List				CRITICALITY reject	TYPE BHChannels-ToBeSetup-List						PRESENCE optional	}|
+	{ ID id-ConfiguredBAPAddress					CRITICALITY reject	TYPE BAPAddress											PRESENCE optional	}|
+	{ ID id-NRV2XServicesAuthorized					CRITICALITY ignore	TYPE NRV2XServicesAuthorized							PRESENCE optional }|
+	{ ID id-LTEV2XServicesAuthorized				CRITICALITY ignore	TYPE LTEV2XServicesAuthorized						PRESENCE optional }|
+	{ ID id-NRUESidelinkAggregateMaximumBitrate		CRITICALITY ignore	TYPE NRUESidelinkAggregateMaximumBitrate			PRESENCE optional }|
+	{ ID id-LTEUESidelinkAggregateMaximumBitrate	CRITICALITY ignore	TYPE LTEUESidelinkAggregateMaximumBitrate		PRESENCE optional }|
+	{ ID id-PC5LinkAMBR								CRITICALITY ignore	TYPE BitRate											PRESENCE optional}|
+	{ ID id-SLDRBs-ToBeSetup-List					CRITICALITY reject	TYPE SLDRBs-ToBeSetup-List							PRESENCE optional	}|
+	{ ID id-ConditionalInterDUMobilityInformation	CRITICALITY reject	TYPE ConditionalInterDUMobilityInformation		PRESENCE optional}|
+	{ ID id-ManagementBasedMDTPLMNList				CRITICALITY ignore	TYPE 		MDTPLMNList									PRESENCE optional }|
+	{ ID id-ServingNID								CRITICALITY reject	TYPE NID												PRESENCE optional },
+	...
+} 
+
+Candidate-SpCell-List::= SEQUENCE (SIZE(1..maxnoofCandidateSpCells)) OF ProtocolIE-SingleContainer { { Candidate-SpCell-ItemIEs} }
+SCell-ToBeSetup-List::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-ToBeSetup-ItemIEs} }
+SRBs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-ToBeSetup-ItemIEs} }
+DRBs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ToBeSetup-ItemIEs} }
+BHChannels-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-ToBeSetup-ItemIEs} }
+SLDRBs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ToBeSetup-ItemIEs} }
+
+Candidate-SpCell-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-Candidate-SpCell-Item					CRITICALITY ignore	TYPE Candidate-SpCell-Item						PRESENCE mandatory	},
+	...
+}
+
+
+SCell-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SCell-ToBeSetup-Item						CRITICALITY ignore	TYPE SCell-ToBeSetup-Item					PRESENCE mandatory	},
+	...
+}
+
+SRBs-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-ToBeSetup-Item		CRITICALITY reject		TYPE SRBs-ToBeSetup-Item		PRESENCE mandatory},
+	...
+}
+
+DRBs-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-ToBeSetup-Item					CRITICALITY reject	TYPE DRBs-ToBeSetup-Item					PRESENCE mandatory},
+	...
+}
+
+BHChannels-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-ToBeSetup-Item					CRITICALITY reject	TYPE BHChannels-ToBeSetup-Item					PRESENCE mandatory},
+	...
+}
+
+SLDRBs-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-ToBeSetup-Item					CRITICALITY reject	TYPE SLDRBs-ToBeSetup-Item					PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- UE CONTEXT SETUP RESPONSE
+--
+-- **************************************************************
+
+UEContextSetupResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextSetupResponseIEs} },
+	...
+}
+
+
+UEContextSetupResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-DUtoCURRCInformation					CRITICALITY reject	TYPE DUtoCURRCInformation							PRESENCE mandatory }|
+	{ ID id-C-RNTI									CRITICALITY ignore	TYPE C-RNTI											PRESENCE optional	}|
+	{ ID id-ResourceCoordinationTransferContainer	CRITICALITY ignore	TYPE ResourceCoordinationTransferContainer	PRESENCE optional	}|
+	{ ID id-FullConfiguration						CRITICALITY reject	TYPE FullConfiguration								PRESENCE optional	}|
+	{ ID id-DRBs-Setup-List							CRITICALITY ignore	TYPE DRBs-Setup-List								PRESENCE optional	}|
+	{ ID id-SRBs-FailedToBeSetup-List				CRITICALITY ignore	TYPE SRBs-FailedToBeSetup-List					PRESENCE optional	}|
+	{ ID id-DRBs-FailedToBeSetup-List				CRITICALITY ignore	TYPE DRBs-FailedToBeSetup-List					PRESENCE optional	}|
+	{ ID id-SCell-FailedtoSetup-List				CRITICALITY ignore	TYPE SCell-FailedtoSetup-List					PRESENCE optional	}|
+	{ ID id-InactivityMonitoringResponse			CRITICALITY reject	TYPE InactivityMonitoringResponse				PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics					CRITICALITY ignore	TYPE CriticalityDiagnostics						PRESENCE optional	}|
+	{ ID id-SRBs-Setup-List							CRITICALITY ignore	TYPE SRBs-Setup-List								PRESENCE optional	}|
+	{ ID id-BHChannels-Setup-List					CRITICALITY ignore	TYPE BHChannels-Setup-List						PRESENCE optional	}|
+	{ ID id-BHChannels-FailedToBeSetup-List			CRITICALITY ignore	TYPE BHChannels-FailedToBeSetup-List			PRESENCE optional	}|
+	{ ID id-SLDRBs-Setup-List						CRITICALITY ignore	TYPE SLDRBs-Setup-List								PRESENCE optional	}|
+	{ ID id-SLDRBs-FailedToBeSetup-List				CRITICALITY ignore	TYPE SLDRBs-FailedToBeSetup-List				PRESENCE optional	}|
+	{ ID id-requestedTargetCellGlobalID				CRITICALITY reject	TYPE NRCGI											PRESENCE optional},
+	...
+}
+
+DRBs-Setup-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-Setup-ItemIEs} }
+
+
+SRBs-FailedToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-FailedToBeSetup-ItemIEs} }
+DRBs-FailedToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-FailedToBeSetup-ItemIEs} }
+SCell-FailedtoSetup-List ::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-FailedtoSetup-ItemIEs} }
+SRBs-Setup-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-Setup-ItemIEs} }
+BHChannels-Setup-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-Setup-ItemIEs} }
+BHChannels-FailedToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-FailedToBeSetup-ItemIEs} }
+
+DRBs-Setup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-Setup-Item						CRITICALITY ignore	TYPE DRBs-Setup-Item						PRESENCE mandatory},
+	...
+}
+
+SRBs-Setup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-Setup-Item						CRITICALITY ignore	TYPE SRBs-Setup-Item						PRESENCE mandatory},
+	...
+}
+
+SRBs-FailedToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-FailedToBeSetup-Item		CRITICALITY ignore		TYPE SRBs-FailedToBeSetup-Item		PRESENCE mandatory},
+	...
+}
+
+
+DRBs-FailedToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-FailedToBeSetup-Item		CRITICALITY ignore	TYPE DRBs-FailedToBeSetup-Item			PRESENCE mandatory},
+	...
+}
+
+SCell-FailedtoSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SCell-FailedtoSetup-Item			CRITICALITY ignore	TYPE SCell-FailedtoSetup-Item			PRESENCE mandatory},
+	...
+}
+
+BHChannels-Setup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-Setup-Item						CRITICALITY ignore	TYPE BHChannels-Setup-Item						PRESENCE mandatory},
+	...
+}
+
+BHChannels-FailedToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-FailedToBeSetup-Item						CRITICALITY ignore	TYPE BHChannels-FailedToBeSetup-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-Setup-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-Setup-ItemIEs} }
+
+SLDRBs-FailedToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-FailedToBeSetup-ItemIEs} }
+
+SLDRBs-Setup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-Setup-Item						CRITICALITY ignore	TYPE SLDRBs-Setup-Item						PRESENCE mandatory},
+	...
+}
+
+SLDRBs-FailedToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-FailedToBeSetup-Item		CRITICALITY ignore	TYPE SLDRBs-FailedToBeSetup-Item			PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- UE CONTEXT SETUP FAILURE
+--
+-- **************************************************************
+
+UEContextSetupFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextSetupFailureIEs} },
+	...
+}
+
+UEContextSetupFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID			PRESENCE optional	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	}|
+	{ ID id-Potential-SpCell-List		CRITICALITY ignore	TYPE Potential-SpCell-List		PRESENCE optional	}|
+	{ ID id-requestedTargetCellGlobalID	CRITICALITY reject	TYPE NRCGI						PRESENCE optional},
+	...
+}
+
+Potential-SpCell-List::= SEQUENCE (SIZE(0..maxnoofPotentialSpCells)) OF ProtocolIE-SingleContainer { { Potential-SpCell-ItemIEs} }
+
+Potential-SpCell-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-Potential-SpCell-Item				CRITICALITY ignore	TYPE Potential-SpCell-Item					PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- UE Context Release Request ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- UE Context Release Request
+--
+-- **************************************************************
+
+UEContextReleaseRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ UEContextReleaseRequestIEs}},
+	...
+}
+
+UEContextReleaseRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-Cause							CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	}|
+	{ ID id-targetCellsToCancel				CRITICALITY reject	TYPE TargetCellList					PRESENCE optional		},
+	...
+}
+
+
+-- **************************************************************
+--
+-- UE Context Release (gNB-CU initiated) ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- UE CONTEXT RELEASE COMMAND 
+--
+-- **************************************************************
+
+UEContextReleaseCommand ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextReleaseCommandIEs} },
+	...
+}
+
+UEContextReleaseCommandIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-Cause							CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	}|
+	{ ID id-RRCContainer					CRITICALITY ignore	TYPE RRCContainer					PRESENCE optional	}|
+	{ ID id-SRBID							CRITICALITY ignore	TYPE SRBID							PRESENCE conditional	}|
+	{ ID id-oldgNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID				PRESENCE optional	}|
+	{ ID id-ExecuteDuplication				CRITICALITY ignore	TYPE ExecuteDuplication				PRESENCE optional}|
+	{ ID id-RRCDeliveryStatusRequest		CRITICALITY ignore	TYPE RRCDeliveryStatusRequest		PRESENCE optional }|
+	{ ID id-targetCellsToCancel				CRITICALITY reject	TYPE TargetCellList					PRESENCE optional},
+	...
+} 
+
+-- **************************************************************
+--
+-- UE CONTEXT RELEASE COMPLETE
+--
+-- **************************************************************
+
+UEContextReleaseComplete ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextReleaseCompleteIEs} },
+	...
+}
+
+
+UEContextReleaseCompleteIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+-- UE Context Modification ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- UE CONTEXT MODIFICATION REQUEST
+--
+-- **************************************************************
+
+UEContextModificationRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextModificationRequestIEs} },
+	...
+}
+
+UEContextModificationRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID									PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID									PRESENCE mandatory	}|
+	{ ID id-SpCell-ID								CRITICALITY ignore	TYPE NRCGI												PRESENCE optional	}|
+	{ ID id-ServCellIndex							CRITICALITY reject	TYPE ServCellIndex										PRESENCE optional	}|
+	{ ID id-SpCellULConfigured						CRITICALITY ignore	TYPE CellULConfigured									PRESENCE optional	}|
+	{ ID id-DRXCycle								CRITICALITY ignore	TYPE DRXCycle											PRESENCE optional	}|
+	{ ID id-CUtoDURRCInformation					CRITICALITY reject	TYPE CUtoDURRCInformation								PRESENCE optional	}|
+	{ ID id-TransmissionActionIndicator				CRITICALITY ignore	TYPE TransmissionActionIndicator					PRESENCE optional	}|
+	{ ID id-ResourceCoordinationTransferContainer	CRITICALITY ignore	TYPE ResourceCoordinationTransferContainer		PRESENCE optional	}|
+	{ ID id-RRCReconfigurationCompleteIndicator		CRITICALITY ignore	TYPE RRCReconfigurationCompleteIndicator			PRESENCE optional	}|
+	{ ID id-RRCContainer							CRITICALITY reject	TYPE RRCContainer										PRESENCE optional	}|
+	{ ID id-SCell-ToBeSetupMod-List					CRITICALITY ignore	TYPE SCell-ToBeSetupMod-List							PRESENCE optional	}|
+	{ ID id-SCell-ToBeRemoved-List					CRITICALITY ignore	TYPE SCell-ToBeRemoved-List 							PRESENCE optional }|
+	{ ID id-SRBs-ToBeSetupMod-List					CRITICALITY reject	TYPE SRBs-ToBeSetupMod-List							PRESENCE optional	}|
+	{ ID id-DRBs-ToBeSetupMod-List					CRITICALITY reject	TYPE DRBs-ToBeSetupMod-List							PRESENCE optional	}|
+	{ ID id-DRBs-ToBeModified-List					CRITICALITY reject	TYPE DRBs-ToBeModified-List							PRESENCE optional	}|
+	{ ID id-SRBs-ToBeReleased-List					CRITICALITY reject	TYPE SRBs-ToBeReleased-List							PRESENCE optional	}|
+	{ ID id-DRBs-ToBeReleased-List					CRITICALITY reject	TYPE DRBs-ToBeReleased-List							PRESENCE optional	}|
+	{ ID id-InactivityMonitoringRequest				CRITICALITY reject	TYPE InactivityMonitoringRequest					PRESENCE optional	}|
+	{ ID id-RAT-FrequencyPriorityInformation		CRITICALITY reject	TYPE RAT-FrequencyPriorityInformation				PRESENCE optional	}|
+	{ ID id-DRXConfigurationIndicator				CRITICALITY ignore	TYPE DRXConfigurationIndicator						PRESENCE optional	}|
+	{ ID id-RLCFailureIndication					CRITICALITY ignore	TYPE RLCFailureIndication								PRESENCE optional	}|
+	{ ID id-UplinkTxDirectCurrentListInformation	CRITICALITY ignore	TYPE UplinkTxDirectCurrentListInformation		PRESENCE optional	}|
+	{ ID id-GNB-DUConfigurationQuery				CRITICALITY reject	TYPE GNB-DUConfigurationQuery						PRESENCE optional	}|
+	{ ID id-GNB-DU-UE-AMBR-UL						CRITICALITY ignore	TYPE BitRate											PRESENCE optional	}|
+	{ ID id-ExecuteDuplication						CRITICALITY ignore	TYPE ExecuteDuplication									PRESENCE optional}|
+	{ ID id-RRCDeliveryStatusRequest				CRITICALITY ignore	TYPE RRCDeliveryStatusRequest						PRESENCE optional }|
+	{ ID id-ResourceCoordinationTransferInformation	CRITICALITY ignore	TYPE ResourceCoordinationTransferInformation	PRESENCE optional	}|
+	{ ID id-ServingCellMO							CRITICALITY ignore	TYPE ServingCellMO										PRESENCE optional	}|
+	{ ID id-NeedforGap								CRITICALITY ignore	TYPE NeedforGap											PRESENCE optional	}|
+	{ ID id-FullConfiguration						CRITICALITY reject	TYPE FullConfiguration									PRESENCE optional	}|
+	{ ID id-AdditionalRRMPriorityIndex				CRITICALITY ignore	TYPE AdditionalRRMPriorityIndex						PRESENCE optional }|
+	{ ID id-LowerLayerPresenceStatusChange			CRITICALITY ignore	TYPE LowerLayerPresenceStatusChange				PRESENCE optional	}|
+	{ ID id-BHChannels-ToBeSetupMod-List			CRITICALITY reject	TYPE BHChannels-ToBeSetupMod-List					PRESENCE optional	}|
+	{ ID id-BHChannels-ToBeModified-List			CRITICALITY reject	TYPE BHChannels-ToBeModified-List					PRESENCE optional	}|
+	{ ID id-BHChannels-ToBeReleased-List			CRITICALITY reject	TYPE BHChannels-ToBeReleased-List					PRESENCE optional	}|
+	{ ID id-NRV2XServicesAuthorized					CRITICALITY ignore	TYPE NRV2XServicesAuthorized							PRESENCE optional }|
+	{ ID id-LTEV2XServicesAuthorized				CRITICALITY ignore	TYPE LTEV2XServicesAuthorized						PRESENCE optional }|
+	{ ID id-NRUESidelinkAggregateMaximumBitrate		CRITICALITY ignore	TYPE NRUESidelinkAggregateMaximumBitrate			PRESENCE optional }|
+	{ ID id-LTEUESidelinkAggregateMaximumBitrate	CRITICALITY ignore	TYPE LTEUESidelinkAggregateMaximumBitrate		PRESENCE optional }|
+	{ ID id-PC5LinkAMBR								CRITICALITY ignore	TYPE BitRate											PRESENCE optional}|
+	{ ID id-SLDRBs-ToBeSetupMod-List				CRITICALITY reject	TYPE SLDRBs-ToBeSetupMod-List						PRESENCE optional	}|
+	{ ID id-SLDRBs-ToBeModified-List				CRITICALITY reject	TYPE SLDRBs-ToBeModified-List						PRESENCE optional	}|
+	{ ID id-SLDRBs-ToBeReleased-List				CRITICALITY reject	TYPE SLDRBs-ToBeReleased-List						PRESENCE optional	}|
+	{ ID id-ConditionalIntraDUMobilityInformation	CRITICALITY reject	TYPE ConditionalIntraDUMobilityInformation		PRESENCE optional},
+	...
+} 
+
+SCell-ToBeSetupMod-List::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-ToBeSetupMod-ItemIEs} }
+SCell-ToBeRemoved-List::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-ToBeRemoved-ItemIEs} }
+SRBs-ToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-ToBeSetupMod-ItemIEs} }
+DRBs-ToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ToBeSetupMod-ItemIEs} }
+BHChannels-ToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-ToBeSetupMod-ItemIEs} }
+
+DRBs-ToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ToBeModified-ItemIEs} }
+BHChannels-ToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-ToBeModified-ItemIEs} }
+SRBs-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-ToBeReleased-ItemIEs} }
+DRBs-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ToBeReleased-ItemIEs} }
+BHChannels-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-ToBeReleased-ItemIEs} }
+
+SCell-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SCell-ToBeSetupMod-Item			CRITICALITY ignore	TYPE SCell-ToBeSetupMod-Item			PRESENCE mandatory	},
+	...
+}
+
+SCell-ToBeRemoved-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SCell-ToBeRemoved-Item			CRITICALITY ignore	TYPE SCell-ToBeRemoved-Item			PRESENCE mandatory	},
+	...
+}
+
+
+SRBs-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-ToBeSetupMod-Item		CRITICALITY reject	TYPE SRBs-ToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+
+DRBs-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-ToBeSetupMod-Item		CRITICALITY reject	TYPE DRBs-ToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+DRBs-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-ToBeModified-Item		CRITICALITY reject	TYPE DRBs-ToBeModified-Item			PRESENCE mandatory},
+	...
+}
+
+
+SRBs-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-ToBeReleased-Item	CRITICALITY reject	TYPE SRBs-ToBeReleased-Item		PRESENCE mandatory},
+	...
+}
+
+DRBs-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-ToBeReleased-Item		CRITICALITY reject	TYPE DRBs-ToBeReleased-Item		PRESENCE mandatory},
+	...
+}
+
+BHChannels-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-ToBeSetupMod-Item		CRITICALITY reject	TYPE BHChannels-ToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+BHChannels-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-ToBeModified-Item		CRITICALITY reject	TYPE BHChannels-ToBeModified-Item		PRESENCE mandatory},
+	...
+}
+
+BHChannels-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-ToBeReleased-Item		CRITICALITY reject	TYPE BHChannels-ToBeReleased-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-ToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ToBeSetupMod-ItemIEs} }
+SLDRBs-ToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ToBeModified-ItemIEs} }
+SLDRBs-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ToBeReleased-ItemIEs} }
+
+SLDRBs-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-ToBeSetupMod-Item		CRITICALITY reject	TYPE SLDRBs-ToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-ToBeModified-Item		CRITICALITY reject	TYPE SLDRBs-ToBeModified-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-ToBeReleased-Item		CRITICALITY reject	TYPE SLDRBs-ToBeReleased-Item		PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- UE CONTEXT MODIFICATION RESPONSE
+--
+-- **************************************************************
+
+UEContextModificationResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextModificationResponseIEs} },
+	...
+}
+
+
+UEContextModificationResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-ResourceCoordinationTransferContainer	CRITICALITY ignore	TYPE ResourceCoordinationTransferContainer	PRESENCE optional	}|
+	{ ID id-DUtoCURRCInformation					CRITICALITY reject	TYPE DUtoCURRCInformation							PRESENCE optional}|
+	{ ID id-DRBs-SetupMod-List						CRITICALITY ignore	TYPE DRBs-SetupMod-List								PRESENCE optional}|
+	{ ID id-DRBs-Modified-List						CRITICALITY ignore	TYPE DRBs-Modified-List								PRESENCE optional}|
+	{ ID id-SRBs-FailedToBeSetupMod-List			CRITICALITY ignore	TYPE SRBs-FailedToBeSetupMod-List				PRESENCE optional	}|
+	{ ID id-DRBs-FailedToBeSetupMod-List			CRITICALITY ignore	TYPE DRBs-FailedToBeSetupMod-List				PRESENCE optional	}|
+	{ ID id-SCell-FailedtoSetupMod-List				CRITICALITY ignore	TYPE SCell-FailedtoSetupMod-List				PRESENCE optional	}|
+	{ ID id-DRBs-FailedToBeModified-List			CRITICALITY ignore	TYPE DRBs-FailedToBeModified-List				PRESENCE optional	}|
+	{ ID id-InactivityMonitoringResponse			CRITICALITY reject	TYPE InactivityMonitoringResponse				PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics					CRITICALITY ignore	TYPE CriticalityDiagnostics						PRESENCE optional	}|
+	{ ID id-C-RNTI									CRITICALITY ignore	TYPE C-RNTI											PRESENCE optional	}|
+	{ ID id-Associated-SCell-List					CRITICALITY ignore  TYPE Associated-SCell-List						PRESENCE optional	}|
+	{ ID id-SRBs-SetupMod-List						CRITICALITY ignore	TYPE SRBs-SetupMod-List								PRESENCE optional	}|
+	{ ID id-SRBs-Modified-List						CRITICALITY ignore	TYPE SRBs-Modified-List								PRESENCE optional	}|
+	{ ID id-FullConfiguration						CRITICALITY reject	TYPE FullConfiguration								PRESENCE optional	}|
+	{ ID id-BHChannels-SetupMod-List				CRITICALITY ignore	TYPE BHChannels-SetupMod-List					PRESENCE optional}|
+	{ ID id-BHChannels-Modified-List				CRITICALITY ignore	TYPE BHChannels-Modified-List					PRESENCE optional}|
+	{ ID id-BHChannels-FailedToBeSetupMod-List		CRITICALITY ignore	TYPE BHChannels-FailedToBeSetupMod-List		PRESENCE optional	}|
+	{ ID id-BHChannels-FailedToBeModified-List		CRITICALITY ignore	TYPE BHChannels-FailedToBeModified-List		PRESENCE optional	}|
+	{ ID id-SLDRBs-SetupMod-List					CRITICALITY ignore	TYPE SLDRBs-SetupMod-List							PRESENCE optional	}|
+	{ ID id-SLDRBs-Modified-List					CRITICALITY ignore	TYPE SLDRBs-Modified-List							PRESENCE optional	}|
+	{ ID id-SLDRBs-FailedToBeSetupMod-List			CRITICALITY ignore	TYPE SLDRBs-FailedToBeSetupMod-List			PRESENCE optional	}|
+	{ ID id-SLDRBs-FailedToBeModified-List			CRITICALITY ignore	TYPE SLDRBs-FailedToBeModified-List			PRESENCE optional	}|
+	{ ID id-requestedTargetCellGlobalID				CRITICALITY reject	TYPE NRCGI											PRESENCE optional},
+	...
+}
+
+
+DRBs-SetupMod-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-SetupMod-ItemIEs} }
+DRBs-Modified-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-Modified-ItemIEs } } 
+SRBs-SetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-SetupMod-ItemIEs} }
+SRBs-Modified-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-Modified-ItemIEs } }
+DRBs-FailedToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-FailedToBeModified-ItemIEs} }
+SRBs-FailedToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-FailedToBeSetupMod-ItemIEs} }
+DRBs-FailedToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-FailedToBeSetupMod-ItemIEs} }
+SCell-FailedtoSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-FailedtoSetupMod-ItemIEs} }
+BHChannels-SetupMod-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-SetupMod-ItemIEs} }
+BHChannels-Modified-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-Modified-ItemIEs } } 
+BHChannels-FailedToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-FailedToBeModified-ItemIEs} }
+BHChannels-FailedToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-FailedToBeSetupMod-ItemIEs} }
+
+Associated-SCell-List ::= SEQUENCE (SIZE(1.. maxnoofSCells)) OF ProtocolIE-SingleContainer { { Associated-SCell-ItemIEs} }
+
+DRBs-SetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-SetupMod-Item		CRITICALITY ignore		TYPE DRBs-SetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+
+DRBs-Modified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-Modified-Item			CRITICALITY ignore	TYPE DRBs-Modified-Item		PRESENCE mandatory},
+	...
+}
+
+SRBs-SetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-SetupMod-Item		CRITICALITY ignore		TYPE SRBs-SetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+
+SRBs-Modified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-Modified-Item			CRITICALITY ignore	TYPE SRBs-Modified-Item		PRESENCE mandatory},
+	...
+}
+
+SRBs-FailedToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-FailedToBeSetupMod-Item		CRITICALITY ignore	TYPE SRBs-FailedToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+
+DRBs-FailedToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-FailedToBeSetupMod-Item		CRITICALITY ignore	TYPE DRBs-FailedToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+
+DRBs-FailedToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-FailedToBeModified-Item		CRITICALITY ignore	TYPE DRBs-FailedToBeModified-Item		PRESENCE mandatory},
+	...
+}
+
+SCell-FailedtoSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SCell-FailedtoSetupMod-Item			CRITICALITY ignore	TYPE SCell-FailedtoSetupMod-Item			PRESENCE mandatory},
+	...
+}
+
+Associated-SCell-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-Associated-SCell-Item			CRITICALITY ignore	TYPE Associated-SCell-Item			PRESENCE mandatory},
+	...
+}
+
+BHChannels-SetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-SetupMod-Item		CRITICALITY ignore		TYPE BHChannels-SetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+
+BHChannels-Modified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-Modified-Item		CRITICALITY ignore	TYPE BHChannels-Modified-Item		PRESENCE mandatory},
+	...
+}
+
+BHChannels-FailedToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-FailedToBeSetupMod-Item		CRITICALITY ignore	TYPE BHChannels-FailedToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+BHChannels-FailedToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-FailedToBeModified-Item		CRITICALITY ignore	TYPE BHChannels-FailedToBeModified-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-SetupMod-List 			::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-SetupMod-ItemIEs} }
+SLDRBs-Modified-List				::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-Modified-ItemIEs } } 
+SLDRBs-FailedToBeModified-List 	::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-FailedToBeModified-ItemIEs} }
+SLDRBs-FailedToBeSetupMod-List 	::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-FailedToBeSetupMod-ItemIEs} }
+
+SLDRBs-SetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-SetupMod-Item		CRITICALITY ignore		TYPE SLDRBs-SetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-Modified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-Modified-Item			CRITICALITY ignore	TYPE SLDRBs-Modified-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-FailedToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-FailedToBeSetupMod-Item		CRITICALITY ignore	TYPE SLDRBs-FailedToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-FailedToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-FailedToBeModified-Item		CRITICALITY ignore	TYPE SLDRBs-FailedToBeModified-Item		PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- UE CONTEXT MODIFICATION FAILURE
+--
+-- **************************************************************
+
+UEContextModificationFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextModificationFailureIEs} },
+	...
+}
+
+UEContextModificationFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-Cause							CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics			CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional	}|
+	{ ID id-requestedTargetCellGlobalID		CRITICALITY reject	TYPE NRCGI							PRESENCE optional},
+	...
+}
+
+
+-- **************************************************************
+--
+-- UE Context Modification Required (gNB-DU initiated) ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- UE CONTEXT MODIFICATION REQUIRED
+--
+-- **************************************************************
+
+UEContextModificationRequired ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextModificationRequiredIEs} },
+	...
+}
+
+UEContextModificationRequiredIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-ResourceCoordinationTransferContainer		CRITICALITY ignore	TYPE ResourceCoordinationTransferContainer		PRESENCE optional	}|
+	{ ID id-DUtoCURRCInformation						CRITICALITY reject	TYPE DUtoCURRCInformation							PRESENCE optional}|
+	{ ID id-DRBs-Required-ToBeModified-List				CRITICALITY reject	TYPE DRBs-Required-ToBeModified-List				PRESENCE optional}|
+	{ ID id-SRBs-Required-ToBeReleased-List				CRITICALITY reject	TYPE SRBs-Required-ToBeReleased-List				PRESENCE optional}|
+	{ ID id-DRBs-Required-ToBeReleased-List				CRITICALITY reject	TYPE DRBs-Required-ToBeReleased-List				PRESENCE optional}|
+	{ ID id-Cause										CRITICALITY ignore	TYPE Cause												PRESENCE mandatory	}|
+	{ ID id-BHChannels-Required-ToBeReleased-List		CRITICALITY reject	TYPE BHChannels-Required-ToBeReleased-List		PRESENCE optional}|
+	{ ID id-SLDRBs-Required-ToBeModified-List			CRITICALITY reject	TYPE SLDRBs-Required-ToBeModified-List			PRESENCE optional}|
+	{ ID id-SLDRBs-Required-ToBeReleased-List			CRITICALITY reject	TYPE SLDRBs-Required-ToBeReleased-List			PRESENCE optional}|
+	{ ID id-targetCellsToCancel							CRITICALITY reject	TYPE TargetCellList										PRESENCE optional},
+	...
+} 
+
+DRBs-Required-ToBeModified-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-Required-ToBeModified-ItemIEs } }
+DRBs-Required-ToBeReleased-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-Required-ToBeReleased-ItemIEs } }
+
+SRBs-Required-ToBeReleased-List::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-Required-ToBeReleased-ItemIEs } }
+
+BHChannels-Required-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-Required-ToBeReleased-ItemIEs } }
+
+DRBs-Required-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-Required-ToBeModified-Item			CRITICALITY reject	TYPE DRBs-Required-ToBeModified-Item		PRESENCE mandatory},
+	...
+}
+
+DRBs-Required-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-Required-ToBeReleased-Item			CRITICALITY reject	TYPE DRBs-Required-ToBeReleased-Item		PRESENCE mandatory},
+	...
+}
+
+SRBs-Required-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-Required-ToBeReleased-Item			CRITICALITY reject	TYPE SRBs-Required-ToBeReleased-Item			PRESENCE mandatory},
+	...
+}
+
+BHChannels-Required-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-Required-ToBeReleased-Item			CRITICALITY reject	TYPE BHChannels-Required-ToBeReleased-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-Required-ToBeModified-List::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-Required-ToBeModified-ItemIEs } }
+SLDRBs-Required-ToBeReleased-List::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-Required-ToBeReleased-ItemIEs } }
+
+SLDRBs-Required-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-Required-ToBeModified-Item			CRITICALITY reject	TYPE SLDRBs-Required-ToBeModified-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-Required-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-Required-ToBeReleased-Item			CRITICALITY reject	TYPE SLDRBs-Required-ToBeReleased-Item		PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- UE CONTEXT MODIFICATION CONFIRM
+--
+-- **************************************************************
+
+UEContextModificationConfirm::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextModificationConfirmIEs} },
+	...
+}
+
+
+UEContextModificationConfirmIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-ResourceCoordinationTransferContainer		CRITICALITY ignore	TYPE ResourceCoordinationTransferContainer		PRESENCE optional	}|
+	{ ID id-DRBs-ModifiedConf-List						CRITICALITY ignore	TYPE DRBs-ModifiedConf-List							PRESENCE optional}|
+	{ ID id-RRCContainer								CRITICALITY ignore	TYPE RRCContainer										PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics						CRITICALITY ignore	TYPE CriticalityDiagnostics							PRESENCE optional	}|
+	{ ID id-ExecuteDuplication							CRITICALITY ignore	TYPE ExecuteDuplication								PRESENCE optional}|
+	{ ID id-ResourceCoordinationTransferInformation		CRITICALITY ignore	TYPE ResourceCoordinationTransferInformation	PRESENCE optional	}|
+	{ ID id-SLDRBs-ModifiedConf-List					CRITICALITY ignore	TYPE SLDRBs-ModifiedConf-List						PRESENCE optional},
+	...
+}
+
+DRBs-ModifiedConf-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ModifiedConf-ItemIEs } }
+
+DRBs-ModifiedConf-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-ModifiedConf-Item		CRITICALITY ignore	TYPE DRBs-ModifiedConf-Item			PRESENCE mandatory},
+	...
+}
+
+SLDRBs-ModifiedConf-List::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ModifiedConf-ItemIEs } }
+
+SLDRBs-ModifiedConf-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-ModifiedConf-Item		CRITICALITY ignore	TYPE SLDRBs-ModifiedConf-Item			PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- UE CONTEXT MODIFICATION REFUSE
+--
+-- **************************************************************
+
+UEContextModificationRefuse::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextModificationRefuseIEs} },
+	...
+}
+
+
+UEContextModificationRefuseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-Cause							CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics			CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional	},
+	...
+}
+
+
+-- ************************************************************** 
+-- 
+-- WRITE-REPLACE WARNING ELEMENTARY PROCEDURE 
+-- 
+-- ************************************************************** 
+
+-- ************************************************************** 
+-- 
+-- Write-Replace Warning Request 
+-- 
+-- ************************************************************** 
+
+WriteReplaceWarningRequest ::= SEQUENCE { 
+	protocolIEs ProtocolIE-Container { {WriteReplaceWarningRequestIEs} }, 
+	... 
+} 
+
+WriteReplaceWarningRequestIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID						CRITICALITY reject	TYPE TransactionID								PRESENCE mandatory	}|
+	{ ID id-PWSSystemInformation 				CRITICALITY reject	TYPE PWSSystemInformation 						PRESENCE mandatory }| 
+	{ ID id-RepetitionPeriod 					CRITICALITY reject	TYPE RepetitionPeriod 							PRESENCE mandatory }| 
+	{ ID id-NumberofBroadcastRequest 			CRITICALITY reject	TYPE NumberofBroadcastRequest 				PRESENCE mandatory }| 
+	{ ID id-Cells-To-Be-Broadcast-List			CRITICALITY reject	TYPE Cells-To-Be-Broadcast-List				PRESENCE optional	},
+	... 
+}
+
+Cells-To-Be-Broadcast-List		::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Cells-To-Be-Broadcast-List-ItemIEs } }
+
+Cells-To-Be-Broadcast-List-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Cells-To-Be-Broadcast-Item		CRITICALITY reject	TYPE	Cells-To-Be-Broadcast-Item		PRESENCE mandatory	},
+	...
+}
+
+-- ************************************************************** 
+-- 
+-- Write-Replace Warning Response 
+-- 
+-- ************************************************************** 
+
+WriteReplaceWarningResponse ::= SEQUENCE { 
+	protocolIEs ProtocolIE-Container { {WriteReplaceWarningResponseIEs} }, 
+	... 
+} 
+
+WriteReplaceWarningResponseIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID										PRESENCE mandatory	}|
+	{ ID id-Cells-Broadcast-Completed-List			CRITICALITY reject	TYPE Cells-Broadcast-Completed-List				PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics					CRITICALITY ignore	TYPE CriticalityDiagnostics							PRESENCE optional	}|
+	{ ID id-Dedicated-SIDelivery-NeededUE-List		CRITICALITY ignore	TYPE Dedicated-SIDelivery-NeededUE-List			PRESENCE optional	},
+	...
+}
+
+Cells-Broadcast-Completed-List		::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Cells-Broadcast-Completed-List-ItemIEs } }
+
+Cells-Broadcast-Completed-List-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Cells-Broadcast-Completed-Item		CRITICALITY reject	TYPE	Cells-Broadcast-Completed-Item		PRESENCE mandatory	},
+	...
+}
+
+
+-- ************************************************************** 
+-- 
+-- PWS CANCEL ELEMENTARY PROCEDURE 
+-- 
+-- ************************************************************** 
+
+-- ************************************************************** 
+-- 
+-- PWS Cancel Request 
+-- 
+-- ************************************************************** 
+
+PWSCancelRequest ::= SEQUENCE { 
+	protocolIEs ProtocolIE-Container { {PWSCancelRequestIEs} }, 
+	... 
+} 
+
+PWSCancelRequestIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID							CRITICALITY reject TYPE TransactionID									PRESENCE mandatory	}|
+	{ ID id-NumberofBroadcastRequest 				CRITICALITY reject TYPE NumberofBroadcastRequest						PRESENCE mandatory }| 
+	{ ID id-Broadcast-To-Be-Cancelled-List			CRITICALITY reject TYPE Broadcast-To-Be-Cancelled-List				PRESENCE optional	}|
+	{ ID id-Cancel-all-Warning-Messages-Indicator	CRITICALITY reject TYPE Cancel-all-Warning-Messages-Indicator	PRESENCE optional	}|
+	{ ID id-NotificationInformation					CRITICALITY reject TYPE NotificationInformation						PRESENCE optional},
+	... 
+}
+
+Broadcast-To-Be-Cancelled-List		::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Broadcast-To-Be-Cancelled-List-ItemIEs } }
+
+Broadcast-To-Be-Cancelled-List-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Broadcast-To-Be-Cancelled-Item		CRITICALITY reject	TYPE	Broadcast-To-Be-Cancelled-Item		PRESENCE mandatory	},
+	...
+}
+
+-- ************************************************************** 
+-- 
+-- PWS Cancel Response 
+-- 
+-- ************************************************************** 
+
+PWSCancelResponse ::= SEQUENCE { 
+	protocolIEs ProtocolIE-Container { {PWSCancelResponseIEs} }, 
+	... 
+} 
+
+PWSCancelResponseIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID						PRESENCE mandatory	}|
+	{ ID id-Cells-Broadcast-Cancelled-List	CRITICALITY reject	TYPE Cells-Broadcast-Cancelled-List	PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics			CRITICALITY ignore	TYPE CriticalityDiagnostics				PRESENCE optional	},
+	... 
+}
+
+Cells-Broadcast-Cancelled-List		::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Cells-Broadcast-Cancelled-List-ItemIEs } }
+
+Cells-Broadcast-Cancelled-List-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Cells-Broadcast-Cancelled-Item		CRITICALITY reject	TYPE	Cells-Broadcast-Cancelled-Item		PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- UE Inactivity Notification ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- UE Inactivity Notification
+--
+-- **************************************************************
+
+UEInactivityNotification ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ UEInactivityNotificationIEs}},
+	...
+}
+
+UEInactivityNotificationIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID							PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID							PRESENCE mandatory	}|
+	{ ID id-DRB-Activity-List							CRITICALITY reject	TYPE DRB-Activity-List							PRESENCE mandatory	}	,
+	...
+}
+
+DRB-Activity-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRB-Activity-ItemIEs } }
+
+DRB-Activity-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRB-Activity-Item			CRITICALITY reject	TYPE DRB-Activity-Item		PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- Initial UL RRC Message Transfer ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- INITIAL UL RRC Message Transfer
+--
+-- **************************************************************
+
+InitialULRRCMessageTransfer ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ InitialULRRCMessageTransferIEs}},
+	...
+}
+
+InitialULRRCMessageTransferIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-DU-UE-F1AP-ID					CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID						PRESENCE mandatory	}|
+	{ ID id-NRCGI								CRITICALITY reject	TYPE NRCGI									PRESENCE mandatory	}|
+	{ ID id-C-RNTI								CRITICALITY reject	TYPE C-RNTI									PRESENCE mandatory	}|
+	{ ID id-RRCContainer						CRITICALITY reject	TYPE RRCContainer							PRESENCE mandatory	}|
+	{ ID id-DUtoCURRCContainer					CRITICALITY reject	TYPE DUtoCURRCContainer						PRESENCE optional	}|
+	{ ID id-SULAccessIndication					CRITICALITY ignore	TYPE SULAccessIndication					PRESENCE optional	}|
+	{ ID id-TransactionID						CRITICALITY ignore	TYPE TransactionID							PRESENCE mandatory	}|
+	{ ID id-RANUEID								CRITICALITY ignore	TYPE RANUEID								PRESENCE optional	}|
+	{ ID id-RRCContainer-RRCSetupComplete		CRITICALITY ignore	TYPE RRCContainer-RRCSetupComplete 		PRESENCE optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- DL RRC Message Transfer ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- DL RRC Message Transfer
+--
+-- **************************************************************
+
+DLRRCMessageTransfer ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ DLRRCMessageTransferIEs}},
+	...
+}
+
+DLRRCMessageTransferIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID							PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID							PRESENCE mandatory	}|
+	{ ID id-oldgNB-DU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID							PRESENCE optional	}|
+	{ ID id-SRBID										CRITICALITY reject	TYPE SRBID											PRESENCE mandatory	}|
+	{ ID id-ExecuteDuplication							CRITICALITY ignore	TYPE ExecuteDuplication							PRESENCE optional}|
+	{ ID id-RRCContainer								CRITICALITY reject	TYPE RRCContainer									PRESENCE mandatory	}|
+	{ ID id-RAT-FrequencyPriorityInformation			CRITICALITY reject	TYPE RAT-FrequencyPriorityInformation		PRESENCE optional	}|
+	{ ID id-RRCDeliveryStatusRequest					CRITICALITY ignore	TYPE RRCDeliveryStatusRequest					PRESENCE optional }|
+	{ ID id-UEContextNotRetrievable						CRITICALITY reject	TYPE UEContextNotRetrievable					PRESENCE optional }|
+	{ ID id-RedirectedRRCmessage						CRITICALITY reject	TYPE OCTET STRING									PRESENCE optional }|
+	{ ID id-PLMNAssistanceInfoForNetShar				CRITICALITY ignore	TYPE PLMN-Identity									PRESENCE optional }|
+	{ ID id-new-gNB-CU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID							PRESENCE optional }|
+	{ ID id-AdditionalRRMPriorityIndex					CRITICALITY ignore	TYPE AdditionalRRMPriorityIndex				PRESENCE optional },
+	...
+}
+-- **************************************************************
+--
+-- UL RRC Message Transfer ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- UL RRC Message Transfer
+--
+-- **************************************************************
+
+ULRRCMessageTransfer ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ ULRRCMessageTransferIEs}},
+	...
+}
+
+ULRRCMessageTransferIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-SRBID							CRITICALITY reject	TYPE SRBID							PRESENCE mandatory	}|
+	{ ID id-RRCContainer					CRITICALITY reject	TYPE RRCContainer					PRESENCE mandatory	}|
+	{ ID id-SelectedPLMNID					CRITICALITY reject	TYPE PLMN-Identity					PRESENCE optional		}|
+	{ ID id-new-gNB-DU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE optional		},
+	...
+}
+
+-- **************************************************************
+--
+-- PRIVATE MESSAGE
+--
+-- **************************************************************
+
+PrivateMessage ::= SEQUENCE {
+	privateIEs		PrivateIE-Container	{{PrivateMessage-IEs}},
+	...
+}
+
+PrivateMessage-IEs F1AP-PRIVATE-IES ::= {
+	...
+}
+
+
+-- **************************************************************
+--
+-- System Information ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- System information Delivery Command
+--
+-- **************************************************************
+
+SystemInformationDeliveryCommand ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ SystemInformationDeliveryCommandIEs}},
+	...
+}
+
+SystemInformationDeliveryCommandIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID			CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-NRCGI					CRITICALITY reject	TYPE NRCGI							PRESENCE mandatory	}|
+	{ ID id-SItype-List				CRITICALITY reject	TYPE SItype-List					PRESENCE mandatory	}|
+	{ ID id-ConfirmedUEID 			CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- Paging PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Paging
+--
+-- **************************************************************
+
+Paging ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ PagingIEs}},
+	...
+}
+
+PagingIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-UEIdentityIndexValue	CRITICALITY reject	TYPE UEIdentityIndexValue		PRESENCE mandatory	}|
+	{ ID id-PagingIdentity			CRITICALITY reject	TYPE PagingIdentity				PRESENCE mandatory	}|
+	{ ID id-PagingDRX				CRITICALITY ignore	TYPE PagingDRX					PRESENCE optional	}|
+	{ ID id-PagingPriority			CRITICALITY ignore	TYPE PagingPriority				PRESENCE optional	}|
+	{ ID id-PagingCell-List			CRITICALITY ignore	TYPE PagingCell-list			PRESENCE mandatory	}|
+	{ ID id-PagingOrigin			CRITICALITY ignore	TYPE PagingOrigin				PRESENCE optional	},
+	...
+}
+
+PagingCell-list::= SEQUENCE (SIZE(1.. maxnoofPagingCells)) OF ProtocolIE-SingleContainer { { PagingCell-ItemIEs } }
+
+PagingCell-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-PagingCell-Item		CRITICALITY ignore	TYPE PagingCell-Item			PRESENCE mandatory}	,
+	...
+}
+
+
+
+-- **************************************************************
+--
+-- Notify
+--
+-- **************************************************************
+
+Notify ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ NotifyIEs}},
+	...
+}
+
+NotifyIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID					CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID						PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID					CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID						PRESENCE mandatory	}|
+	{ ID id-DRB-Notify-List						CRITICALITY reject	TYPE DRB-Notify-List						PRESENCE mandatory	},
+	...
+}
+
+DRB-Notify-List::= SEQUENCE (SIZE(1.. maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRB-Notify-ItemIEs } }
+
+DRB-Notify-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRB-Notify-Item			CRITICALITY reject	TYPE DRB-Notify-Item		PRESENCE mandatory},
+	...
+}
+
+
+-- **************************************************************
+--
+-- NETWORK ACCESS RATE REDUCTION ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Network Access Rate Reduction
+--
+-- **************************************************************
+
+NetworkAccessRateReduction ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ NetworkAccessRateReductionIEs }},
+	...
+}
+
+NetworkAccessRateReductionIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID 					CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-UAC-Assistance-Info				CRITICALITY reject	TYPE UAC-Assistance-Info			PRESENCE mandatory	},
+	...
+}
+
+-- ************************************************************** 
+-- 
+-- PWS RESTART INDICATION ELEMENTARY PROCEDURE 
+-- 
+-- ************************************************************** 
+
+-- ************************************************************** 
+-- 
+-- PWS Restart Indication 
+-- 
+-- ************************************************************** 
+
+PWSRestartIndication ::= SEQUENCE { 
+	protocolIEs ProtocolIE-Container { { PWSRestartIndicationIEs} }, 
+	... 
+} 
+
+PWSRestartIndicationIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-NR-CGI-List-For-Restart-List	CRITICALITY reject	TYPE NR-CGI-List-For-Restart-List	PRESENCE mandatory	},
+	... 
+}
+
+NR-CGI-List-For-Restart-List		::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { NR-CGI-List-For-Restart-List-ItemIEs } }
+
+NR-CGI-List-For-Restart-List-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-NR-CGI-List-For-Restart-Item		CRITICALITY reject	TYPE	NR-CGI-List-For-Restart-Item		PRESENCE mandatory	},
+	...
+}
+
+-- ************************************************************** 
+-- 
+-- PWS FAILURE INDICATION ELEMENTARY PROCEDURE 
+-- 
+-- ************************************************************** 
+
+-- ************************************************************** 
+-- 
+-- PWS Failure Indication 
+-- 
+-- ************************************************************** 
+
+PWSFailureIndication ::= SEQUENCE { 
+	protocolIEs ProtocolIE-Container { { PWSFailureIndicationIEs} }, 
+	... 
+} 
+
+PWSFailureIndicationIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID			CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-PWS-Failed-NR-CGI-List	CRITICALITY reject	TYPE PWS-Failed-NR-CGI-List		PRESENCE optional	},
+	... 
+}
+
+PWS-Failed-NR-CGI-List		::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { PWS-Failed-NR-CGI-List-ItemIEs } }
+
+PWS-Failed-NR-CGI-List-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-PWS-Failed-NR-CGI-Item		CRITICALITY reject	TYPE	PWS-Failed-NR-CGI-Item		PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- gNB-DU STATUS INDICATION ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- gNB-DU Status Indication
+--
+-- **************************************************************
+
+GNBDUStatusIndication ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {GNBDUStatusIndicationIEs} },
+	...
+}
+
+GNBDUStatusIndicationIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-GNBDUOverloadInformation		CRITICALITY reject	TYPE GNBDUOverloadInformation		PRESENCE mandatory	},
+	...
+}
+
+
+
+-- **************************************************************
+--
+-- RRC Delivery Report ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- RRC Delivery Report
+--
+-- **************************************************************
+
+RRCDeliveryReport ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ RRCDeliveryReportIEs}},
+	...
+}
+
+RRCDeliveryReportIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID	CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID	PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID	CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID	PRESENCE mandatory	}|
+	{ ID id-RRCDeliveryStatus	CRITICALITY ignore	TYPE RRCDeliveryStatus	PRESENCE mandatory	}|
+	{ ID id-SRBID				CRITICALITY ignore	TYPE SRBID				PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- F1 Removal ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- F1 Removal Request
+--
+-- **************************************************************
+
+F1RemovalRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ F1RemovalRequestIEs }},
+	...
+}
+
+F1RemovalRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID			CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- F1 Removal Response
+--
+-- **************************************************************
+
+F1RemovalResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ F1RemovalResponseIEs }},
+	...
+}
+
+F1RemovalResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional	},
+
+	...
+}
+
+-- **************************************************************
+--
+-- F1 Removal Failure
+--
+-- **************************************************************
+
+F1RemovalFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ F1RemovalFailureIEs }},
+	...
+}
+
+F1RemovalFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional	},
+
+	...
+}
+
+
+-- **************************************************************
+--
+-- TRACE ELEMENTARY PROCEDURES
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- TRACE START
+--
+-- **************************************************************
+
+TraceStart ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ {TraceStartIEs} },
+	...
+}
+
+TraceStartIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-TraceActivation				CRITICALITY ignore	TYPE TraceActivation				PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- DEACTIVATE TRACE
+--
+-- **************************************************************
+
+DeactivateTrace ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ {DeactivateTraceIEs} },
+	...
+}
+
+DeactivateTraceIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-TraceID						CRITICALITY ignore	TYPE TraceID						PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- CELL TRAFFIC TRACE
+--
+-- **************************************************************
+
+CellTrafficTrace ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ {CellTrafficTraceIEs} },
+	...
+}
+
+CellTrafficTraceIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ID id-TraceID							CRITICALITY ignore	TYPE TraceID						PRESENCE mandatory	}|
+	{ID id-TraceCollectionEntityIPAddress	CRITICALITY ignore	TYPE TransportLayerAddress			PRESENCE mandatory	}|
+	{ID id-PrivacyIndicator					CRITICALITY ignore	TYPE PrivacyIndicator				PRESENCE optional	}|
+
+	{ID id-TraceCollectionEntityURI	CRITICALITY ignore	TYPE URI-address		PRESENCE optional	},
+	...
+
+}
+
+-- **************************************************************
+--
+-- DU-CU Radio Information Transfer ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- DU-CU Radio Information Transfer
+--
+-- **************************************************************
+
+DUCURadioInformationTransfer ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ DUCURadioInformationTransferIEs}},
+	...
+}
+
+DUCURadioInformationTransferIEs F1AP-PROTOCOL-IES ::= {
+		{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID						PRESENCE mandatory	}|
+	{ ID id-DUCURadioInformationType		CRITICALITY ignore	TYPE DUCURadioInformationType				PRESENCE mandatory	},
+	...
+}
+
+
+
+-- **************************************************************
+--
+-- CU-DU Radio Information Transfer ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- CU-DU Radio Information Transfer
+--
+-- **************************************************************
+
+CUDURadioInformationTransfer ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ CUDURadioInformationTransferIEs}},
+	...
+}
+
+CUDURadioInformationTransferIEs F1AP-PROTOCOL-IES ::= {
+		{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID						PRESENCE mandatory	}|
+	{ ID id-CUDURadioInformationType	CRITICALITY ignore	TYPE CUDURadioInformationType				PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- IAB PROCEDURES 
+--
+-- **************************************************************
+-- **************************************************************
+--
+-- BAP Mapping Configuration ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- BAP MAPPING CONFIGURATION
+-- **************************************************************
+
+
+BAPMappingConfiguration ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container	{ {BAPMappingConfiguration-IEs} },
+	...
+ }
+
+BAPMappingConfiguration-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID		CRITICALITY reject	TYPE	TransactionID	PRESENCE mandatory}|
+	{ ID id-BH-Routing-Information-Added-List		CRITICALITY ignore	TYPE	BH-Routing-Information-Added-List	PRESENCE optional}|
+	{ ID id-BH-Routing-Information-Removed-List		CRITICALITY ignore	TYPE	BH-Routing-Information-Removed-List	PRESENCE optional}|
+	{ ID id-TrafficMappingInformation				CRITICALITY ignore	TYPE	TrafficMappingInfo						PRESENCE optional},
+	...
+}
+
+BH-Routing-Information-Added-List ::= SEQUENCE (SIZE(1.. maxnoofRoutingEntries))	OF ProtocolIE-SingleContainer { { BH-Routing-Information-Added-List-ItemIEs } }
+BH-Routing-Information-Removed-List ::= SEQUENCE (SIZE(1.. maxnoofRoutingEntries))	OF ProtocolIE-SingleContainer { { BH-Routing-Information-Removed-List-ItemIEs } }
+
+BH-Routing-Information-Added-List-ItemIEs	F1AP-PROTOCOL-IES ::= {
+	{ ID id-BH-Routing-Information-Added-List-Item				CRITICALITY ignore	TYPE BH-Routing-Information-Added-List-Item						PRESENCE optional},
+	...
+}
+
+BH-Routing-Information-Removed-List-ItemIEs	F1AP-PROTOCOL-IES ::= {
+	{ ID id-BH-Routing-Information-Removed-List-Item				CRITICALITY ignore	TYPE BH-Routing-Information-Removed-List-Item						PRESENCE optional},
+	...
+}
+
+
+-- **************************************************************
+--
+-- BAP MAPPING CONFIGURATION ACKNOWLEDGE
+-- **************************************************************
+
+BAPMappingConfigurationAcknowledge ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ {BAPMappingConfigurationAcknowledge-IEs} },
+	... 
+}
+
+BAPMappingConfigurationAcknowledge-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID			CRITICALITY reject	TYPE	TransactionID			PRESENCE mandatory}|
+	{ ID id-CriticalityDiagnostics	CRITICALITY ignore	TYPE	CriticalityDiagnostics	PRESENCE optional},
+	...
+}
+
+
+
+-- **************************************************************
+--
+-- GNB-DU Configuration ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- GNB-DU RESOURCE CONFIGURATION
+-- **************************************************************
+
+
+GNBDUResourceConfiguration ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container		{{ GNBDUResourceConfigurationIEs}},
+	...
+}
+
+
+GNBDUResourceConfigurationIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID								PRESENCE mandatory	}|
+	{ ID id-Activated-Cells-to-be-Updated-List		CRITICALITY reject	TYPE Activated-Cells-to-be-Updated-List	PRESENCE optional}|
+	{ ID id-Child-Nodes-List						CRITICALITY reject	TYPE Child-Nodes-List							PRESENCE optional},
+	...
+} 
+
+
+
+
+-- **************************************************************
+--
+-- GNB-DU RESOURCE CONFIGURATION ACKNOWLEDGE
+-- **************************************************************
+
+
+GNBDUResourceConfigurationAcknowledge ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container		{ { GNBDUResourceConfigurationAcknowledgeIEs} },
+	...
+}
+
+
+GNBDUResourceConfigurationAcknowledgeIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID						CRITICALITY reject	TYPE TransactionID							PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics				CRITICALITY ignore	TYPE CriticalityDiagnostics					PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+-- IAB TNL Address Allocation ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- IAB TNL ADDRESS REQUEST
+-- **************************************************************
+
+
+
+IABTNLAddressRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container		{ {IABTNLAddressRequestIEs} },
+	...
+}
+
+IABTNLAddressRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID						CRITICALITY reject	TYPE TransactionID								PRESENCE mandatory	}|
+	{ ID id-IABv4AddressesRequested				CRITICALITY reject	TYPE IABv4AddressesRequested					PRESENCE optional	}|
+	{ ID id-IABIPv6RequestType					CRITICALITY reject	TYPE IABIPv6RequestType							PRESENCE optional	}|
+	{ ID id-IAB-TNL-Addresses-To-Remove-List	CRITICALITY reject	TYPE IAB-TNL-Addresses-To-Remove-List		PRESENCE optional	},
+	...
+}
+
+
+IAB-TNL-Addresses-To-Remove-List	::= SEQUENCE (SIZE(1..maxnoofTLAsIAB))	OF ProtocolIE-SingleContainer { { IAB-TNL-Addresses-To-Remove-ItemIEs } }
+
+IAB-TNL-Addresses-To-Remove-ItemIEs	F1AP-PROTOCOL-IES::= {
+	{ ID id-IAB-TNL-Addresses-To-Remove-Item			CRITICALITY reject	TYPE IAB-TNL-Addresses-To-Remove-Item					PRESENCE mandatory},
+	...
+}
+
+
+-- **************************************************************
+--
+-- IAB TNL ADDRESS RESPONSE
+-- **************************************************************
+
+
+IABTNLAddressResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container		{ {IABTNLAddressResponseIEs} },
+	...
+}
+
+
+IABTNLAddressResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID								CRITICALITY reject	TYPE TransactionID									PRESENCE mandatory	}|
+	{ ID id-IAB-Allocated-TNL-Address-List				CRITICALITY reject	TYPE IAB-Allocated-TNL-Address-List			PRESENCE mandatory	},
+	...
+}
+
+
+IAB-Allocated-TNL-Address-List ::= SEQUENCE (SIZE(1.. maxnoofTLAsIAB))	OF ProtocolIE-SingleContainer { { IAB-Allocated-TNL-Address-List-ItemIEs } }
+
+
+IAB-Allocated-TNL-Address-List-ItemIEs	F1AP-PROTOCOL-IES::= {
+	{ ID id-IAB-Allocated-TNL-Address-Item			CRITICALITY reject	TYPE IAB-Allocated-TNL-Address-Item					PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- IAB UP Configuration Update ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- IAB UP Configuration Update Request
+--
+-- **************************************************************
+
+IABUPConfigurationUpdateRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container		{ { IABUPConfigurationUpdateRequestIEs} },
+	...
+}
+
+IABUPConfigurationUpdateRequestIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID										PRESENCE mandatory  }|
+	{ ID id-UL-UP-TNL-Information-to-Update-List	CRITICALITY ignore	TYPE UL-UP-TNL-Information-to-Update-List		PRESENCE optional	}|
+	{ ID id-UL-UP-TNL-Address-to-Update-List		CRITICALITY ignore	TYPE UL-UP-TNL-Address-to-Update-List				PRESENCE optional	},
+	...
+}
+
+UL-UP-TNL-Information-to-Update-List ::= SEQUENCE (SIZE(1.. maxnoofULUPTNLInformationforIAB))	OF ProtocolIE-SingleContainer { { UL-UP-TNL-Information-to-Update-List-ItemIEs } }
+
+UL-UP-TNL-Information-to-Update-List-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-UL-UP-TNL-Information-to-Update-List-Item	CRITICALITY ignore	TYPE UL-UP-TNL-Information-to-Update-List-Item PRESENCE optional},
+	...
+}
+
+UL-UP-TNL-Address-to-Update-List ::= SEQUENCE (SIZE(1.. maxnoofUPTNLAddresses))	OF ProtocolIE-SingleContainer { { UL-UP-TNL-Address-to-Update-List-ItemIEs } }
+
+UL-UP-TNL-Address-to-Update-List-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-UL-UP-TNL-Address-to-Update-List-Item	CRITICALITY ignore	TYPE UL-UP-TNL-Address-to-Update-List-Item PRESENCE optional},
+	...
+}
+
+
+-- **************************************************************
+--
+-- IAB UP Configuration Update Response
+--
+-- **************************************************************
+
+IABUPConfigurationUpdateResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container		{ { IABUPConfigurationUpdateResponseIEs} },
+	...
+}
+
+IABUPConfigurationUpdateResponseIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID						CRITICALITY reject	TYPE TransactionID							PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics				CRITICALITY ignore	TYPE CriticalityDiagnostics					PRESENCE optional	}|
+	{ ID id-DL-UP-TNL-Address-to-Update-List	CRITICALITY reject	TYPE DL-UP-TNL-Address-to-Update-List	PRESENCE optional	},
+	...
+}
+
+DL-UP-TNL-Address-to-Update-List ::= SEQUENCE (SIZE(1.. maxnoofUPTNLAddresses))	OF ProtocolIE-SingleContainer { { DL-UP-TNL-Address-to-Update-List-ItemIEs } }
+
+DL-UP-TNL-Address-to-Update-List-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DL-UP-TNL-Address-to-Update-List-Item	CRITICALITY ignore	TYPE DL-UP-TNL-Address-to-Update-List-Item	PRESENCE optional},
+	...
+}
+
+-- **************************************************************
+--
+-- IAB UP Configuration Update Failure
+--
+-- **************************************************************
+
+IABUPConfigurationUpdateFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container		{ { IABUPConfigurationUpdateFailureIEs} },
+	...
+}
+
+IABUPConfigurationUpdateFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-TimeToWait					CRITICALITY ignore	TYPE TimeToWait					PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+-- Resource Status Reporting Initiation ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Resource Status Request
+--
+-- **************************************************************
+
+ResourceStatusRequest::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {ResourceStatusRequestIEs} },
+	...
+}
+
+ResourceStatusRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID			CRITICALITY reject	TYPE TransactionID			PRESENCE mandatory	}|
+	{ ID id-gNBCUMeasurementID		CRITICALITY reject	TYPE GNBCUMeasurementID		PRESENCE mandatory	}|
+	{ ID id-gNBDUMeasurementID		CRITICALITY ignore	TYPE GNBDUMeasurementID		PRESENCE conditional	}|
+	{ ID id-RegistrationRequest		CRITICALITY ignore	TYPE RegistrationRequest	PRESENCE mandatory	}|
+	{ ID id-ReportCharacteristics	CRITICALITY ignore	TYPE ReportCharacteristics	PRESENCE conditional	}|
+	{ ID id-CellToReportList		CRITICALITY ignore	TYPE CellToReportList		PRESENCE optional	}|
+	{ ID id-ReportingPeriodicity	CRITICALITY ignore	TYPE ReportingPeriodicity	PRESENCE  optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- Resource Status Response
+--
+-- **************************************************************
+
+ResourceStatusResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { ResourceStatusResponseIEs} },
+	...
+}
+
+
+ResourceStatusResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID			CRITICALITY reject	TYPE TransactionID			PRESENCE mandatory	}|
+	{ ID id-gNBCUMeasurementID		CRITICALITY reject	TYPE GNBCUMeasurementID		PRESENCE mandatory	}|
+	{ ID id-gNBDUMeasurementID		CRITICALITY ignore	TYPE GNBDUMeasurementID		PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics	CRITICALITY ignore	TYPE CriticalityDiagnostics	PRESENCE optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- Resource Status Failure
+--
+-- **************************************************************
+
+ResourceStatusFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { ResourceStatusFailureIEs} },
+	...
+}
+
+ResourceStatusFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID			CRITICALITY reject	TYPE TransactionID			PRESENCE mandatory	}|
+	{ ID id-gNBCUMeasurementID		CRITICALITY reject	TYPE GNBCUMeasurementID		PRESENCE mandatory	}|
+	{ ID id-gNBDUMeasurementID		CRITICALITY ignore	TYPE GNBDUMeasurementID		PRESENCE mandatory	}|
+	{ ID id-Cause					CRITICALITY ignore	TYPE Cause					PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics	CRITICALITY ignore	TYPE CriticalityDiagnostics	PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+-- Resource Status Reporting ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Resource Status Update 
+--
+-- **************************************************************
+
+ResourceStatusUpdate ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ ResourceStatusUpdateIEs}},
+	...
+}
+
+ResourceStatusUpdateIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID			PRESENCE mandatory	}|
+	{ ID id-gNBCUMeasurementID			CRITICALITY reject	TYPE GNBCUMeasurementID				PRESENCE mandatory	}|
+	{ ID id-gNBDUMeasurementID			CRITICALITY ignore	TYPE GNBDUMeasurementID			PRESENCE mandatory	}|
+	{ ID id-HardwareLoadIndicator			CRITICALITY ignore	TYPE HardwareLoadIndicator			PRESENCE optional	}|
+	{ ID id-TNLCapacityIndicator			CRITICALITY ignore	TYPE TNLCapacityIndicator		PRESENCE optional	}|
+	{ ID id-CellMeasurementResultList		CRITICALITY ignore	TYPE CellMeasurementResultList	PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+--  Access And Mobility Indication ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Access And Mobility Indication 
+--
+-- **************************************************************
+
+AccessAndMobilityIndication ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { AccessAndMobilityIndicationIEs} },
+	...
+}
+
+AccessAndMobilityIndicationIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID						PRESENCE mandatory }|
+	{ ID id-RACHReportInformationList				CRITICALITY ignore	TYPE RACHReportInformationList			PRESENCE optional }|
+	{ ID id-RLFReportInformationList				CRITICALITY ignore	TYPE RLFReportInformationList				PRESENCE optional },
+	...
+}
+
+
+-- **************************************************************
+--
+-- REFERENCE TIME INFORMATION REPORTING CONTROL
+--
+-- **************************************************************
+
+ReferenceTimeInformationReportingControl::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { ReferenceTimeInformationReportingControlIEs} },
+	...
+}
+
+ReferenceTimeInformationReportingControlIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-ReportingRequestType		CRITICALITY reject	TYPE ReportingRequestType		PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- REFERENCE TIME INFORMATION REPORT
+--
+-- **************************************************************
+
+ReferenceTimeInformationReport::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { ReferenceTimeInformationReportIEs} },
+	...
+}
+
+ReferenceTimeInformationReportIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY ignore	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-TimeReferenceInformation	CRITICALITY ignore	TYPE TimeReferenceInformation		PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- Access Success
+--
+-- **************************************************************
+
+AccessSuccess ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ AccessSuccessIEs}},
+	...
+}
+
+AccessSuccessIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID					CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID						PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID					CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID						PRESENCE mandatory	}|
+	{ ID id-NRCGI								CRITICALITY reject	TYPE NRCGI									PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- POSITIONING ASSISTANCE INFORMATION CONTROL ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Assistance Information Control
+--
+-- **************************************************************
+
+PositioningAssistanceInformationControl ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ PositioningAssistanceInformationControlIEs}},
+	...
+}
+
+PositioningAssistanceInformationControlIEs F1AP-PROTOCOL-IES ::= {
+		{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+		{ ID id-PosAssistance-Information		CRITICALITY reject	TYPE PosAssistance-Information		PRESENCE optional}|
+		{ ID id-PosBroadcast					CRITICALITY reject	TYPE PosBroadcast				PRESENCE optional}|
+		{ ID id-PositioningBroadcastCells		CRITICALITY reject	TYPE PositioningBroadcastCells		PRESENCE optional}|
+		{ ID id-RoutingID						CRITICALITY reject	TYPE RoutingID				PRESENCE optional},
+	...
+}
+
+-- **************************************************************
+--
+-- POSITIONING ASSISTANCE INFORMATION FEEDBACK ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Assistance Information Feedback
+--
+-- **************************************************************
+
+PositioningAssistanceInformationFeedback ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ PositioningAssistanceInformationFeedbackIEs}},
+	...
+}
+
+PositioningAssistanceInformationFeedbackIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID							PRESENCE mandatory	}|
+	{ ID id-PosAssistanceInformationFailureList	CRITICALITY reject	TYPE PosAssistanceInformationFailureList	PRESENCE optional}|
+	{ ID id-PositioningBroadcastCells				CRITICALITY reject	TYPE PositioningBroadcastCells				PRESENCE optional}|
+	{ ID id-RoutingID								CRITICALITY reject	TYPE RoutingID									PRESENCE optional}|
+	{ ID id-CriticalityDiagnostics				CRITICALITY ignore	TYPE CriticalityDiagnostics						PRESENCE optional},
+	...
+}
+
+-- **************************************************************
+--
+-- POSITONING MEASUREMENT EXCHANGE ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Measurement Request
+--
+-- **************************************************************
+
+PositioningMeasurementRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningMeasurementRequestIEs} },
+	...
+}
+
+PositioningMeasurementRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID									PRESENCE mandatory}|
+	{ ID id-LMF-MeasurementID						CRITICALITY reject	TYPE LMF-MeasurementID								PRESENCE mandatory}|
+	{ ID id-RAN-MeasurementID						CRITICALITY reject	TYPE RAN-MeasurementID								PRESENCE mandatory}|
+	{ ID id-TRP-MeasurementRequestList				CRITICALITY reject	TYPE TRP-MeasurementRequestList					PRESENCE mandatory}|
+	{ ID id-PosReportCharacteristics				CRITICALITY reject	TYPE PosReportCharacteristics				PRESENCE mandatory}|
+	{ ID id-PosMeasurementPeriodicity				CRITICALITY reject	TYPE PosMeasurementPeriodicity					PRESENCE conditional }|
+	-- The above IE shall be present if the PosReportCharacteristics IE is set to “periodic” --
+	{ ID id-PosMeasurementQuantities				CRITICALITY reject	TYPE PosMeasurementQuantities					PRESENCE mandatory}|
+	{ ID id-SFNInitialisationTime					CRITICALITY ignore	TYPE SFNInitialisationTime	PRESENCE optional	}|
+	{ ID id-SRSConfiguration						CRITICALITY ignore	TYPE SRSConfiguration								PRESENCE optional}|
+	{ ID id-MeasurementBeamInfoRequest				CRITICALITY ignore	TYPE MeasurementBeamInfoRequest	PRESENCE optional	}|
+	{ ID id-SystemFrameNumber						CRITICALITY ignore	TYPE SystemFrameNumber		PRESENCE optional}|
+	{ ID id-SlotNumber								CRITICALITY ignore	TYPE SlotNumber				PRESENCE optional},
+	...
+} 
+
+
+-- **************************************************************
+--
+-- Positioning Measurement Response
+--
+-- **************************************************************
+
+PositioningMeasurementResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningMeasurementResponseIEs} },
+	...
+}
+
+
+PositioningMeasurementResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID									PRESENCE mandatory}|
+	{ ID id-LMF-MeasurementID						CRITICALITY reject	TYPE LMF-MeasurementID								PRESENCE mandatory}|
+	{ ID id-RAN-MeasurementID						CRITICALITY reject	TYPE RAN-MeasurementID								PRESENCE mandatory}|
+	{ ID id-PosMeasurementResultList				CRITICALITY reject	TYPE PosMeasurementResultList					PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics					CRITICALITY ignore	TYPE CriticalityDiagnostics						PRESENCE optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- Positioning Measurement Failure
+--
+-- **************************************************************
+
+PositioningMeasurementFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningMeasurementFailureIEs} },
+	...
+}
+
+PositioningMeasurementFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-LMF-MeasurementID				CRITICALITY reject	TYPE LMF-MeasurementID			PRESENCE mandatory	}|
+	{ ID id-RAN-MeasurementID				CRITICALITY reject	TYPE RAN-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-Cause							CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics			CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- POSITIONING MEASUREMENT REPORT ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Measurement Report
+--
+-- **************************************************************
+
+PositioningMeasurementReport ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { PositioningMeasurementReportIEs} },
+	...
+}
+
+PositioningMeasurementReportIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-LMF-MeasurementID			CRITICALITY reject	TYPE LMF-MeasurementID			PRESENCE mandatory	}|
+	{ ID id-RAN-MeasurementID			CRITICALITY reject	TYPE RAN-MeasurementID			PRESENCE mandatory	}|
+	{ ID id-PosMeasurementResultList	CRITICALITY reject	TYPE PosMeasurementResultList	PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- POSITIONING MEASUREMENT ABORT ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Measurement Abort
+--
+-- **************************************************************
+
+PositioningMeasurementAbort ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { PositioningMeasurementAbortIEs} },
+	...
+}
+
+PositioningMeasurementAbortIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|	
+	{ ID id-LMF-MeasurementID				CRITICALITY reject	TYPE LMF-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-RAN-MeasurementID				CRITICALITY reject	TYPE RAN-MeasurementID				PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- POSITIONING MEASUREMENT FAILURE INDICATION ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Measurement Failure Indication
+--
+-- **************************************************************
+
+PositioningMeasurementFailureIndication ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { PositioningMeasurementFailureIndicationIEs} },
+	...
+}
+
+PositioningMeasurementFailureIndicationIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-LMF-MeasurementID			CRITICALITY reject	TYPE LMF-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-RAN-MeasurementID			CRITICALITY reject	TYPE RAN-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- POSITIONING MEASUREMENT UPDATE ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Measurement Update
+--
+-- **************************************************************
+
+PositioningMeasurementUpdate ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { PositioningMeasurementUpdateIEs} },
+	...
+}
+
+PositioningMeasurementUpdateIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-LMF-MeasurementID			CRITICALITY reject	TYPE LMF-MeasurementID			PRESENCE mandatory	}|
+	{ ID id-RAN-MeasurementID			CRITICALITY reject	TYPE RAN-MeasurementID			PRESENCE mandatory	}|
+	{ ID id-SRSConfiguration			CRITICALITY ignore	TYPE SRSConfiguration			PRESENCE optional},
+	...
+}
+
+
+-- **************************************************************
+--
+-- TRP INFORMATION EXCHANGE ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- TRP Information Request
+--
+-- **************************************************************
+
+TRPInformationRequest ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { TRPInformationRequestIEs} },
+	...
+}
+
+TRPInformationRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID						CRITICALITY reject	TYPE TransactionID								PRESENCE mandatory	}|
+	{ ID id-TRPList								CRITICALITY ignore	TYPE TRPList									PRESENCE optional	}|
+	{ ID id-TRPInformationTypeListTRPReq		CRITICALITY reject	TYPE TRPInformationTypeListTRPReq			PRESENCE mandatory	},
+	...
+}
+
+TRPInformationTypeListTRPReq ::= SEQUENCE (SIZE(1.. maxnoofTRPInfoTypes)) OF ProtocolIE-SingleContainer { { TRPInformationTypeItemTRPReq } }
+
+TRPInformationTypeItemTRPReq 	F1AP-PROTOCOL-IES ::= {
+	{ ID id-TRPInformationTypeItem	 CRITICALITY reject		TYPE TRPInformationTypeItem  	PRESENCE mandatory },
+	...
+}
+
+
+-- **************************************************************
+--
+-- TRP Information Response
+--
+-- **************************************************************
+
+TRPInformationResponse ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { TRPInformationResponseIEs} },
+	...
+}
+
+TRPInformationResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-TRPInformationListTRPResp		CRITICALITY ignore	TYPE TRPInformationListTRPResp		PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics			CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional	},
+	...
+}
+
+TRPInformationListTRPResp ::= SEQUENCE (SIZE(1.. maxnoofTRPs)) OF ProtocolIE-SingleContainer { { TRPInformationItemTRPResp } }
+
+TRPInformationItemTRPResp 	F1AP-PROTOCOL-IES ::= {
+	{ ID id-TRPInformationItem	 CRITICALITY ignore		TYPE TRPInformationItem  	PRESENCE mandatory },
+	...
+}
+
+
+-- **************************************************************
+--
+-- TRP Information Failure
+--
+-- **************************************************************
+
+TRPInformationFailure ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { TRPInformationFailureIEs} },
+	...
+}
+
+TRPInformationFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- POSITIONING INFORMATION EXCHANGE ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Information Request
+--
+-- **************************************************************
+
+PositioningInformationRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningInformationRequestIEs} },
+	...
+}
+
+PositioningInformationRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-RequestedSRSTransmissionCharacteristics	CRITICALITY ignore	TYPE RequestedSRSTransmissionCharacteristics	PRESENCE optional},
+	...
+} 
+
+
+-- **************************************************************
+--
+-- Positioning Information Response
+--
+-- **************************************************************
+
+PositioningInformationResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningInformationResponseIEs} },
+	...
+}
+
+
+PositioningInformationResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|	
+	{ ID id-SRSConfiguration			CRITICALITY ignore	TYPE SRSConfiguration			PRESENCE optional}|
+	{ ID id-SFNInitialisationTime		CRITICALITY ignore	TYPE SFNInitialisationTime		PRESENCE optional}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional },
+	...
+}
+
+
+-- **************************************************************
+--
+-- Positioning Information Failure
+--
+-- **************************************************************
+
+PositioningInformationFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningInformationFailureIEs} },
+	...
+}
+
+PositioningInformationFailureIEs F1AP-PROTOCOL-IES ::= {
+	
+	{ ID id-gNB-CU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional },
+	...
+}
+
+
+-- **************************************************************
+--
+-- POSITIONING ACTIVATION PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Activation Request
+--
+-- **************************************************************
+
+PositioningActivationRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningActivationRequestIEs} },
+	...
+}
+
+PositioningActivationRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-SRSType					CRITICALITY reject	TYPE SRSType					PRESENCE mandatory	}|
+	{ ID id-ActivationTime			CRITICALITY ignore	TYPE SFNInitialisationTime		PRESENCE optional	},
+	...
+} 
+
+SRSType ::= CHOICE {
+	semipersistentSRS				SemipersistentSRS,
+	aperiodicSRS					AperiodicSRS, 
+	choice-extension				ProtocolIE-SingleContainer { { SRSType-ExtIEs} }
+}
+
+SRSType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+SemipersistentSRS ::= SEQUENCE {
+	sRSResourceSetID			SRSResourceSetID,
+	sRSSpatialRelation			SRSSpatialRelation	OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { {SemipersistentSRS-ExtIEs} } OPTIONAL,
+	...
+}
+
+SemipersistentSRS-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AperiodicSRS ::= SEQUENCE {
+	aperiodic					ENUMERATED {true, ...},
+	sRSResourceTrigger			SRSResourceTrigger		OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { {AperiodicSRS-ExtIEs} } OPTIONAL,
+	...
+}
+
+AperiodicSRS-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+-- **************************************************************
+--
+-- Positioning Activation Response
+--
+-- **************************************************************
+
+PositioningActivationResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningActivationResponseIEs} },
+	...
+}
+
+
+PositioningActivationResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-SystemFrameNumber		CRITICALITY ignore	TYPE SystemFrameNumber			PRESENCE optional }|
+	{ ID id-SlotNumber				CRITICALITY ignore	TYPE SlotNumber					PRESENCE optional }|
+	{ ID id-CriticalityDiagnostics	CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional },
+	...
+}
+
+
+
+
+-- **************************************************************
+--
+-- Positioning Activation Failure
+--
+-- **************************************************************
+
+PositioningActivationFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningActivationFailureIEs} },
+	...
+}
+
+PositioningActivationFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional },
+	...
+}
+
+
+-- **************************************************************
+--
+-- POSITIONING DEACTIVATION PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Deactivation
+--
+-- **************************************************************
+
+PositioningDeactivation ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningDeactivationIEs} },
+	...
+}
+
+PositioningDeactivationIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-AbortTransmission		CRITICALITY ignore	TYPE AbortTransmission			PRESENCE mandatory	},
+	...
+} 
+
+-- **************************************************************
+--
+-- POSITIONING INFORMATION UPDATE PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Information Update
+--
+-- **************************************************************
+
+PositioningInformationUpdate ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningInformationUpdateIEs} },
+	...
+}
+
+
+PositioningInformationUpdateIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-SRSConfiguration		CRITICALITY ignore	TYPE SRSConfiguration			PRESENCE optional}|
+	{ ID id-SFNInitialisationTime	CRITICALITY ignore	TYPE SFNInitialisationTime		PRESENCE optional},
+	...
+}
+
+-- **************************************************************
+--
+-- E-CID MEASUREMENT PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- E-CID Measurement Initiation Request
+--
+-- **************************************************************
+
+E-CIDMeasurementInitiationRequest ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container	{{E-CIDMeasurementInitiationRequest-IEs}},
+	...
+}
+
+E-CIDMeasurementInitiationRequest-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID					PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID					PRESENCE mandatory	}|
+	{ ID id-LMF-UE-MeasurementID			CRITICALITY reject	TYPE LMF-UE-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-RAN-UE-MeasurementID			CRITICALITY reject	TYPE RAN-UE-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-E-CID-ReportCharacteristics		CRITICALITY reject	TYPE E-CID-ReportCharacteristics		PRESENCE mandatory	}|
+	{ ID id-E-CID-MeasurementPeriodicity	CRITICALITY reject	TYPE E-CID-MeasurementPeriodicity		PRESENCE conditional	}|
+-- The above IE shall be present if the E-CID-ReportCharacteristics IE is set to “periodic” –-
+	{ ID id-E-CID-MeasurementQuantities		CRITICALITY reject	TYPE E-CID-MeasurementQuantities		PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- E-CID Measurement Initiation Response
+--
+-- **************************************************************
+
+E-CIDMeasurementInitiationResponse ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container	{{E-CIDMeasurementInitiationResponse-IEs}},
+	...
+}
+
+E-CIDMeasurementInitiationResponse-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-LMF-UE-MeasurementID		CRITICALITY reject	TYPE LMF-UE-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-RAN-UE-MeasurementID		CRITICALITY reject	TYPE RAN-UE-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-E-CID-MeasurementResult		CRITICALITY ignore	TYPE E-CID-MeasurementResult		PRESENCE optional}|
+	{ ID id-Cell-Portion-ID				CRITICALITY ignore	TYPE Cell-Portion-ID				PRESENCE optional}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional},
+	...
+}
+
+-- **************************************************************
+--
+-- E-CID Measurement Initiation Failure
+--
+-- **************************************************************
+
+E-CIDMeasurementInitiationFailure ::= SEQUENCE {
+	protocolIEs						ProtocolIE-Container		{{E-CIDMeasurementInitiationFailure-IEs}},
+	...
+}
+
+
+E-CIDMeasurementInitiationFailure-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-LMF-UE-MeasurementID		CRITICALITY reject	TYPE LMF-UE-MeasurementID			PRESENCE mandatory	}|
+	{ ID id-RAN-UE-MeasurementID		CRITICALITY reject	TYPE RAN-UE-MeasurementID			PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional},
+	...
+}
+
+-- **************************************************************
+--
+-- E-CID MEASUREMENT FAILURE INDICATION PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- E-CID Measurement Failure Indication
+--
+-- **************************************************************
+
+E-CIDMeasurementFailureIndication ::= SEQUENCE {
+	protocolIEs						ProtocolIE-Container		{{E-CIDMeasurementFailureIndication-IEs}},
+	...
+}
+
+
+E-CIDMeasurementFailureIndication-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-LMF-UE-MeasurementID		CRITICALITY reject	TYPE LMF-UE-MeasurementID		PRESENCE mandatory	}|
+	{ ID id-RAN-UE-MeasurementID		CRITICALITY reject	TYPE RAN-UE-MeasurementID		PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- E-CID MEASUREMENT REPORT PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- E-CID Measurement Report
+--
+-- **************************************************************
+
+E-CIDMeasurementReport ::= SEQUENCE {
+	protocolIEs						ProtocolIE-Container		{{E-CIDMeasurementReport-IEs}},
+	...
+}
+
+
+E-CIDMeasurementReport-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-LMF-UE-MeasurementID		CRITICALITY reject	TYPE LMF-UE-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-RAN-UE-MeasurementID		CRITICALITY reject	TYPE RAN-UE-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-E-CID-MeasurementResult		CRITICALITY ignore	TYPE E-CID-MeasurementResult		PRESENCE mandatory }|
+	{ ID id-Cell-Portion-ID				CRITICALITY ignore	TYPE Cell-Portion-ID				PRESENCE optional},
+
+	...
+}
+
+-- **************************************************************
+--
+-- E-CID MEASUREMENT TERMINATION PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- E-CID Measurement Termination Command
+--
+-- **************************************************************
+
+
+E-CIDMeasurementTerminationCommand ::= SEQUENCE {
+	protocolIEs						ProtocolIE-Container		{{E-CIDMeasurementTerminationCommand-IEs}},
+	...
+}
+
+
+E-CIDMeasurementTerminationCommand-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-CU-UE-F1AP-ID					PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID					PRESENCE mandatory	}|
+	{ ID id-LMF-UE-MeasurementID		CRITICALITY reject	TYPE LMF-UE-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-RAN-UE-MeasurementID		CRITICALITY reject	TYPE RAN-UE-MeasurementID				PRESENCE mandatory	},
+	...
+}
+
+
+
+END
+-- ASN1STOP 
+
+
+-- ASN1START 
+-- **************************************************************
+--
+-- Information Element Definitions
+--
+-- **************************************************************
+
+F1AP-IEs {
+itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
+ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-IEs (2) }
+
+DEFINITIONS AUTOMATIC TAGS ::= 
+
+BEGIN
+
+IMPORTS
+	id-gNB-CUSystemInformation,
+	id-HandoverPreparationInformation,
+	id-TAISliceSupportList,
+	id-RANAC,
+	id-BearerTypeChange,
+	id-Cell-Direction,
+	id-Cell-Type,
+	id-CellGroupConfig,
+	id-AvailablePLMNList,
+	id-PDUSessionID,
+	id-ULPDUSessionAggregateMaximumBitRate, 
+	id-DC-Based-Duplication-Configured,
+	id-DC-Based-Duplication-Activation,
+	id-Duplication-Activation,
+	id-DLPDCPSNLength,
+	id-ULPDCPSNLength,
+	id-RLC-Status,
+	id-MeasurementTimingConfiguration,
+	id-DRB-Information,
+	id-QoSFlowMappingIndication,
+	id-ServingCellMO,
+	id-RLCMode,
+	id-ExtendedServedPLMNs-List,
+	id-ExtendedAvailablePLMN-List,
+	id-DRX-LongCycleStartOffset,
+	id-SelectedBandCombinationIndex,
+	id-SelectedFeatureSetEntryIndex,
+	id-Ph-InfoSCG,
+	id-latest-RRC-Version-Enhanced,
+	id-RequestedBandCombinationIndex,
+	id-RequestedFeatureSetEntryIndex,
+	id-DRX-Config,
+	id-UEAssistanceInformation,
+	id-PDCCH-BlindDetectionSCG,
+	id-Requested-PDCCH-BlindDetectionSCG,
+	id-BPLMN-ID-Info-List,
+	id-NotificationInformation,
+	id-TNLAssociationTransportLayerAddressgNBDU,
+	id-portNumber,
+	id-AdditionalSIBMessageList,
+	id-IgnorePRACHConfiguration,
+	id-CG-Config,
+	id-Ph-InfoMCG,
+	id-AggressorgNBSetID,
+	id-VictimgNBSetID,
+	id-MeasGapSharingConfig,
+	id-systemInformationAreaID,
+	id-areaScope,
+	id-IntendedTDD-DL-ULConfig,
+	id-QosMonitoringRequest,
+	id-BHInfo,
+	id-IAB-Info-IAB-DU,
+	id-IAB-Info-IAB-donor-CU,
+	id-IAB-Barred,
+	id-SIB12-message,
+	id-SIB13-message,
+	id-SIB14-message,
+	id-UEAssistanceInformationEUTRA,
+	id-SL-PHY-MAC-RLC-Config,
+	id-SL-ConfigDedicatedEUTRA,
+	id-AlternativeQoSParaSetList,
+	id-CurrentQoSParaSetIndex,
+	id-CarrierList,
+	id-ULCarrierList,
+	id-FrequencyShift7p5khz,
+	id-SSB-PositionsInBurst,
+	id-NRPRACHConfig, 
+	id-TDD-UL-DLConfigCommonNR,
+	id-CNPacketDelayBudgetDownlink,
+	id-CNPacketDelayBudgetUplink,
+	id-ExtendedPacketDelayBudget,
+	id-TSCTrafficCharacteristics,
+	id-AdditionalPDCPDuplicationTNL-List,
+	id-RLCDuplicationInformation,
+	id-AdditionalDuplicationIndication,
+	id-mdtConfiguration,
+	id-TraceCollectionEntityURI,
+	id-NID,
+	id-NPNSupportInfo,
+	id-NPNBroadcastInformation,
+	id-AvailableSNPN-ID-List,
+	id-SIB10-message,
+	id-RequestedP-MaxFR2,
+	id-DLCarrierList,
+	id-ExtendedTAISliceSupportList,
+	id-E-CID-MeasurementQuantities-Item,
+	id-ConfiguredTACIndication,
+	maxNRARFCN,
+	maxnoofErrors,
+	maxnoofBPLMNs,
+	maxnoofBPLMNsNR,
+	maxnoofDLUPTNLInformation,
+	maxnoofNrCellBands,
+	maxnoofULUPTNLInformation,
+	maxnoofQoSFlows,
+	maxnoofSliceItems,
+	maxnoofSIBTypes,
+	maxnoofSITypes,
+	maxCellineNB,
+	maxnoofExtendedBPLMNs,
+	maxnoofAdditionalSIBs,
+	maxnoofUACPLMNs,
+	maxnoofUACperPLMN,
+	maxCellingNBDU,
+	maxnoofTLAs,
+	maxnoofGTPTLAs,
+	maxnoofslots,
+	maxnoofNonUPTrafficMappings,
+	maxnoofServingCells,
+	maxnoofServedCellsIAB,
+	maxnoofChildIABNodes,
+	maxnoofIABSTCInfo,
+	maxnoofSymbols,
+	maxnoofDUFSlots,
+	maxnoofHSNASlots,
+	maxnoofEgressLinks,
+	maxnoofMappingEntries,
+	maxnoofDSInfo,
+	maxnoofQoSParaSets,
+	maxnoofPC5QoSFlows,
+	maxnoofSSBAreas,
+	maxnoofBPLMNsNR,
+	maxnoofNRSCSs,
+	maxnoofPhysicalResourceBlocks,
+	maxnoofPhysicalResourceBlocks-1,
+	maxnoofPRACHconfigs,
+	maxnoofRACHReports,
+	maxnoofRLFReports,
+	maxnoofAdditionalPDCPDuplicationTNL,
+	maxnoofRLCDuplicationState,
+	maxnoofCHOcells,
+	maxnoofMDTPLMNs,
+	maxnoofCAGsupported,
+	maxnoofNIDsupported,
+	maxnoofNRSCSs,
+	maxnoofPhysicalResourceBlocks,
+	maxnoofExtSliceItems,
+	maxnoofPosMeas,
+	maxnoofTRPInfoTypes,
+	maxnoofSRSTriggerStates,
+	maxnoofSpatialRelations,
+	maxnoBcastCell,
+	maxnoofTRPs,
+	maxnoofAngleInfo,
+	maxnooflcs-gcs-translation,
+	maxnoofPath,
+	maxnoofMeasE-CID,
+	maxnoofSSBs,
+	maxnoSRS-ResourceSets,
+	maxnoSRS-ResourcePerSet,
+	maxnoSRS-Carriers,
+	maxnoSCSs,
+	maxnoSRS-Resources,
+	maxnoSRS-PosResources,
+	maxnoSRS-PosResourceSets,
+	maxnoSRS-PosResourcePerSet,
+	maxnoofPRS-ResourceSets,
+	maxnoofPRS-ResourcesPerSet,
+	maxNoOfMeasTRPs,
+	maxnoofPRSresourceSets,
+	maxnoofPRSresources
+
+
+
+FROM F1AP-Constants
+
+	Criticality,
+	ProcedureCode,
+	ProtocolIE-ID,
+	TriggeringMessage
+
+FROM F1AP-CommonDataTypes
+
+	ProtocolExtensionContainer{},
+	F1AP-PROTOCOL-EXTENSION,
+	ProtocolIE-SingleContainer{},
+	F1AP-PROTOCOL-IES
+
+FROM F1AP-Containers;
+
+-- A
+
+AbortTransmission ::= CHOICE {
+	sRSResourceSetID		SRSResourceSetID,
+	releaseALL				NULL,
+	choice-extension		ProtocolIE-SingleContainer { { AbortTransmission-ExtIEs } }
+}
+
+AbortTransmission-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+AccessPointPosition ::= SEQUENCE {
+	latitudeSign				ENUMERATED {north, south},
+	latitude					INTEGER (0..8388607),
+	longitude					INTEGER (-8388608..8388607),
+	directionOfAltitude			ENUMERATED {height, depth},
+	altitude					INTEGER (0..32767),
+	uncertaintySemi-major		INTEGER (0..127),
+	uncertaintySemi-minor		INTEGER (0..127),
+	orientationOfMajorAxis		INTEGER (0..179),
+	uncertaintyAltitude			INTEGER (0..127),
+	confidence					INTEGER (0..100),
+	iE-Extensions				ProtocolExtensionContainer { { AccessPointPosition-ExtIEs} } OPTIONAL
+}
+
+AccessPointPosition-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Activated-Cells-to-be-Updated-List ::= SEQUENCE (SIZE(1..maxnoofServedCellsIAB)) OF Activated-Cells-to-be-Updated-List-Item
+
+Activated-Cells-to-be-Updated-List-Item ::=	SEQUENCE{
+	nRCGI								NRCGI,
+	iAB-DU-Cell-Resource-Configuration-Mode-Info	IAB-DU-Cell-Resource-Configuration-Mode-Info,
+	iE-Extensions						ProtocolExtensionContainer { { Activated-Cells-to-be-Updated-List-Item-ExtIEs} } OPTIONAL
+}
+
+Activated-Cells-to-be-Updated-List-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ActiveULBWP  ::= SEQUENCE {
+	locationAndBandwidth		INTEGER (0..37949,...),
+	subcarrierSpacing           ENUMERATED {kHz15, kHz30, kHz60, kHz120,...},
+	cyclicPrefix				ENUMERATED {normal, extended},
+	txDirectCurrentLocation		INTEGER (0..3301,...),
+	shift7dot5kHz				ENUMERATED {true, ...} OPTIONAL,
+	sRSConfig					SRSConfig,
+	iE-Extensions					ProtocolExtensionContainer { { ActiveULBWP-ExtIEs} } OPTIONAL
+}
+
+ActiveULBWP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AdditionalDuplicationIndication ::= ENUMERATED { 
+	three,
+	four,
+	...
+}
+
+
+AdditionalPath-List::= SEQUENCE (SIZE(1..maxnoofPath)) OF AdditionalPath-Item
+
+AdditionalPath-Item ::=SEQUENCE {
+	relativePathDelay	RelativePathDelay, 
+	pathQuality			TRPMeasurementQuality 	OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { { AdditionalPath-Item-ExtIEs } }	OPTIONAL
+}
+
+AdditionalPath-Item-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+AdditionalPDCPDuplicationTNL-List ::= SEQUENCE (SIZE(1..maxnoofAdditionalPDCPDuplicationTNL)) OF AdditionalPDCPDuplicationTNL-Item
+
+AdditionalPDCPDuplicationTNL-Item ::=SEQUENCE {
+	additionalPDCPDuplicationUPTNLInformation		UPTransportLayerInformation, 
+	iE-Extensions	ProtocolExtensionContainer { { AdditionalPDCPDuplicationTNL-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+AdditionalPDCPDuplicationTNL-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AdditionalSIBMessageList ::= SEQUENCE (SIZE(1..maxnoofAdditionalSIBs)) OF AdditionalSIBMessageList-Item
+
+AdditionalSIBMessageList-Item ::= SEQUENCE {
+	additionalSIB			OCTET STRING,
+	iE-Extensions		ProtocolExtensionContainer { { AdditionalSIBMessageList-Item-ExtIEs} } OPTIONAL
+}
+
+AdditionalSIBMessageList-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AdditionalRRMPriorityIndex ::= BIT STRING (SIZE(32))
+
+AggressorCellList ::= SEQUENCE (SIZE(1..maxCellingNBDU)) OF AggressorCellList-Item
+
+AggressorCellList-Item ::= SEQUENCE {
+	aggressorCell-ID		NRCGI,
+	iE-Extensions	ProtocolExtensionContainer { { AggressorCellList-Item-ExtIEs } }		OPTIONAL
+}
+
+AggressorCellList-Item-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AggressorgNBSetID ::= SEQUENCE {
+	aggressorgNBSetID		GNBSetID,
+	iE-Extensions	ProtocolExtensionContainer { { AggressorgNBSetID-ExtIEs } }	OPTIONAL
+}
+
+AggressorgNBSetID-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AllocationAndRetentionPriority ::= SEQUENCE {
+	priorityLevel				PriorityLevel,
+	pre-emptionCapability		Pre-emptionCapability,
+	pre-emptionVulnerability	Pre-emptionVulnerability,
+	iE-Extensions				ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL,
+	...
+}
+
+AllocationAndRetentionPriority-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AlternativeQoSParaSetList ::= SEQUENCE (SIZE(1..maxnoofQoSParaSets)) OF AlternativeQoSParaSetItem
+
+AlternativeQoSParaSetItem ::= SEQUENCE {
+	alternativeQoSParaSetIndex			QoSParaSetIndex,
+	guaranteedFlowBitRateDL				BitRate					OPTIONAL,
+	guaranteedFlowBitRateUL				BitRate					OPTIONAL,
+	packetDelayBudget					PacketDelayBudget		OPTIONAL,
+	packetErrorRate						PacketErrorRate			OPTIONAL,
+	iE-Extensions						ProtocolExtensionContainer { {AlternativeQoSParaSetItem-ExtIEs} }	OPTIONAL,
+	...
+}
+
+AlternativeQoSParaSetItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+AngleMeasurementQuality ::= SEQUENCE {
+	azimuthQuality	INTEGER(0..255),
+	zenithQuality	INTEGER(0..255) OPTIONAL,
+	resolution		ENUMERATED{deg0dot1,...},
+	iE-Extensions	ProtocolExtensionContainer { { AngleMeasurementQuality-ExtIEs } }	OPTIONAL
+}
+
+AngleMeasurementQuality-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+AperiodicSRSResourceTriggerList ::= SEQUENCE (SIZE(1..maxnoofSRSTriggerStates)) OF AperiodicSRSResourceTrigger
+
+AperiodicSRSResourceTrigger ::= INTEGER (0..3, ...)
+
+Associated-SCell-Item ::= SEQUENCE {
+	sCell-ID		NRCGI,
+	iE-Extensions	ProtocolExtensionContainer { { Associated-SCell-ItemExtIEs } }	OPTIONAL
+}
+
+Associated-SCell-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AvailablePLMNList ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF AvailablePLMNList-Item
+
+AvailablePLMNList-Item ::= SEQUENCE {
+	pLMNIdentity			PLMN-Identity,
+	iE-Extensions		ProtocolExtensionContainer { { AvailablePLMNList-Item-ExtIEs} } OPTIONAL
+}
+
+AvailablePLMNList-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AvailableSNPN-ID-List ::= SEQUENCE (SIZE(1..maxnoofNIDsupported)) OF AvailableSNPN-ID-List-Item
+
+AvailableSNPN-ID-List-Item ::= SEQUENCE {
+	pLMN-Identity				PLMN-Identity,
+	availableNIDList			BroadcastNIDList,
+	iE-Extensions				ProtocolExtensionContainer { { AvailableSNPN-ID-List-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+AvailableSNPN-ID-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AveragingWindow  ::= INTEGER (0..4095, ...) 
+
+AreaScope ::= ENUMERATED {true, ...}
+
+-- B
+
+BandwidthSRS ::= CHOICE { 
+	fR1								FR1-Bandwidth,
+	fR2								FR2-Bandwidth,
+	choice-extension				ProtocolIE-SingleContainer {{ BandwidthSRS-ExtIEs }}
+}
+
+BandwidthSRS-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+
+BAPAddress ::= BIT STRING (SIZE(10))
+
+BAPCtrlPDUChannel ::= ENUMERATED {true, ...}
+
+BAPlayerBHRLCchannelMappingInfo ::= SEQUENCE {
+	bAPlayerBHRLCchannelMappingInfoToAdd			BAPlayerBHRLCchannelMappingInfoList			OPTIONAL,
+	bAPlayerBHRLCchannelMappingInfoToRemove			MappingInformationtoRemove					OPTIONAL,
+	iE-Extensions									ProtocolExtensionContainer { { BAPlayerBHRLCchannelMappingInfo-ExtIEs} } OPTIONAL,
+	...
+}
+
+BAPlayerBHRLCchannelMappingInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BAPlayerBHRLCchannelMappingInfoList ::= SEQUENCE (SIZE(1..maxnoofMappingEntries)) OF BAPlayerBHRLCchannelMappingInfo-Item
+
+BAPlayerBHRLCchannelMappingInfo-Item ::= SEQUENCE {
+	mappingInformationIndex			MappingInformationIndex,		
+	priorHopBAPAddress				BAPAddress		OPTIONAL,		
+	ingressbHRLCChannelID			BHRLCChannelID		OPTIONAL,		
+	nextHopBAPAddress				BAPAddress		OPTIONAL,		
+	egressbHRLCChannelID			BHRLCChannelID		OPTIONAL,		
+	iE-Extensions					ProtocolExtensionContainer { { BAPlayerBHRLCchannelMappingInfo-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+BAPlayerBHRLCchannelMappingInfo-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BAPPathID ::= BIT STRING (SIZE(10))
+
+BAPRoutingID ::= SEQUENCE {
+	bAPAddress		BAPAddress,
+	bAPPathID		BAPPathID,
+	iE-Extensions	ProtocolExtensionContainer { { BAPRoutingIDExtIEs } }	OPTIONAL
+}
+
+BAPRoutingIDExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BitRate ::= INTEGER (0..4000000000000,...)
+
+BearerTypeChange ::= ENUMERATED {true, ...}
+
+BHRLCChannelID ::= BIT STRING (SIZE(16))
+
+BHChannels-FailedToBeModified-Item ::= SEQUENCE {
+	bHRLCChannelID		BHRLCChannelID,
+	cause		Cause		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-FailedToBeModified-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-FailedToBeModified-ItemExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-FailedToBeSetup-Item ::= SEQUENCE {
+	bHRLCChannelID		BHRLCChannelID,
+	cause	Cause	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-FailedToBeSetup-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-FailedToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-FailedToBeSetupMod-Item ::= SEQUENCE {
+	bHRLCChannelID		BHRLCChannelID,
+	cause		Cause			OPTIONAL ,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-FailedToBeSetupMod-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-FailedToBeSetupMod-ItemExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-Modified-Item ::= SEQUENCE {
+	bHRLCChannelID			BHRLCChannelID,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-Modified-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-Modified-ItemExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-Required-ToBeReleased-Item ::= SEQUENCE {
+	bHRLCChannelID		BHRLCChannelID,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-Required-ToBeReleased-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-Required-ToBeReleased-ItemExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-Setup-Item ::= SEQUENCE {
+	bHRLCChannelID							BHRLCChannelID,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-Setup-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-Setup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-SetupMod-Item ::= SEQUENCE {
+	bHRLCChannelID							BHRLCChannelID,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-SetupMod-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-SetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-ToBeModified-Item ::= SEQUENCE {
+	bHRLCChannelID					BHRLCChannelID,
+	bHQoSInformation				BHQoSInformation,
+	rLCmode				RLCMode	OPTIONAL,
+	bAPCtrlPDUChannel	BAPCtrlPDUChannel		OPTIONAL,
+	trafficMappingInfo	TrafficMappingInfo		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-ToBeModified-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-ToBeModified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-ToBeReleased-Item ::= SEQUENCE {
+	bHRLCChannelID		BHRLCChannelID,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-ToBeReleased-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-ToBeReleased-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-ToBeSetup-Item ::= SEQUENCE	{
+	bHRLCChannelID						BHRLCChannelID,
+	bHQoSInformation					BHQoSInformation,
+	rLCmode								RLCMode,
+	bAPCtrlPDUChannel					BAPCtrlPDUChannel		OPTIONAL,
+	trafficMappingInfo					TrafficMappingInfo		OPTIONAL,
+	iE-Extensions						ProtocolExtensionContainer { { BHChannels-ToBeSetup-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-ToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-ToBeSetupMod-Item ::= SEQUENCE {
+	bHRLCChannelID				BHRLCChannelID,
+	bHQoSInformation			BHQoSInformation,
+	rLCmode				RLCMode,
+	bAPCtrlPDUChannel	BAPCtrlPDUChannel		OPTIONAL,
+	trafficMappingInfo	TrafficMappingInfo		OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { { BHChannels-ToBeSetupMod-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-ToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHInfo ::= SEQUENCE {
+	bAProutingID			BAPRoutingID 	OPTIONAL,
+	egressBHRLCCHList		EgressBHRLCCHList	OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer { { BHInfo-ExtIEs} } OPTIONAL
+}
+
+BHInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHQoSInformation ::= CHOICE {
+	bHRLCCHQoS					QoSFlowLevelQoSParameters,	
+	eUTRANBHRLCCHQoS			EUTRANQoS,
+	cPTrafficType				CPTrafficType,
+	choice-extension			ProtocolIE-SingleContainer { { BHQoSInformation-ExtIEs} }
+}
+
+BHQoSInformation-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+BH-Routing-Information-Added-List-Item ::= SEQUENCE {
+	bAPRoutingID				BAPRoutingID,
+	nextHopBAPAddress			BAPAddress,
+	iE-Extensions				ProtocolExtensionContainer { { BH-Routing-Information-Added-List-ItemExtIEs} }	OPTIONAL
+}
+
+BH-Routing-Information-Added-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BH-Routing-Information-Removed-List-Item ::= SEQUENCE {
+	bAPRoutingID				BAPRoutingID,
+	iE-Extensions				ProtocolExtensionContainer { { BH-Routing-Information-Removed-List-ItemExtIEs} }	OPTIONAL
+}
+
+BH-Routing-Information-Removed-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BPLMN-ID-Info-List ::= SEQUENCE (SIZE(1..maxnoofBPLMNsNR)) OF BPLMN-ID-Info-Item
+
+BPLMN-ID-Info-Item ::= SEQUENCE {
+	pLMN-Identity-List			AvailablePLMNList,
+	extended-PLMN-Identity-List	ExtendedAvailablePLMN-List	OPTIONAL,
+	fiveGS-TAC					FiveGS-TAC					OPTIONAL,
+	nr-cell-ID					NRCellIdentity,
+	ranac						RANAC						OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { BPLMN-ID-Info-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+BPLMN-ID-Info-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{	ID id-ConfiguredTACIndication		CRITICALITY ignore	EXTENSION ConfiguredTACIndication		PRESENCE optional }|
+	{	ID id-NPNBroadcastInformation		CRITICALITY reject EXTENSION NPNBroadcastInformation		PRESENCE optional},
+	...
+}
+
+ServedPLMNs-List ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF ServedPLMNs-Item
+
+ServedPLMNs-Item ::= SEQUENCE {
+	pLMN-Identity				PLMN-Identity,
+	iE-Extensions				ProtocolExtensionContainer { { ServedPLMNs-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+ServedPLMNs-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+{ ID id-TAISliceSupportList	CRITICALITY ignore	EXTENSION SliceSupportList		PRESENCE optional	}|
+{ ID id-NPNSupportInfo	CRITICALITY reject	EXTENSION NPNSupportInfo		PRESENCE optional	}|
+{ ID id-ExtendedTAISliceSupportList	CRITICALITY reject	EXTENSION ExtendedSliceSupportList		PRESENCE optional	},
+	...
+}
+
+BroadcastCAGList ::= SEQUENCE (SIZE(1..maxnoofCAGsupported)) OF CAGID
+
+BroadcastNIDList ::= SEQUENCE (SIZE(1..maxnoofNIDsupported)) OF NID
+
+BroadcastSNPN-ID-List ::= SEQUENCE (SIZE(1..maxnoofNIDsupported)) OF BroadcastSNPN-ID-List-Item
+
+BroadcastSNPN-ID-List-Item ::= SEQUENCE {
+	pLMN-Identity				PLMN-Identity,
+	broadcastNIDList			BroadcastNIDList,
+	iE-Extensions				ProtocolExtensionContainer { { BroadcastSNPN-ID-List-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+BroadcastSNPN-ID-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BroadcastPNI-NPN-ID-List ::= SEQUENCE (SIZE(1..maxnoofCAGsupported)) OF BroadcastPNI-NPN-ID-List-Item
+
+BroadcastPNI-NPN-ID-List-Item ::= SEQUENCE {
+	pLMN-Identity				PLMN-Identity,
+	broadcastCAGList			BroadcastCAGList,
+	iE-Extensions				ProtocolExtensionContainer { { BroadcastPNI-NPN-ID-List-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+BroadcastPNI-NPN-ID-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+BurstArrivalTime ::= OCTET STRING
+
+-- C
+CAGID ::= BIT STRING (SIZE(32))
+
+Cancel-all-Warning-Messages-Indicator ::= ENUMERATED {true, ...}
+
+Candidate-SpCell-Item ::= SEQUENCE {
+	candidate-SpCell-ID			NRCGI	,
+	iE-Extensions	ProtocolExtensionContainer { { Candidate-SpCell-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Candidate-SpCell-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+CapacityValue::= SEQUENCE {
+	capacityValue				INTEGER (0..100),
+	sSBAreaCapacityValueList	SSBAreaCapacityValueList		OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { CapacityValue-ExtIEs} } OPTIONAL
+}
+
+CapacityValue-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Cause ::= CHOICE {
+	radioNetwork		CauseRadioNetwork,
+	transport			CauseTransport,
+	protocol			CauseProtocol,
+	misc				CauseMisc,
+	choice-extension	ProtocolIE-SingleContainer { { Cause-ExtIEs} }
+}
+
+Cause-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+CauseMisc ::= ENUMERATED {
+	control-processing-overload,
+	not-enough-user-plane-processing-resources,
+	hardware-failure,
+	om-intervention,
+	unspecified,
+	...
+}
+
+CauseProtocol ::= ENUMERATED {
+	transfer-syntax-error,
+	abstract-syntax-error-reject,
+	abstract-syntax-error-ignore-and-notify,
+	message-not-compatible-with-receiver-state,
+	semantic-error,
+	abstract-syntax-error-falsely-constructed-message,
+	unspecified,
+	...
+}
+
+CauseRadioNetwork ::= ENUMERATED {
+	unspecified,
+	rl-failure-rlc,
+	unknown-or-already-allocated-gnb-cu-ue-f1ap-id,
+	unknown-or-already-allocated-gnb-du-ue-f1ap-id,
+	unknown-or-inconsistent-pair-of-ue-f1ap-id,
+	interaction-with-other-procedure,
+	not-supported-qci-Value,
+	action-desirable-for-radio-reasons,
+	no-radio-resources-available,
+	procedure-cancelled,
+	normal-release,
+	...,
+	cell-not-available,
+	rl-failure-others,
+	ue-rejection,
+	resources-not-available-for-the-slice,
+	amf-initiated-abnormal-release,
+	release-due-to-pre-emption,
+	plmn-not-served-by-the-gNB-CU,
+	multiple-drb-id-instances,
+	unknown-drb-id,
+	multiple-bh-rlc-ch-id-instances,
+	unknown-bh-rlc-ch-id,
+	cho-cpc-resources-tobechanged,
+	nPN-not-supported, 
+	nPN-access-denied,
+	gNB-CU-Cell-Capacity-Exceeded,
+	report-characteristics-empty,
+	existing-measurement-ID,
+	measurement-temporarily-not-available,
+	measurement-not-supported-for-the-object
+
+}
+
+CauseTransport ::= ENUMERATED {
+	unspecified,
+	transport-resource-unavailable,
+	...,
+	unknown-TNL-address-for-IAB,
+	unknown-UP-TNL-information-for-IAB
+}
+
+CellGroupConfig ::= OCTET STRING
+
+CellCapacityClassValue ::= INTEGER (1..100,...)
+
+Cell-Direction ::= ENUMERATED {dl-only, ul-only}
+
+CellMeasurementResultList ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF CellMeasurementResultItem
+
+CellMeasurementResultItem ::= SEQUENCE {
+	cellID							NRCGI,
+	radioResourceStatus				RadioResourceStatus 			OPTIONAL, 
+	compositeAvailableCapacityGroup	CompositeAvailableCapacityGroup	OPTIONAL,
+	sliceAvailableCapacity			SliceAvailableCapacity 			OPTIONAL, 
+	numberofActiveUEs 				NumberofActiveUEs			OPTIONAL, 
+	iE-Extensions					ProtocolExtensionContainer { { CellMeasurementResultItem-ExtIEs} } OPTIONAL
+}
+
+CellMeasurementResultItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Cell-Portion-ID ::= INTEGER (0..4095,...)
+
+Cells-Failed-to-be-Activated-List-Item ::= SEQUENCE {
+	nRCGI				NRCGI,
+	cause				Cause,
+	iE-Extensions		ProtocolExtensionContainer { { Cells-Failed-to-be-Activated-List-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Cells-Failed-to-be-Activated-List-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Cells-Status-Item ::= SEQUENCE {
+	nRCGI			NRCGI,
+	service-status		Service-Status,
+	iE-Extensions				ProtocolExtensionContainer { { Cells-Status-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Cells-Status-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Cells-To-Be-Broadcast-Item ::= SEQUENCE {
+	nRCGI				NRCGI,
+	iE-Extensions		ProtocolExtensionContainer { { Cells-To-Be-Broadcast-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Cells-To-Be-Broadcast-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Cells-Broadcast-Completed-Item ::= SEQUENCE {
+	nRCGI				NRCGI,
+	iE-Extensions		ProtocolExtensionContainer { { Cells-Broadcast-Completed-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Cells-Broadcast-Completed-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Broadcast-To-Be-Cancelled-Item ::= SEQUENCE {
+	nRCGI				NRCGI,
+	iE-Extensions		ProtocolExtensionContainer { { Broadcast-To-Be-Cancelled-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Broadcast-To-Be-Cancelled-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+Cells-Broadcast-Cancelled-Item ::= SEQUENCE {
+	nRCGI				NRCGI,
+	numberOfBroadcasts	NumberOfBroadcasts,
+	iE-Extensions		ProtocolExtensionContainer { { Cells-Broadcast-Cancelled-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Cells-Broadcast-Cancelled-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Cells-to-be-Activated-List-Item ::= SEQUENCE {
+	nRCGI		NRCGI,
+	nRPCI		NRPCI		OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { Cells-to-be-Activated-List-ItemExtIEs} }	OPTIONAL,
+	...
+}
+
+Cells-to-be-Activated-List-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-gNB-CUSystemInformation			CRITICALITY reject	EXTENSION GNB-CUSystemInformation			PRESENCE optional }|
+	{ ID id-AvailablePLMNList				CRITICALITY ignore	EXTENSION AvailablePLMNList					PRESENCE optional }|
+	{ ID id-ExtendedAvailablePLMN-List		CRITICALITY ignore	EXTENSION ExtendedAvailablePLMN-List		PRESENCE optional }|
+	{ ID id-IAB-Info-IAB-donor-CU			CRITICALITY ignore	EXTENSION IAB-Info-IAB-donor-CU				PRESENCE optional}|
+	{ ID id-AvailableSNPN-ID-List			CRITICALITY ignore	EXTENSION AvailableSNPN-ID-List				PRESENCE optional },
+	...
+}
+
+Cells-to-be-Deactivated-List-Item ::= SEQUENCE {
+	nRCGI			NRCGI	,
+	iE-Extensions				ProtocolExtensionContainer { { Cells-to-be-Deactivated-List-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Cells-to-be-Deactivated-List-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Cells-to-be-Barred-Item::= SEQUENCE {
+	nRCGI			NRCGI	,
+	cellBarred		CellBarred,
+	iE-Extensions				ProtocolExtensionContainer { { Cells-to-be-Barred-Item-ExtIEs } }	OPTIONAL
+}
+
+Cells-to-be-Barred-Item-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-IAB-Barred	CRITICALITY ignore	EXTENSION IAB-Barred		PRESENCE optional },
+
+	...
+}
+
+
+CellBarred	::=	ENUMERATED {barred, not-barred, ...}
+
+CellSize ::= ENUMERATED {verysmall, small, medium, large, ...}
+
+CellToReportList ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF CellToReportItem
+
+CellToReportItem ::= SEQUENCE {
+	cellID		NRCGI,
+	sSBToReportList		SSBToReportList		 OPTIONAL,
+	sliceToReportList	SliceToReportList	 OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { CellToReportItem-ExtIEs} } OPTIONAL
+}
+
+CellToReportItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+CellType ::= SEQUENCE {
+	cellSize		CellSize,
+	iE-Extensions		ProtocolExtensionContainer { {CellType-ExtIEs} }	OPTIONAL,
+	...
+}
+
+CellType-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+CellULConfigured ::=  ENUMERATED {none, ul, sul, ul-and-sul, ...}
+
+Child-Node-Cells-List ::= SEQUENCE (SIZE(1..maxnoofChildIABNodes)) OF Child-Node-Cells-List-Item
+
+Child-Node-Cells-List-Item ::=	SEQUENCE{
+	nRCGI 								NRCGI,
+	iAB-DU-Cell-Resource-Configuration-Mode-Info 	IAB-DU-Cell-Resource-Configuration-Mode-Info	OPTIONAL,
+	iAB-STC-Info						IAB-STC-Info	OPTIONAL,
+	rACH-Config-Common					RACH-Config-Common	OPTIONAL,
+	rACH-Config-Common-IAB				RACH-Config-Common-IAB	OPTIONAL,
+	cSI-RS-Configuration				OCTET STRING	OPTIONAL,
+	sR-Configuration					OCTET STRING	OPTIONAL,
+	pDCCH-ConfigSIB1					OCTET STRING	OPTIONAL,
+	sCS-Common							OCTET STRING	OPTIONAL,
+	multiplexingInfo					MultiplexingInfo	OPTIONAL,
+	iE-Extensions						ProtocolExtensionContainer {{Child-Node-Cells-List-Item-ExtIEs}}		OPTIONAL
+}
+
+Child-Node-Cells-List-Item-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Child-Nodes-List ::= SEQUENCE (SIZE(1..maxnoofChildIABNodes)) OF Child-Nodes-List-Item
+
+Child-Nodes-List-Item ::= SEQUENCE{
+	gNB-CU-UE-F1AP-ID	GNB-CU-UE-F1AP-ID,
+	gNB-DU-UE-F1AP-ID	GNB-DU-UE-F1AP-ID,
+	child-Node-Cells-List 	Child-Node-Cells-List	OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer {{Child-Nodes-List-Item-ExtIEs}}		OPTIONAL
+}
+
+Child-Nodes-List-Item-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+CHOtrigger-InterDU ::= ENUMERATED {
+	cho-initiation,
+	cho-replace,
+	...
+}
+
+CHOtrigger-IntraDU ::= ENUMERATED {
+	cho-initiation,
+	cho-replace,
+	cho-cancel,
+	...
+}
+
+CNUEPagingIdentity ::= CHOICE {
+	fiveG-S-TMSI			BIT STRING (SIZE(48)),
+	choice-extension			ProtocolIE-SingleContainer { { CNUEPagingIdentity-ExtIEs } }
+}
+
+CNUEPagingIdentity-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+CompositeAvailableCapacityGroup ::= SEQUENCE {
+	compositeAvailableCapacityDownlink	CompositeAvailableCapacity,
+	compositeAvailableCapacityUplink 	CompositeAvailableCapacity,
+	iE-Extensions	ProtocolExtensionContainer { { CompositeAvailableCapacityGroup-ExtIEs} } OPTIONAL
+}
+
+CompositeAvailableCapacityGroup-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+CompositeAvailableCapacity ::= SEQUENCE {
+	cellCapacityClassValue 	CellCapacityClassValue		OPTIONAL,
+	capacityValue			CapacityValue,
+	iE-Extensions	ProtocolExtensionContainer { { CompositeAvailableCapacity-ExtIEs} } OPTIONAL
+}
+
+CompositeAvailableCapacity-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ConditionalInterDUMobilityInformation ::= SEQUENCE {
+	cho-trigger						CHOtrigger-InterDU,
+	targetgNB-DUUEF1APID			GNB-DU-UE-F1AP-ID							OPTIONAL
+		-- This IE shall be present if the cho-trigger IE is present and set to "cho-replace" --,
+	iE-Extensions					ProtocolExtensionContainer { { ConditionalInterDUMobilityInformation-ExtIEs} }	OPTIONAL,
+	...
+}
+
+ConditionalInterDUMobilityInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::={
+	...
+}
+
+ConditionalIntraDUMobilityInformation ::= SEQUENCE {
+	cho-trigger						CHOtrigger-IntraDU,
+	targetCellsTocancel				TargetCellList								OPTIONAL,
+	-- This IE may be present if the cho-trigger IE is present and set to "cho-cancel"
+	iE-Extensions					ProtocolExtensionContainer { { ConditionalIntraDUMobilityInformation-ExtIEs} }	OPTIONAL,
+	...
+}
+
+ConditionalIntraDUMobilityInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::={
+	...
+}
+
+ConfiguredTACIndication ::= ENUMERATED {
+	true,
+	...
+}
+
+
+CoordinateID ::= INTEGER (0..511, ...)
+
+CP-TransportLayerAddress ::= CHOICE {
+	endpoint-IP-address				TransportLayerAddress,
+	endpoint-IP-address-and-port	Endpoint-IP-address-and-port, 
+	choice-extension				ProtocolIE-SingleContainer { { CP-TransportLayerAddress-ExtIEs } }
+}
+
+CP-TransportLayerAddress-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+CPTrafficType ::= INTEGER (1..3,...)
+
+CriticalityDiagnostics ::= SEQUENCE {
+	procedureCode					ProcedureCode														OPTIONAL,
+	triggeringMessage				TriggeringMessage													OPTIONAL,
+	procedureCriticality			Criticality															OPTIONAL,
+	transactionID					TransactionID														OPTIONAL,
+	iEsCriticalityDiagnostics		CriticalityDiagnostics-IE-List										OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer {{CriticalityDiagnostics-ExtIEs}}		OPTIONAL,
+	...
+}
+
+CriticalityDiagnostics-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1.. maxnoofErrors)) OF CriticalityDiagnostics-IE-Item
+
+CriticalityDiagnostics-IE-Item ::= SEQUENCE {
+	iECriticality			Criticality,
+	iE-ID					ProtocolIE-ID,
+	typeOfError 			TypeOfError,
+	iE-Extensions			ProtocolExtensionContainer {{CriticalityDiagnostics-IE-Item-ExtIEs}}	OPTIONAL,
+	...
+}
+
+CriticalityDiagnostics-IE-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+C-RNTI ::= INTEGER (0..65535, ...)
+
+CUDURadioInformationType ::= CHOICE {
+	rIM								CUDURIMInformation,
+	choice-extension				ProtocolIE-SingleContainer { { CUDURadioInformationType-ExtIEs} }
+}
+
+CUDURadioInformationType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+CUDURIMInformation ::= SEQUENCE {
+	victimgNBSetID			GNBSetID, 
+	rIMRSDetectionStatus	RIMRSDetectionStatus,
+	iE-Extensions			ProtocolExtensionContainer { { CUDURIMInformation-ExtIEs} }	OPTIONAL
+}
+
+CUDURIMInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+CUtoDURRCInformation ::= SEQUENCE {
+	cG-ConfigInfo						CG-ConfigInfo						OPTIONAL,
+	uE-CapabilityRAT-ContainerList		UE-CapabilityRAT-ContainerList		OPTIONAL,
+	measConfig							MeasConfig							OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { CUtoDURRCInformation-ExtIEs} } OPTIONAL,
+	...
+}
+
+CUtoDURRCInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-HandoverPreparationInformation	CRITICALITY ignore	EXTENSION HandoverPreparationInformation		PRESENCE optional }|
+	{ ID id-CellGroupConfig					CRITICALITY ignore	EXTENSION CellGroupConfig							PRESENCE optional }|
+	{ ID id-MeasurementTimingConfiguration	CRITICALITY ignore	EXTENSION MeasurementTimingConfiguration		PRESENCE optional }|
+	{ ID id-UEAssistanceInformation			CRITICALITY ignore	EXTENSION UEAssistanceInformation					PRESENCE optional }|
+	{ ID id-CG-Config						CRITICALITY ignore	EXTENSION CG-Config									PRESENCE optional }|
+	{ ID id-UEAssistanceInformationEUTRA	CRITICALITY ignore	EXTENSION UEAssistanceInformationEUTRA			PRESENCE optional },
+	...
+}
+
+-- D
+
+DCBasedDuplicationConfigured::= ENUMERATED{true,..., false}
+
+Dedicated-SIDelivery-NeededUE-Item ::= SEQUENCE {
+	gNB-CU-UE-F1AP-ID						GNB-CU-UE-F1AP-ID,
+	nRCGI									NRCGI,
+	iE-Extensions							ProtocolExtensionContainer { { DedicatedSIDeliveryNeededUE-Item-ExtIEs} } OPTIONAL,
+	...
+}
+
+DedicatedSIDeliveryNeededUE-Item-ExtIEs F1AP-PROTOCOL-EXTENSION::={
+	...
+}
+
+
+DL-PRS ::= SEQUENCE {
+	prsid 					INTEGER (0..255),
+	dl-PRSResourceSetID		PRS-Resource-Set-ID,
+	dl-PRSResourceID		PRS-Resource-ID	OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer { {DL-PRS-ExtIEs} }	OPTIONAL
+}
+
+DL-PRS-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DL-PRSMutingPattern ::= CHOICE {
+	two					BIT STRING (SIZE(2)),
+	four				BIT STRING (SIZE(4)),
+	six					BIT STRING (SIZE(6)),
+	eight				BIT STRING (SIZE(8)),
+	sixteen				BIT STRING (SIZE(16)),
+	thirty-two			BIT STRING (SIZE(32)),
+	choice-extension							ProtocolIE-SingleContainer { { DL-PRSMutingPattern-ExtIEs } }
+}
+
+DL-PRSMutingPattern-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+DLPRSResourceCoordinates ::= SEQUENCE {
+	listofDL-PRSResourceSetARP		SEQUENCE (SIZE(1.. maxnoofPRS-ResourceSets)) OF DLPRSResourceSetARP,
+	iE-Extensions					ProtocolExtensionContainer { { DLPRSResourceCoordinates-ExtIEs } } OPTIONAL
+}
+
+DLPRSResourceCoordinates-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DLPRSResourceSetARP ::= SEQUENCE {
+	dl-PRSResourceSetID				INTEGER (0..7),
+	dL-PRSResourceSetARPLocation	DL-PRSResourceSetARPLocation,
+	listofDL-PRSResourceARP			SEQUENCE (SIZE(1.. maxnoofPRS-ResourcesPerSet)) OF DLPRSResourceARP,
+	iE-Extensions					ProtocolExtensionContainer { { DLPRSResourceSetARP-ExtIEs } } OPTIONAL
+}
+
+DLPRSResourceSetARP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+DL-PRSResourceSetARPLocation ::= CHOICE {
+	relativeGeodeticLocation			RelativeGeodeticLocation,
+	relativeCartesianLocation			RelativeCartesianLocation,
+	choice-Extension					ProtocolIE-SingleContainer { { DL-PRSResourceSetARPLocation-ExtIEs } }
+}
+
+DL-PRSResourceSetARPLocation-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+
+DLPRSResourceARP ::= SEQUENCE {
+	dl-PRSResourceID			INTEGER (0..63),
+	dL-PRSResourceARPLocation	DL-PRSResourceARPLocation,	
+	iE-Extensions				ProtocolExtensionContainer { { DLPRSResourceARP-ExtIEs } } OPTIONAL
+}
+
+DLPRSResourceARP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DL-PRSResourceARPLocation ::= CHOICE {
+	relativeGeodeticLocation			RelativeGeodeticLocation,
+	relativeCartesianLocation			RelativeCartesianLocation,
+	choice-Extension					ProtocolIE-SingleContainer { { DL-PRSResourceARPLocation-ExtIEs } }
+}
+
+DL-PRSResourceARPLocation-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+DL-UP-TNL-Address-to-Update-List-Item	::= SEQUENCE {
+	oldIPAdress						TransportLayerAddress,
+	newIPAdress						TransportLayerAddress,
+	iE-Extensions	ProtocolExtensionContainer { { DL-UP-TNL-Address-to-Update-List-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DL-UP-TNL-Address-to-Update-List-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DLUPTNLInformation-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofDLUPTNLInformation)) OF DLUPTNLInformation-ToBeSetup-Item
+
+DLUPTNLInformation-ToBeSetup-Item ::= SEQUENCE {
+	dLUPTNLInformation	UPTransportLayerInformation	,
+	iE-Extensions	ProtocolExtensionContainer { { DLUPTNLInformation-ToBeSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DLUPTNLInformation-ToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRB-Activity-Item ::= SEQUENCE {
+	dRBID			DRBID,
+	dRB-Activity	DRB-Activity		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { DRB-Activity-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRB-Activity-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRB-Activity ::= ENUMERATED {active, not-active}
+
+DRBID ::= INTEGER (1..32, ...)
+
+DRBs-FailedToBeModified-Item	::= SEQUENCE {
+	dRBID		DRBID		,
+	cause		Cause		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-FailedToBeModified-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-FailedToBeModified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRBs-FailedToBeSetup-Item	::= SEQUENCE {
+	dRBID	DRBID,
+	cause	Cause	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-FailedToBeSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-FailedToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+DRBs-FailedToBeSetupMod-Item	::= SEQUENCE {
+	dRBID		DRBID	,
+	cause		Cause			OPTIONAL ,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-FailedToBeSetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-FailedToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRB-Information	::=	SEQUENCE {
+	dRB-QoS		QoSFlowLevelQoSParameters, 
+	sNSSAI		SNSSAI, 
+	notificationControl		NotificationControl		OPTIONAL,
+	flows-Mapped-To-DRB-List	Flows-Mapped-To-DRB-List,
+	iE-Extensions	ProtocolExtensionContainer { { DRB-Information-ItemExtIEs } }	OPTIONAL
+}
+
+DRB-Information-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRBs-Modified-Item	::= SEQUENCE {
+	dRBID							DRBID,
+	lCID								LCID		OPTIONAL,
+	dLUPTNLInformation-ToBeSetup-List		DLUPTNLInformation-ToBeSetup-List,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-Modified-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-Modified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-RLC-Status							CRITICALITY ignore	EXTENSION RLC-Status									PRESENCE optional }|
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List		PRESENCE optional },
+	...
+}
+
+DRBs-ModifiedConf-Item	::= SEQUENCE {
+	dRBID							DRBID,
+	uLUPTNLInformation-ToBeSetup-List		ULUPTNLInformation-ToBeSetup-List	,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-ModifiedConf-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-ModifiedConf-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List			PRESENCE optional },
+	...
+}
+
+DRB-Notify-Item ::= SEQUENCE {
+	dRBID			DRBID,
+	notification-Cause	Notification-Cause,
+	iE-Extensions	ProtocolExtensionContainer { { DRB-Notify-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRB-Notify-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-CurrentQoSParaSetIndex	CRITICALITY ignore	EXTENSION QoSParaSetNotifyIndex	PRESENCE optional	},
+	...
+}
+
+DRBs-Required-ToBeModified-Item	::= SEQUENCE {
+	dRBID							DRBID,
+	dLUPTNLInformation-ToBeSetup-List		DLUPTNLInformation-ToBeSetup-List	,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-Required-ToBeModified-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-Required-ToBeModified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-RLC-Status			CRITICALITY ignore			EXTENSION RLC-Status				PRESENCE optional }|
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List			PRESENCE optional },
+	...
+}
+
+DRBs-Required-ToBeReleased-Item	::= SEQUENCE {
+	dRBID		DRBID,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-Required-ToBeReleased-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-Required-ToBeReleased-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRBs-Setup-Item ::= SEQUENCE {
+	dRBID							DRBID,
+	lCID								LCID		OPTIONAL,
+	dLUPTNLInformation-ToBeSetup-List		DLUPTNLInformation-ToBeSetup-List	, 
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-Setup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-Setup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List			PRESENCE optional }|
+	{ ID id-RLCDuplicationInformation			CRITICALITY ignore	EXTENSION RLCDuplicationInformation						PRESENCE optional},	...
+}
+
+DRBs-SetupMod-Item	::= SEQUENCE {
+	dRBID							DRBID,
+	lCID								LCID		OPTIONAL,
+	dLUPTNLInformation-ToBeSetup-List		DLUPTNLInformation-ToBeSetup-List	,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-SetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-SetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List			PRESENCE optional },
+	...
+}
+
+
+DRBs-ToBeModified-Item	::= SEQUENCE {
+	dRBID						DRBID,
+	qoSInformation				QoSInformation	OPTIONAL,
+	uLUPTNLInformation-ToBeSetup-List	ULUPTNLInformation-ToBeSetup-List	, 
+	uLConfiguration				ULConfiguration	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-ToBeModified-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-ToBeModified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-DLPDCPSNLength						CRITICALITY ignore	EXTENSION PDCPSNLength										PRESENCE optional }|
+	{ ID id-ULPDCPSNLength						CRITICALITY ignore	EXTENSION PDCPSNLength										PRESENCE optional }|
+	{ID id-BearerTypeChange						CRITICALITY ignore	EXTENSION BearerTypeChange									PRESENCE optional}|
+	{ ID id-RLCMode								CRITICALITY ignore	EXTENSION RLCMode											PRESENCE optional }|
+	{ ID id-Duplication-Activation				CRITICALITY reject	EXTENSION DuplicationActivation							PRESENCE optional }|
+	{ ID id-DC-Based-Duplication-Configured		CRITICALITY reject	EXTENSION DCBasedDuplicationConfigured					PRESENCE optional }|
+	{ ID id-DC-Based-Duplication-Activation		CRITICALITY reject	EXTENSION DuplicationActivation							PRESENCE optional }|
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List			PRESENCE optional }|
+	{ ID id-RLCDuplicationInformation			CRITICALITY ignore	EXTENSION RLCDuplicationInformation						PRESENCE optional},
+	...
+}
+
+DRBs-ToBeReleased-Item	::= SEQUENCE {
+	dRBID	DRBID,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-ToBeReleased-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-ToBeReleased-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRBs-ToBeSetup-Item ::= SEQUENCE	{
+	dRBID						DRBID,
+	qoSInformation				QoSInformation,
+	uLUPTNLInformation-ToBeSetup-List	ULUPTNLInformation-ToBeSetup-List	, 
+	rLCMode						RLCMode, 
+	uLConfiguration				ULConfiguration	OPTIONAL,
+	duplicationActivation		DuplicationActivation	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-ToBeSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-ToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-DC-Based-Duplication-Configured		CRITICALITY reject	EXTENSION DCBasedDuplicationConfigured				PRESENCE optional }|
+	{ ID id-DC-Based-Duplication-Activation		CRITICALITY reject	EXTENSION DuplicationActivation						PRESENCE optional }|
+	{ ID id-DLPDCPSNLength						CRITICALITY ignore	EXTENSION PDCPSNLength									PRESENCE mandatory }|
+	{ ID id-ULPDCPSNLength						CRITICALITY ignore	EXTENSION PDCPSNLength									PRESENCE optional }|
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List		PRESENCE optional },
+	...
+}
+
+
+DRBs-ToBeSetupMod-Item	::= SEQUENCE {
+	dRBID						DRBID,
+	qoSInformation				QoSInformation,
+	uLUPTNLInformation-ToBeSetup-List		ULUPTNLInformation-ToBeSetup-List,
+	rLCMode						RLCMode, 
+	uLConfiguration				ULConfiguration	OPTIONAL,
+	duplicationActivation		DuplicationActivation	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-ToBeSetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-ToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-DC-Based-Duplication-Configured		CRITICALITY reject	EXTENSION DCBasedDuplicationConfigured				PRESENCE optional }|
+	{ ID id-DC-Based-Duplication-Activation		CRITICALITY reject	EXTENSION DuplicationActivation						PRESENCE optional }|
+	{ ID id-DLPDCPSNLength						CRITICALITY ignore	EXTENSION PDCPSNLength									PRESENCE optional }|
+	{ ID id-ULPDCPSNLength						CRITICALITY ignore	EXTENSION PDCPSNLength									PRESENCE optional }|
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List		PRESENCE optional }|
+	{ ID id-RLCDuplicationInformation			CRITICALITY ignore	EXTENSION RLCDuplicationInformation					PRESENCE optional},
+	...
+}
+
+DRXCycle	::= SEQUENCE {
+	longDRXCycleLength	LongDRXCycleLength,
+	shortDRXCycleLength		ShortDRXCycleLength	OPTIONAL,
+	shortDRXCycleTimer	ShortDRXCycleTimer OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { { DRXCycle-ExtIEs} } OPTIONAL,
+	...
+}
+
+DRXCycle-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRX-Config ::= OCTET STRING
+
+DRXConfigurationIndicator	::=	ENUMERATED{	release, ...}
+
+DRX-LongCycleStartOffset ::= INTEGER (0..10239)
+
+DSInformationList ::= SEQUENCE (SIZE(0..maxnoofDSInfo)) OF DSCP
+
+DSCP ::= BIT STRING (SIZE (6))
+
+DUtoCURRCContainer ::= OCTET STRING
+
+DUCURadioInformationType ::= CHOICE {
+	rIM								DUCURIMInformation,
+	choice-extension				ProtocolIE-SingleContainer { { DUCURadioInformationType-ExtIEs} }
+}
+
+DUCURadioInformationType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+DUCURIMInformation ::= SEQUENCE {
+	victimgNBSetID				GNBSetID, 
+	rIMRSDetectionStatus		RIMRSDetectionStatus,
+	aggressorCellList			AggressorCellList,
+	iE-Extensions				ProtocolExtensionContainer { { DUCURIMInformation-ExtIEs} }		OPTIONAL 
+}
+
+DUCURIMInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DUF-Slot-Config-Item 	::=	CHOICE {
+	explicitFormat				ExplicitFormat,
+	implicitFormat				ImplicitFormat,
+	choice-extension				ProtocolIE-SingleContainer { { DUF-Slot-Config-Item-ExtIEs} }
+}
+
+DUF-Slot-Config-Item-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+DUF-Slot-Config-List	::= SEQUENCE (SIZE(1..maxnoofDUFSlots)) OF DUF-Slot-Config-Item
+
+DUFSlotformatIndex ::= INTEGER(0..254)
+
+DUFTransmissionPeriodicity ::= ENUMERATED { ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms5, ms10, ...}
+
+DU-RX-MT-RX ::= ENUMERATED {supported, not-supported}
+
+DU-TX-MT-TX ::= ENUMERATED {supported, not-supported}
+
+DU-RX-MT-TX ::= ENUMERATED {supported, not-supported}
+
+DU-TX-MT-RX ::= ENUMERATED {supported, not-supported}
+
+DUtoCURRCInformation ::= SEQUENCE {
+	cellGroupConfig		CellGroupConfig,
+	measGapConfig			MeasGapConfig	OPTIONAL,
+	requestedP-MaxFR1				OCTET STRING				OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { DUtoCURRCInformation-ExtIEs} } OPTIONAL,
+	...
+}
+
+DUtoCURRCInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-DRX-LongCycleStartOffset			CRITICALITY ignore	EXTENSION DRX-LongCycleStartOffset				PRESENCE optional }|
+	{ ID id-SelectedBandCombinationIndex		CRITICALITY ignore	EXTENSION SelectedBandCombinationIndex			PRESENCE optional }|
+	{ ID id-SelectedFeatureSetEntryIndex		CRITICALITY ignore	EXTENSION SelectedFeatureSetEntryIndex			PRESENCE optional }|
+	{ ID id-Ph-InfoSCG							CRITICALITY ignore	EXTENSION Ph-InfoSCG								PRESENCE optional }|
+	{ ID id-RequestedBandCombinationIndex		CRITICALITY ignore	EXTENSION RequestedBandCombinationIndex		PRESENCE optional }|
+	{ ID id-RequestedFeatureSetEntryIndex		CRITICALITY ignore	EXTENSION RequestedFeatureSetEntryIndex		PRESENCE optional }|
+	{ ID id-DRX-Config							CRITICALITY ignore	EXTENSION DRX-Config								PRESENCE optional }|
+	{ ID id-PDCCH-BlindDetectionSCG				CRITICALITY ignore	EXTENSION PDCCH-BlindDetectionSCG				PRESENCE optional }|
+	{ ID id-Requested-PDCCH-BlindDetectionSCG	CRITICALITY ignore	EXTENSION Requested-PDCCH-BlindDetectionSCG	PRESENCE optional }|
+	{ ID id-Ph-InfoMCG							CRITICALITY ignore	EXTENSION Ph-InfoMCG								PRESENCE optional }|
+	{ ID id-MeasGapSharingConfig				CRITICALITY ignore	EXTENSION MeasGapSharingConfig					PRESENCE optional }|
+	{ ID id-SL-PHY-MAC-RLC-Config				CRITICALITY ignore	EXTENSION SL-PHY-MAC-RLC-Config					PRESENCE optional }|
+	{ ID id-SL-ConfigDedicatedEUTRA				CRITICALITY ignore	EXTENSION SL-ConfigDedicatedEUTRA				PRESENCE optional }|
+	{ ID id-RequestedP-MaxFR2					CRITICALITY ignore	EXTENSION RequestedP-MaxFR2							PRESENCE optional },
+	...
+}
+
+DuplicationActivation ::= ENUMERATED{active,inactive,... }
+
+DuplicationIndication ::= ENUMERATED {true, ... , false }
+
+DuplicationState ::= ENUMERATED { 
+	active,
+	inactive,
+	...
+}
+
+Dynamic5QIDescriptor	::= SEQUENCE {
+	qoSPriorityLevel					INTEGER (1..127),
+	packetDelayBudget					PacketDelayBudget,
+	packetErrorRate						PacketErrorRate,
+	fiveQI								INTEGER (0..255, ...)								OPTIONAL,
+	delayCritical						ENUMERATED {delay-critical, non-delay-critical}		OPTIONAL,
+	-- C-ifGBRflow: This IE shall be present if the GBR QoS Flow Information IE is present in the QoS Flow Level QoS Parameters IE.
+	averagingWindow 					AveragingWindow										OPTIONAL,
+	-- C-ifGBRflow: This IE shall be present if the GBR QoS Flow Information IE is present in the QoS Flow Level QoS Parameters IE.
+	maxDataBurstVolume					MaxDataBurstVolume									OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { Dynamic5QIDescriptor-ExtIEs } } OPTIONAL
+}
+
+Dynamic5QIDescriptor-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-ExtendedPacketDelayBudget			CRITICALITY ignore	EXTENSION ExtendedPacketDelayBudget		PRESENCE optional		}|
+	{ ID id-CNPacketDelayBudgetDownlink			CRITICALITY ignore	EXTENSION ExtendedPacketDelayBudget		PRESENCE optional		}|
+	{ ID id-CNPacketDelayBudgetUplink			CRITICALITY ignore	EXTENSION ExtendedPacketDelayBudget		PRESENCE optional		},
+	...
+}
+
+DynamicPQIDescriptor	::= SEQUENCE {
+	resourceType						ENUMERATED {gbr, non-gbr, delay-critical-grb, ...}		OPTIONAL,
+	qoSPriorityLevel					INTEGER (1..8, ...),
+	packetDelayBudget					PacketDelayBudget,
+	packetErrorRate						PacketErrorRate,
+	averagingWindow 					AveragingWindow										OPTIONAL,
+	-- C-ifGBRflow: This IE shall be present if the GBR QoS Flow Information IE is present in the QoS Flow Level QoS Parameters IE.
+	maxDataBurstVolume					MaxDataBurstVolume									OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { DynamicPQIDescriptor-ExtIEs } } OPTIONAL
+}
+
+DynamicPQIDescriptor-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+-- E
+
+E-CID-MeasurementPeriodicity ::= ENUMERATED {
+	ms120,
+	ms240,
+	ms480,
+	ms640,
+	ms1024,
+	ms2048,
+	ms5120,
+	ms10240,
+	min1,
+	min6,
+	min12,
+	min30,
+	min60,
+	...
+}
+
+E-CID-MeasurementQuantities ::= SEQUENCE (SIZE (1.. maxnoofMeasE-CID)) OF ProtocolIE-SingleContainer { {E-CID-MeasurementQuantities-ItemIEs} }
+
+E-CID-MeasurementQuantities-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-E-CID-MeasurementQuantities-Item	CRITICALITY reject	TYPE E-CID-MeasurementQuantities-Item		PRESENCE mandatory}
+}
+
+E-CID-MeasurementQuantities-Item ::= SEQUENCE {
+	e-CIDmeasurementQuantitiesValue				E-CID-MeasurementQuantitiesValue,
+	iE-Extensions								ProtocolExtensionContainer { { E-CID-MeasurementQuantitiesValue-ExtIEs} } OPTIONAL
+}
+
+E-CID-MeasurementQuantitiesValue-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+E-CID-MeasurementQuantitiesValue ::= ENUMERATED {
+	cell-Portion,
+	angleOfArrivalNR,
+	... 
+}
+
+E-CID-MeasurementResult ::= SEQUENCE {
+	geographicalCoordinates		GeographicalCoordinates 	OPTIONAL,
+	measuredResults-List		E-CID-MeasuredResults-List 	OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { E-CID-MeasurementResult-ExtIEs} } OPTIONAL
+}
+
+E-CID-MeasurementResult-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+E-CID-MeasuredResults-List ::= SEQUENCE (SIZE(1..maxnoofMeasE-CID)) OF E-CID-MeasuredResults-Item
+
+E-CID-MeasuredResults-Item ::= SEQUENCE {
+	e-CID-MeasuredResults-Value 	E-CID-MeasuredResults-Value,
+	iE-Extensions			ProtocolExtensionContainer {{ E-CID-MeasuredResults-Item-ExtIEs }}	 OPTIONAL
+}
+
+E-CID-MeasuredResults-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+E-CID-MeasuredResults-Value ::= CHOICE {
+	valueAngleofArrivalNR	UL-AoA,
+	choice-extension		ProtocolIE-SingleContainer { { E-CID-MeasuredResults-Value-ExtIEs} }
+}
+
+E-CID-MeasuredResults-Value-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+E-CID-ReportCharacteristics ::= ENUMERATED {
+	onDemand,
+	periodic,
+	...
+}
+
+EgressBHRLCCHList ::= SEQUENCE (SIZE(1..maxnoofEgressLinks)) OF EgressBHRLCCHItem
+
+EgressBHRLCCHItem ::= SEQUENCE {
+	nextHopBAPAddress 		BAPAddress,
+	bHRLCChannelID			BHRLCChannelID,
+	iE-Extensions			ProtocolExtensionContainer {{EgressBHRLCCHItemExtIEs }}	 OPTIONAL
+}
+
+EgressBHRLCCHItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Endpoint-IP-address-and-port ::=SEQUENCE {
+	endpointIPAddress TransportLayerAddress,
+	iE-Extensions					ProtocolExtensionContainer { { Endpoint-IP-address-and-port-ExtIEs} } OPTIONAL
+}
+
+Endpoint-IP-address-and-port-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-portNumber	CRITICALITY reject	EXTENSION PortNumber		PRESENCE optional},
+	...
+}
+
+ExtendedAvailablePLMN-List ::= SEQUENCE (SIZE(1..maxnoofExtendedBPLMNs)) OF ExtendedAvailablePLMN-Item
+
+ExtendedAvailablePLMN-Item ::= SEQUENCE {
+	pLMNIdentity			PLMN-Identity,
+	iE-Extensions		ProtocolExtensionContainer { { ExtendedAvailablePLMN-Item-ExtIEs} } OPTIONAL
+}
+
+ExplicitFormat ::=	SEQUENCE {
+	permutation			Permutation,
+	noofDownlinkSymbols	NoofDownlinkSymbols		OPTIONAL,
+	noofUplinkSymbols	NoofUplinkSymbols		OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { { ExplicitFormat-ExtIEs} } OPTIONAL
+}
+
+ExplicitFormat-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ExtendedAvailablePLMN-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ExtendedServedPLMNs-List ::= SEQUENCE (SIZE(1.. maxnoofExtendedBPLMNs)) OF ExtendedServedPLMNs-Item
+
+ExtendedServedPLMNs-Item ::= SEQUENCE {
+	pLMN-Identity				PLMN-Identity,
+	tAISliceSupportList 		SliceSupportList	OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { ExtendedServedPLMNs-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+ExtendedServedPLMNs-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-NPNSupportInfo			CRITICALITY reject	EXTENSION NPNSupportInfo				PRESENCE optional	}|
+{ ID id-ExtendedTAISliceSupportList	CRITICALITY reject	EXTENSION ExtendedSliceSupportList		PRESENCE optional	},
+	...
+}
+
+ExtendedSliceSupportList ::= SEQUENCE (SIZE(1.. maxnoofExtSliceItems)) OF SliceSupportItem
+
+EUTRACells-List  ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF EUTRACells-List-item
+
+EUTRACells-List-item ::= SEQUENCE {
+	eUTRA-Cell-ID					EUTRA-Cell-ID,
+	served-EUTRA-Cells-Information	Served-EUTRA-Cells-Information,
+	iE-Extensions ProtocolExtensionContainer { { EUTRACells-List-itemExtIEs } }    OPTIONAL
+}
+
+EUTRACells-List-itemExtIEs    F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+EUTRA-Cell-ID ::= BIT STRING (SIZE(28))
+
+EUTRA-Coex-FDD-Info ::= SEQUENCE {
+	uL-EARFCN						ExtendedEARFCN					OPTIONAL,
+	dL-EARFCN						ExtendedEARFCN,
+	uL-Transmission-Bandwidth		EUTRA-Transmission-Bandwidth	OPTIONAL,
+	dL-Transmission-Bandwidth		EUTRA-Transmission-Bandwidth,
+	iE-Extensions					ProtocolExtensionContainer { {EUTRA-Coex-FDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+EUTRA-Coex-FDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-ULCarrierList				CRITICALITY ignore	EXTENSION NRCarrierList				PRESENCE optional }|
+	{	ID id-DLCarrierList				CRITICALITY ignore EXTENSION NRCarrierList				PRESENCE optional },
+	...
+}
+
+EUTRA-Coex-Mode-Info ::= CHOICE {
+	fDD		EUTRA-Coex-FDD-Info,
+	tDD		EUTRA-Coex-TDD-Info,
+	...
+}
+
+EUTRA-Coex-TDD-Info ::= SEQUENCE {
+	eARFCN							ExtendedEARFCN,
+	transmission-Bandwidth			EUTRA-Transmission-Bandwidth,
+	subframeAssignment				EUTRA-SubframeAssignment,
+	specialSubframe-Info			EUTRA-SpecialSubframe-Info,
+	iE-Extensions					ProtocolExtensionContainer { {EUTRA-Coex-TDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+EUTRA-Coex-TDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+EUTRA-CyclicPrefixDL ::= ENUMERATED { 
+	normal,
+	extended,
+	...
+}
+
+EUTRA-CyclicPrefixUL ::= ENUMERATED { 
+	normal,
+	extended,
+	...
+}
+
+EUTRA-PRACH-Configuration ::= SEQUENCE {
+	rootSequenceIndex						INTEGER (0..837),
+	zeroCorrelationIndex					INTEGER (0..15),
+	highSpeedFlag							BOOLEAN,
+	prach-FreqOffset						INTEGER (0..94),
+	prach-ConfigIndex						INTEGER (0..63)		OPTIONAL,
+	-- C-ifTDD: This IE shall be present if the EUTRA-Mode-Info IE in the Resource Coordination E-UTRA Cell Information IE is set to the value "TDD"
+	iE-Extensions							ProtocolExtensionContainer { {EUTRA-PRACH-Configuration-ExtIEs} }	OPTIONAL,
+	...
+}
+
+EUTRA-PRACH-Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+EUTRA-SpecialSubframe-Info ::= SEQUENCE {
+	specialSubframePatterns		EUTRA-SpecialSubframePatterns,
+	cyclicPrefixDL				EUTRA-CyclicPrefixDL,
+	cyclicPrefixUL				EUTRA-CyclicPrefixUL,
+	iE-Extensions				ProtocolExtensionContainer { { EUTRA-SpecialSubframe-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+EUTRA-SpecialSubframe-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+EUTRA-SpecialSubframePatterns ::= ENUMERATED { 
+	ssp0,
+	ssp1, 
+	ssp2,
+	ssp3,
+	ssp4,
+	ssp5,
+	ssp6,
+	ssp7,
+	ssp8,
+	ssp9,
+	ssp10,
+	...
+}
+
+EUTRA-SubframeAssignment ::= ENUMERATED { 
+	sa0,
+	sa1, 
+	sa2,
+	sa3,
+	sa4,
+	sa5,
+	sa6,
+	...
+}
+
+EUTRA-Transmission-Bandwidth ::= ENUMERATED {
+	bw6,
+	bw15,
+	bw25,
+	bw50,
+	bw75,
+	bw100,
+	...
+}
+
+EUTRANQoS	::= SEQUENCE {
+	qCI								QCI,
+	allocationAndRetentionPriority	AllocationAndRetentionPriority,
+	gbrQosInformation				GBR-QosInformation									OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { EUTRANQoS-ExtIEs} }	OPTIONAL,
+	...
+}
+
+EUTRANQoS-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ExecuteDuplication ::= ENUMERATED{true,...}
+
+ExtendedEARFCN ::= INTEGER (0..262143)
+
+EUTRA-Mode-Info ::= CHOICE {
+	eUTRAFDD		EUTRA-FDD-Info,
+	eUTRATDD		EUTRA-TDD-Info,
+	choice-extension	ProtocolIE-SingleContainer { { EUTRA-Mode-Info-ExtIEs} }
+}
+
+EUTRA-Mode-Info-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+EUTRA-NR-CellResourceCoordinationReq-Container	::= OCTET STRING
+
+EUTRA-NR-CellResourceCoordinationReqAck-Container	::= OCTET STRING
+
+EUTRA-FDD-Info ::= SEQUENCE {
+	uL-offsetToPointA				OffsetToPointA,
+	dL-offsetToPointA				OffsetToPointA,
+	iE-Extensions					ProtocolExtensionContainer { {EUTRA-FDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+EUTRA-FDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+EUTRA-TDD-Info ::= SEQUENCE {
+	offsetToPointA					OffsetToPointA,
+	iE-Extensions					ProtocolExtensionContainer { {EUTRA-TDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+EUTRA-TDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+EventType ::= ENUMERATED {
+	on-demand,
+	periodic,
+	stop,
+	...
+}
+
+ExtendedPacketDelayBudget ::= INTEGER (1..65535, ...)
+
+-- F
+
+FDD-Info ::= SEQUENCE {
+	uL-NRFreqInfo						NRFreqInfo,
+	dL-NRFreqInfo						NRFreqInfo,
+	uL-Transmission-Bandwidth		Transmission-Bandwidth,
+	dL-Transmission-Bandwidth		Transmission-Bandwidth,
+	iE-Extensions					ProtocolExtensionContainer { {FDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+FDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+Flows-Mapped-To-DRB-List	::=	SEQUENCE (SIZE(1.. maxnoofQoSFlows)) OF Flows-Mapped-To-DRB-Item
+
+Flows-Mapped-To-DRB-Item 	::= SEQUENCE {
+	qoSFlowIdentifier							QoSFlowIdentifier,
+	qoSFlowLevelQoSParameters				QoSFlowLevelQoSParameters,
+	iE-Extensions							ProtocolExtensionContainer { { Flows-Mapped-To-DRB-ItemExtIEs} } OPTIONAL
+}
+
+Flows-Mapped-To-DRB-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ID id-QoSFlowMappingIndication		CRITICALITY ignore	EXTENSION QoSFlowMappingIndication			PRESENCE optional}|
+	{ID id-TSCTrafficCharacteristics	CRITICALITY ignore	EXTENSION TSCTrafficCharacteristics			PRESENCE optional},
+	...
+}
+
+FR1-Bandwidth ::= ENUMERATED {bw5, bw10, bw20, bw40, bw50, bw80, bw100, ...}
+
+FR2-Bandwidth ::= ENUMERATED {bw50, bw100, bw200, bw400, ...}
+
+FreqBandNrItem ::= SEQUENCE {
+	freqBandIndicatorNr 		INTEGER (1..1024,...), 
+	supportedSULBandList		SEQUENCE (SIZE(0..maxnoofNrCellBands)) OF SupportedSULFreqBandItem,
+	iE-Extensions				ProtocolExtensionContainer { {FreqBandNrItem-ExtIEs} } OPTIONAL,
+	...
+}
+
+FreqBandNrItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+FreqDomainLength ::= CHOICE {
+	l839							L839Info,
+	l139							L139Info,
+	choice-extension				ProtocolIE-SingleContainer { {FreqDomainLength-ExtIEs} }
+}
+
+FreqDomainLength-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+FrequencyShift7p5khz ::= ENUMERATED {false, true, ...}
+
+FullConfiguration ::= ENUMERATED {full, ...}
+
+FlowsMappedToSLDRB-List ::= SEQUENCE (SIZE(1.. maxnoofPC5QoSFlows)) OF FlowsMappedToSLDRB-Item 
+
+FlowsMappedToSLDRB-Item ::= SEQUENCE {
+	pc5QoSFlowIdentifier			PC5QoSFlowIdentifier,
+	iE-Extensions					ProtocolExtensionContainer { {FlowsMappedToSLDRB-Item-ExtIEs} } OPTIONAL,
+	...
+}
+
+FlowsMappedToSLDRB-Item-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+-- G
+
+
+GBR-QosInformation ::= SEQUENCE {
+	e-RAB-MaximumBitrateDL			BitRate,
+	e-RAB-MaximumBitrateUL			BitRate,
+	e-RAB-GuaranteedBitrateDL		BitRate,
+	e-RAB-GuaranteedBitrateUL		BitRate,
+	iE-Extensions					ProtocolExtensionContainer { { GBR-QosInformation-ExtIEs} } OPTIONAL,
+	...
+}
+
+GBR-QosInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GBR-QoSFlowInformation::= SEQUENCE {
+	maxFlowBitRateDownlink			BitRate,
+	maxFlowBitRateUplink			BitRate, 
+	guaranteedFlowBitRateDownlink	BitRate,
+	guaranteedFlowBitRateUplink		BitRate, 
+	maxPacketLossRateDownlink		MaxPacketLossRate		OPTIONAL,
+	maxPacketLossRateUplink			MaxPacketLossRate		OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { GBR-QosFlowInformation-ExtIEs} } OPTIONAL,
+	...
+}
+
+GBR-QosFlowInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ 	ID id-AlternativeQoSParaSetList	CRITICALITY ignore	EXTENSION AlternativeQoSParaSetList	PRESENCE optional	},
+	...
+}
+
+CG-Config ::= OCTET STRING
+
+GeographicalCoordinates ::= SEQUENCE {
+	tRPPositionDefinitionType	TRPPositionDefinitionType,
+	dLPRSResourceCoordinates	DLPRSResourceCoordinates	OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { GeographicalCoordinates-ExtIEs } } OPTIONAL
+}
+
+GeographicalCoordinates-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNBCUMeasurementID ::= INTEGER (0.. 4095, ...)
+
+GNBDUMeasurementID ::= INTEGER (0.. 4095, ...)
+
+GNB-CUSystemInformation::= SEQUENCE {
+	sibtypetobeupdatedlist	SEQUENCE (SIZE(1.. maxnoofSIBTypes)) OF SibtypetobeupdatedListItem,
+	iE-Extensions					ProtocolExtensionContainer { { GNB-CUSystemInformation-ExtIEs} } OPTIONAL,
+	...
+}
+
+GNB-CUSystemInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ID id-systemInformationAreaID  CRITICALITY ignore	EXTENSION SystemInformationAreaID PRESENCE optional},
+	...
+}
+
+GNB-CU-TNL-Association-Setup-Item::= SEQUENCE {
+	tNLAssociationTransportLayerAddress		CP-TransportLayerAddress	,
+	iE-Extensions					ProtocolExtensionContainer { { GNB-CU-TNL-Association-Setup-Item-ExtIEs} } OPTIONAL
+}
+
+GNB-CU-TNL-Association-Setup-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-CU-TNL-Association-Failed-To-Setup-Item ::= SEQUENCE {
+	tNLAssociationTransportLayerAddress		CP-TransportLayerAddress	,
+	cause									Cause,
+	iE-Extensions					ProtocolExtensionContainer { { GNB-CU-TNL-Association-Failed-To-Setup-Item-ExtIEs} } OPTIONAL
+}
+
+GNB-CU-TNL-Association-Failed-To-Setup-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+GNB-CU-TNL-Association-To-Add-Item ::= SEQUENCE {
+	tNLAssociationTransportLayerAddress		CP-TransportLayerAddress	,
+	tNLAssociationUsage							TNLAssociationUsage,
+	iE-Extensions					ProtocolExtensionContainer { { GNB-CU-TNL-Association-To-Add-Item-ExtIEs} } OPTIONAL
+}
+
+GNB-CU-TNL-Association-To-Add-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-CU-TNL-Association-To-Remove-Item::= SEQUENCE {
+	tNLAssociationTransportLayerAddress		CP-TransportLayerAddress	,
+	iE-Extensions							ProtocolExtensionContainer { { GNB-CU-TNL-Association-To-Remove-Item-ExtIEs} } OPTIONAL
+}
+
+GNB-CU-TNL-Association-To-Remove-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ID id-TNLAssociationTransportLayerAddressgNBDU	CRITICALITY reject	EXTENSION CP-TransportLayerAddress	PRESENCE optional},
+	...
+}
+
+
+GNB-CU-TNL-Association-To-Update-Item::= SEQUENCE {
+	tNLAssociationTransportLayerAddress		CP-TransportLayerAddress	,
+	tNLAssociationUsage						TNLAssociationUsage OPTIONAL,
+	iE-Extensions							ProtocolExtensionContainer { { GNB-CU-TNL-Association-To-Update-Item-ExtIEs} } OPTIONAL
+}
+
+GNB-CU-TNL-Association-To-Update-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-CU-UE-F1AP-ID		::= INTEGER (0..4294967295)
+
+GNB-DU-Cell-Resource-Configuration	::= SEQUENCE { 
+	subcarrierSpacing				SubcarrierSpacing,
+	dUFTransmissionPeriodicity		DUFTransmissionPeriodicity	OPTIONAL,
+	dUF-Slot-Config-List			DUF-Slot-Config-List	OPTIONAL,
+	hSNATransmissionPeriodicity		HSNATransmissionPeriodicity,
+	hNSASlotConfigList				HSNASlotConfigList	OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { GNB-DU-Cell-Resource-Configuration-ExtIEs } } OPTIONAL
+}
+
+GNB-DU-Cell-Resource-Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-DU-UE-F1AP-ID		::= INTEGER (0..4294967295)
+
+GNB-DU-ID			::= INTEGER (0..68719476735)
+
+GNB-CU-Name ::= PrintableString(SIZE(1..150,...))
+
+GNB-DU-Name ::= PrintableString(SIZE(1..150,...)) 
+
+Extended-GNB-CU-Name	 ::= SEQUENCE {
+	gNB-CU-NameVisibleString		GNB-CU-NameVisibleString					OPTIONAL,
+	gNB-CU-NameUTF8String			GNB-CU-NameUTF8String						OPTIONAL, 
+	iE-Extensions					ProtocolExtensionContainer { { Extended-GNB-CU-Name-ExtIEs } } OPTIONAL,
+	...
+}
+
+Extended-GNB-CU-Name-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-CU-NameVisibleString ::= VisibleString(SIZE(1..150,...))
+
+GNB-CU-NameUTF8String ::= UTF8String(SIZE(1..150,...))
+
+Extended-GNB-DU-Name	 ::= SEQUENCE {
+	gNB-DU-NameVisibleString		GNB-DU-NameVisibleString					OPTIONAL,
+	gNB-DU-NameUTF8String			GNB-DU-NameUTF8String						OPTIONAL, 
+	iE-Extensions					ProtocolExtensionContainer { { Extended-GNB-DU-Name-ExtIEs } } OPTIONAL,
+	...
+}
+
+Extended-GNB-DU-Name-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-DU-NameVisibleString ::= VisibleString(SIZE(1..150,...))
+
+GNB-DU-NameUTF8String ::= UTF8String(SIZE(1..150,...))
+
+
+GNB-DU-Served-Cells-Item ::= SEQUENCE {
+	served-Cell-Information		Served-Cell-Information,
+	gNB-DU-System-Information	GNB-DU-System-Information	OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { GNB-DU-Served-Cells-ItemExtIEs} }	OPTIONAL,
+	...
+}
+
+GNB-DU-Served-Cells-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-DU-System-Information ::= SEQUENCE {
+	mIB-message		MIB-message,
+	sIB1-message		SIB1-message,
+	iE-Extensions					ProtocolExtensionContainer { { GNB-DU-System-Information-ExtIEs } } OPTIONAL,
+	...
+}
+
+GNB-DU-System-Information-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-SIB12-message		CRITICALITY ignore	EXTENSION SIB12-message		PRESENCE optional}|
+	{ ID id-SIB13-message		CRITICALITY ignore	EXTENSION SIB13-message		PRESENCE optional}|
+	{ ID id-SIB14-message		CRITICALITY ignore	EXTENSION SIB14-message		PRESENCE optional}|
+	{ ID id-SIB10-message		CRITICALITY ignore	EXTENSION SIB10-message		PRESENCE optional},
+	...
+}
+
+GNB-DUConfigurationQuery ::= ENUMERATED {true, ...}
+
+GNBDUOverloadInformation ::= ENUMERATED {overloaded, not-overloaded}
+
+GNB-DU-TNL-Association-To-Remove-Item::= SEQUENCE {
+	tNLAssociationTransportLayerAddress		CP-TransportLayerAddress	,
+	tNLAssociationTransportLayerAddressgNBCU		CP-TransportLayerAddress		OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { GNB-DU-TNL-Association-To-Remove-Item-ExtIEs} } OPTIONAL
+}
+
+GNB-DU-TNL-Association-To-Remove-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-RxTxTimeDiff ::= SEQUENCE {
+	rxTxTimeDiff			GNBRxTxTimeDiffMeas,
+	additionalPath-List		AdditionalPath-List		OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer { { GNB-RxTxTimeDiff-ExtIEs} }  OPTIONAL
+}
+
+GNB-RxTxTimeDiff-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+
+	...
+}
+
+GNBRxTxTimeDiffMeas ::= CHOICE {
+	k0			INTEGER (0.. 1970049),
+	k1			INTEGER (0.. 985025),
+	k2			INTEGER (0.. 492513),
+	k3			INTEGER (0.. 246257),
+	k4			INTEGER (0.. 123129),
+	k5			INTEGER (0.. 61565),
+	choice-extension		ProtocolIE-SingleContainer { { GNBRxTxTimeDiffMeas-ExtIEs } } 
+}
+
+GNBRxTxTimeDiffMeas-ExtIEs		F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+GNBSetID ::= BIT STRING (SIZE(22))
+
+GTP-TEID				::= OCTET STRING (SIZE (4))
+
+GTPTLAs	::= SEQUENCE (SIZE(1.. maxnoofGTPTLAs)) OF	GTPTLA-Item
+
+
+GTPTLA-Item	::= SEQUENCE {
+	gTPTransportLayerAddress				TransportLayerAddress,
+	iE-Extensions	ProtocolExtensionContainer { { GTPTLA-Item-ExtIEs } }			OPTIONAL
+}
+
+GTPTLA-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GTPTunnel				::= SEQUENCE {
+	transportLayerAddress		TransportLayerAddress,
+	gTP-TEID		GTP-TEID,
+	iE-Extensions					ProtocolExtensionContainer { { GTPTunnel-ExtIEs } } OPTIONAL,
+	...
+}
+
+GTPTunnel-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+-- H
+
+HandoverPreparationInformation ::= OCTET STRING
+
+HardwareLoadIndicator ::= SEQUENCE {
+	dLHardwareLoadIndicator			INTEGER (0..100, ...),
+	uLHardwareLoadIndicator			INTEGER (0..100, ...),
+	iE-Extensions					ProtocolExtensionContainer { { HardwareLoadIndicator-ExtIEs } } 	OPTIONAL,
+	...
+}
+
+HardwareLoadIndicator-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+HSNASlotConfigList ::= SEQUENCE (SIZE(1..maxnoofHSNASlots)) OF HSNASlotConfigItem
+
+HSNASlotConfigItem 	::=	SEQUENCE {
+	hSNADownlink			HSNADownlink 		OPTIONAL,
+	hSNAUplink				HSNAUplink 			OPTIONAL,
+	hSNAFlexible			HSNAFlexible 		OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer { { HSNASlotConfigItem-ExtIEs } } OPTIONAL
+}
+
+HSNASlotConfigItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+HSNADownlink ::= ENUMERATED { hard, soft, notavailable }
+
+HSNAFlexible ::= ENUMERATED { hard, soft, notavailable }
+
+HSNAUplink ::= ENUMERATED { hard, soft, notavailable }
+
+HSNATransmissionPeriodicity ::=	ENUMERATED { ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms5, ms10, ms20, ms40, ms80, ms160, ...}
+
+-- I
+
+IAB-Barred	::=	ENUMERATED {barred, not-barred, ...}
+
+IAB-Info-IAB-donor-CU ::=	SEQUENCE{
+	iAB-STC-Info	IAB-STC-Info	OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { IAB-Info-IAB-donor-CU-ExtIEs } } OPTIONAL
+}
+
+IAB-Info-IAB-donor-CU-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-Info-IAB-DU ::=	SEQUENCE{
+	multiplexingInfo		MultiplexingInfo	OPTIONAL,
+	iAB-STC-Info		IAB-STC-Info	OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { IAB-Info-IAB-DU-ExtIEs } } OPTIONAL
+}
+
+IAB-Info-IAB-DU-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-MT-Cell-List ::= SEQUENCE (SIZE(1..maxnoofServingCells)) OF IAB-MT-Cell-List-Item
+
+IAB-MT-Cell-List-Item ::= 	SEQUENCE {
+	nRCellIdentity				NRCellIdentity,
+	dU-RX-MT-RX					DU-RX-MT-RX,
+	dU-TX-MT-TX					DU-TX-MT-TX,
+	dU-RX-MT-TX					DU-RX-MT-TX,
+	dU-TX-MT-RX					DU-TX-MT-RX,
+	iE-Extensions				ProtocolExtensionContainer { { IAB-MT-Cell-List-Item-ExtIEs } } OPTIONAL
+}
+
+IAB-MT-Cell-List-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-STC-Info	::=	SEQUENCE{
+	iAB-STC-Info-List	IAB-STC-Info-List,
+	iE-Extensions		ProtocolExtensionContainer { { IAB-STC-Info-ExtIEs } } OPTIONAL
+}
+
+IAB-STC-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-STC-Info-List ::= 	SEQUENCE (SIZE(1..maxnoofIABSTCInfo)) OF IAB-STC-Info-Item
+
+IAB-STC-Info-Item::=	SEQUENCE {
+	sSB-freqInfo						SSB-freqInfo,
+	sSB-subcarrierSpacing				SSB-subcarrierSpacing,
+	sSB-transmissionPeriodicity			SSB-transmissionPeriodicity,
+	sSB-transmissionTimingOffset		SSB-transmissionTimingOffset,
+	sSB-transmissionBitmap				SSB-transmissionBitmap,
+	iE-Extensions		ProtocolExtensionContainer { { IAB-STC-Info-Item-ExtIEs } } OPTIONAL
+}
+
+IAB-STC-Info-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-Allocated-TNL-Address-Item	::= SEQUENCE {
+	iABTNLAddress				IABTNLAddress,
+	iABTNLAddressUsage			IABTNLAddressUsage	 	OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { { IAB-Allocated-TNL-Address-Item-ExtIEs } } OPTIONAL
+}
+
+IAB-Allocated-TNL-Address-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-DU-Cell-Resource-Configuration-Mode-Info	::=	CHOICE {
+	fDD		IAB-DU-Cell-Resource-Configuration-FDD-Info,
+	tDD		IAB-DU-Cell-Resource-Configuration-TDD-Info,
+	choice-extension			ProtocolIE-SingleContainer { { IAB-DU-Cell-Resource-Configuration-Mode-Info-ExtIEs} }
+}
+
+IAB-DU-Cell-Resource-Configuration-Mode-Info-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+IAB-DU-Cell-Resource-Configuration-FDD-Info ::= SEQUENCE {
+	gNB-DU-Cell-Resource-Configuration-FDD-UL				GNB-DU-Cell-Resource-Configuration,
+	gNB-DU-Cell-Resource-Configuration-FDD-DL				GNB-DU-Cell-Resource-Configuration,
+	iE-Extensions					ProtocolExtensionContainer { {IAB-DU-Cell-Resource-Configuration-FDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+IAB-DU-Cell-Resource-Configuration-FDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-DU-Cell-Resource-Configuration-TDD-Info ::= SEQUENCE {
+	gNB-DU-Cell-Resourc-Configuration-TDD				GNB-DU-Cell-Resource-Configuration,
+	iE-Extensions					ProtocolExtensionContainer { {IAB-DU-Cell-Resource-Configuration-TDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+IAB-DU-Cell-Resource-Configuration-TDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IABIPv6RequestType	 ::= CHOICE {
+	iPv6Address						IABTNLAddressesRequested,
+	iPv6Prefix						IABTNLAddressesRequested, 
+	choice-extension				ProtocolIE-SingleContainer { { IABIPv6RequestType-ExtIEs} }
+}
+
+IABIPv6RequestType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+IABTNLAddress ::= CHOICE {
+	iPv4Address						BIT STRING (SIZE(32)), 
+	iPv6Address						BIT STRING (SIZE(128)), 
+	iPv6Prefix						BIT STRING (SIZE(64)), 
+	choice-extension				ProtocolIE-SingleContainer { { IABTNLAddress-ExtIEs} }
+}
+
+IABTNLAddress-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+IABTNLAddressesRequested ::= SEQUENCE {
+	tNLAddressesOrPrefixesRequestedAllTraffic	INTEGER (1..256) 	OPTIONAL,
+	tNLAddressesOrPrefixesRequestedF1-C			INTEGER (1..256) 	OPTIONAL,
+	tNLAddressesOrPrefixesRequestedF1-U			INTEGER (1..256) 	OPTIONAL,
+	tNLAddressesOrPrefixesRequestedNoNF1		INTEGER (1..256) 	OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { { IABTNLAddressesRequested-ExtIEs } } OPTIONAL
+}
+
+IABTNLAddressesRequested-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-TNL-Addresses-To-Remove-Item ::= SEQUENCE {
+	iABTNLAddress			IABTNLAddress,
+	iE-Extensions		ProtocolExtensionContainer { { IAB-TNL-Addresses-To-Remove-Item-ExtIEs} } OPTIONAL
+}
+
+IAB-TNL-Addresses-To-Remove-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IABTNLAddressUsage ::= ENUMERATED {
+	f1-c,
+	f1-u,
+	non-f1,
+	...
+}
+
+
+IABv4AddressesRequested ::= SEQUENCE {
+	iABv4AddressesRequested			IABTNLAddressesRequested,
+	iE-Extensions		ProtocolExtensionContainer { { IABv4AddressesRequested-ExtIEs} } OPTIONAL
+}
+
+IABv4AddressesRequested-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ImplicitFormat	::= SEQUENCE	{ 
+	dUFSlotformatIndex 			DUFSlotformatIndex,
+	iE-Extensions		ProtocolExtensionContainer { { ImplicitFormat-ExtIEs } } OPTIONAL
+}
+
+ImplicitFormat-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IgnorePRACHConfiguration::= ENUMERATED { true,...}
+
+IgnoreResourceCoordinationContainer ::= ENUMERATED { yes,...}
+InactivityMonitoringRequest ::= ENUMERATED { true,...}
+InactivityMonitoringResponse ::= ENUMERATED { not-supported,...}
+InterfacesToTrace ::= BIT STRING (SIZE(8))
+
+IntendedTDD-DL-ULConfig ::= SEQUENCE {
+	nRSCS						ENUMERATED { scs15, scs30, scs60, scs120,...},
+	nRCP						ENUMERATED { normal, extended,...},
+	nRDLULTxPeriodicity			ENUMERATED { ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms3, ms4, ms5, ms10, ms20, ms40, ms60, ms80, ms100, ms120, ms140, ms160, ...},
+	slot-Configuration-List 	Slot-Configuration-List,
+	iE-Extensions						ProtocolExtensionContainer { {IntendedTDD-DL-ULConfig-ExtIEs} } OPTIONAL
+}
+
+IntendedTDD-DL-ULConfig-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IPHeaderInformation ::= SEQUENCE {
+	destinationIABTNLAddress			IABTNLAddress,
+	dsInformationList					DSInformationList	OPTIONAL,
+	iPv6FlowLabel						BIT STRING (SIZE (20))	OPTIONAL,
+	iE-Extensions						ProtocolExtensionContainer { { IPHeaderInformation-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+IPHeaderInformation-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IPtolayer2TrafficMappingInfo ::= SEQUENCE {
+	iPtolayer2TrafficMappingInfoToAdd					IPtolayer2TrafficMappingInfoList		OPTIONAL,
+	iPtolayer2TrafficMappingInfoToRemove				MappingInformationtoRemove				OPTIONAL,
+	iE-Extensions										ProtocolExtensionContainer { { IPtolayer2TrafficMappingInfo-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+IPtolayer2TrafficMappingInfoList ::= SEQUENCE (SIZE(1..maxnoofMappingEntries)) OF IPtolayer2TrafficMappingInfo-Item
+
+IPtolayer2TrafficMappingInfo-Item ::= SEQUENCE {
+	mappingInformationIndex		MappingInformationIndex,		
+	iPHeaderInformation			IPHeaderInformation,
+	bHInfo	 					BHInfo,	iE-Extensions				ProtocolExtensionContainer { { IPtolayer2TrafficMappingInfo-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+IPtolayer2TrafficMappingInfo-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+-- J
+
+-- K
+
+-- L
+
+L139Info ::= SEQUENCE {
+	msg1SCS						ENUMERATED {scs15, scs30, scs60, scs120, ...},
+	rootSequenceIndex			INTEGER (0..137)								OPTIONAL,
+	iE-Extension				ProtocolExtensionContainer { {L139Info-ExtIEs} } 		OPTIONAL,
+	...
+}
+
+L139Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+L839Info ::= SEQUENCE {
+	rootSequenceIndex			INTEGER (0..837),
+	restrictedSetConfig			ENUMERATED {unrestrictedSet, restrictedSetTypeA,
+											restrictedSetTypeB, ...},
+	iE-Extension		ProtocolExtensionContainer { {L839Info-ExtIEs} } 		OPTIONAL,
+	...
+}
+
+L839Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+LCID ::= INTEGER (1..32, ...)
+
+
+LCStoGCSTranslationList ::= SEQUENCE (SIZE (1.. maxnooflcs-gcs-translation)) OF LCStoGCSTranslation
+
+LCStoGCSTranslation ::= SEQUENCE {
+	alpha			INTEGER (0..359),
+	alpha-fine		INTEGER (0..9),
+	beta			INTEGER (0..359),
+	beta-fine		INTEGER (0..9),
+	gamma			INTEGER (0..359),
+	gamma-fine		INTEGER (0..9),
+	iE-Extensions				ProtocolExtensionContainer { {LCStoGCSTranslation-ExtIEs} } OPTIONAL
+}
+
+LCStoGCSTranslation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+LMF-MeasurementID ::= INTEGER (1.. 65536, ...)
+
+LMF-UE-MeasurementID ::= INTEGER (1.. 256, ...)
+
+LocationUncertainty ::= SEQUENCE {
+	horizontalUncertainty		INTEGER (0..255),
+	horizontalConfidence		INTEGER (0..100),
+	verticalUncertainty			INTEGER (0..255),
+	verticalConfidence			INTEGER (0..100),
+	iE-Extensions				ProtocolExtensionContainer { { LocationUncertainty-ExtIEs} } OPTIONAL
+}
+
+LocationUncertainty-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+LongDRXCycleLength ::= 	ENUMERATED
+{ms10, ms20, ms32, ms40, ms60, ms64, ms70, ms80, ms128, ms160, ms256, ms320, ms512, ms640, ms1024, ms1280, ms2048, ms2560, ms5120, ms10240, ...}
+
+LowerLayerPresenceStatusChange ::= ENUMERATED {
+	suspend-lower-layers,
+	resume-lower-layers,
+	...
+
+}
+
+LTEUESidelinkAggregateMaximumBitrate ::= SEQUENCE {
+	uELTESidelinkAggregateMaximumBitrate		BitRate,
+	iE-Extensions					ProtocolExtensionContainer { {LTEUESidelinkAggregateMaximumBitrate-ExtIEs} } OPTIONAL
+}
+
+LTEUESidelinkAggregateMaximumBitrate-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+LTEV2XServicesAuthorized ::= SEQUENCE {
+	vehicleUE			VehicleUE														OPTIONAL,
+	pedestrianUE 		PedestrianUE													OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { {LTEV2XServicesAuthorized-ExtIEs} }		OPTIONAL
+}
+
+LTEV2XServicesAuthorized-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+-- M
+
+MappingInformationIndex	::= BIT STRING (SIZE (26))
+
+MappingInformationtoRemove	::= SEQUENCE (SIZE(1..maxnoofMappingEntries)) OF MappingInformationIndex
+
+MaskedIMEISV ::= 	BIT STRING (SIZE (64))
+
+MaxDataBurstVolume  ::= INTEGER (0..4095, ..., 4096.. 2000000) 
+MaxPacketLossRate ::= INTEGER (0..1000)
+
+MIB-message ::= OCTET STRING
+
+MeasConfig ::= OCTET STRING
+
+MeasGapConfig ::= OCTET STRING
+
+MeasGapSharingConfig ::= OCTET STRING
+
+MeasurementBeamInfoRequest ::= ENUMERATED {true, ...}
+
+MeasurementBeamInfo	 ::= SEQUENCE {
+	pRS-Resource-ID				PRS-Resource-ID		OPTIONAL,
+	pRS-Resource-Set-ID			PRS-Resource-Set-ID	OPTIONAL,
+	sSB-Index					SSB-Index			OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { MeasurementBeamInfo-ExtIEs} } OPTIONAL
+}
+
+MeasurementBeamInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+MeasurementTimingConfiguration ::= OCTET STRING
+
+MessageIdentifier ::= BIT STRING (SIZE (16))
+
+MultiplexingInfo 	::=	SEQUENCE{
+	iAB-MT-Cell-List 	IAB-MT-Cell-List,
+	iE-Extensions		ProtocolExtensionContainer { {MultiplexingInfo-ExtIEs} } OPTIONAL
+}
+
+MultiplexingInfo-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+M2Configuration ::= ENUMERATED {true, ...}
+
+
+M5Configuration ::= SEQUENCE {
+	m5period			M5period,
+	m5-links-to-log		M5-Links-to-log,
+	iE-Extensions		ProtocolExtensionContainer { { M5Configuration-ExtIEs} } OPTIONAL,
+	...
+}
+
+M5Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+M5period ::= ENUMERATED { ms1024, ms2048, ms5120, ms10240, min1, ... } 
+
+M5-Links-to-log	::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...}
+
+
+M6Configuration ::= SEQUENCE {
+	m6report-Interval	M6report-Interval,
+	m6-links-to-log		M6-Links-to-log,
+	iE-Extensions		ProtocolExtensionContainer { { M6Configuration-ExtIEs} } OPTIONAL,
+	...
+}
+
+M6Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+M6report-Interval ::= ENUMERATED { ms120, ms240, ms640, ms1024, ms2048, ms5120, ms10240, ms20480, ms40960, min1, min6, min12, min30, ... }
+
+
+
+M6-Links-to-log	::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...}
+
+
+M7Configuration ::= SEQUENCE {
+	m7period			M7period,
+	m7-links-to-log		M7-Links-to-log,
+	iE-Extensions		ProtocolExtensionContainer { { M7Configuration-ExtIEs} } OPTIONAL,
+	...
+}
+
+M7Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+M7period	::= INTEGER(1..60, ...)
+
+M7-Links-to-log	::= ENUMERATED {downlink, ...}
+
+MDT-Activation ::= ENUMERATED { 
+	immediate-MDT-only,
+	immediate-MDT-and-Trace,
+	...
+}
+
+MDTConfiguration ::= SEQUENCE {
+	mdt-Activation				MDT-Activation,
+	measurementsToActivate		MeasurementsToActivate,
+	m2Configuration				M2Configuration		OPTIONAL,
+	--  C-ifM2: This IE shall be present if the Measurements to Activate IE has the second bit set to "1".
+	m5Configuration				M5Configuration		OPTIONAL,
+	--  C-ifM5: This IE shall be present if the Measurements to Activate IE has the fifth bit set to "1".
+	m6Configuration				M6Configuration		OPTIONAL,
+	--  C-ifM6: This IE shall be present if the Measurements to Activate IE has the seventh bit set to "1".
+	m7Configuration				M7Configuration		OPTIONAL,
+	--  C-ifM7: This IE shall be present if the Measurements to Activate IE has the eighth bit set to "1".
+	iE-Extensions				ProtocolExtensionContainer { { MDTConfiguration-ExtIEs} } OPTIONAL,
+	...
+}
+MDTConfiguration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+MDTPLMNList ::= SEQUENCE (SIZE(1..maxnoofMDTPLMNs)) OF PLMN-Identity
+
+
+MeasuredResultsValue ::= CHOICE {
+	uL-AngleOfArrival	UL-AoA,
+	uL-SRS-RSRP			UL-SRS-RSRP,
+	uL-RTOA				UL-RTOA-Measurement,
+	gNB-RxTxTimeDiff	GNB-RxTxTimeDiff,
+	choice-extension	ProtocolIE-SingleContainer { { MeasuredResultsValue-ExtIEs } }
+}
+
+MeasuredResultsValue-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+MeasurementsToActivate ::= BIT STRING (SIZE (8))
+
+-- N
+
+NeedforGap::= ENUMERATED {true, ...}
+
+Neighbour-Cell-Information-Item ::= SEQUENCE {
+	nRCGI				NRCGI, 
+	intendedTDD-DL-ULConfig		IntendedTDD-DL-ULConfig OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { Neighbour-Cell-Information-ItemExtIEs } }	OPTIONAL
+}
+
+Neighbour-Cell-Information-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NGRANAllocationAndRetentionPriority ::= SEQUENCE {
+	priorityLevel				PriorityLevel,
+	pre-emptionCapability		Pre-emptionCapability,
+	pre-emptionVulnerability	Pre-emptionVulnerability,
+	iE-Extensions				ProtocolExtensionContainer { {NGRANAllocationAndRetentionPriority-ExtIEs} } OPTIONAL
+}
+
+NGRANAllocationAndRetentionPriority-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+NGRANHighAccuracyAccessPointPosition ::= SEQUENCE {
+	latitude					INTEGER (-2147483648.. 2147483647),
+	longitude					INTEGER (-2147483648.. 2147483647),
+	altitude					INTEGER (-64000..1280000),
+	uncertaintySemi-major		INTEGER (0..255),
+	uncertaintySemi-minor		INTEGER (0..255),
+	orientationOfMajorAxis		INTEGER (0..179),
+	horizontalConfidence		INTEGER (0..100),
+	uncertaintyAltitude			INTEGER (0..255),
+	verticalConfidence			INTEGER (0..100), 
+
+	iE-Extensions				ProtocolExtensionContainer { { NGRANHighAccuracyAccessPointPosition-ExtIEs} } OPTIONAL
+}
+
+NGRANHighAccuracyAccessPointPosition-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NID ::= BIT STRING (SIZE(44))
+
+NR-CGI-List-For-Restart-Item ::= SEQUENCE {
+	nRCGI				NRCGI,
+	iE-Extensions		ProtocolExtensionContainer { { NR-CGI-List-For-Restart-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+NR-CGI-List-For-Restart-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NR-PRSBeamInformation ::= SEQUENCE {
+	nR-PRSBeamInformationList		NR-PRSBeamInformationList,
+	lCStoGCSTranslationList 		LCStoGCSTranslationList,
+	iE-Extensions	ProtocolExtensionContainer { { NR-PRSBeamInformation-ExtIEs } } OPTIONAL
+}
+
+NR-PRSBeamInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NR-PRSBeamInformationList ::= SEQUENCE (SIZE(1.. maxnoofPRS-ResourceSets)) OF NR-PRSBeamInformationItem
+
+NR-PRSBeamInformationItem ::= SEQUENCE {
+	pRSResourceSetID	INTEGER (0..7),
+	pRSAngleList		PRSAngleList,
+	iE-Extensions	ProtocolExtensionContainer { { NR-PRSBeamInformationItem-ExtIEs } } OPTIONAL
+}
+
+NR-PRSBeamInformationItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NonDynamic5QIDescriptor	::= SEQUENCE {
+	fiveQI						INTEGER (0..255, ...),
+	qoSPriorityLevel			INTEGER (1..127)				OPTIONAL,
+	averagingWindow 			AveragingWindow					OPTIONAL,
+	maxDataBurstVolume			MaxDataBurstVolume				OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { NonDynamic5QIDescriptor-ExtIEs } } OPTIONAL
+}
+
+NonDynamic5QIDescriptor-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-CNPacketDelayBudgetDownlink	CRITICALITY ignore	EXTENSION ExtendedPacketDelayBudget		PRESENCE optional	}|
+	{ ID id-CNPacketDelayBudgetUplink	CRITICALITY ignore	EXTENSION ExtendedPacketDelayBudget		PRESENCE optional	},
+	...
+}
+
+NonDynamicPQIDescriptor	::= SEQUENCE {
+	fiveQI						INTEGER (0..255, ...),
+	qoSPriorityLevel			INTEGER (1..8, ...)				OPTIONAL,
+	averagingWindow 			AveragingWindow					OPTIONAL,
+	maxDataBurstVolume			MaxDataBurstVolume				OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { NonDynamicPQIDescriptor-ExtIEs } } OPTIONAL
+}
+
+NonDynamicPQIDescriptor-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NonUPTrafficType ::=	ENUMERATED {ue-associated, non-ue-associated, non-f1, bap-control-pdu,...}
+
+NoofDownlinkSymbols	::= INTEGER (0..14)
+
+NoofUplinkSymbols	::= INTEGER (0..14)
+
+Notification-Cause ::= ENUMERATED {fulfilled, not-fulfilled, ...}
+
+NotificationControl ::= ENUMERATED {active, not-active, ...}
+
+NotificationInformation ::= SEQUENCE {
+	message-Identifier	MessageIdentifier,
+	serialNumber		SerialNumber,
+	iE-Extensions	ProtocolExtensionContainer { { NotificationInformationExtIEs} } OPTIONAL,
+	...
+}
+
+NotificationInformationExtIEs		F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NPNBroadcastInformation ::= CHOICE {
+	sNPN-Broadcast-Information					NPN-Broadcast-Information-SNPN,
+	pNI-NPN-Broadcast-Information				NPN-Broadcast-Information-PNI-NPN,
+	choice-extension					ProtocolIE-SingleContainer { {NPNBroadcastInformation-ExtIEs} }
+}
+
+NPNBroadcastInformation-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+NPN-Broadcast-Information-SNPN ::= SEQUENCE {
+	broadcastSNPNID-List		BroadcastSNPN-ID-List,
+	iE-Extension				ProtocolExtensionContainer { {NPN-Broadcast-Information-SNPN-ExtIEs} }	OPTIONAL,
+	...
+}
+
+NPN-Broadcast-Information-SNPN-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+NPN-Broadcast-Information-PNI-NPN ::= SEQUENCE {
+	broadcastPNI-NPN-ID-Information		BroadcastPNI-NPN-ID-List,
+	iE-Extension							ProtocolExtensionContainer { {NPN-Broadcast-Information-PNI-NPN-ExtIEs} }	OPTIONAL,
+	...
+}
+
+NPN-Broadcast-Information-PNI-NPN-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+NPNSupportInfo ::= CHOICE {
+	sNPN-Information		NID,
+	choice-extension		ProtocolIE-SingleContainer { { NPNSupportInfo-ExtIEs } } 
+}
+
+NPNSupportInfo-ExtIEs		F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+NRCarrierList ::= SEQUENCE (SIZE(1..maxnoofNRSCSs)) OF NRCarrierItem
+
+NRCarrierItem ::= SEQUENCE {
+	carrierSCS						NRSCS,
+	offsetToCarrier					INTEGER (0..2199, ...),
+	carrierBandwidth				INTEGER (0..maxnoofPhysicalResourceBlocks, ...),
+	iE-Extension			ProtocolExtensionContainer { {NRCarrierItem-ExtIEs} } 				OPTIONAL,
+	...
+}
+
+NRCarrierItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NRFreqInfo ::=  SEQUENCE {
+	nRARFCN			INTEGER (0..maxNRARFCN),
+	sul-Information	SUL-Information		OPTIONAL,
+	freqBandListNr	SEQUENCE (SIZE(1..maxnoofNrCellBands)) OF FreqBandNrItem,
+	iE-Extensions	ProtocolExtensionContainer { { NRFreqInfoExtIEs} } OPTIONAL,
+	...
+}
+
+NRFreqInfoExtIEs		F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-FrequencyShift7p5khz	CRITICALITY ignore	EXTENSION FrequencyShift7p5khz	PRESENCE optional },
+	...
+}
+
+NRCGI ::= SEQUENCE {
+	pLMN-Identity			PLMN-Identity,
+	nRCellIdentity			NRCellIdentity,
+	iE-Extensions			ProtocolExtensionContainer { {NRCGI-ExtIEs} } OPTIONAL,
+	...
+}
+
+NRCGI-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NR-Mode-Info ::= CHOICE {
+	fDD		FDD-Info,
+	tDD		TDD-Info,
+	choice-extension			ProtocolIE-SingleContainer { { NR-Mode-Info-ExtIEs} }
+}
+
+NR-Mode-Info-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+
+
+NRPRACHConfig ::= SEQUENCE {
+	ulPRACHConfigList			NRPRACHConfigList									OPTIONAL,
+	sulPRACHConfigList			NRPRACHConfigList									OPTIONAL,
+	iE-Extension				ProtocolExtensionContainer { {NRPRACHConfig-ExtIEs} } 	OPTIONAL,
+	...
+}
+
+NRPRACHConfig-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NRCellIdentity ::= BIT STRING (SIZE(36))
+
+NRNRB ::= ENUMERATED { nrb11, nrb18, nrb24, nrb25, nrb31, nrb32, nrb38, nrb51, nrb52, nrb65, nrb66, nrb78, nrb79, nrb93, nrb106, nrb107, nrb121, nrb132, nrb133, nrb135, nrb160, nrb162, nrb189, nrb216, nrb217, nrb245, nrb264, nrb270, nrb273, ...}
+
+NRPCI ::= INTEGER(0..1007)
+
+
+NRPRACHConfigList ::= SEQUENCE (SIZE(0..maxnoofPRACHconfigs)) OF NRPRACHConfigItem
+
+NRPRACHConfigItem ::= SEQUENCE {
+	nRSCS					NRSCS,
+	prachFreqStartfromCarrier	INTEGER (0..maxnoofPhysicalResourceBlocks-1, ...),
+	msg1FDM						ENUMERATED {one, two, four, eight, ...},
+	parchConfigIndex			INTEGER (0..255, ...),
+	ssb-perRACH-Occasion		ENUMERATED {oneEighth, oneFourth, oneHalf, one, 
+											two, four, eight, sixteen, ...},
+	freqDomainLength			FreqDomainLength, 
+	zeroCorrelZoneConfig		INTEGER (0..15),
+	iE-Extension		ProtocolExtensionContainer { { NRPRACHConfigItem-ExtIEs} } 		OPTIONAL,
+	...
+}
+
+NRPRACHConfigItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NRSCS ::= ENUMERATED { scs15, scs30, scs60, scs120, ...}
+
+NRUERLFReportContainer ::= OCTET STRING
+
+NumberofActiveUEs ::= INTEGER(0..16777215, ...)
+
+NumberOfBroadcasts ::= INTEGER (0..65535)
+
+NumberofBroadcastRequest ::= INTEGER (0..65535)
+
+NumDLULSymbols ::= SEQUENCE {
+	numDLSymbols	INTEGER (0..13, ...),
+	numULSymbols	INTEGER (0..13, ...),
+	iE-Extensions			ProtocolExtensionContainer { { NumDLULSymbols-ExtIEs} } OPTIONAL
+}
+
+NumDLULSymbols-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NRV2XServicesAuthorized ::= SEQUENCE {
+	vehicleUE			VehicleUE														OPTIONAL,
+	pedestrianUE 		PedestrianUE													OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { {NRV2XServicesAuthorized-ExtIEs} }	OPTIONAL
+}
+
+NRV2XServicesAuthorized-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NRUESidelinkAggregateMaximumBitrate ::= SEQUENCE {
+	uENRSidelinkAggregateMaximumBitrate		BitRate,
+	iE-Extensions					ProtocolExtensionContainer { {NRUESidelinkAggregateMaximumBitrate-ExtIEs} } OPTIONAL
+}
+
+NRUESidelinkAggregateMaximumBitrate-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NZP-CSI-RS-ResourceID::= INTEGER  (0..191, ...)
+
+
+-- O
+
+OffsetToPointA	::= INTEGER (0..2199,...)
+
+
+-- P
+
+PacketDelayBudget ::= INTEGER (0..1023, ...) 
+
+PacketErrorRate ::= SEQUENCE {
+	pER-Scalar			PER-Scalar,
+	pER-Exponent		PER-Exponent,
+	iE-Extensions		ProtocolExtensionContainer { {PacketErrorRate-ExtIEs} }	OPTIONAL,
+	...
+}
+
+PacketErrorRate-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PER-Scalar ::= INTEGER (0..9, ...)
+PER-Exponent ::= INTEGER (0..9, ...)
+
+PagingCell-Item ::= SEQUENCE {
+	nRCGI		NRCGI	,
+	iE-Extensions	ProtocolExtensionContainer { { PagingCell-ItemExtIEs } }	OPTIONAL
+}
+
+PagingCell-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PagingDRX ::= ENUMERATED {
+	v32,
+	v64,
+	v128,
+	v256,
+	...
+}
+
+PagingIdentity ::=	CHOICE {
+	rANUEPagingIdentity	RANUEPagingIdentity,
+	cNUEPagingIdentity	CNUEPagingIdentity, 
+	choice-extension			ProtocolIE-SingleContainer { { PagingIdentity-ExtIEs } }
+}
+
+PagingIdentity-ExtIEs F1AP-PROTOCOL-IES::= {
+	...
+}
+
+PagingOrigin ::= ENUMERATED { non-3gpp,	...}
+
+PagingPriority ::= ENUMERATED { priolevel1, priolevel2, priolevel3, priolevel4, priolevel5, priolevel6, priolevel7, priolevel8,...} 
+
+
+RelativePathDelay ::= CHOICE {
+	k0					INTEGER (0..16351,...),
+	k1					INTEGER (0..8176,...),
+	k2					INTEGER (0..4088,...),
+	k3					INTEGER (0..2044,...),
+	k4					INTEGER (0..1022,...),
+	k5					INTEGER (0..511,...),	 
+	choice-extension			ProtocolIE-SingleContainer { { RelativePathDelay-ExtIEs } }
+}
+
+RelativePathDelay-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+PathlossReferenceInfo ::= SEQUENCE {
+	pathlossReferenceSignal			PathlossReferenceSignal,
+	iE-Extensions					ProtocolExtensionContainer { {PathlossReferenceInfo-ExtIEs} }	OPTIONAL
+}
+
+PathlossReferenceInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PathlossReferenceSignal ::= CHOICE { 
+	sSB										SSB,
+	dL-PRS									DL-PRS,
+	choice-extension						ProtocolIE-SingleContainer {{PathlossReferenceSignal-ExtIEs }}
+}
+
+PathlossReferenceSignal-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+PC5QoSFlowIdentifier ::= INTEGER (1..2048) 
+
+PC5-QoS-Characteristics ::= CHOICE {
+	non-Dynamic-PQI				NonDynamicPQIDescriptor,
+	dynamic-PQI					DynamicPQIDescriptor, 
+	choice-extension			ProtocolIE-SingleContainer { { PC5-QoS-Characteristics-ExtIEs } }
+}
+
+PC5-QoS-Characteristics-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+
+PC5QoSParameters	::= SEQUENCE {
+    pC5-QoS-Characteristics				PC5-QoS-Characteristics,
+	pC5-QoS-Flow-Bit-Rates				PC5FlowBitRates				OPTIONAL,
+	iE-Extensions						ProtocolExtensionContainer { { PC5QoSParameters-ExtIEs } }	OPTIONAL,
+	...
+}
+
+PC5QoSParameters-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PC5FlowBitRates ::= SEQUENCE {
+	guaranteedFlowBitRate		BitRate,
+	maximumFlowBitRate			BitRate,
+	iE-Extensions				ProtocolExtensionContainer { { PC5FlowBitRates-ExtIEs } }	OPTIONAL,
+	...
+}
+
+PC5FlowBitRates-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PDCCH-BlindDetectionSCG ::= OCTET STRING
+
+PDCP-SN ::= INTEGER (0..4095)
+
+PDCPSNLength	::= ENUMERATED { twelve-bits,eighteen-bits,...}
+
+PDUSessionID ::= INTEGER (0..255)
+
+ReportingPeriodicityValue ::= INTEGER (0..512, ...)
+
+Periodicity ::= INTEGER (0..640000, ...) 
+
+PeriodicitySRS ::= ENUMERATED { ms0p125, ms0p25, ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms4, ms5, ms8, ms10, ms16, ms20, ms32, ms40, ms64, ms80, ms160, ms320, ms640, ms1280, ms2560, ms5120, ms10240, ...}
+
+PeriodicityList ::= SEQUENCE (SIZE(1.. maxnoSRS-ResourcePerSet)) OF PeriodicityList-Item
+
+PeriodicityList-Item ::= SEQUENCE {
+	periodicitySRS				PeriodicitySRS,
+	iE-Extensions				ProtocolExtensionContainer { { PeriodicityList-ItemExtIEs} } OPTIONAL
+}
+
+PeriodicityList-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+Permutation ::= ENUMERATED {dfu, ufd, ...}
+
+Ph-InfoMCG  ::= OCTET STRING
+
+Ph-InfoSCG  ::= OCTET STRING
+
+PLMN-Identity ::= OCTET STRING (SIZE(3))
+
+PortNumber ::= BIT STRING (SIZE (16))
+
+
+PosAssistance-Information ::= OCTET STRING
+
+PosAssistanceInformationFailureList ::= OCTET STRING
+
+PosBroadcast ::= ENUMERATED {
+	start,
+	stop,
+	...
+}
+
+PositioningBroadcastCells ::= SEQUENCE (SIZE (1..maxnoBcastCell)) OF NRCGI
+
+PosMeasurementPeriodicity ::= ENUMERATED
+{ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60, ...}
+
+
+PosMeasurementQuantities ::= SEQUENCE (SIZE(1.. maxnoofPosMeas)) OF PosMeasurementQuantities-Item
+
+PosMeasurementQuantities-Item ::= SEQUENCE {
+	posMeasurementType					PosMeasurementType,
+	timingReportingGranularityFactor	INTEGER (0..5) OPTIONAL,
+	iE-Extensions						ProtocolExtensionContainer { { PosMeasurementQuantities-ItemExtIEs} } OPTIONAL
+}
+
+PosMeasurementQuantities-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosMeasurementResult ::= SEQUENCE (SIZE (1.. maxnoofPosMeas)) OF PosMeasurementResultItem 
+
+PosMeasurementResultItem ::= SEQUENCE {
+	measuredResultsValue				MeasuredResultsValue,
+	timeStamp							TimeStamp,
+	measurementQuality					TRPMeasurementQuality	OPTIONAL,
+	measurementBeamInfo					MeasurementBeamInfo		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { PosMeasurementResultItemExtIEs } }	OPTIONAL
+}
+
+PosMeasurementResultItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosMeasurementResultList ::= SEQUENCE (SIZE(1.. maxNoOfMeasTRPs)) OF PosMeasurementResultList-Item
+
+PosMeasurementResultList-Item ::= SEQUENCE {
+	posMeasurementResult			PosMeasurementResult,
+	tRPID							TRPID,
+	iE-Extensions					ProtocolExtensionContainer { { PosMeasurementResultList-ItemExtIEs} } OPTIONAL
+}
+
+PosMeasurementResultList-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosMeasurementType ::= ENUMERATED {
+	gnb-rx-tx,
+	ul-srs-rsrp,
+	ul-aoa,
+	ul-rtoa, 
+	...
+}
+
+PosReportCharacteristics ::= ENUMERATED {
+	ondemand, 
+	periodic, 
+	...
+}
+
+PosResourceSetType  ::= CHOICE {
+	periodic			PosResourceSetTypePR,
+	semi-persistent		PosResourceSetTypeSP,
+	aperiodic			PosResourceSetTypeAP,
+	choice-extension	ProtocolIE-SingleContainer {{ PosResourceSetType-ExtIEs }}
+}
+
+PosResourceSetType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+PosResourceSetTypePR ::= SEQUENCE {
+	posperiodicSet		ENUMERATED{true, ...},
+	iE-Extensions		ProtocolExtensionContainer { { PosResourceSetTypePR-ExtIEs} }	OPTIONAL
+}
+
+PosResourceSetTypePR-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosResourceSetTypeSP ::= SEQUENCE {
+	possemi-persistentSet		ENUMERATED{true, ...},
+	iE-Extensions		ProtocolExtensionContainer { { PosResourceSetTypeSP-ExtIEs} }	OPTIONAL
+}
+
+PosResourceSetTypeSP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosResourceSetTypeAP ::= SEQUENCE {
+	sRSResourceTrigger-List 	INTEGER(1..3),
+	iE-Extensions		ProtocolExtensionContainer { { PosResourceSetTypeAP-ExtIEs} }	OPTIONAL
+}
+
+PosResourceSetTypeAP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosSRSResourceID-List ::= SEQUENCE (SIZE (1..maxnoSRS-PosResourcePerSet)) OF SRSPosResourceID
+
+PosSRSResource-Item ::= SEQUENCE {
+	srs-PosResourceId				SRSPosResourceID,
+	transmissionCombPos				TransmissionCombPos,
+	startPosition                   INTEGER (0..13),
+	nrofSymbols                     ENUMERATED {n1, n2, n4, n8, n12},
+	freqDomainShift                 INTEGER (0..268),
+	c-SRS	                        INTEGER (0..63),
+	groupOrSequenceHopping          ENUMERATED { neither, groupHopping, sequenceHopping },
+	resourceTypePos					ResourceTypePos,
+	sequenceId                      INTEGER (0.. 65535),
+	spatialRelationPos				SpatialRelationPos 	OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { PosSRSResource-Item-ExtIEs} }	OPTIONAL
+}
+
+PosSRSResource-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosSRSResource-List ::= SEQUENCE (SIZE (1..maxnoSRS-PosResources)) OF PosSRSResource-Item
+
+PosSRSResourceSet-Item ::= SEQUENCE {
+	possrsResourceSetID				INTEGER(0..15),
+	possRSResourceID-List			PosSRSResourceID-List,
+	posresourceSetType				PosResourceSetType,
+	iE-Extensions		ProtocolExtensionContainer { { PosSRSResourceSet-Item-ExtIEs} }	OPTIONAL
+}
+
+PosSRSResourceSet-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosSRSResourceSet-List ::= SEQUENCE (SIZE (1..maxnoSRS-PosResourceSets)) OF PosSRSResourceSet-Item
+
+PrimaryPathIndication ::= ENUMERATED { 
+	true,
+	false,
+	...
+}
+
+Pre-emptionCapability ::= ENUMERATED {
+	shall-not-trigger-pre-emption,
+	may-trigger-pre-emption
+}
+
+Pre-emptionVulnerability ::= ENUMERATED {
+	not-pre-emptable,
+	pre-emptable
+}
+
+PriorityLevel	::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15)
+
+ProtectedEUTRAResourceIndication		::= OCTET STRING
+
+Protected-EUTRA-Resources-Item ::= SEQUENCE {
+	spectrumSharingGroupID					SpectrumSharingGroupID, 
+	eUTRACells-List		EUTRACells-List,
+	iE-Extensions	ProtocolExtensionContainer { { Protected-EUTRA-Resources-ItemExtIEs } }	OPTIONAL
+}
+
+Protected-EUTRA-Resources-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRSConfiguration ::= SEQUENCE {
+	pRSResourceSet-List			PRSResourceSet-List,
+	iE-Extensions	ProtocolExtensionContainer { { PRSConfiguration-ExtIEs } }	OPTIONAL
+}
+
+PRSConfiguration-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRSInformationPos  ::= SEQUENCE {
+	pRS-IDPos					INTEGER(0..255) OPTIONAL,	
+	pRS-Resource-Set-IDPos		INTEGER(0..7),
+	pRS-Resource-IDPos			INTEGER(0..63),
+	iE-Extensions					ProtocolExtensionContainer { { PRSInformationPos-ExtIEs} } OPTIONAL
+}
+
+PRSInformationPos-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Potential-SpCell-Item ::= SEQUENCE {
+	potential-SpCell-ID			NRCGI	,
+	iE-Extensions	ProtocolExtensionContainer { { Potential-SpCell-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Potential-SpCell-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+PRSAngleList ::= SEQUENCE (SIZE(1.. maxnoofPRS-ResourcesPerSet)) OF PRSAngleItem
+
+PRSAngleItem ::= SEQUENCE {
+	nR-PRS-Azimuth			INTEGER (0..359),
+	nR-PRS-Azimuth-fine		INTEGER (0..9),
+	nR-PRS-Elevation		INTEGER (0..180),
+	nR-PRS-Elevation-fine	INTEGER (0..9),
+	iE-Extensions		ProtocolExtensionContainer { { PRSAngleItem-ItemExtIEs } }	OPTIONAL
+}
+
+PRSAngleItem-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRSMuting::= SEQUENCE {
+	pRSMutingOption1			PRSMutingOption1,
+	pRSMutingOption2			PRSMutingOption2,
+	iE-Extensions					ProtocolExtensionContainer { { PRSMuting-ExtIEs} } OPTIONAL
+}
+
+PRSMuting-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRSMutingOption1 ::= SEQUENCE {
+	mutingPattern					DL-PRSMutingPattern,
+	mutingBitRepetitionFactor		ENUMERATED{rf1,rf2,rf4,rf8,...},
+	iE-Extensions					ProtocolExtensionContainer { { PRSMutingOption1-ExtIEs} } OPTIONAL
+}
+
+PRSMutingOption1-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRSMutingOption2 ::= SEQUENCE {
+	mutingPattern					DL-PRSMutingPattern,
+	iE-Extensions					ProtocolExtensionContainer { { PRSMutingOption2-ExtIEs} } OPTIONAL
+}
+
+PRSMutingOption2-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRS-Resource-ID ::= INTEGER (0..63)
+
+PRSResource-List::= SEQUENCE (SIZE (1..maxnoofPRSresources)) OF PRSResource-Item
+
+PRSResource-Item  ::= SEQUENCE {
+	pRSResourceID			INTEGER(0..63),
+	sequenceID				INTEGER(0..4095,...),
+	rEOffset				INTEGER(0..11),
+	resourceSlotOffset		INTEGER(0..511,...),
+	resourceSymbolOffset	INTEGER(0..12,...),
+	qCLInfo					PRSResource-QCLInfo		OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer { { PRSResource-Item-ExtIEs} } OPTIONAL
+}
+
+PRSResource-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRSResource-QCLInfo  ::= SEQUENCE {
+	qCLSourceSSBIndex		INTEGER(0..63) OPTIONAL,
+	qCLSourcePRSInfo		PRSResource-QCLSourcePRSInfo	OPTIONAL,		
+	iE-Extensions					ProtocolExtensionContainer { { PRSResource-QCLInfo-ExtIEs} } OPTIONAL,
+	...
+}
+PRSResource-QCLInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRSResource-QCLSourcePRSInfo ::= SEQUENCE {
+	qCLSourcePRSResourceSetID		INTEGER(0..7),
+	qCLSourcePRSResourceID 			INTEGER(0..63) OPTIONAL,		
+	iE-Extensions					ProtocolExtensionContainer { { PRSResource-QCLSourcePRSInfo-ExtIEs} } OPTIONAL
+}
+
+PRSResource-QCLSourcePRSInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRS-Resource-Set-ID ::= INTEGER(0..7)
+
+PRSResourceSet-List ::= SEQUENCE (SIZE (1.. maxnoofPRSresourceSets)) OF PRSResourceSet-Item
+PRSResourceSet-Item ::= SEQUENCE {
+	pRSResourceSetID				PRS-Resource-Set-ID,
+	subcarrierSpacing				ENUMERATED{kHz15, kHz30, kHz60, kHz120, ...},
+	pRSbandwidth					INTEGER(1..63),
+	startPRB						INTEGER(0..2176),
+	pointA							INTEGER (0..3279165),
+	combSize						ENUMERATED{n2, n4, n6, n12, ...},
+	cPType							ENUMERATED{normal, extended, ...},
+	resourceSetPeriodicity			ENUMERATED{n4,n5,n8,n10,n16,n20,n32,n40,n64,n80,n160,n320,n640,n1280,n2560,n5120,n10240,n20480,n40960, n81920,...},
+	resourceSetSlotOffset			INTEGER(0..81919,...),
+	resourceRepetitionFactor		ENUMERATED{rf1,rf2,rf4,rf6,rf8,rf16,rf32,...},
+	resourceTimeGap					ENUMERATED{tg1,tg2,tg4,tg8,tg16,tg32,...},
+	resourceNumberofSymbols			ENUMERATED{n2,n4,n6,n12,...},
+	pRSMuting						PRSMuting 		OPTIONAL,
+	pRSResourceTransmitPower		INTEGER(-60..50),
+	pRSResource-List				PRSResource-List,	
+	iE-Extensions					ProtocolExtensionContainer { { PRSResourceSet-Item-ExtIEs} } OPTIONAL
+}
+
+PRSResourceSet-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PWS-Failed-NR-CGI-Item ::= SEQUENCE {
+	nRCGI				NRCGI,
+	numberOfBroadcasts	NumberOfBroadcasts,
+	iE-Extensions		ProtocolExtensionContainer { { PWS-Failed-NR-CGI-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+PWS-Failed-NR-CGI-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PWSSystemInformation ::= SEQUENCE {
+	sIBtype 				SIBType-PWS,
+	sIBmessage			OCTET STRING, 
+	iE-Extensions		ProtocolExtensionContainer { { PWSSystemInformationExtIEs } }	OPTIONAL,
+	...
+}
+
+PWSSystemInformationExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ID id-NotificationInformation		CRITICALITY ignore	EXTENSION NotificationInformation		PRESENCE optional}|
+	{ ID id-AdditionalSIBMessageList	CRITICALITY reject	EXTENSION AdditionalSIBMessageList		PRESENCE optional},
+	...
+}
+
+PrivacyIndicator ::= ENUMERATED {immediate-MDT,	logged-MDT,	...}
+
+-- Q
+
+QCI ::= INTEGER (0..255)
+
+QoS-Characteristics ::= CHOICE {
+	non-Dynamic-5QI				NonDynamic5QIDescriptor,
+	dynamic-5QI					Dynamic5QIDescriptor, 
+	choice-extension			ProtocolIE-SingleContainer { { QoS-Characteristics-ExtIEs } }
+}
+
+QoS-Characteristics-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+QoSFlowIdentifier ::= INTEGER (0..63) 
+
+QoSFlowLevelQoSParameters	::= SEQUENCE {
+	qoS-Characteristics					QoS-Characteristics,
+	nGRANallocationRetentionPriority		NGRANAllocationAndRetentionPriority,
+	gBR-QoS-Flow-Information				GBR-QoSFlowInformation				OPTIONAL,
+	reflective-QoS-Attribute				ENUMERATED {subject-to, ...}				OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { QoSFlowLevelQoSParameters-ExtIEs } }	OPTIONAL
+}
+
+QoSFlowLevelQoSParameters-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-PDUSessionID								CRITICALITY ignore	EXTENSION PDUSessionID			PRESENCE optional}|
+	{ ID id-ULPDUSessionAggregateMaximumBitRate			CRITICALITY ignore	EXTENSION BitRate					PRESENCE optional}|
+	{ ID id-QosMonitoringRequest						CRITICALITY ignore	EXTENSION QosMonitoringRequest	PRESENCE optional},
+	...
+}
+
+QoSFlowMappingIndication ::= ENUMERATED {ul,dl,...}
+
+QoSInformation	::=	CHOICE {
+	eUTRANQoS					EUTRANQoS,
+	choice-extension			ProtocolIE-SingleContainer { { QoSInformation-ExtIEs} }
+}
+
+QoSInformation-ExtIEs F1AP-PROTOCOL-IES ::= {
+	{	ID id-DRB-Information		CRITICALITY ignore TYPE DRB-Information		PRESENCE mandatory},
+	...
+}
+
+QosMonitoringRequest ::= ENUMERATED {ul, dl, both, ...}
+
+QoSParaSetIndex ::= INTEGER (1..8, ...) 
+
+QoSParaSetNotifyIndex ::= INTEGER (0..8, ...)
+
+-- R
+
+RACH-Config-Common	::= OCTET STRING
+
+RACH-Config-Common-IAB	::= OCTET STRING
+
+RACHReportContainer::= OCTET STRING
+
+RACHReportInformationList	::= SEQUENCE (SIZE(1.. maxnoofRACHReports)) OF RACHReportInformationItem
+
+RACHReportInformationItem	::= SEQUENCE {
+	rACHReportContainer				RACHReportContainer,
+	uEAssitantIdentifier			GNB-DU-UE-F1AP-ID		OPTIONAL, 
+	iE-Extensions			ProtocolExtensionContainer { { RACHReportInformationItem-ExtIEs} }	OPTIONAL,
+	...
+}
+
+RACHReportInformationItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+
+RadioResourceStatus ::= SEQUENCE {
+	sSBAreaRadioResourceStatusList		SSBAreaRadioResourceStatusList,
+	iE-Extensions	ProtocolExtensionContainer { { RadioResourceStatus-ExtIEs} } OPTIONAL
+}
+
+RadioResourceStatus-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RANAC ::= INTEGER (0..255) 
+
+RAN-MeasurementID ::= INTEGER (1.. 65536, ...)
+
+RAN-UE-MeasurementID ::= INTEGER (1.. 256, ...)
+
+RANUEID ::= OCTET STRING (SIZE (8))
+
+RANUEPagingIdentity ::= SEQUENCE	{
+	iRNTI						BIT STRING (SIZE(40)),
+	iE-Extensions				ProtocolExtensionContainer { { RANUEPagingIdentity-ExtIEs } }	OPTIONAL}
+
+RANUEPagingIdentity-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RAT-FrequencyPriorityInformation::= CHOICE {
+	eNDC		SubscriberProfileIDforRFP,
+	nGRAN		RAT-FrequencySelectionPriority,
+	choice-extension			ProtocolIE-SingleContainer { { RAT-FrequencyPriorityInformation-ExtIEs} }
+}
+
+RAT-FrequencyPriorityInformation-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+RAT-FrequencySelectionPriority::= INTEGER (1.. 256, ...)
+
+Reestablishment-Indication	::=	ENUMERATED  {
+	reestablished,
+	...
+}
+
+ReferencePoint ::= CHOICE {
+	coordinateID					CoordinateID,
+	referencePointCoordinate		AccessPointPosition,
+	referencePointCoordinateHA		NGRANHighAccuracyAccessPointPosition,
+	choice-Extension				ProtocolIE-SingleContainer { { ReferencePoint-ExtIEs} }
+}
+
+ReferencePoint-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+ReferenceSFN ::= INTEGER (0..1023)
+
+ReferenceSignal ::= CHOICE { 
+	nZP-CSI-RS								NZP-CSI-RS-ResourceID,
+	sSB										SSB,
+	sRS										SRSResourceID,
+	positioningSRS							SRSPosResourceID,
+	dL-PRS									DL-PRS,
+	choice-extension						ProtocolIE-SingleContainer {{ReferenceSignal-ExtIEs }}
+}
+
+ReferenceSignal-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+RelativeCartesianLocation ::= SEQUENCE {
+	xYZunit						ENUMERATED {mm, cm, dm, ...},
+	xvalue						INTEGER (-65536..65535),
+	yvalue						INTEGER (-65536..65535),
+	zvalue						INTEGER (-32768..32767),
+	locationUncertainty			LocationUncertainty,
+	iE-Extensions				ProtocolExtensionContainer { { RelativeCartesianLocation-ExtIEs} } OPTIONAL
+}
+
+RelativeCartesianLocation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RelativeGeodeticLocation ::= SEQUENCE { 
+	milli-Arc-SecondUnits		ENUMERATED {zerodot03, zerodot3, three, ...},	
+	heightUnits					ENUMERATED {mm, cm, m, ...}, 
+	deltaLatitude				INTEGER (-1024.. 1023),
+	deltaLongitude				INTEGER (-1024.. 1023),
+	deltaHeight					INTEGER (-1024.. 1023),
+	locationUncertainty			LocationUncertainty,
+	iE-extensions				ProtocolExtensionContainer {{RelativeGeodeticLocation-ExtIEs }} OPTIONAL
+}
+
+RelativeGeodeticLocation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ReferenceTime ::= OCTET STRING
+
+RegistrationRequest ::= ENUMERATED{start, stop, add, ...}
+
+ReportCharacteristics ::= BIT STRING (SIZE(32))
+
+ReportingPeriodicity ::= ENUMERATED{ms500, ms1000, ms2000, ms5000, ms10000, ...}
+
+RequestedBandCombinationIndex ::= OCTET STRING
+
+RequestedFeatureSetEntryIndex ::= OCTET STRING
+
+RequestedP-MaxFR2 ::= OCTET STRING
+
+Requested-PDCCH-BlindDetectionSCG ::= OCTET STRING
+
+
+RequestedSRSTransmissionCharacteristics ::= SEQUENCE {
+	numberOfTransmissions		INTEGER (0..500, ...)		OPTIONAL,
+	resourceType				ENUMERATED  {periodic, semi-persistent, aperiodic,...},
+	bandwidthSRS				BandwidthSRS,
+	sRSResourceSetList 			SRSResourceSetList				OPTIONAL,
+	sSBInformation				SSBInformation				OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer { { RequestedSRSTransmissionCharacteristics-ExtIEs} } OPTIONAL
+}
+
+RequestedSRSTransmissionCharacteristics-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RequestType	::= ENUMERATED {offer, execution, ...}
+
+ResourceCoordinationEUTRACellInfo ::= SEQUENCE {
+	eUTRA-Mode-Info 						EUTRA-Coex-Mode-Info,
+	eUTRA-PRACH-Configuration 				EUTRA-PRACH-Configuration,
+	iE-Extensions	ProtocolExtensionContainer { { ResourceCoordinationEUTRACellInfo-ExtIEs } }	OPTIONAL,
+	...
+}
+
+ResourceCoordinationEUTRACellInfo-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ID id-IgnorePRACHConfiguration		CRITICALITY reject EXTENSION IgnorePRACHConfiguration		PRESENCE optional },
+	...
+}
+
+ResourceCoordinationTransferInformation ::= SEQUENCE {
+	meNB-Cell-ID								EUTRA-Cell-ID,
+	resourceCoordinationEUTRACellInfo		ResourceCoordinationEUTRACellInfo	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { ResourceCoordinationTransferInformation-ExtIEs } }	OPTIONAL,
+	...
+}
+
+ResourceCoordinationTransferInformation-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceCoordinationTransferContainer ::= OCTET STRING
+
+ResourceSetType  ::= CHOICE {
+	periodic			ResourceSetTypePeriodic,
+	semi-persistent		ResourceSetTypeSemi-persistent,
+	aperiodic			ResourceSetTypeAperiodic,
+	choice-extension				ProtocolIE-SingleContainer {{ ResourceSetType-ExtIEs }}
+}
+
+ResourceSetType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+ResourceSetTypePeriodic ::= SEQUENCE {
+	periodicSet			ENUMERATED{true, ...},
+	iE-Extensions		ProtocolExtensionContainer { { ResourceSetTypePeriodic-ExtIEs} }	OPTIONAL
+}
+
+ResourceSetTypePeriodic-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceSetTypeSemi-persistent ::= SEQUENCE {
+	semi-persistentSet	ENUMERATED{true, ...},
+	iE-Extensions		ProtocolExtensionContainer { { ResourceSetTypeSemi-persistent-ExtIEs} }	OPTIONAL
+}
+
+ResourceSetTypeSemi-persistent-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceSetTypeAperiodic ::= SEQUENCE {
+	sRSResourceTrigger-List 	INTEGER(1..3),
+	slotoffset					INTEGER(1..32),
+	iE-Extensions		ProtocolExtensionContainer { { ResourceSetTypeAperiodic-ExtIEs} }	OPTIONAL
+}
+
+ResourceSetTypeAperiodic-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RepetitionPeriod ::= INTEGER (0..131071, ...)
+
+ReportingRequestType ::= SEQUENCE {
+	eventType						EventType,
+	reportingPeriodicityValue						ReportingPeriodicityValue		OPTIONAL,
+	-- C-ifEventTypeisPeriodic: This IE shall be present if the Event Type IE is set to "periodic" in the Event Type IE.
+	iE-Extensions					ProtocolExtensionContainer { {ReportingRequestType-ExtIEs} }	OPTIONAL
+}
+
+ReportingRequestType-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceType ::= CHOICE {
+	periodic			ResourceTypePeriodic,
+	semi-persistent		ResourceTypeSemi-persistent,
+	aperiodic			ResourceTypeAperiodic,
+	choice-extension				ProtocolIE-SingleContainer {{ ResourceType-ExtIEs }}
+}
+
+ResourceType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+ResourceTypePeriodic ::= SEQUENCE {
+	periodicity		   ENUMERATED{slot1, slot2, slot4, slot5, slot8, slot10, slot16, slot20, slot32, slot40, slot64, slot80, slot160, slot320, slot640, slot1280, slot2560, ...},
+	offset				INTEGER(0..2559, ...),
+	iE-Extensions		ProtocolExtensionContainer { { ResourceTypePeriodic-ExtIEs} }	OPTIONAL
+}
+
+ResourceTypePeriodic-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceTypeSemi-persistent ::= SEQUENCE {
+	periodicity		   ENUMERATED{slot1, slot2, slot4, slot5, slot8, slot10, slot16, slot20, slot32, slot40, slot64, slot80, slot160, slot320, slot640, slot1280, slot2560, ...},
+	offset				INTEGER(0..2559, ...),
+	iE-Extensions		ProtocolExtensionContainer { { ResourceTypeSemi-persistent-ExtIEs} }	OPTIONAL
+}
+
+ResourceTypeSemi-persistent-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceTypeAperiodic ::= SEQUENCE {
+	aperiodicResourceType	   ENUMERATED{true, ...},
+	iE-Extensions		ProtocolExtensionContainer { { ResourceTypeAperiodic-ExtIEs} }	OPTIONAL
+}
+
+ResourceTypeAperiodic-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceTypePos ::= CHOICE {
+	periodic			ResourceTypePeriodicPos,
+	semi-persistent		ResourceTypeSemi-persistentPos,
+	aperiodic			ResourceTypeAperiodicPos,
+	choice-extension	ProtocolIE-SingleContainer {{ ResourceTypePos-ExtIEs }}
+}
+
+ResourceTypePos-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+ResourceTypePeriodicPos ::= SEQUENCE {
+	periodicity		   ENUMERATED{slot1, slot2, slot4, slot5, slot8, slot10, slot16, slot20, slot32, slot40, slot64, slot80, slot160, slot320, slot640, slot1280, slot2560, slot5120, slot10240, slot20480, slot40960, slot81920, ...},
+	offset				INTEGER(0..81919, ...),
+	iE-Extensions		ProtocolExtensionContainer { { ResourceTypePeriodicPos-ExtIEs} }	OPTIONAL
+}
+
+ResourceTypePeriodicPos-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceTypeSemi-persistentPos ::= SEQUENCE {
+	periodicity		   ENUMERATED{slot1, slot2, slot4, slot5, slot8, slot10, slot16, slot20, slot32, slot40, slot64, slot80, slot160, slot320, slot640, slot1280, slot2560, slot5120, slot10240, slot20480, slot40960, slot81920, ...},
+	offset				INTEGER(0..81919, ...),
+	iE-Extensions		ProtocolExtensionContainer { { ResourceTypeSemi-persistentPos-ExtIEs} }	OPTIONAL
+}
+
+ResourceTypeSemi-persistentPos-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceTypeAperiodicPos ::= SEQUENCE {
+	slotOffset          INTEGER (1..32),
+	iE-Extensions		ProtocolExtensionContainer { { ResourceTypeAperiodicPos-ExtIEs} }	OPTIONAL
+}
+
+ResourceTypeAperiodicPos-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RLCDuplicationInformation ::= SEQUENCE {
+	rLCDuplicationStateList 		RLCDuplicationStateList,
+	primaryPathIndication			PrimaryPathIndication	OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { {RLCDuplicationInformation-ExtIEs} }	OPTIONAL
+}
+
+RLCDuplicationInformation-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RLCDuplicationStateList	::= SEQUENCE (SIZE(1..maxnoofRLCDuplicationState)) OF RLCDuplicationState-Item
+
+RLCDuplicationState-Item ::=SEQUENCE {
+	duplicationState		DuplicationState, 
+	iE-Extensions	ProtocolExtensionContainer { {RLCDuplicationState-Item-ExtIEs } }	OPTIONAL,
+	...
+}
+
+
+RLCDuplicationState-Item-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RLCFailureIndication ::= SEQUENCE {
+	assocatedLCID				LCID,
+	iE-Extensions				ProtocolExtensionContainer { {RLCFailureIndication-ExtIEs} } OPTIONAL
+}
+
+RLCFailureIndication-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RLCMode ::= ENUMERATED {
+	rlc-am,
+	rlc-um-bidirectional,
+	rlc-um-unidirectional-ul,
+	rlc-um-unidirectional-dl,
+	...
+}
+
+RLC-Status ::= SEQUENCE {
+	reestablishment-Indication 	Reestablishment-Indication,
+	iE-Extensions				ProtocolExtensionContainer { { RLC-Status-ExtIEs } } OPTIONAL,
+	...
+}
+
+RLC-Status-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RLFReportInformationList	::= SEQUENCE (SIZE(1.. maxnoofRLFReports)) OF RLFReportInformationItem
+
+RLFReportInformationItem	::= SEQUENCE {
+	nRUERLFReportContainer		NRUERLFReportContainer,
+	uEAssitantIdentifier			GNB-DU-UE-F1AP-ID		OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { RLFReportInformationItem-ExtIEs} }	OPTIONAL,
+	...
+}
+
+RLFReportInformationItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RIMRSDetectionStatus ::= ENUMERATED {rs-detected, rs-disappeared, ...}
+
+RRCContainer ::= OCTET STRING
+
+RRCContainer-RRCSetupComplete ::= OCTET STRING
+
+RRCDeliveryStatus ::= SEQUENCE	{
+	delivery-status 			PDCP-SN,
+	triggering-message			PDCP-SN,
+	iE-Extensions				ProtocolExtensionContainer { { RRCDeliveryStatus-ExtIEs } }	OPTIONAL}
+
+RRCDeliveryStatus-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+RRCDeliveryStatusRequest ::= ENUMERATED {true, ...}
+
+RRCReconfigurationCompleteIndicator	::= ENUMERATED {
+	true,
+	 ...,
+	failure
+}
+
+RRC-Version ::= SEQUENCE	{
+	latest-RRC-Version			BIT STRING (SIZE(3)),
+	iE-Extensions				ProtocolExtensionContainer { { RRC-Version-ExtIEs } }	OPTIONAL}
+
+RRC-Version-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ID id-latest-RRC-Version-Enhanced		CRITICALITY ignore EXTENSION OCTET STRING (SIZE(3))		PRESENCE optional },
+	...
+}
+
+RoutingID ::= OCTET STRING
+
+-- S
+
+SCell-FailedtoSetup-Item	::= SEQUENCE {
+	sCell-ID			NRCGI	, 
+	cause		Cause			OPTIONAL ,
+	iE-Extensions	ProtocolExtensionContainer { { SCell-FailedtoSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SCell-FailedtoSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SCell-FailedtoSetupMod-Item	::= SEQUENCE {
+	sCell-ID			NRCGI	, 
+	cause		Cause			OPTIONAL ,
+	iE-Extensions	ProtocolExtensionContainer { { SCell-FailedtoSetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SCell-FailedtoSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SCell-ToBeRemoved-Item	::= SEQUENCE {
+	sCell-ID			NRCGI	, 
+	iE-Extensions	ProtocolExtensionContainer { { SCell-ToBeRemoved-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SCell-ToBeRemoved-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SCell-ToBeSetup-Item ::= SEQUENCE {
+	sCell-ID			NRCGI	,
+	sCellIndex			SCellIndex, 
+	sCellULConfigured		CellULConfigured 	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SCell-ToBeSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SCell-ToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-ServingCellMO		CRITICALITY ignore	EXTENSION ServingCellMO		PRESENCE optional	},
+	...
+}
+
+SCell-ToBeSetupMod-Item	::= SEQUENCE {
+	sCell-ID			NRCGI	, 
+	sCellIndex			SCellIndex,
+	sCellULConfigured		CellULConfigured 	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SCell-ToBeSetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SCell-ToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-ServingCellMO		CRITICALITY ignore	EXTENSION ServingCellMO		PRESENCE optional	},
+	...
+}
+
+SCellIndex ::=INTEGER (1..31, ...) 
+
+SCS-SpecificCarrier ::=            SEQUENCE {
+    offsetToCarrier                     INTEGER (0..2199,...),
+    subcarrierSpacing                   ENUMERATED {kHz15, kHz30, kHz60, kHz120,...},
+    carrierBandwidth                    INTEGER (0..275,...),
+	iE-Extensions						ProtocolExtensionContainer { { SCS-SpecificCarrier-ExtIEs } } OPTIONAL
+}
+
+SCS-SpecificCarrier-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Search-window-information ::= SEQUENCE {
+	expectedPropagationDelay		INTEGER (-3841..3841,...),
+	delayUncertainty				INTEGER (1..246,...),
+	iE-Extensions					ProtocolExtensionContainer { { Search-window-information-ExtIEs } } OPTIONAL
+}
+
+Search-window-information-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SerialNumber ::= BIT STRING (SIZE (16))
+
+SIBType-PWS ::=INTEGER (6..8, ...)
+
+SelectedBandCombinationIndex ::= OCTET STRING
+
+SelectedFeatureSetEntryIndex ::= OCTET STRING
+
+CG-ConfigInfo ::= OCTET STRING
+
+ServCellIndex ::= INTEGER (0..31, ...)
+
+ServingCellMO ::= INTEGER (1..64, ...)
+
+Served-Cell-Information ::= SEQUENCE {
+	nRCGI							NRCGI,
+	nRPCI							NRPCI,
+	fiveGS-TAC							FiveGS-TAC			OPTIONAL,
+	configured-EPS-TAC				Configured-EPS-TAC 		OPTIONAL,
+	servedPLMNs					ServedPLMNs-List,
+	nR-Mode-Info					NR-Mode-Info, 
+	measurementTimingConfiguration	OCTET STRING,
+	iE-Extensions		ProtocolExtensionContainer { {Served-Cell-Information-ExtIEs} } OPTIONAL,
+	...
+}
+
+Served-Cell-Information-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{	ID id-RANAC							CRITICALITY ignore	EXTENSION RANAC							PRESENCE optional }|
+	{	ID id-ExtendedServedPLMNs-List		CRITICALITY ignore	EXTENSION ExtendedServedPLMNs-List	PRESENCE optional }|
+	{	ID id-Cell-Direction				CRITICALITY ignore	EXTENSION Cell-Direction				PRESENCE optional }|
+	{	ID id-BPLMN-ID-Info-List			CRITICALITY ignore	EXTENSION BPLMN-ID-Info-List			PRESENCE optional }|
+	{	ID id-Cell-Type						CRITICALITY ignore	EXTENSION CellType						PRESENCE optional}|
+	{	ID id-ConfiguredTACIndication		CRITICALITY ignore	EXTENSION ConfiguredTACIndication		PRESENCE optional }|
+	{	ID id-AggressorgNBSetID				CRITICALITY ignore	EXTENSION AggressorgNBSetID				PRESENCE optional}|
+	{	ID id-VictimgNBSetID				CRITICALITY ignore	EXTENSION VictimgNBSetID				PRESENCE optional}|
+	{	ID id-IAB-Info-IAB-DU				CRITICALITY ignore	EXTENSION IAB-Info-IAB-DU				PRESENCE optional}|
+	{	ID id-SSB-PositionsInBurst			CRITICALITY ignore	EXTENSION SSB-PositionsInBurst			PRESENCE optional }|
+	{	ID id-NRPRACHConfig					CRITICALITY ignore	EXTENSION NRPRACHConfig					PRESENCE optional },
+	...
+}
+
+Served-Cells-To-Add-Item ::= SEQUENCE {
+	served-Cell-Information		Served-Cell-Information,
+	gNB-DU-System-Information	GNB-DU-System-Information	 OPTIONAL, 
+	iE-Extensions				ProtocolExtensionContainer { { Served-Cells-To-Add-ItemExtIEs} }	OPTIONAL,
+	...
+}
+
+Served-Cells-To-Add-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Served-Cells-To-Delete-Item ::= SEQUENCE {
+	oldNRCGI					NRCGI	,
+	iE-Extensions				ProtocolExtensionContainer { { Served-Cells-To-Delete-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Served-Cells-To-Delete-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Served-Cells-To-Modify-Item ::= SEQUENCE {
+	oldNRCGI					NRCGI							,
+	served-Cell-Information		Served-Cell-Information		,
+	gNB-DU-System-Information	GNB-DU-System-Information 	OPTIONAL	,
+	iE-Extensions				ProtocolExtensionContainer { { Served-Cells-To-Modify-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Served-Cells-To-Modify-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Served-EUTRA-Cells-Information::= SEQUENCE {
+	eUTRA-Mode-Info						EUTRA-Mode-Info,
+	protectedEUTRAResourceIndication	ProtectedEUTRAResourceIndication,
+	iE-Extensions						ProtocolExtensionContainer { {Served-EUTRA-Cell-Information-ExtIEs} } OPTIONAL,
+	...
+}
+
+Served-EUTRA-Cell-Information-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Service-State ::= ENUMERATED {
+	in-service,
+	out-of-service,
+	...
+}
+
+Service-Status ::= SEQUENCE {
+	service-state				Service-State,
+	switchingOffOngoing			ENUMERATED {true, ...}	OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { Service-Status-ExtIEs } }	OPTIONAL,
+	...
+}
+
+Service-Status-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+SFNInitialisationTime ::= 	BIT STRING (SIZE (64))
+
+ShortDRXCycleLength ::=  ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms7, ms8, ms10, ms14, ms16, ms20, ms30, ms32, ms35, ms40, ms64, ms80, ms128, ms160, ms256, ms320, ms512, ms640, ...}
+
+ShortDRXCycleTimer ::= INTEGER (1..16)
+
+SIB1-message ::= OCTET STRING
+
+SIB10-message ::= OCTET STRING
+
+SIB12-message ::= OCTET STRING
+
+SIB13-message ::= OCTET STRING
+
+SIB14-message ::= OCTET STRING
+
+SItype ::= INTEGER (1..32, ...)
+
+SItype-List ::= SEQUENCE (SIZE(1.. maxnoofSITypes)) OF SItype-Item
+
+SItype-Item ::= SEQUENCE {
+	sItype		SItype	,
+	iE-Extensions	ProtocolExtensionContainer { { SItype-ItemExtIEs } }	OPTIONAL
+}
+
+SItype-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SibtypetobeupdatedListItem ::= SEQUENCE {
+	sIBtype 			INTEGER (2..32,...), 
+	sIBmessage			OCTET STRING, 
+	valueTag			INTEGER (0..31,...), 
+	iE-Extensions	ProtocolExtensionContainer { { SibtypetobeupdatedListItem-ExtIEs } }	OPTIONAL,
+	...
+}
+
+SibtypetobeupdatedListItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ID	id-areaScope	CRITICALITY ignore	EXTENSION	AreaScope	PRESENCE optional},
+	...
+}
+
+SLDRBID ::= INTEGER (1..512, ...)
+
+SLDRBInformation ::= SEQUENCE {
+	sLDRB-QoS				PC5QoSParameters,
+	flowsMappedToSLDRB-List	FlowsMappedToSLDRB-List,
+	...
+}
+
+SLDRBs-FailedToBeModified-Item	::= SEQUENCE {
+	sLDRBID		SLDRBID		,
+	cause		Cause		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-FailedToBeModified-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-FailedToBeModified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-FailedToBeSetup-Item	::= SEQUENCE {
+	sLDRBID	SLDRBID,
+	cause	Cause	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-FailedToBeSetup-ItemExtIEs } }		OPTIONAL
+}
+
+SLDRBs-FailedToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-FailedToBeSetupMod-Item	::= SEQUENCE {
+	sLDRBID		SLDRBID	,
+	cause		Cause			OPTIONAL ,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-FailedToBeSetupMod-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-FailedToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-Modified-Item	::= SEQUENCE {
+	sLDRBID							SLDRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-Modified-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-Modified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-ModifiedConf-Item	::= SEQUENCE {
+	sLDRBID							SLDRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-ModifiedConf-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-ModifiedConf-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-Required-ToBeModified-Item	::= SEQUENCE {
+	sLDRBID							SLDRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-Required-ToBeModified-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-Required-ToBeModified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-Required-ToBeReleased-Item	::= SEQUENCE {
+	sLDRBID		SLDRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-Required-ToBeReleased-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-Required-ToBeReleased-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-Setup-Item ::= SEQUENCE {
+	sLDRBID							SLDRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-Setup-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-Setup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-SetupMod-Item	::= SEQUENCE {
+	sLDRBID							SLDRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-SetupMod-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-SetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-ToBeModified-Item	::= SEQUENCE {
+	sLDRBID						SLDRBID,
+	sLDRBInformation				SLDRBInformation		OPTIONAL,
+	rLCMode						RLCMode			OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-ToBeModified-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-ToBeModified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-ToBeReleased-Item	::= SEQUENCE {
+	sLDRBID	        SLDRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-ToBeReleased-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-ToBeReleased-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-ToBeSetup-Item ::= SEQUENCE	{
+	sLDRBID						SLDRBID,
+	sLDRBInformation				SLDRBInformation,
+	rLCMode						RLCMode, 
+
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-ToBeSetup-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-ToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-ToBeSetupMod-Item	::= SEQUENCE {
+	sLDRBID						SLDRBID,
+	sLDRBInformation				SLDRBInformation,
+	rLCMode						RLCMode			OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-ToBeSetupMod-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-ToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SL-PHY-MAC-RLC-Config ::= OCTET STRING
+
+SL-ConfigDedicatedEUTRA ::= OCTET STRING
+
+SliceAvailableCapacity ::= SEQUENCE {
+	sliceAvailableCapacityList	SliceAvailableCapacityList,
+	iE-Extensions				ProtocolExtensionContainer { { SliceAvailableCapacity-ExtIEs} } OPTIONAL
+}
+
+SliceAvailableCapacity-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SliceAvailableCapacityList ::= SEQUENCE (SIZE(1.. maxnoofBPLMNsNR)) OF SliceAvailableCapacityItem
+
+SliceAvailableCapacityItem ::= SEQUENCE {
+	pLMNIdentity					PLMN-Identity, 
+	sNSSAIAvailableCapacity-List	SNSSAIAvailableCapacity-List,
+	iE-Extensions	ProtocolExtensionContainer { { SliceAvailableCapacityItem-ExtIEs} } OPTIONAL
+}
+
+SliceAvailableCapacityItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SNSSAIAvailableCapacity-List ::= SEQUENCE (SIZE(1.. maxnoofSliceItems)) OF SNSSAIAvailableCapacity-Item
+
+SNSSAIAvailableCapacity-Item ::= SEQUENCE {
+	sNSSAI		SNSSAI,
+	sliceAvailableCapacityValueDownlink	INTEGER (0..100)	OPTIONAL, 
+	sliceAvailableCapacityValueUplink	INTEGER (0..100)	OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { SNSSAIAvailableCapacity-Item-ExtIEs } }	OPTIONAL
+}
+
+SNSSAIAvailableCapacity-Item-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SliceSupportList ::= SEQUENCE (SIZE(1.. maxnoofSliceItems)) OF SliceSupportItem
+
+SliceSupportItem ::= SEQUENCE {
+	sNSSAI	SNSSAI,
+	iE-Extensions				ProtocolExtensionContainer { { SliceSupportItem-ExtIEs } }	OPTIONAL
+}
+
+SliceSupportItem-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SliceToReportList ::= SEQUENCE (SIZE(1.. maxnoofBPLMNsNR)) OF SliceToReportItem
+
+SliceToReportItem ::= SEQUENCE {
+	pLMNIdentity				PLMN-Identity, 
+	sNSSAIlist					SNSSAI-list,
+	iE-Extensions				ProtocolExtensionContainer { { SliceToReportItem-ExtIEs} } OPTIONAL
+}
+
+SliceToReportItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SlotNumber ::= INTEGER (0..79)
+
+SNSSAI-list ::= SEQUENCE (SIZE(1.. maxnoofSliceItems)) OF SNSSAI-Item
+
+SNSSAI-Item ::= SEQUENCE {
+	sNSSAI		SNSSAI,
+	iE-Extensions				ProtocolExtensionContainer { { SNSSAI-Item-ExtIEs } }	OPTIONAL
+}
+
+SNSSAI-Item-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Slot-Configuration-List ::= SEQUENCE (SIZE(1.. maxnoofslots)) OF Slot-Configuration-Item
+
+Slot-Configuration-Item ::= SEQUENCE {
+	slotIndex				INTEGER (0..5119, ...),
+	symbolAllocInSlot		SymbolAllocInSlot,
+	iE-Extensions	ProtocolExtensionContainer { { Slot-Configuration-ItemExtIEs } }	OPTIONAL
+}
+
+Slot-Configuration-ItemExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+SNSSAI ::= SEQUENCE {
+	sST			OCTET STRING (SIZE(1)),
+	sD			OCTET STRING (SIZE(3)) 	OPTIONAL	,
+	iE-Extensions				ProtocolExtensionContainer { { SNSSAI-ExtIEs } }	OPTIONAL
+}
+
+SNSSAI-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SpatialDirectionInformation ::= SEQUENCE {
+	nR-PRSBeamInformation			NR-PRSBeamInformation,
+	iE-Extensions					ProtocolExtensionContainer { { SpatialDirectionInformation-ExtIEs } } OPTIONAL
+}
+
+SpatialDirectionInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SpatialRelationInfo ::= SEQUENCE {
+	spatialRelationforResourceID					SpatialRelationforResourceID,
+	iE-Extensions		ProtocolExtensionContainer { {SpatialRelationInfo-ExtIEs} }	OPTIONAL
+}
+
+SpatialRelationInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SpatialRelationforResourceID ::= SEQUENCE (SIZE(1..maxnoofSpatialRelations)) OF SpatialRelationforResourceIDItem
+
+SpatialRelationforResourceIDItem ::= SEQUENCE {
+	referenceSignal		ReferenceSignal,
+	iE-Extensions		ProtocolExtensionContainer { {SpatialRelationforResourceIDItem-ExtIEs} }	OPTIONAL
+}
+
+SpatialRelationforResourceIDItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SpatialRelationPos ::= CHOICE {
+	sSBPos					SSBPos,
+	pRSInformationPos		PRSInformationPos,
+	choice-extension		ProtocolIE-SingleContainer {{ SpatialInformationPos-ExtIEs }}
+}
+
+SpatialInformationPos-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+SpectrumSharingGroupID ::= INTEGER (1..maxCellineNB)
+
+SRBID ::= INTEGER (0..3, ...)
+
+SRBs-FailedToBeSetup-Item	::= SEQUENCE {
+	sRBID		SRBID	,
+	cause		Cause	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-FailedToBeSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-FailedToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRBs-FailedToBeSetupMod-Item	::= SEQUENCE {
+	sRBID		SRBID		,
+	cause		Cause		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-FailedToBeSetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-FailedToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRBs-Modified-Item ::= SEQUENCE {
+	sRBID							SRBID,
+	lCID							LCID,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-Modified-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-Modified-ItemExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRBs-Required-ToBeReleased-Item	::= SEQUENCE {
+	sRBID	SRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-Required-ToBeReleased-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-Required-ToBeReleased-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRBs-Setup-Item ::= SEQUENCE {
+	sRBID							SRBID,
+	lCID								LCID,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-Setup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-Setup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRBs-SetupMod-Item ::= SEQUENCE {
+	sRBID						SRBID,
+	lCID							LCID,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-SetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-SetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRBs-ToBeReleased-Item	::= SEQUENCE {
+	sRBID		SRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-ToBeReleased-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-ToBeReleased-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRBs-ToBeSetup-Item ::= SEQUENCE {
+	sRBID	 SRBID	,
+	duplicationIndication	DuplicationIndication	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-ToBeSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-ToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-AdditionalDuplicationIndication	CRITICALITY ignore	EXTENSION AdditionalDuplicationIndication		PRESENCE optional	},
+	...
+}
+
+SRBs-ToBeSetupMod-Item	::= SEQUENCE {
+	sRBID	SRBID,
+	duplicationIndication	DuplicationIndication	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-ToBeSetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-ToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-AdditionalDuplicationIndication	CRITICALITY ignore	EXTENSION AdditionalDuplicationIndication		PRESENCE optional	},
+	...
+}
+
+SRSCarrier-List ::= SEQUENCE (SIZE(1.. maxnoSRS-Carriers)) OF SRSCarrier-List-Item
+
+SRSCarrier-List-Item ::= SEQUENCE {
+	pointA							INTEGER (0..3279165,...),
+	uplinkChannelBW-PerSCS-List		UplinkChannelBW-PerSCS-List,
+	activeULBWP						ActiveULBWP,
+	pci								NRPCI,
+	iE-Extensions					ProtocolExtensionContainer { { SRSCarrier-List-Item-ExtIEs } } OPTIONAL
+}
+
+SRSCarrier-List-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRSConfig  ::= SEQUENCE {
+	sRSResource-List			SRSResource-List 		OPTIONAL,
+	posSRSResource-List			PosSRSResource-List 	OPTIONAL,
+	sRSResourceSet-List			SRSResourceSet-List 	OPTIONAL,
+	posSRSResourceSet-List		PosSRSResourceSet-List 	OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { SRSConfig-ExtIEs } } OPTIONAL
+}
+
+SRSConfig-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRSConfiguration ::= SEQUENCE {
+	sRSCarrier-List		SRSCarrier-List,
+	iE-Extensions		ProtocolExtensionContainer { { SRSConfiguration-ExtIEs } } OPTIONAL
+}
+
+SRSConfiguration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+} 
+
+SRSPosResourceID ::= INTEGER (0..63, ...)
+
+SRSResource::= SEQUENCE {
+	sRSResourceID                  	SRSResourceID,
+	nrofSRS-Ports                   ENUMERATED {port1, ports2, ports4},
+	transmissionComb				TransmissionComb,
+	startPosition                   INTEGER (0..13),
+    nrofSymbols                     ENUMERATED {n1, n2, n4},
+    repetitionFactor              	ENUMERATED {n1, n2, n4},
+    freqDomainPosition              INTEGER (0..67),
+	freqDomainShift                 INTEGER (0..268),
+	c-SRS                           INTEGER (0..63),
+	b-SRS                           INTEGER (0..3),
+	b-hop                           INTEGER (0..3),
+	groupOrSequenceHopping          ENUMERATED { neither, groupHopping, sequenceHopping },
+	resourceType					ResourceType,
+	slotOffset						INTEGER (0..2559),
+	sequenceId                      INTEGER (0..1023),
+	iE-Extensions					ProtocolExtensionContainer { { SRSResource-ExtIEs } } OPTIONAL
+}
+
+SRSResource-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRSResourceID ::= INTEGER (0..63, ...)
+
+SRSResourceID-List::= SEQUENCE (SIZE (1..maxnoSRS-ResourcePerSet)) OF SRSResourceID
+
+SRSResource-List ::= SEQUENCE (SIZE (1..maxnoSRS-Resources)) OF SRSResource
+
+SRSResourceSet::= SEQUENCE {
+	sRSResourceSetID                SRSResourceSetID,
+	sRSResourceID-List				SRSResourceID-List,
+	resourceSetType					ResourceSetType,
+	iE-Extensions					ProtocolExtensionContainer { { SRSResourceSet-ExtIEs } } OPTIONAL
+}
+
+SRSResourceSet-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRSResourceSetID ::= INTEGER (0..15, ...)
+
+SRSResourceSetList ::= SEQUENCE (SIZE(1.. maxnoSRS-ResourceSets)) OF SRSResourceSetItem
+
+SRSResourceSetItem ::= SEQUENCE {
+	numSRSresourcesperset		INTEGER (1..16, ...)	OPTIONAL,
+	periodicityList				PeriodicityList			OPTIONAL,
+	spatialRelationInfo			SpatialRelationInfo		OPTIONAL,
+	pathlossReferenceInfo		PathlossReferenceInfo	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SRSResourceSetItemExtIEs } }	OPTIONAL
+}
+
+SRSResourceSetItemExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRSResourceSet-List ::= SEQUENCE (SIZE (1..maxnoSRS-ResourceSets)) OF SRSResourceSet 
+
+SRSResourceTrigger ::= SEQUENCE {
+	aperiodicSRSResourceTriggerList					AperiodicSRSResourceTriggerList,
+	iE-Extensions		ProtocolExtensionContainer { {SRSResourceTrigger-ExtIEs} }	OPTIONAL
+}
+
+SRSResourceTrigger-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRSSpatialRelation ::= SEQUENCE {
+	spatialRelationforResourceID				SpatialRelationforResourceID,
+	iE-Extensions		ProtocolExtensionContainer { {SRSSpatialRelation-ExtIEs} }	OPTIONAL
+}
+
+SRSSpatialRelation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SSB ::= SEQUENCE {
+	pCI-NR				NRPCI,
+	ssb-index			SSB-Index	OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { {SSB-ExtIEs} }	OPTIONAL
+}
+
+SSB-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SSB-freqInfo ::= INTEGER (0..maxNRARFCN) 
+
+SSB-Index ::= INTEGER(0..63)
+
+SSBPos ::= SEQUENCE {
+	pCI-NR				NRPCI		OPTIONAL,
+	ssb-index			SSB-Index,
+	iE-Extensions		ProtocolExtensionContainer { {SSBPos-ExtIEs} }	OPTIONAL
+}
+
+SSBPos-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SSB-subcarrierSpacing ::=  ENUMERATED {kHz15, kHz30, kHz120, kHz240, spare3, spare2, spare1, ...}
+
+SSB-transmissionPeriodicity	::= ENUMERATED {sf10, sf20, sf40, sf80, sf160, sf320, sf640, ...}
+
+SSB-transmissionTimingOffset ::= INTEGER (0..127, ...)
+
+SSB-transmissionBitmap ::= CHOICE {
+	shortBitmap			BIT STRING (SIZE (4)),
+	mediumBitmap		BIT STRING (SIZE (8)),
+	longBitmap			BIT STRING (SIZE (64)),
+	choice-extension	ProtocolIE-SingleContainer { { SSB-transmisisonBitmap-ExtIEs} }
+}
+
+SSB-transmisisonBitmap-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+SSBAreaCapacityValueList ::= SEQUENCE (SIZE(1.. maxnoofSSBAreas)) OF	SSBAreaCapacityValueItem
+
+SSBAreaCapacityValueItem ::= SEQUENCE {
+	sSBIndex				INTEGER(0..63),
+	sSBAreaCapacityValue	INTEGER (0..100),
+	iE-Extensions	ProtocolExtensionContainer { { SSBAreaCapacityValueItem-ExtIEs} } OPTIONAL
+}
+
+SSBAreaCapacityValueItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SSBAreaRadioResourceStatusList::= SEQUENCE (SIZE(1.. maxnoofSSBAreas)) OF	SSBAreaRadioResourceStatusItem
+
+SSBAreaRadioResourceStatusItem::= SEQUENCE {
+	sSBIndex					INTEGER(0..63),
+	sSBAreaDLGBRPRBusage		INTEGER (0..100),
+	sSBAreaULGBRPRBusage		INTEGER (0..100),
+	sSBAreaDLnon-GBRPRBusage	INTEGER (0..100),
+	sSBAreaULnon-GBRPRBusage	INTEGER (0..100),
+	sSBAreaDLTotalPRBusage		INTEGER (0..100),
+	sSBAreaULTotalPRBusage		INTEGER (0..100),
+	dLschedulingPDCCHCCEusage	INTEGER (0..100)		OPTIONAL,
+	uLschedulingPDCCHCCEusage	INTEGER (0..100) 		OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { SSBAreaRadioResourceStatusItem-ExtIEs} } OPTIONAL
+}
+
+SSBAreaRadioResourceStatusItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SSBInformation ::= SEQUENCE {
+	sSBInformationList	SSBInformationList,
+	iE-Extensions	ProtocolExtensionContainer { { SSBInformation-ExtIEs } }	OPTIONAL
+}
+
+SSBInformation-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SSBInformationList ::= SEQUENCE (SIZE(1.. maxnoofSSBs)) OF SSBInformationItem
+
+SSBInformationItem ::= SEQUENCE {
+	sSB-Configuration	SSB-TF-Configuration,
+	pCI-NR				NRPCI,
+	iE-Extensions	ProtocolExtensionContainer { { SSBInformationItem-ExtIEs } }	OPTIONAL
+}
+
+SSBInformationItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SSB-PositionsInBurst ::= CHOICE {
+	shortBitmap						BIT STRING (SIZE (4)),
+	mediumBitmap					BIT STRING (SIZE (8)),
+	longBitmap						BIT STRING (SIZE (64)),
+	choice-extension				ProtocolIE-SingleContainer { {SSB-PositionsInBurst-ExtIEs} }
+}
+
+SSB-PositionsInBurst-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+SSB-TF-Configuration ::= SEQUENCE {
+	sSB-frequency				INTEGER (0..3279165),
+	sSB-subcarrier-spacing		ENUMERATED {kHz15, kHz30, kHz60, kHz120, kHz240, ...},
+	sSB-Transmit-power			INTEGER (-60..50),
+	sSB-periodicity				ENUMERATED {ms5, ms10, ms20, ms40, ms80, ms160, ...},
+	sSB-half-frame-offset		INTEGER(0..1),
+	sSB-SFN-offset				INTEGER(0..15),
+	sSB-position-in-burst		SSB-PositionsInBurst		OPTIONAL,
+	sFNInitialisationTime		SFNInitialisationTime		OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { SSB-TF-Configuration-ExtIEs} } OPTIONAL
+}
+
+SSB-TF-Configuration-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+SSBToReportList ::= SEQUENCE (SIZE(1.. maxnoofSSBAreas)) OF SSBToReportItem
+
+SSBToReportItem ::= SEQUENCE {
+	sSBIndex					INTEGER(0..63),
+	iE-Extensions				ProtocolExtensionContainer { { SSBToReportItem-ExtIEs} } OPTIONAL
+}
+
+SSBToReportItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SUL-Information ::= SEQUENCE {
+	sUL-NRARFCN							INTEGER (0..maxNRARFCN),
+	sUL-transmission-Bandwidth			Transmission-Bandwidth,
+	iE-Extensions				ProtocolExtensionContainer { { SUL-InformationExtIEs} } OPTIONAL,
+	...
+}
+
+SUL-InformationExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-CarrierList				CRITICALITY ignore	EXTENSION NRCarrierList			PRESENCE optional }|
+	{ ID id-FrequencyShift7p5khz	CRITICALITY ignore	EXTENSION FrequencyShift7p5khz	PRESENCE optional },
+	...
+}
+
+SubcarrierSpacing ::=	ENUMERATED { kHz15, kHz30, kHz60, kHz120, kHz240, spare3, spare2, spare1, ...}
+
+SubscriberProfileIDforRFP ::= INTEGER (1..256, ...)
+
+SULAccessIndication ::= ENUMERATED {true,...}
+
+
+SupportedSULFreqBandItem ::= SEQUENCE {
+	freqBandIndicatorNr 			INTEGER (1..1024,...),
+	iE-Extensions				ProtocolExtensionContainer { { SupportedSULFreqBandItem-ExtIEs} } OPTIONAL,
+	...
+}
+
+SupportedSULFreqBandItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SymbolAllocInSlot ::= CHOICE {
+	all-DL				NULL,
+	all-UL				NULL, 
+	both-DL-and-UL			NumDLULSymbols,	
+	choice-extension			ProtocolIE-SingleContainer { { SymbolAllocInSlot-ExtIEs } }
+}
+
+SymbolAllocInSlot-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+SystemFrameNumber ::= INTEGER (0..1023)
+
+SystemInformationAreaID ::=BIT STRING (SIZE (24))
+
+-- T
+
+FiveGS-TAC ::= OCTET STRING (SIZE(3))
+
+Configured-EPS-TAC ::= OCTET STRING (SIZE(2))
+
+TargetCellList ::= SEQUENCE (SIZE(1..maxnoofCHOcells)) OF TargetCellList-Item
+
+TargetCellList-Item ::= SEQUENCE {
+	target-cell								NRCGI,
+	iE-Extensions							ProtocolExtensionContainer { { TargetCellList-Item-ExtIEs} } OPTIONAL
+}
+
+TargetCellList-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TDD-Info ::= SEQUENCE {
+	nRFreqInfo							NRFreqInfo,
+	transmission-Bandwidth			Transmission-Bandwidth,
+	iE-Extensions				ProtocolExtensionContainer { {TDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+TDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ID	id-IntendedTDD-DL-ULConfig	CRITICALITY ignore	EXTENSION	IntendedTDD-DL-ULConfig	PRESENCE optional}|
+	{ID id-TDD-UL-DLConfigCommonNR	CRITICALITY ignore	EXTENSION TDD-UL-DLConfigCommonNR	PRESENCE optional }|
+	{ID id-CarrierList				CRITICALITY ignore	EXTENSION NRCarrierList				PRESENCE optional },
+	...
+}
+
+TDD-UL-DLConfigCommonNR ::= OCTET STRING
+
+TimeReferenceInformation ::= SEQUENCE {
+	referenceTime					ReferenceTime,
+	referenceSFN					ReferenceSFN,
+	uncertainty						Uncertainty,
+	timeInformationType				TimeInformationType,
+	iE-Extensions		ProtocolExtensionContainer { {TimeReferenceInformation-ExtIEs} }	OPTIONAL
+}
+
+TimeReferenceInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TimeInformationType ::= ENUMERATED {localClock}
+
+TimeStamp ::= SEQUENCE {
+	systemFrameNumber		SystemFrameNumber,
+	slotIndex				TimeStampSlotIndex,
+	measurementTime			SFNInitialisationTime	OPTIONAL,
+	iE-Extension			ProtocolExtensionContainer { { TimeStamp-ExtIEs} }	OPTIONAL
+}
+
+TimeStamp-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TimeStampSlotIndex ::= CHOICE {
+	sCS-15			INTEGER(0..9),
+	sCS-30			INTEGER(0..19),
+	sCS-60			INTEGER(0..39),
+	sCS-120			INTEGER(0..79),
+	choice-extension		ProtocolIE-SingleContainer { { TimeStampSlotIndex-ExtIEs} }
+}
+
+TimeStampSlotIndex-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+TimeToWait ::= ENUMERATED {v1s, v2s, v5s, v10s, v20s, v60s, ...}
+
+TimingMeasurementQuality ::= SEQUENCE {
+	measurementQuality		INTEGER(0..31),
+	resolution				ENUMERATED{m0dot1, m1, m10, m30, ...},
+	iE-Extensions		ProtocolExtensionContainer { { TimingMeasurementQuality-ExtIEs} }	OPTIONAL
+}
+
+TimingMeasurementQuality-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TNLAssociationUsage ::= ENUMERATED {
+	ue,
+	non-ue,
+	both, 
+	...
+}
+
+TNLCapacityIndicator::= SEQUENCE {
+	dLTNLOfferedCapacity		INTEGER (1.. 16777216,...),
+	dLTNLAvailableCapacity		INTEGER (0.. 100,...),
+	uLTNLOfferedCapacity		INTEGER (1.. 16777216,...),
+	uLTNLAvailableCapacity		INTEGER (0.. 100,...),
+	iE-Extensions	ProtocolExtensionContainer { { TNLCapacityIndicator-ExtIEs} } OPTIONAL
+}
+
+TNLCapacityIndicator-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TraceActivation ::= SEQUENCE {
+	traceID								TraceID,
+	interfacesToTrace					InterfacesToTrace,
+	traceDepth							TraceDepth,
+	traceCollectionEntityIPAddress		TransportLayerAddress,
+	iE-Extensions		ProtocolExtensionContainer { {TraceActivation-ExtIEs} }	OPTIONAL
+}
+
+TraceActivation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ID id-mdtConfiguration	CRITICALITY ignore	EXTENSION	MDTConfiguration		PRESENCE optional}|
+	{ID id-TraceCollectionEntityURI	CRITICALITY ignore	EXTENSION URI-address		PRESENCE optional	},
+	...
+}
+
+TraceDepth ::= ENUMERATED { 
+	minimum,
+	medium,
+	maximum,
+	minimumWithoutVendorSpecificExtension,
+	mediumWithoutVendorSpecificExtension,
+	maximumWithoutVendorSpecificExtension,
+	...
+}
+
+TraceID ::= OCTET STRING (SIZE(8))
+
+TrafficMappingInfo	::= CHOICE {
+	iPtolayer2TrafficMappingInfo					IPtolayer2TrafficMappingInfo,
+	bAPlayerBHRLCchannelMappingInfo					BAPlayerBHRLCchannelMappingInfo,
+	choice-extension								ProtocolIE-SingleContainer { { TrafficMappingInfo-ExtIEs} }
+}
+
+TrafficMappingInfo-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+TransportLayerAddress		::= BIT STRING (SIZE(1..160, ...))
+
+TransactionID				::= INTEGER (0..255, ...)
+
+Transmission-Bandwidth ::= SEQUENCE {
+	nRSCS	NRSCS,
+	nRNRB	NRNRB,
+	iE-Extensions				ProtocolExtensionContainer { { Transmission-Bandwidth-ExtIEs} } OPTIONAL,
+	...
+}
+
+Transmission-Bandwidth-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TransmissionComb ::= CHOICE {
+	n2    SEQUENCE {
+            combOffset-n2              INTEGER (0..1),
+            cyclicShift-n2             INTEGER (0..7)
+        },
+    n4    SEQUENCE {
+            combOffset-n4              INTEGER (0..3),
+            cyclicShift-n4             INTEGER (0..11)
+        },
+	choice-extension				ProtocolIE-SingleContainer { { TransmissionComb-ExtIEs} }
+}
+TransmissionComb-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+TransmissionCombPos ::= CHOICE {
+	n2    SEQUENCE {
+            combOffset-n2              INTEGER (0..1),
+            cyclicShift-n2             INTEGER (0..7)
+        },
+    n4    SEQUENCE {
+            combOffset-n4              INTEGER (0..3),
+            cyclicShift-n4             INTEGER (0..11)
+        },
+    n8    SEQUENCE {
+            combOffset-n8              INTEGER (0..7),
+            cyclicShift-n8             INTEGER (0..5)
+        },
+
+	choice-extension				ProtocolIE-SingleContainer { { TransmissionCombPos-ExtIEs} }
+}
+TransmissionCombPos-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+Transport-UP-Layer-Address-Info-To-Add-List	::= SEQUENCE (SIZE(1.. maxnoofTLAs)) OF Transport-UP-Layer-Address-Info-To-Add-Item
+
+Transport-UP-Layer-Address-Info-To-Add-Item ::= SEQUENCE {
+	iP-SecTransportLayerAddress		TransportLayerAddress,
+	gTPTransportLayerAddressToAdd			GTPTLAs							OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { Transport-UP-Layer-Address-Info-To-Add-ItemExtIEs } }	OPTIONAL
+}
+
+Transport-UP-Layer-Address-Info-To-Add-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { 
+	...
+}
+
+Transport-UP-Layer-Address-Info-To-Remove-List	::= SEQUENCE (SIZE(1.. maxnoofTLAs)) OF Transport-UP-Layer-Address-Info-To-Remove-Item
+
+Transport-UP-Layer-Address-Info-To-Remove-Item ::= SEQUENCE {
+	iP-SecTransportLayerAddress		TransportLayerAddress,
+	gTPTransportLayerAddressToRemove			GTPTLAs							OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { Transport-UP-Layer-Address-Info-To-Remove-ItemExtIEs } }	OPTIONAL
+}
+
+Transport-UP-Layer-Address-Info-To-Remove-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { 
+	...
+}
+
+TransmissionActionIndicator ::= ENUMERATED {stop, ..., restart }
+
+TRPID ::= INTEGER (0.. maxnoofTRPs, ...)
+
+TRPInformation ::= SEQUENCE {
+	tRPID							TRPID,
+	tRPInformationTypeResponseList	TRPInformationTypeResponseList,
+	iE-Extensions					ProtocolExtensionContainer { { TRPInformation-ExtIEs } }		OPTIONAL
+}
+
+TRPInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TRPInformationItem ::= SEQUENCE {
+	tRPInformation					TRPInformation,
+	iE-Extensions					ProtocolExtensionContainer { { TRPInformationItem-ExtIEs } }	OPTIONAL
+}
+
+TRPInformationItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { 
+	...
+}
+
+TRPInformationTypeItem ::= ENUMERATED { 
+		nrPCI,
+		nG-RAN-CGI,
+		arfcn, 
+		pRSConfig,
+		sSBConfig,
+		sFNInitTime,
+		spatialDirectInfo,
+		geoCoord,
+...}
+
+
+TRPInformationTypeResponseList ::= SEQUENCE (SIZE(1.. maxnoofTRPInfoTypes)) OF TRPInformationTypeResponseItem 
+
+TRPInformationTypeResponseItem ::= CHOICE {
+	pCI-NR								NRPCI,
+	nG-RAN-CGI							NRCGI,
+	nRARFCN								INTEGER (0..maxNRARFCN),
+	pRSConfiguration					PRSConfiguration,
+	sSBinformation						SSBInformation,
+	sFNInitialisationTime				SFNInitialisationTime,
+	spatialDirectionInformation			SpatialDirectionInformation,
+	geographicalCoordinates				GeographicalCoordinates,
+	choice-extension					ProtocolIE-SingleContainer { { TRPInformationTypeResponseItem-ExtIEs} }
+}
+
+TRPInformationTypeResponseItem-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+
+TRPList ::= SEQUENCE (SIZE(1.. maxnoofTRPs)) OF TRPListItem
+
+TRPListItem ::= SEQUENCE {
+	tRPID							TRPID,
+	iE-Extensions					ProtocolExtensionContainer { { TRPListItem-ExtIEs } }	OPTIONAL
+}
+
+TRPListItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { 
+	...
+}
+
+TRPMeasurementQuality ::= SEQUENCE {
+	tRPmeasurementQuality-Item 	TRPMeasurementQuality-Item,
+	iE-Extensions				ProtocolExtensionContainer { {TRPMeasurementQuality-ExtIEs} } OPTIONAL
+}
+
+TRPMeasurementQuality-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TRPMeasurementQuality-Item ::= CHOICE {
+	timingMeasurementQuality	TimingMeasurementQuality,
+	angleMeasurementQuality		AngleMeasurementQuality,
+	choice-extension			ProtocolIE-SingleContainer { { TRPMeasurementQuality-Item-ExtIEs } }
+}
+
+TRPMeasurementQuality-Item-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+TRP-MeasurementRequestList ::= SEQUENCE (SIZE (1..maxNoOfMeasTRPs)) OF TRP-MeasurementRequestItem
+
+TRP-MeasurementRequestItem ::= SEQUENCE {
+	tRPID							TRPID, 
+	search-window-information		Search-window-information	OPTIONAL, 
+	iE-extensions		ProtocolExtensionContainer { { TRP-MeasurementRequestItem-ExtIEs } } OPTIONAL
+}
+
+TRP-MeasurementRequestItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TRPPositionDefinitionType ::= CHOICE {
+	direct		TRPPositionDirect,
+	referenced	TRPPositionReferenced,
+	choice-extension							ProtocolIE-SingleContainer { { TRPPositionDefinitionType-ExtIEs } }
+}
+
+TRPPositionDefinitionType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+TRPPositionDirect ::= SEQUENCE {
+	accuracy	TRPPositionDirectAccuracy,
+	iE-extensions		ProtocolExtensionContainer { { TRPPositionDirect-ExtIEs } }	OPTIONAL
+}
+
+TRPPositionDirect-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TRPPositionDirectAccuracy ::= CHOICE {
+	tRPPosition				AccessPointPosition,
+	tRPHAposition			NGRANHighAccuracyAccessPointPosition,
+	choice-extension		ProtocolIE-SingleContainer { { TRPPositionDirectAccuracy-ExtIEs } }
+}
+
+TRPPositionDirectAccuracy-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+TRPPositionReferenced ::= SEQUENCE {
+	referencePoint					ReferencePoint,
+	referencePointType				TRPReferencePointType,
+	iE-extensions					ProtocolExtensionContainer { { TRPPositionReferenced-ExtIEs } } 	OPTIONAL
+}
+
+TRPPositionReferenced-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TRPReferencePointType ::= CHOICE {
+	tRPPositionRelativeGeodetic			RelativeGeodeticLocation,
+	tRPPositionRelativeCartesian		RelativeCartesianLocation,
+	choice-extension					ProtocolIE-SingleContainer { { TRPReferencePointType-ExtIEs } }
+}
+
+TRPReferencePointType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+TypeOfError ::= ENUMERATED {
+	not-understood,
+	missing,
+	...
+}
+
+Transport-Layer-Address-Info ::= SEQUENCE {
+	transport-UP-Layer-Address-Info-To-Add-List		Transport-UP-Layer-Address-Info-To-Add-List							OPTIONAL,
+	transport-UP-Layer-Address-Info-To-Remove-List	Transport-UP-Layer-Address-Info-To-Remove-List					OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { Transport-Layer-Address-Info-ExtIEs } }								OPTIONAL
+}
+
+Transport-Layer-Address-Info-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TSCAssistanceInformation ::= SEQUENCE {
+	periodicity				Periodicity,
+	burstArrivalTime		BurstArrivalTime													OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer { {TSCAssistanceInformation-ExtIEs} }	OPTIONAL,
+	...
+}
+
+TSCAssistanceInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TSCTrafficCharacteristics ::= SEQUENCE {
+	tSCAssistanceInformationDL		TSCAssistanceInformation								OPTIONAL,
+	tSCAssistanceInformationUL		TSCAssistanceInformation								OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { {TSCTrafficCharacteristics-ExtIEs} }	OPTIONAL,
+	...
+}
+
+TSCTrafficCharacteristics-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+-- U
+UAC-Assistance-Info ::= SEQUENCE {
+	uACPLMN-List		UACPLMN-List,
+	iE-Extensions		ProtocolExtensionContainer { { UAC-Assistance-InfoExtIEs} } OPTIONAL
+}
+
+UAC-Assistance-InfoExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UACPLMN-List ::= SEQUENCE (SIZE(1..maxnoofUACPLMNs)) OF UACPLMN-Item
+
+UACPLMN-Item::= SEQUENCE {
+	pLMNIdentity				PLMN-Identity,
+	uACType-List				UACType-List,	iE-Extensions		ProtocolExtensionContainer { { UACPLMN-Item-ExtIEs} } OPTIONAL
+}
+
+UACPLMN-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-NID	CRITICALITY ignore	EXTENSION NID	PRESENCE optional },
+	...
+}
+
+UACType-List ::= SEQUENCE (SIZE(1..maxnoofUACperPLMN)) OF UACType-Item
+
+UACType-Item::= SEQUENCE {
+	uACReductionIndication 		UACReductionIndication,
+	uACCategoryType				UACCategoryType,
+	iE-Extensions		ProtocolExtensionContainer { { UACType-Item-ExtIEs } } OPTIONAL
+}
+
+UACType-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UACCategoryType ::= CHOICE {
+	uACstandardized				UACAction,
+	uACOperatorDefined			UACOperatorDefined, 
+	choice-extension			ProtocolIE-SingleContainer { { UACCategoryType-ExtIEs } }
+}
+
+UACCategoryType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+UACOperatorDefined ::= SEQUENCE {
+	accessCategory					INTEGER (32..63,...),
+	accessIdentity					BIT STRING (SIZE(7)),
+	iE-Extensions		ProtocolExtensionContainer { { UACOperatorDefined-ExtIEs} } OPTIONAL
+}
+
+UACOperatorDefined-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+UACAction ::= ENUMERATED {
+	reject-non-emergency-mo-dt,
+	reject-rrc-cr-signalling,
+	permit-emergency-sessions-and-mobile-terminated-services-only,
+	permit-high-priority-sessions-and-mobile-terminated-services-only,
+	...
+}
+
+UACReductionIndication ::= INTEGER (0..100)
+
+
+UE-associatedLogicalF1-ConnectionItem ::= SEQUENCE {
+	gNB-CU-UE-F1AP-ID		GNB-CU-UE-F1AP-ID	 OPTIONAL,
+	gNB-DU-UE-F1AP-ID		GNB-DU-UE-F1AP-ID	 OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { { UE-associatedLogicalF1-ConnectionItemExtIEs} } OPTIONAL,
+	...
+}
+
+UEAssistanceInformation ::= OCTET STRING
+
+UEAssistanceInformationEUTRA ::= OCTET STRING
+
+UE-associatedLogicalF1-ConnectionItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UE-CapabilityRAT-ContainerList::= OCTET STRING
+
+UEContextNotRetrievable ::= ENUMERATED {true, ...}
+
+UEIdentityIndexValue ::= CHOICE {
+	indexLength10			BIT STRING (SIZE (10)),
+	choice-extension		ProtocolIE-SingleContainer { {UEIdentityIndexValueChoice-ExtIEs} }	
+}
+
+UEIdentityIndexValueChoice-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+UL-AoA ::= SEQUENCE {
+	azimuthAoA				INTEGER (0..3599),
+	zenithAoA				INTEGER (0..1799)	OPTIONAL,
+	angleCoordinateSystem	ENUMERATED {lCS, gCS}	OPTIONAL,
+	iE-extensions			ProtocolExtensionContainer { { UL-AoA-ExtIEs } }
+}
+
+UL-AoA-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UL-BH-Non-UP-Traffic-Mapping ::= SEQUENCE {
+	uL-BH-Non-UP-Traffic-Mapping-List			UL-BH-Non-UP-Traffic-Mapping-List,
+	iE-Extensions	ProtocolExtensionContainer { { UL-BH-Non-UP-Traffic-Mapping-ExtIEs } } OPTIONAL
+}
+
+UL-BH-Non-UP-Traffic-Mapping-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UL-BH-Non-UP-Traffic-Mapping-List ::= SEQUENCE (SIZE(1..maxnoofNonUPTrafficMappings)) OF UL-BH-Non-UP-Traffic-Mapping-Item
+
+UL-BH-Non-UP-Traffic-Mapping-Item ::= SEQUENCE {
+	nonUPTrafficType				NonUPTrafficType,
+	bHInfo						BHInfo,
+	iE-Extensions					ProtocolExtensionContainer { { UL-BH-Non-UP-Traffic-Mapping-ItemExtIEs } }	OPTIONAL
+}
+
+UL-BH-Non-UP-Traffic-Mapping-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { 
+	...
+}
+
+ULConfiguration ::= SEQUENCE	{
+	uLUEConfiguration		ULUEConfiguration,
+	iE-Extensions	ProtocolExtensionContainer { { ULConfigurationExtIEs } }	OPTIONAL,
+	...
+}
+ULConfigurationExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UL-RTOA-Measurement ::= SEQUENCE {
+	uL-RTOA-MeasurementItem		UL-RTOA-MeasurementItem,
+	additionalPath-List			AdditionalPath-List OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { UL-RTOA-Measurement-ExtIEs } }	OPTIONAL
+}
+
+UL-RTOA-Measurement-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UL-RTOA-MeasurementItem ::= CHOICE {
+	k0					INTEGER (0..1970049),
+	k1					INTEGER (0..985025),
+	k2					INTEGER (0..492513),
+	k3					INTEGER (0..246257),
+	k4					INTEGER (0..123129),
+	k5					INTEGER (0..61565),	 
+	choice-extension			ProtocolIE-SingleContainer { { UL-RTOA-MeasurementItem-ExtIEs } }
+}
+
+UL-RTOA-MeasurementItem-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+UL-SRS-RSRP ::= INTEGER (0..127)
+
+ULUEConfiguration ::= ENUMERATED {no-data, shared, only, ...}
+
+UL-UP-TNL-Information-to-Update-List-Item	::= SEQUENCE {
+	uLUPTNLInformation		UPTransportLayerInformation,
+	newULUPTNLInformation	UPTransportLayerInformation		OPTIONAL,
+	bHInfo	BHInfo,
+	iE-Extensions	ProtocolExtensionContainer { { UL-UP-TNL-Information-to-Update-List-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+UL-UP-TNL-Information-to-Update-List-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UL-UP-TNL-Address-to-Update-List-Item	::= SEQUENCE {
+	oldIPAdress						TransportLayerAddress,
+	newIPAdress						TransportLayerAddress,
+	iE-Extensions	ProtocolExtensionContainer { { UL-UP-TNL-Address-to-Update-List-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+UL-UP-TNL-Address-to-Update-List-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ULUPTNLInformation-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofULUPTNLInformation)) OF ULUPTNLInformation-ToBeSetup-Item
+
+ULUPTNLInformation-ToBeSetup-Item ::=SEQUENCE {
+	uLUPTNLInformation		UPTransportLayerInformation, 
+	iE-Extensions	ProtocolExtensionContainer { { ULUPTNLInformation-ToBeSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+ULUPTNLInformation-ToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-BHInfo		CRITICALITY ignore	EXTENSION BHInfo		PRESENCE optional	},
+	...
+}
+
+Uncertainty ::= INTEGER (0..32767, ...)
+
+UplinkChannelBW-PerSCS-List ::= SEQUENCE (SIZE (1..maxnoSCSs)) OF SCS-SpecificCarrier
+
+UplinkTxDirectCurrentListInformation ::= OCTET STRING
+
+UPTransportLayerInformation		::= CHOICE {
+	gTPTunnel		GTPTunnel,
+	choice-extension			ProtocolIE-SingleContainer { { UPTransportLayerInformation-ExtIEs} }
+}
+
+UPTransportLayerInformation-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+URI-address ::= VisibleString
+
+-- V
+
+VictimgNBSetID ::= SEQUENCE {
+	victimgNBSetID		GNBSetID,
+	iE-Extensions	ProtocolExtensionContainer { { VictimgNBSetID-ExtIEs } }		OPTIONAL
+}
+
+VictimgNBSetID-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+VehicleUE ::= ENUMERATED { 
+	authorized,
+	not-authorized,
+	...
+}
+
+PedestrianUE ::= ENUMERATED { 
+	authorized,
+	not-authorized,
+	...
+}
+
+-- W
+
+-- X
+
+-- Y
+
+-- Z
+
+END
+-- ASN1STOP 
+
+-- ASN1START 
+-- **************************************************************
+--
+-- Common definitions
+--
+-- **************************************************************
+
+F1AP-CommonDataTypes {
+itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
+ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-CommonDataTypes (3) }
+
+DEFINITIONS AUTOMATIC TAGS ::= 
+
+BEGIN
+
+Criticality		::= ENUMERATED { reject, ignore, notify }
+
+Presence		::= ENUMERATED { optional, conditional, mandatory }
+
+PrivateIE-ID	::= CHOICE {
+	local				INTEGER (0..65535),
+	global				OBJECT IDENTIFIER
+}
+
+ProcedureCode		::= INTEGER (0..255)
+
+ProtocolExtensionID	::= INTEGER (0..65535)
+
+ProtocolIE-ID		::= INTEGER (0..65535)
+
+TriggeringMessage	::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome }
+
+END
+-- ASN1STOP 
+
+-- ASN1START 
+-- **************************************************************
+--
+-- Constant definitions
+--
+-- **************************************************************
+
+F1AP-Constants { 
+itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
+ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-Constants (4) } 
+
+DEFINITIONS AUTOMATIC TAGS ::= 
+
+BEGIN
+
+-- **************************************************************
+--
+-- IE parameter types from other modules.
+--
+-- **************************************************************
+
+IMPORTS
+	ProcedureCode,
+	ProtocolIE-ID
+
+FROM F1AP-CommonDataTypes;
+
+
+-- **************************************************************
+--
+-- Elementary Procedures
+--
+-- **************************************************************
+
+id-Reset									ProcedureCode ::= 0
+id-F1Setup									ProcedureCode ::= 1
+id-ErrorIndication							ProcedureCode ::= 2
+id-gNBDUConfigurationUpdate					ProcedureCode ::= 3
+id-gNBCUConfigurationUpdate					ProcedureCode ::= 4
+id-UEContextSetup							ProcedureCode ::= 5
+id-UEContextRelease							ProcedureCode ::= 6
+id-UEContextModification					ProcedureCode ::= 7
+id-UEContextModificationRequired			ProcedureCode ::= 8
+id-UEMobilityCommand						ProcedureCode ::= 9
+id-UEContextReleaseRequest					ProcedureCode ::= 10
+id-InitialULRRCMessageTransfer				ProcedureCode ::= 11
+id-DLRRCMessageTransfer						ProcedureCode ::= 12
+id-ULRRCMessageTransfer						ProcedureCode ::= 13
+id-privateMessage							ProcedureCode ::= 14
+id-UEInactivityNotification					ProcedureCode ::= 15
+id-GNBDUResourceCoordination				ProcedureCode ::= 16
+id-SystemInformationDeliveryCommand			ProcedureCode ::= 17
+id-Paging									ProcedureCode ::= 18
+id-Notify									ProcedureCode ::= 19
+id-WriteReplaceWarning						ProcedureCode ::= 20
+id-PWSCancel								ProcedureCode ::= 21
+id-PWSRestartIndication						ProcedureCode ::= 22
+id-PWSFailureIndication						ProcedureCode ::= 23
+id-GNBDUStatusIndication 					ProcedureCode ::= 24
+id-RRCDeliveryReport		 				ProcedureCode ::= 25
+id-F1Removal								ProcedureCode ::= 26
+id-NetworkAccessRateReduction				ProcedureCode ::= 27
+id-TraceStart								ProcedureCode ::= 28
+id-DeactivateTrace							ProcedureCode ::= 29
+id-DUCURadioInformationTransfer				ProcedureCode ::= 30
+id-CUDURadioInformationTransfer				ProcedureCode ::= 31
+id-BAPMappingConfiguration					ProcedureCode ::= 32
+id-GNBDUResourceConfiguration				ProcedureCode ::= 33
+id-IABTNLAddressAllocation					ProcedureCode ::= 34
+id-IABUPConfigurationUpdate					ProcedureCode ::= 35
+id-resourceStatusReportingInitiation		ProcedureCode ::= 36
+id-resourceStatusReporting					ProcedureCode ::= 37
+id-accessAndMobilityIndication				ProcedureCode ::= 38
+id-accessSuccess							ProcedureCode ::= 39
+id-cellTrafficTrace 						ProcedureCode ::= 40 
+id-PositioningMeasurementExchange			ProcedureCode ::= 41
+id-PositioningAssistanceInformationControl	ProcedureCode ::= 42
+id-PositioningAssistanceInformationFeedback	ProcedureCode ::= 43
+id-PositioningMeasurementReport				ProcedureCode ::= 44
+id-PositioningMeasurementAbort				ProcedureCode ::= 45
+id-PositioningMeasurementFailureIndication	ProcedureCode ::= 46
+id-PositioningMeasurementUpdate				ProcedureCode ::= 47
+id-TRPInformationExchange					ProcedureCode ::= 48
+id-PositioningInformationExchange			ProcedureCode ::= 49
+id-PositioningActivation					ProcedureCode ::= 50
+id-PositioningDeactivation					ProcedureCode ::= 51
+id-E-CIDMeasurementInitiation				ProcedureCode ::= 52
+id-E-CIDMeasurementFailureIndication		ProcedureCode ::= 53
+id-E-CIDMeasurementReport					ProcedureCode ::= 54
+id-E-CIDMeasurementTermination				ProcedureCode ::= 55
+id-PositioningInformationUpdate				ProcedureCode ::= 56
+id-ReferenceTimeInformationReport			ProcedureCode ::= 57
+id-ReferenceTimeInformationReportingControl	ProcedureCode ::= 58
+
+
+
+-- **************************************************************
+--
+-- Extension constants
+--
+-- **************************************************************
+
+maxPrivateIEs							INTEGER ::= 65535
+maxProtocolExtensions					INTEGER ::= 65535
+maxProtocolIEs							INTEGER ::= 65535
+-- **************************************************************
+--
+-- Lists
+--
+-- **************************************************************
+
+maxNRARFCN								INTEGER ::= 3279165
+maxnoofErrors							INTEGER ::= 256
+maxnoofIndividualF1ConnectionsToReset	INTEGER ::= 65536
+maxCellingNBDU							INTEGER ::= 512
+maxnoofSCells							INTEGER ::= 32
+maxnoofSRBs								INTEGER ::= 8
+maxnoofDRBs								INTEGER ::= 64
+maxnoofULUPTNLInformation				INTEGER ::= 2
+maxnoofDLUPTNLInformation				INTEGER ::= 2
+maxnoofBPLMNs							INTEGER ::= 6
+maxnoofCandidateSpCells					INTEGER ::= 64
+maxnoofPotentialSpCells					INTEGER ::= 64
+maxnoofNrCellBands						INTEGER ::= 32
+maxnoofSIBTypes							INTEGER ::= 32
+maxnoofSITypes							INTEGER ::= 32
+maxnoofPagingCells						INTEGER ::= 512
+maxnoofTNLAssociations					INTEGER ::= 32
+maxnoofQoSFlows							INTEGER ::= 64
+maxnoofSliceItems						INTEGER ::= 1024
+maxCellineNB							INTEGER ::= 256
+maxnoofExtendedBPLMNs					INTEGER ::= 6
+maxnoofUEIDs							INTEGER ::= 65536
+maxnoofBPLMNsNR							INTEGER ::= 12
+maxnoofUACPLMNs							INTEGER ::= 12
+maxnoofUACperPLMN						INTEGER ::= 64
+maxnoofAdditionalSIBs					INTEGER ::= 63
+maxnoofslots							INTEGER ::= 5120
+maxnoofTLAs								INTEGER ::=	16
+maxnoofGTPTLAs							INTEGER ::=	16
+maxnoofBHRLCChannels					INTEGER ::= 65536
+maxnoofRoutingEntries					INTEGER ::= 1024
+maxnoofIABSTCInfo						INTEGER ::= 45
+maxnoofSymbols							INTEGER ::= 14
+maxnoofServingCells						INTEGER ::= 32
+maxnoofDUFSlots							INTEGER ::= 320
+maxnoofHSNASlots						INTEGER ::= 5120
+maxnoofServedCellsIAB					INTEGER ::= 512 
+maxnoofChildIABNodes					INTEGER ::= 1024
+maxnoofNonUPTrafficMappings				INTEGER ::= 32
+maxnoofTLAsIAB							INTEGER ::= 1024
+maxnoofMappingEntries					INTEGER ::= 67108864
+maxnoofDSInfo							INTEGER ::= 64
+maxnoofEgressLinks						INTEGER ::= 2
+maxnoofULUPTNLInformationforIAB			INTEGER ::= 32678
+maxnoofUPTNLAddresses					INTEGER ::= 8
+maxnoofSLDRBs							INTEGER ::= 512
+maxnoofQoSParaSets						INTEGER ::= 8
+maxnoofPC5QoSFlows						INTEGER ::= 2048
+maxnoofSSBAreas							INTEGER ::=	64
+maxnoofPhysicalResourceBlocks			INTEGER ::= 275
+maxnoofPhysicalResourceBlocks-1			INTEGER ::= 274
+maxnoofPRACHconfigs						INTEGER ::= 16
+maxnoofRACHReports						INTEGER ::= 64
+maxnoofRLFReports						INTEGER ::= 64
+maxnoofAdditionalPDCPDuplicationTNL		INTEGER ::=	2
+maxnoofRLCDuplicationState				INTEGER ::=	3
+maxnoofCHOcells							INTEGER ::= 8
+maxnoofMDTPLMNs							INTEGER ::=	16
+maxnoofCAGsupported						INTEGER ::= 12
+maxnoofNIDsupported						INTEGER ::= 12
+maxnoofNRSCSs							INTEGER ::= 5
+maxnoofExtSliceItems					INTEGER ::= 65535 
+maxnoofPosMeas							INTEGER ::=	16384
+maxnoofTRPInfoTypes						INTEGER ::=	64 
+maxnoofTRPs								INTEGER ::=	65535 
+maxnoofSRSTriggerStates					INTEGER ::= 3
+maxnoofSpatialRelations					INTEGER ::= 64
+maxnoBcastCell							INTEGER ::= 16384
+maxnoofAngleInfo						INTEGER ::= 65535
+maxnooflcs-gcs-translation				INTEGER ::= 3
+maxnoofPath								INTEGER ::= 2
+maxnoofMeasE-CID						INTEGER ::= 64
+maxnoofSSBs								INTEGER ::= 255
+maxnoSRS-ResourceSets					INTEGER ::= 16
+maxnoSRS-ResourcePerSet					INTEGER ::= 16
+maxnoSRS-Carriers						INTEGER ::= 32
+maxnoSCSs								INTEGER ::= 5
+maxnoSRS-Resources						INTEGER ::= 64
+maxnoSRS-PosResources					INTEGER ::= 64
+maxnoSRS-PosResourceSets				INTEGER ::= 16
+maxnoSRS-PosResourcePerSet				INTEGER ::= 16
+maxnoofPRS-ResourceSets					INTEGER ::= 2
+maxnoofPRS-ResourcesPerSet				INTEGER ::= 64
+maxNoOfMeasTRPs							INTEGER ::= 64
+maxnoofPRSresourceSets					INTEGER ::= 8
+maxnoofPRSresources						INTEGER ::= 64
+
+
+
+-- **************************************************************
+--
+-- IEs
+--
+-- **************************************************************
+
+id-Cause											ProtocolIE-ID ::= 0
+id-Cells-Failed-to-be-Activated-List				ProtocolIE-ID ::= 1
+id-Cells-Failed-to-be-Activated-List-Item			ProtocolIE-ID ::= 2
+id-Cells-to-be-Activated-List						ProtocolIE-ID ::= 3
+id-Cells-to-be-Activated-List-Item					ProtocolIE-ID ::= 4
+id-Cells-to-be-Deactivated-List						ProtocolIE-ID ::= 5
+id-Cells-to-be-Deactivated-List-Item				ProtocolIE-ID ::= 6
+id-CriticalityDiagnostics							ProtocolIE-ID ::= 7
+id-CUtoDURRCInformation								ProtocolIE-ID ::= 9
+id-DRBs-FailedToBeModified-Item						ProtocolIE-ID ::= 12
+id-DRBs-FailedToBeModified-List						ProtocolIE-ID ::= 13
+id-DRBs-FailedToBeSetup-Item						ProtocolIE-ID ::= 14
+id-DRBs-FailedToBeSetup-List						ProtocolIE-ID ::= 15
+id-DRBs-FailedToBeSetupMod-Item						ProtocolIE-ID ::= 16
+id-DRBs-FailedToBeSetupMod-List						ProtocolIE-ID ::= 17
+id-DRBs-ModifiedConf-Item							ProtocolIE-ID ::= 18
+id-DRBs-ModifiedConf-List							ProtocolIE-ID ::= 19
+id-DRBs-Modified-Item								ProtocolIE-ID ::= 20
+id-DRBs-Modified-List								ProtocolIE-ID ::= 21
+id-DRBs-Required-ToBeModified-Item					ProtocolIE-ID ::= 22
+id-DRBs-Required-ToBeModified-List					ProtocolIE-ID ::= 23
+id-DRBs-Required-ToBeReleased-Item					ProtocolIE-ID ::= 24
+id-DRBs-Required-ToBeReleased-List					ProtocolIE-ID ::= 25
+id-DRBs-Setup-Item									ProtocolIE-ID ::= 26
+id-DRBs-Setup-List									ProtocolIE-ID ::= 27
+id-DRBs-SetupMod-Item								ProtocolIE-ID ::= 28
+id-DRBs-SetupMod-List								ProtocolIE-ID ::= 29
+id-DRBs-ToBeModified-Item							ProtocolIE-ID ::= 30
+id-DRBs-ToBeModified-List							ProtocolIE-ID ::= 31
+id-DRBs-ToBeReleased-Item							ProtocolIE-ID ::= 32
+id-DRBs-ToBeReleased-List							ProtocolIE-ID ::= 33
+id-DRBs-ToBeSetup-Item								ProtocolIE-ID ::= 34
+id-DRBs-ToBeSetup-List								ProtocolIE-ID ::= 35
+id-DRBs-ToBeSetupMod-Item							ProtocolIE-ID ::= 36
+id-DRBs-ToBeSetupMod-List							ProtocolIE-ID ::= 37
+id-DRXCycle											ProtocolIE-ID ::= 38
+id-DUtoCURRCInformation								ProtocolIE-ID ::= 39
+id-gNB-CU-UE-F1AP-ID								ProtocolIE-ID ::= 40
+id-gNB-DU-UE-F1AP-ID								ProtocolIE-ID ::= 41
+id-gNB-DU-ID										ProtocolIE-ID ::= 42
+id-GNB-DU-Served-Cells-Item							ProtocolIE-ID ::= 43
+id-gNB-DU-Served-Cells-List							ProtocolIE-ID ::= 44
+id-gNB-DU-Name										ProtocolIE-ID ::= 45
+id-NRCellID											ProtocolIE-ID ::= 46
+id-oldgNB-DU-UE-F1AP-ID								ProtocolIE-ID ::= 47
+id-ResetType										ProtocolIE-ID ::= 48
+id-ResourceCoordinationTransferContainer			ProtocolIE-ID ::= 49
+id-RRCContainer										ProtocolIE-ID ::= 50
+id-SCell-ToBeRemoved-Item							ProtocolIE-ID ::= 51
+id-SCell-ToBeRemoved-List							ProtocolIE-ID ::= 52
+id-SCell-ToBeSetup-Item								ProtocolIE-ID ::= 53
+id-SCell-ToBeSetup-List								ProtocolIE-ID ::= 54
+id-SCell-ToBeSetupMod-Item							ProtocolIE-ID ::= 55
+id-SCell-ToBeSetupMod-List							ProtocolIE-ID ::= 56
+id-Served-Cells-To-Add-Item							ProtocolIE-ID ::= 57
+id-Served-Cells-To-Add-List							ProtocolIE-ID ::= 58
+id-Served-Cells-To-Delete-Item						ProtocolIE-ID ::= 59
+id-Served-Cells-To-Delete-List						ProtocolIE-ID ::= 60
+id-Served-Cells-To-Modify-Item						ProtocolIE-ID ::= 61
+id-Served-Cells-To-Modify-List						ProtocolIE-ID ::= 62
+id-SpCell-ID										ProtocolIE-ID ::= 63
+id-SRBID											ProtocolIE-ID ::= 64
+id-SRBs-FailedToBeSetup-Item						ProtocolIE-ID ::= 65
+id-SRBs-FailedToBeSetup-List						ProtocolIE-ID ::= 66
+id-SRBs-FailedToBeSetupMod-Item						ProtocolIE-ID ::= 67
+id-SRBs-FailedToBeSetupMod-List						ProtocolIE-ID ::= 68
+id-SRBs-Required-ToBeReleased-Item					ProtocolIE-ID ::= 69
+id-SRBs-Required-ToBeReleased-List					ProtocolIE-ID ::= 70
+id-SRBs-ToBeReleased-Item							ProtocolIE-ID ::= 71
+id-SRBs-ToBeReleased-List							ProtocolIE-ID ::= 72
+id-SRBs-ToBeSetup-Item								ProtocolIE-ID ::= 73
+id-SRBs-ToBeSetup-List								ProtocolIE-ID ::= 74
+id-SRBs-ToBeSetupMod-Item							ProtocolIE-ID ::= 75
+id-SRBs-ToBeSetupMod-List							ProtocolIE-ID ::= 76
+id-TimeToWait										ProtocolIE-ID ::= 77
+id-TransactionID									ProtocolIE-ID ::= 78
+id-TransmissionActionIndicator						ProtocolIE-ID ::= 79
+id-UE-associatedLogicalF1-ConnectionItem 			ProtocolIE-ID ::= 80
+id-UE-associatedLogicalF1-ConnectionListResAck		ProtocolIE-ID ::= 81
+id-gNB-CU-Name										ProtocolIE-ID ::= 82
+id-SCell-FailedtoSetup-List							ProtocolIE-ID ::= 83
+id-SCell-FailedtoSetup-Item							ProtocolIE-ID ::= 84
+id-SCell-FailedtoSetupMod-List						ProtocolIE-ID ::= 85
+id-SCell-FailedtoSetupMod-Item						ProtocolIE-ID ::= 86
+id-RRCReconfigurationCompleteIndicator 				ProtocolIE-ID ::= 87
+id-Cells-Status-Item								ProtocolIE-ID ::= 88
+id-Cells-Status-List								ProtocolIE-ID ::= 89
+id-Candidate-SpCell-List							ProtocolIE-ID ::= 90
+id-Candidate-SpCell-Item							ProtocolIE-ID ::= 91
+id-Potential-SpCell-List							ProtocolIE-ID ::= 92
+id-Potential-SpCell-Item							ProtocolIE-ID ::= 93
+id-FullConfiguration								ProtocolIE-ID ::= 94
+id-C-RNTI											ProtocolIE-ID ::= 95
+id-SpCellULConfigured								ProtocolIE-ID ::= 96
+id-InactivityMonitoringRequest						ProtocolIE-ID ::= 97
+id-InactivityMonitoringResponse						ProtocolIE-ID ::= 98
+id-DRB-Activity-Item								ProtocolIE-ID ::= 99
+id-DRB-Activity-List								ProtocolIE-ID ::= 100
+id-EUTRA-NR-CellResourceCoordinationReq-Container 		ProtocolIE-ID ::= 101
+id-EUTRA-NR-CellResourceCoordinationReqAck-Container 	ProtocolIE-ID ::= 102
+id-Protected-EUTRA-Resources-List					ProtocolIE-ID ::= 105
+id-RequestType 										ProtocolIE-ID ::= 106
+id-ServCellIndex									ProtocolIE-ID ::= 107 
+id-RAT-FrequencyPriorityInformation					ProtocolIE-ID ::= 108
+id-ExecuteDuplication								ProtocolIE-ID ::= 109
+id-NRCGI											ProtocolIE-ID ::= 111
+id-PagingCell-Item									ProtocolIE-ID ::= 112
+id-PagingCell-List									ProtocolIE-ID ::= 113
+id-PagingDRX										ProtocolIE-ID ::= 114
+id-PagingPriority 									ProtocolIE-ID ::= 115
+id-SItype-List										ProtocolIE-ID ::= 116
+id-UEIdentityIndexValue								ProtocolIE-ID ::= 117
+id-gNB-CUSystemInformation							ProtocolIE-ID ::= 118
+id-HandoverPreparationInformation					ProtocolIE-ID ::= 119
+id-GNB-CU-TNL-Association-To-Add-Item				ProtocolIE-ID ::= 120
+id-GNB-CU-TNL-Association-To-Add-List				ProtocolIE-ID ::= 121
+id-GNB-CU-TNL-Association-To-Remove-Item			ProtocolIE-ID ::= 122
+id-GNB-CU-TNL-Association-To-Remove-List			ProtocolIE-ID ::= 123
+id-GNB-CU-TNL-Association-To-Update-Item			ProtocolIE-ID ::= 124
+id-GNB-CU-TNL-Association-To-Update-List			ProtocolIE-ID ::= 125
+id-MaskedIMEISV										ProtocolIE-ID ::= 126
+id-PagingIdentity									ProtocolIE-ID ::= 127
+id-DUtoCURRCContainer								ProtocolIE-ID ::= 128
+id-Cells-to-be-Barred-List							ProtocolIE-ID ::= 129
+id-Cells-to-be-Barred-Item							ProtocolIE-ID ::= 130
+id-TAISliceSupportList								ProtocolIE-ID ::= 131
+id-GNB-CU-TNL-Association-Setup-List				ProtocolIE-ID ::= 132
+id-GNB-CU-TNL-Association-Setup-Item				ProtocolIE-ID ::= 133
+id-GNB-CU-TNL-Association-Failed-To-Setup-List		ProtocolIE-ID ::= 134
+id-GNB-CU-TNL-Association-Failed-To-Setup-Item		ProtocolIE-ID ::= 135
+id-DRB-Notify-Item									ProtocolIE-ID ::= 136
+id-DRB-Notify-List									ProtocolIE-ID ::= 137
+id-NotficationControl								ProtocolIE-ID ::= 138
+id-RANAC											ProtocolIE-ID ::= 139
+id-PWSSystemInformation								ProtocolIE-ID ::= 140
+id-RepetitionPeriod									ProtocolIE-ID ::= 141
+id-NumberofBroadcastRequest							ProtocolIE-ID ::= 142
+id-Cells-To-Be-Broadcast-List						ProtocolIE-ID ::= 144
+id-Cells-To-Be-Broadcast-Item						ProtocolIE-ID ::= 145
+id-Cells-Broadcast-Completed-List 					ProtocolIE-ID ::= 146
+id-Cells-Broadcast-Completed-Item 					ProtocolIE-ID ::= 147
+id-Broadcast-To-Be-Cancelled-List 					ProtocolIE-ID ::= 148
+id-Broadcast-To-Be-Cancelled-Item 					ProtocolIE-ID ::= 149
+id-Cells-Broadcast-Cancelled-List 					ProtocolIE-ID ::= 150
+id-Cells-Broadcast-Cancelled-Item 					ProtocolIE-ID ::= 151
+id-NR-CGI-List-For-Restart-List 					ProtocolIE-ID ::= 152
+id-NR-CGI-List-For-Restart-Item 					ProtocolIE-ID ::= 153
+id-PWS-Failed-NR-CGI-List 							ProtocolIE-ID ::= 154
+id-PWS-Failed-NR-CGI-Item 							ProtocolIE-ID ::= 155
+id-ConfirmedUEID									ProtocolIE-ID ::= 156
+id-Cancel-all-Warning-Messages-Indicator			ProtocolIE-ID ::= 157
+id-GNB-DU-UE-AMBR-UL								ProtocolIE-ID ::= 158
+id-DRXConfigurationIndicator						ProtocolIE-ID ::= 159
+id-RLC-Status										ProtocolIE-ID ::= 160
+id-DLPDCPSNLength									ProtocolIE-ID ::= 161
+id-GNB-DUConfigurationQuery							ProtocolIE-ID ::= 162
+id-MeasurementTimingConfiguration					ProtocolIE-ID ::= 163
+id-DRB-Information									ProtocolIE-ID ::= 164
+id-ServingPLMN										ProtocolIE-ID ::= 165
+id-Protected-EUTRA-Resources-Item					ProtocolIE-ID ::= 168
+id-GNB-CU-RRC-Version								ProtocolIE-ID ::= 170
+id-GNB-DU-RRC-Version								ProtocolIE-ID ::= 171
+id-GNBDUOverloadInformation							ProtocolIE-ID ::= 172
+id-CellGroupConfig									ProtocolIE-ID ::= 173
+id-RLCFailureIndication								ProtocolIE-ID ::= 174
+id-UplinkTxDirectCurrentListInformation				ProtocolIE-ID ::= 175
+id-DC-Based-Duplication-Configured					ProtocolIE-ID ::= 176
+id-DC-Based-Duplication-Activation					ProtocolIE-ID ::= 177
+id-SULAccessIndication								ProtocolIE-ID ::= 178
+id-AvailablePLMNList								ProtocolIE-ID ::= 179
+id-PDUSessionID										ProtocolIE-ID ::= 180
+id-ULPDUSessionAggregateMaximumBitRate				ProtocolIE-ID ::= 181
+id-ServingCellMO									ProtocolIE-ID ::= 182
+id-QoSFlowMappingIndication							ProtocolIE-ID ::= 183
+id-RRCDeliveryStatusRequest							ProtocolIE-ID ::= 184
+id-RRCDeliveryStatus								ProtocolIE-ID ::= 185
+id-BearerTypeChange									ProtocolIE-ID ::= 186
+id-RLCMode											ProtocolIE-ID ::= 187
+id-Duplication-Activation							ProtocolIE-ID ::= 188
+id-Dedicated-SIDelivery-NeededUE-List				ProtocolIE-ID ::= 189
+id-Dedicated-SIDelivery-NeededUE-Item				ProtocolIE-ID ::= 190
+id-DRX-LongCycleStartOffset							ProtocolIE-ID ::= 191
+id-ULPDCPSNLength									ProtocolIE-ID ::= 192
+id-SelectedBandCombinationIndex						ProtocolIE-ID ::= 193
+id-SelectedFeatureSetEntryIndex						ProtocolIE-ID ::= 194
+id-ResourceCoordinationTransferInformation			ProtocolIE-ID ::= 195
+id-ExtendedServedPLMNs-List							ProtocolIE-ID ::= 196
+id-ExtendedAvailablePLMN-List						ProtocolIE-ID ::= 197
+id-Associated-SCell-List							ProtocolIE-ID ::= 198
+id-latest-RRC-Version-Enhanced						ProtocolIE-ID ::= 199
+id-Associated-SCell-Item							ProtocolIE-ID ::= 200
+id-Cell-Direction									ProtocolIE-ID ::= 201
+id-SRBs-Setup-List									ProtocolIE-ID ::= 202
+id-SRBs-Setup-Item									ProtocolIE-ID ::= 203
+id-SRBs-SetupMod-List								ProtocolIE-ID ::= 204
+id-SRBs-SetupMod-Item								ProtocolIE-ID ::= 205
+id-SRBs-Modified-List								ProtocolIE-ID ::= 206
+id-SRBs-Modified-Item								ProtocolIE-ID ::= 207
+id-Ph-InfoSCG										ProtocolIE-ID ::= 208
+id-RequestedBandCombinationIndex					ProtocolIE-ID ::= 209
+id-RequestedFeatureSetEntryIndex					ProtocolIE-ID ::= 210
+id-RequestedP-MaxFR2								ProtocolIE-ID ::= 211
+id-DRX-Config										ProtocolIE-ID ::= 212
+id-IgnoreResourceCoordinationContainer				ProtocolIE-ID ::= 213
+id-UEAssistanceInformation							ProtocolIE-ID ::= 214
+id-NeedforGap										ProtocolIE-ID ::= 215
+id-PagingOrigin										ProtocolIE-ID ::= 216
+id-new-gNB-CU-UE-F1AP-ID							ProtocolIE-ID ::= 217
+id-RedirectedRRCmessage								ProtocolIE-ID ::= 218
+id-new-gNB-DU-UE-F1AP-ID							ProtocolIE-ID ::= 219
+id-NotificationInformation							ProtocolIE-ID ::= 220
+id-PLMNAssistanceInfoForNetShar						ProtocolIE-ID ::= 221
+id-UEContextNotRetrievable							ProtocolIE-ID ::= 222
+id-BPLMN-ID-Info-List								ProtocolIE-ID ::= 223
+id-SelectedPLMNID									ProtocolIE-ID ::= 224
+id-UAC-Assistance-Info								ProtocolIE-ID ::= 225
+id-RANUEID											ProtocolIE-ID ::= 226
+id-GNB-DU-TNL-Association-To-Remove-Item			ProtocolIE-ID ::= 227
+id-GNB-DU-TNL-Association-To-Remove-List			ProtocolIE-ID ::= 228
+id-TNLAssociationTransportLayerAddressgNBDU			ProtocolIE-ID ::= 229
+id-portNumber										ProtocolIE-ID ::= 230
+id-AdditionalSIBMessageList							ProtocolIE-ID ::= 231
+id-Cell-Type										ProtocolIE-ID ::= 232
+id-IgnorePRACHConfiguration							ProtocolIE-ID ::= 233
+id-CG-Config										ProtocolIE-ID ::= 234
+id-PDCCH-BlindDetectionSCG							ProtocolIE-ID ::= 235
+id-Requested-PDCCH-BlindDetectionSCG				ProtocolIE-ID ::= 236
+id-Ph-InfoMCG										ProtocolIE-ID ::= 237
+id-MeasGapSharingConfig								ProtocolIE-ID ::= 238
+id-systemInformationAreaID							ProtocolIE-ID ::= 239
+id-areaScope										ProtocolIE-ID ::= 240
+id-RRCContainer-RRCSetupComplete					ProtocolIE-ID ::= 241
+id-TraceActivation									ProtocolIE-ID ::= 242
+id-TraceID											ProtocolIE-ID ::= 243
+id-Neighbour-Cell-Information-List					ProtocolIE-ID ::= 244
+id-SymbolAllocInSlot								ProtocolIE-ID ::= 246
+id-NumDLULSymbols									ProtocolIE-ID ::= 247
+id-AdditionalRRMPriorityIndex						ProtocolIE-ID ::= 248
+id-DUCURadioInformationType							ProtocolIE-ID ::= 249
+id-CUDURadioInformationType 						ProtocolIE-ID ::= 250
+id-AggressorgNBSetID								ProtocolIE-ID ::= 251
+id-VictimgNBSetID									ProtocolIE-ID ::= 252
+id-LowerLayerPresenceStatusChange					ProtocolIE-ID ::= 253
+id-Transport-Layer-Address-Info						ProtocolIE-ID ::= 254
+id-Neighbour-Cell-Information-Item					ProtocolIE-ID ::= 255
+id-IntendedTDD-DL-ULConfig							ProtocolIE-ID ::= 256
+id-QosMonitoringRequest								ProtocolIE-ID ::= 257
+id-BHChannels-ToBeSetup-List						ProtocolIE-ID ::= 258
+id-BHChannels-ToBeSetup-Item						ProtocolIE-ID ::= 259
+id-BHChannels-Setup-List							ProtocolIE-ID ::= 260
+id-BHChannels-Setup-Item							ProtocolIE-ID ::= 261
+id-BHChannels-ToBeModified-Item						ProtocolIE-ID ::= 262
+id-BHChannels-ToBeModified-List						ProtocolIE-ID ::= 263
+id-BHChannels-ToBeReleased-Item						ProtocolIE-ID ::= 264
+id-BHChannels-ToBeReleased-List						ProtocolIE-ID ::= 265
+id-BHChannels-ToBeSetupMod-Item						ProtocolIE-ID ::= 266
+id-BHChannels-ToBeSetupMod-List						ProtocolIE-ID ::= 267
+id-BHChannels-FailedToBeModified-Item				ProtocolIE-ID ::= 268
+id-BHChannels-FailedToBeModified-List				ProtocolIE-ID ::= 269
+id-BHChannels-FailedToBeSetupMod-Item				ProtocolIE-ID ::= 270
+id-BHChannels-FailedToBeSetupMod-List				ProtocolIE-ID ::= 271
+id-BHChannels-Modified-Item							ProtocolIE-ID ::= 272
+id-BHChannels-Modified-List							ProtocolIE-ID ::= 273
+id-BHChannels-SetupMod-Item							ProtocolIE-ID ::= 274
+id-BHChannels-SetupMod-List							ProtocolIE-ID ::= 275
+id-BHChannels-Required-ToBeReleased-Item			ProtocolIE-ID ::= 276
+id-BHChannels-Required-ToBeReleased-List			ProtocolIE-ID ::= 277
+id-BHChannels-FailedToBeSetup-Item					ProtocolIE-ID ::= 278
+id-BHChannels-FailedToBeSetup-List					ProtocolIE-ID ::= 279
+id-BHInfo											ProtocolIE-ID ::= 280
+id-BAPAddress										ProtocolIE-ID ::= 281
+id-ConfiguredBAPAddress								ProtocolIE-ID ::= 282
+id-BH-Routing-Information-Added-List				ProtocolIE-ID ::= 283
+id-BH-Routing-Information-Added-List-Item			ProtocolIE-ID ::= 284
+id-BH-Routing-Information-Removed-List				ProtocolIE-ID ::= 285
+id-BH-Routing-Information-Removed-List-Item			ProtocolIE-ID ::= 286
+id-UL-BH-Non-UP-Traffic-Mapping						ProtocolIE-ID ::= 287
+id-Activated-Cells-to-be-Updated-List				ProtocolIE-ID ::= 288
+id-Child-Nodes-List									ProtocolIE-ID ::= 289
+id-IAB-Info-IAB-DU									ProtocolIE-ID ::= 290
+id-IAB-Info-IAB-donor-CU							ProtocolIE-ID ::= 291
+id-IAB-TNL-Addresses-To-Remove-List					ProtocolIE-ID ::= 292
+id-IAB-TNL-Addresses-To-Remove-Item					ProtocolIE-ID ::= 293
+id-IAB-Allocated-TNL-Address-List					ProtocolIE-ID ::= 294
+id-IAB-Allocated-TNL-Address-Item					ProtocolIE-ID ::= 295
+id-IABIPv6RequestType								ProtocolIE-ID ::= 296
+id-IABv4AddressesRequested							ProtocolIE-ID ::= 297
+id-IAB-Barred										ProtocolIE-ID ::= 298
+id-TrafficMappingInformation						ProtocolIE-ID ::= 299
+id-UL-UP-TNL-Information-to-Update-List				ProtocolIE-ID ::= 300
+id-UL-UP-TNL-Information-to-Update-List-Item		ProtocolIE-ID ::= 301
+id-UL-UP-TNL-Address-to-Update-List					ProtocolIE-ID ::= 302
+id-UL-UP-TNL-Address-to-Update-List-Item			ProtocolIE-ID ::= 303
+id-DL-UP-TNL-Address-to-Update-List					ProtocolIE-ID ::= 304
+id-DL-UP-TNL-Address-to-Update-List-Item			ProtocolIE-ID ::= 305
+id-NRV2XServicesAuthorized							ProtocolIE-ID ::= 306
+id-LTEV2XServicesAuthorized							ProtocolIE-ID ::= 307
+id-NRUESidelinkAggregateMaximumBitrate				ProtocolIE-ID ::= 308
+id-LTEUESidelinkAggregateMaximumBitrate				ProtocolIE-ID ::= 309
+id-SIB12-message									ProtocolIE-ID ::= 310
+id-SIB13-message									ProtocolIE-ID ::= 311
+id-SIB14-message									ProtocolIE-ID ::= 312
+id-SLDRBs-FailedToBeModified-Item					ProtocolIE-ID ::= 313
+id-SLDRBs-FailedToBeModified-List					ProtocolIE-ID ::= 314
+id-SLDRBs-FailedToBeSetup-Item						ProtocolIE-ID ::= 315
+id-SLDRBs-FailedToBeSetup-List						ProtocolIE-ID ::= 316
+id-SLDRBs-Modified-Item								ProtocolIE-ID ::= 317
+id-SLDRBs-Modified-List								ProtocolIE-ID ::= 318
+id-SLDRBs-Required-ToBeModified-Item				ProtocolIE-ID ::= 319
+id-SLDRBs-Required-ToBeModified-List				ProtocolIE-ID ::= 320
+id-SLDRBs-Required-ToBeReleased-Item				ProtocolIE-ID ::= 321
+id-SLDRBs-Required-ToBeReleased-List				ProtocolIE-ID ::= 322
+id-SLDRBs-Setup-Item								ProtocolIE-ID ::= 323
+id-SLDRBs-Setup-List								ProtocolIE-ID ::= 324
+id-SLDRBs-ToBeModified-Item							ProtocolIE-ID ::= 325
+id-SLDRBs-ToBeModified-List							ProtocolIE-ID ::= 326
+id-SLDRBs-ToBeReleased-Item							ProtocolIE-ID ::= 327
+id-SLDRBs-ToBeReleased-List							ProtocolIE-ID ::= 328
+id-SLDRBs-ToBeSetup-Item							ProtocolIE-ID ::= 329
+id-SLDRBs-ToBeSetup-List							ProtocolIE-ID ::= 330
+id-SLDRBs-ToBeSetupMod-Item							ProtocolIE-ID ::= 331
+id-SLDRBs-ToBeSetupMod-List							ProtocolIE-ID ::= 332
+id-SLDRBs-SetupMod-List								ProtocolIE-ID ::= 333
+id-SLDRBs-FailedToBeSetupMod-List					ProtocolIE-ID ::= 334
+id-SLDRBs-SetupMod-Item								ProtocolIE-ID ::= 335
+id-SLDRBs-FailedToBeSetupMod-Item					ProtocolIE-ID ::= 336
+id-SLDRBs-ModifiedConf-List							ProtocolIE-ID ::= 337
+id-SLDRBs-ModifiedConf-Item							ProtocolIE-ID ::= 338
+id-UEAssistanceInformationEUTRA						ProtocolIE-ID ::= 339
+id-PC5LinkAMBR										ProtocolIE-ID ::= 340
+id-SL-PHY-MAC-RLC-Config							ProtocolIE-ID ::= 341
+id-SL-ConfigDedicatedEUTRA							ProtocolIE-ID ::= 342
+id-AlternativeQoSParaSetList						ProtocolIE-ID ::= 343
+id-CurrentQoSParaSetIndex							ProtocolIE-ID ::= 344
+id-gNBCUMeasurementID								ProtocolIE-ID ::= 345
+id-gNBDUMeasurementID								ProtocolIE-ID ::= 346
+id-RegistrationRequest								ProtocolIE-ID ::= 347
+id-ReportCharacteristics							ProtocolIE-ID ::= 348
+id-CellToReportList									ProtocolIE-ID ::= 349
+id-CellMeasurementResultList						ProtocolIE-ID ::= 350
+id-HardwareLoadIndicator							ProtocolIE-ID ::= 351
+id-ReportingPeriodicity								ProtocolIE-ID ::= 352
+id-TNLCapacityIndicator								ProtocolIE-ID ::= 353
+id-CarrierList										ProtocolIE-ID ::= 354
+id-ULCarrierList									ProtocolIE-ID ::= 355
+id-FrequencyShift7p5khz								ProtocolIE-ID ::= 356
+id-SSB-PositionsInBurst								ProtocolIE-ID ::= 357
+id-NRPRACHConfig									ProtocolIE-ID ::= 358
+id-RACHReportInformationList						ProtocolIE-ID ::= 359
+id-RLFReportInformationList							ProtocolIE-ID ::= 360
+id-TDD-UL-DLConfigCommonNR							ProtocolIE-ID ::= 361
+id-CNPacketDelayBudgetDownlink						ProtocolIE-ID ::= 362
+id-ExtendedPacketDelayBudget						ProtocolIE-ID ::= 363
+id-TSCTrafficCharacteristics						ProtocolIE-ID ::= 364
+id-ReportingRequestType								ProtocolIE-ID ::= 365
+id-TimeReferenceInformation							ProtocolIE-ID ::= 366
+id-CNPacketDelayBudgetUplink						ProtocolIE-ID ::= 369
+id-AdditionalPDCPDuplicationTNL-List				ProtocolIE-ID ::= 370
+id-RLCDuplicationInformation						ProtocolIE-ID ::= 371
+id-AdditionalDuplicationIndication					ProtocolIE-ID ::= 372
+id-ConditionalInterDUMobilityInformation			ProtocolIE-ID ::= 373
+id-ConditionalIntraDUMobilityInformation			ProtocolIE-ID ::= 374
+id-targetCellsToCancel								ProtocolIE-ID ::= 375
+id-requestedTargetCellGlobalID						ProtocolIE-ID ::= 376
+id-ManagementBasedMDTPLMNList						ProtocolIE-ID ::= 377
+id-TraceCollectionEntityIPAddress 					ProtocolIE-ID ::= 378
+id-PrivacyIndicator									ProtocolIE-ID ::= 379
+id-TraceCollectionEntityURI							ProtocolIE-ID ::= 380
+id-mdtConfiguration									ProtocolIE-ID ::= 381
+id-ServingNID										ProtocolIE-ID ::= 382
+id-NPNBroadcastInformation							ProtocolIE-ID ::= 383
+id-NPNSupportInfo									ProtocolIE-ID ::= 384
+id-NID												ProtocolIE-ID ::= 385
+id-AvailableSNPN-ID-List							ProtocolIE-ID ::= 386
+id-SIB10-message									ProtocolIE-ID ::= 387
+id-DLCarrierList									ProtocolIE-ID ::= 389
+	id-ExtendedTAISliceSupportList					ProtocolIE-ID ::= 390 
+id-RequestedSRSTransmissionCharacteristics			ProtocolIE-ID ::= 391
+id-PosAssistance-Information						ProtocolIE-ID ::= 392
+id-PosBroadcast										ProtocolIE-ID ::= 393
+id-RoutingID										ProtocolIE-ID ::= 394
+id-PosAssistanceInformationFailureList				ProtocolIE-ID ::= 395
+id-PosMeasurementQuantities							ProtocolIE-ID ::= 396
+id-PosMeasurementResultList							ProtocolIE-ID ::= 397
+id-TRPInformationTypeListTRPReq						ProtocolIE-ID ::= 398
+id-TRPInformationTypeItem							ProtocolIE-ID ::= 399
+id-TRPInformationListTRPResp						ProtocolIE-ID ::= 400
+id-TRPInformationItem								ProtocolIE-ID ::= 401
+id-LMF-MeasurementID								ProtocolIE-ID ::= 402
+id-SRSType											ProtocolIE-ID ::= 403
+id-ActivationTime									ProtocolIE-ID ::= 404
+id-AbortTransmission								ProtocolIE-ID ::= 405
+id-PositioningBroadcastCells						ProtocolIE-ID ::= 406
+id-SRSConfiguration									ProtocolIE-ID ::= 407
+id-PosReportCharacteristics						ProtocolIE-ID ::= 408
+id-PosMeasurementPeriodicity						ProtocolIE-ID ::= 409
+id-TRPList											ProtocolIE-ID ::= 410
+id-RAN-MeasurementID								ProtocolIE-ID ::= 411
+id-LMF-UE-MeasurementID								ProtocolIE-ID ::= 412
+id-RAN-UE-MeasurementID								ProtocolIE-ID ::= 413
+id-E-CID-MeasurementQuantities						ProtocolIE-ID ::= 414
+id-E-CID-MeasurementQuantities-Item					ProtocolIE-ID ::= 415
+id-E-CID-MeasurementPeriodicity						ProtocolIE-ID ::= 416
+id-E-CID-MeasurementResult							ProtocolIE-ID ::= 417
+id-Cell-Portion-ID									ProtocolIE-ID ::= 418
+id-SFNInitialisationTime							ProtocolIE-ID ::= 419
+id-SystemFrameNumber								ProtocolIE-ID ::= 420
+id-SlotNumber										ProtocolIE-ID ::= 421
+id-TRP-MeasurementRequestList						ProtocolIE-ID ::= 422
+id-MeasurementBeamInfoRequest						ProtocolIE-ID ::= 423
+id-E-CID-ReportCharacteristics						ProtocolIE-ID ::= 424
+id-ConfiguredTACIndication							ProtocolIE-ID ::= 425
+id-Extended-GNB-DU-Name								ProtocolIE-ID ::= 426
+id-Extended-GNB-CU-Name								ProtocolIE-ID ::= 427
+
+
+END
+-- ASN1STOP 
+
+-- ASN1START 
+-- **************************************************************
+--
+-- Container definitions
+--
+-- **************************************************************
+
+F1AP-Containers {
+itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
+ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-Containers (5) }
+
+DEFINITIONS AUTOMATIC TAGS ::= 
+
+BEGIN
+
+-- **************************************************************
+--
+-- IE parameter types from other modules.
+--
+-- **************************************************************
+
+IMPORTS
+	Criticality,
+	Presence,
+	PrivateIE-ID,
+	ProtocolExtensionID,
+	ProtocolIE-ID
+
+FROM F1AP-CommonDataTypes
+	maxPrivateIEs,
+	maxProtocolExtensions,
+	maxProtocolIEs
+
+FROM F1AP-Constants;
+
+-- **************************************************************
+--
+-- Class Definition for Protocol IEs
+--
+-- **************************************************************
+
+F1AP-PROTOCOL-IES ::= CLASS {
+	&id				ProtocolIE-ID 					UNIQUE,
+	&criticality	Criticality,
+	&Value,
+	&presence		Presence
+}
+WITH SYNTAX {
+	ID				&id
+	CRITICALITY		&criticality
+	TYPE			&Value
+	PRESENCE		&presence
+}
+
+-- **************************************************************
+--
+-- Class Definition for Protocol IEs
+--
+-- **************************************************************
+
+F1AP-PROTOCOL-IES-PAIR ::= CLASS {
+	&id					ProtocolIE-ID 				UNIQUE,
+	&firstCriticality	Criticality,
+	&FirstValue,
+	&secondCriticality	Criticality,
+	&SecondValue,
+	&presence			Presence
+}
+WITH SYNTAX {
+	ID				&id
+	FIRST CRITICALITY		&firstCriticality
+	FIRST TYPE				&FirstValue
+	SECOND CRITICALITY		&secondCriticality
+	SECOND TYPE				&SecondValue
+	PRESENCE				&presence
+}
+
+-- **************************************************************
+--
+-- Class Definition for Protocol Extensions
+--
+-- **************************************************************
+
+F1AP-PROTOCOL-EXTENSION ::= CLASS {
+	&id				ProtocolExtensionID			UNIQUE,
+	&criticality	Criticality,
+	&Extension,
+	&presence		Presence
+}
+WITH SYNTAX {
+	ID				&id
+	CRITICALITY		&criticality
+	EXTENSION		&Extension
+	PRESENCE		&presence
+}
+
+-- **************************************************************
+--
+-- Class Definition for Private IEs
+--
+-- **************************************************************
+
+F1AP-PRIVATE-IES ::= CLASS {
+	&id				PrivateIE-ID,
+	&criticality	Criticality,
+	&Value,
+	&presence		Presence
+}
+WITH SYNTAX {
+	ID				&id
+	CRITICALITY		&criticality
+	TYPE			&Value
+	PRESENCE		&presence
+}
+
+-- **************************************************************
+--
+-- Container for Protocol IEs
+--
+-- **************************************************************
+
+ProtocolIE-Container {F1AP-PROTOCOL-IES : IEsSetParam} ::= 
+	SEQUENCE (SIZE (0..maxProtocolIEs)) OF
+	ProtocolIE-Field {{IEsSetParam}}
+
+ProtocolIE-SingleContainer {F1AP-PROTOCOL-IES : IEsSetParam} ::= 
+	ProtocolIE-Field {{IEsSetParam}}
+
+ProtocolIE-Field {F1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE {
+	id				F1AP-PROTOCOL-IES.&id				({IEsSetParam}),
+	criticality		F1AP-PROTOCOL-IES.&criticality		({IEsSetParam}{@id}),
+	value			F1AP-PROTOCOL-IES.&Value			({IEsSetParam}{@id})
+}
+
+-- **************************************************************
+--
+-- Container for Protocol IE Pairs
+--
+-- **************************************************************
+
+ProtocolIE-ContainerPair {F1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= 
+	SEQUENCE (SIZE (0..maxProtocolIEs)) OF
+	ProtocolIE-FieldPair {{IEsSetParam}}
+
+ProtocolIE-FieldPair {F1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE {
+	id					F1AP-PROTOCOL-IES-PAIR.&id					({IEsSetParam}),
+	firstCriticality	F1AP-PROTOCOL-IES-PAIR.&firstCriticality	({IEsSetParam}{@id}),
+	firstValue			F1AP-PROTOCOL-IES-PAIR.&FirstValue			({IEsSetParam}{@id}),
+	secondCriticality	F1AP-PROTOCOL-IES-PAIR.&secondCriticality	({IEsSetParam}{@id}),
+	secondValue			F1AP-PROTOCOL-IES-PAIR.&SecondValue			({IEsSetParam}{@id})
+}
+
+-- **************************************************************
+--
+-- Container for Protocol Extensions
+--
+-- **************************************************************
+
+ProtocolExtensionContainer {F1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= 
+	SEQUENCE (SIZE (1..maxProtocolExtensions)) OF
+	ProtocolExtensionField {{ExtensionSetParam}}
+
+ProtocolExtensionField {F1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE {
+	id					F1AP-PROTOCOL-EXTENSION.&id				({ExtensionSetParam}),
+	criticality			F1AP-PROTOCOL-EXTENSION.&criticality	({ExtensionSetParam}{@id}),
+	extensionValue		F1AP-PROTOCOL-EXTENSION.&Extension		({ExtensionSetParam}{@id})
+}
+
+-- **************************************************************
+--
+-- Container for Private IEs
+--
+-- **************************************************************
+
+PrivateIE-Container {F1AP-PRIVATE-IES : IEsSetParam } ::= 
+	SEQUENCE (SIZE (1.. maxPrivateIEs)) OF
+	PrivateIE-Field {{IEsSetParam}}
+
+PrivateIE-Field {F1AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE {
+	id					F1AP-PRIVATE-IES.&id				({IEsSetParam}),
+	criticality			F1AP-PRIVATE-IES.&criticality		({IEsSetParam}{@id}),
+	value				F1AP-PRIVATE-IES.&Value				({IEsSetParam}{@id})
+}
+
+END
+-- ASN1STOP 
diff --git a/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-CommonDataTypes.asn b/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-CommonDataTypes.asn
new file mode 100644
index 0000000000000000000000000000000000000000..da3092376eb76a13281ef91adcfe001c1bcda040
--- /dev/null
+++ b/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-CommonDataTypes.asn
@@ -0,0 +1,32 @@
+-- **************************************************************
+--
+-- Common definitions
+--
+-- **************************************************************
+
+F1AP-CommonDataTypes {
+itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
+ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-CommonDataTypes (3) }
+
+DEFINITIONS AUTOMATIC TAGS ::= 
+
+BEGIN
+
+Criticality		::= ENUMERATED { reject, ignore, notify }
+
+Presence		::= ENUMERATED { optional, conditional, mandatory }
+
+PrivateIE-ID	::= CHOICE {
+	local				INTEGER (0..65535),
+	global				OBJECT IDENTIFIER
+}
+
+ProcedureCode		::= INTEGER (0..255)
+
+ProtocolExtensionID	::= INTEGER (0..65535)
+
+ProtocolIE-ID		::= INTEGER (0..65535)
+
+TriggeringMessage	::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome }
+
+END
diff --git a/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-Constants.asn b/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-Constants.asn
new file mode 100644
index 0000000000000000000000000000000000000000..9b5a3dd6246d47a59d35760e55cbe4339b89746a
--- /dev/null
+++ b/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-Constants.asn
@@ -0,0 +1,622 @@
+-- **************************************************************
+--
+-- Constant definitions
+--
+-- **************************************************************
+
+F1AP-Constants { 
+itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
+ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-Constants (4) } 
+
+DEFINITIONS AUTOMATIC TAGS ::= 
+
+BEGIN
+
+-- **************************************************************
+--
+-- IE parameter types from other modules.
+--
+-- **************************************************************
+
+IMPORTS
+	ProcedureCode,
+	ProtocolIE-ID
+
+FROM F1AP-CommonDataTypes;
+
+
+-- **************************************************************
+--
+-- Elementary Procedures
+--
+-- **************************************************************
+
+id-Reset									ProcedureCode ::= 0
+id-F1Setup									ProcedureCode ::= 1
+id-ErrorIndication							ProcedureCode ::= 2
+id-gNBDUConfigurationUpdate					ProcedureCode ::= 3
+id-gNBCUConfigurationUpdate					ProcedureCode ::= 4
+id-UEContextSetup							ProcedureCode ::= 5
+id-UEContextRelease							ProcedureCode ::= 6
+id-UEContextModification					ProcedureCode ::= 7
+id-UEContextModificationRequired			ProcedureCode ::= 8
+id-UEMobilityCommand						ProcedureCode ::= 9
+id-UEContextReleaseRequest					ProcedureCode ::= 10
+id-InitialULRRCMessageTransfer				ProcedureCode ::= 11
+id-DLRRCMessageTransfer						ProcedureCode ::= 12
+id-ULRRCMessageTransfer						ProcedureCode ::= 13
+id-privateMessage							ProcedureCode ::= 14
+id-UEInactivityNotification					ProcedureCode ::= 15
+id-GNBDUResourceCoordination				ProcedureCode ::= 16
+id-SystemInformationDeliveryCommand			ProcedureCode ::= 17
+id-Paging									ProcedureCode ::= 18
+id-Notify									ProcedureCode ::= 19
+id-WriteReplaceWarning						ProcedureCode ::= 20
+id-PWSCancel								ProcedureCode ::= 21
+id-PWSRestartIndication						ProcedureCode ::= 22
+id-PWSFailureIndication						ProcedureCode ::= 23
+id-GNBDUStatusIndication 					ProcedureCode ::= 24
+id-RRCDeliveryReport		 				ProcedureCode ::= 25
+id-F1Removal								ProcedureCode ::= 26
+id-NetworkAccessRateReduction				ProcedureCode ::= 27
+id-TraceStart								ProcedureCode ::= 28
+id-DeactivateTrace							ProcedureCode ::= 29
+id-DUCURadioInformationTransfer				ProcedureCode ::= 30
+id-CUDURadioInformationTransfer				ProcedureCode ::= 31
+id-BAPMappingConfiguration					ProcedureCode ::= 32
+id-GNBDUResourceConfiguration				ProcedureCode ::= 33
+id-IABTNLAddressAllocation					ProcedureCode ::= 34
+id-IABUPConfigurationUpdate					ProcedureCode ::= 35
+id-resourceStatusReportingInitiation		ProcedureCode ::= 36
+id-resourceStatusReporting					ProcedureCode ::= 37
+id-accessAndMobilityIndication				ProcedureCode ::= 38
+id-accessSuccess							ProcedureCode ::= 39
+id-cellTrafficTrace 						ProcedureCode ::= 40 
+id-PositioningMeasurementExchange			ProcedureCode ::= 41
+id-PositioningAssistanceInformationControl	ProcedureCode ::= 42
+id-PositioningAssistanceInformationFeedback	ProcedureCode ::= 43
+id-PositioningMeasurementReport				ProcedureCode ::= 44
+id-PositioningMeasurementAbort				ProcedureCode ::= 45
+id-PositioningMeasurementFailureIndication	ProcedureCode ::= 46
+id-PositioningMeasurementUpdate				ProcedureCode ::= 47
+id-TRPInformationExchange					ProcedureCode ::= 48
+id-PositioningInformationExchange			ProcedureCode ::= 49
+id-PositioningActivation					ProcedureCode ::= 50
+id-PositioningDeactivation					ProcedureCode ::= 51
+id-E-CIDMeasurementInitiation				ProcedureCode ::= 52
+id-E-CIDMeasurementFailureIndication		ProcedureCode ::= 53
+id-E-CIDMeasurementReport					ProcedureCode ::= 54
+id-E-CIDMeasurementTermination				ProcedureCode ::= 55
+id-PositioningInformationUpdate				ProcedureCode ::= 56
+id-ReferenceTimeInformationReport			ProcedureCode ::= 57
+id-ReferenceTimeInformationReportingControl	ProcedureCode ::= 58
+
+
+
+-- **************************************************************
+--
+-- Extension constants
+--
+-- **************************************************************
+
+maxPrivateIEs							INTEGER ::= 65535
+maxProtocolExtensions					INTEGER ::= 65535
+maxProtocolIEs							INTEGER ::= 65535
+-- **************************************************************
+--
+-- Lists
+--
+-- **************************************************************
+
+maxNRARFCN								INTEGER ::= 3279165
+maxnoofErrors							INTEGER ::= 256
+maxnoofIndividualF1ConnectionsToReset	INTEGER ::= 65536
+maxCellingNBDU							INTEGER ::= 512
+maxnoofSCells							INTEGER ::= 32
+maxnoofSRBs								INTEGER ::= 8
+maxnoofDRBs								INTEGER ::= 64
+maxnoofULUPTNLInformation				INTEGER ::= 2
+maxnoofDLUPTNLInformation				INTEGER ::= 2
+maxnoofBPLMNs							INTEGER ::= 6
+maxnoofCandidateSpCells					INTEGER ::= 64
+maxnoofPotentialSpCells					INTEGER ::= 64
+maxnoofNrCellBands						INTEGER ::= 32
+maxnoofSIBTypes							INTEGER ::= 32
+maxnoofSITypes							INTEGER ::= 32
+maxnoofPagingCells						INTEGER ::= 512
+maxnoofTNLAssociations					INTEGER ::= 32
+maxnoofQoSFlows							INTEGER ::= 64
+maxnoofSliceItems						INTEGER ::= 1024
+maxCellineNB							INTEGER ::= 256
+maxnoofExtendedBPLMNs					INTEGER ::= 6
+maxnoofUEIDs							INTEGER ::= 65536
+maxnoofBPLMNsNR							INTEGER ::= 12
+maxnoofUACPLMNs							INTEGER ::= 12
+maxnoofUACperPLMN						INTEGER ::= 64
+maxnoofAdditionalSIBs					INTEGER ::= 63
+maxnoofslots							INTEGER ::= 5120
+maxnoofTLAs								INTEGER ::=	16
+maxnoofGTPTLAs							INTEGER ::=	16
+maxnoofBHRLCChannels					INTEGER ::= 65536
+maxnoofRoutingEntries					INTEGER ::= 1024
+maxnoofIABSTCInfo						INTEGER ::= 45
+maxnoofSymbols							INTEGER ::= 14
+maxnoofServingCells						INTEGER ::= 32
+maxnoofDUFSlots							INTEGER ::= 320
+maxnoofHSNASlots						INTEGER ::= 5120
+maxnoofServedCellsIAB					INTEGER ::= 512 
+maxnoofChildIABNodes					INTEGER ::= 1024
+maxnoofNonUPTrafficMappings				INTEGER ::= 32
+maxnoofTLAsIAB							INTEGER ::= 1024
+maxnoofMappingEntries					INTEGER ::= 67108864
+maxnoofDSInfo							INTEGER ::= 64
+maxnoofEgressLinks						INTEGER ::= 2
+maxnoofULUPTNLInformationforIAB			INTEGER ::= 32678
+maxnoofUPTNLAddresses					INTEGER ::= 8
+maxnoofSLDRBs							INTEGER ::= 512
+maxnoofQoSParaSets						INTEGER ::= 8
+maxnoofPC5QoSFlows						INTEGER ::= 2048
+maxnoofSSBAreas							INTEGER ::=	64
+maxnoofPhysicalResourceBlocks			INTEGER ::= 275
+maxnoofPhysicalResourceBlocks-1			INTEGER ::= 274
+maxnoofPRACHconfigs						INTEGER ::= 16
+maxnoofRACHReports						INTEGER ::= 64
+maxnoofRLFReports						INTEGER ::= 64
+maxnoofAdditionalPDCPDuplicationTNL		INTEGER ::=	2
+maxnoofRLCDuplicationState				INTEGER ::=	3
+maxnoofCHOcells							INTEGER ::= 8
+maxnoofMDTPLMNs							INTEGER ::=	16
+maxnoofCAGsupported						INTEGER ::= 12
+maxnoofNIDsupported						INTEGER ::= 12
+maxnoofNRSCSs							INTEGER ::= 5
+maxnoofExtSliceItems					INTEGER ::= 65535 
+maxnoofPosMeas							INTEGER ::=	16384
+maxnoofTRPInfoTypes						INTEGER ::=	64 
+maxnoofTRPs								INTEGER ::=	65535 
+maxnoofSRSTriggerStates					INTEGER ::= 3
+maxnoofSpatialRelations					INTEGER ::= 64
+maxnoBcastCell							INTEGER ::= 16384
+maxnoofAngleInfo						INTEGER ::= 65535
+maxnooflcs-gcs-translation				INTEGER ::= 3
+maxnoofPath								INTEGER ::= 2
+maxnoofMeasE-CID						INTEGER ::= 64
+maxnoofSSBs								INTEGER ::= 255
+maxnoSRS-ResourceSets					INTEGER ::= 16
+maxnoSRS-ResourcePerSet					INTEGER ::= 16
+maxnoSRS-Carriers						INTEGER ::= 32
+maxnoSCSs								INTEGER ::= 5
+maxnoSRS-Resources						INTEGER ::= 64
+maxnoSRS-PosResources					INTEGER ::= 64
+maxnoSRS-PosResourceSets				INTEGER ::= 16
+maxnoSRS-PosResourcePerSet				INTEGER ::= 16
+maxnoofPRS-ResourceSets					INTEGER ::= 2
+maxnoofPRS-ResourcesPerSet				INTEGER ::= 64
+maxNoOfMeasTRPs							INTEGER ::= 64
+maxnoofPRSresourceSets					INTEGER ::= 8
+maxnoofPRSresources						INTEGER ::= 64
+
+
+
+-- **************************************************************
+--
+-- IEs
+--
+-- **************************************************************
+
+id-Cause											ProtocolIE-ID ::= 0
+id-Cells-Failed-to-be-Activated-List				ProtocolIE-ID ::= 1
+id-Cells-Failed-to-be-Activated-List-Item			ProtocolIE-ID ::= 2
+id-Cells-to-be-Activated-List						ProtocolIE-ID ::= 3
+id-Cells-to-be-Activated-List-Item					ProtocolIE-ID ::= 4
+id-Cells-to-be-Deactivated-List						ProtocolIE-ID ::= 5
+id-Cells-to-be-Deactivated-List-Item				ProtocolIE-ID ::= 6
+id-CriticalityDiagnostics							ProtocolIE-ID ::= 7
+id-CUtoDURRCInformation								ProtocolIE-ID ::= 9
+id-DRBs-FailedToBeModified-Item						ProtocolIE-ID ::= 12
+id-DRBs-FailedToBeModified-List						ProtocolIE-ID ::= 13
+id-DRBs-FailedToBeSetup-Item						ProtocolIE-ID ::= 14
+id-DRBs-FailedToBeSetup-List						ProtocolIE-ID ::= 15
+id-DRBs-FailedToBeSetupMod-Item						ProtocolIE-ID ::= 16
+id-DRBs-FailedToBeSetupMod-List						ProtocolIE-ID ::= 17
+id-DRBs-ModifiedConf-Item							ProtocolIE-ID ::= 18
+id-DRBs-ModifiedConf-List							ProtocolIE-ID ::= 19
+id-DRBs-Modified-Item								ProtocolIE-ID ::= 20
+id-DRBs-Modified-List								ProtocolIE-ID ::= 21
+id-DRBs-Required-ToBeModified-Item					ProtocolIE-ID ::= 22
+id-DRBs-Required-ToBeModified-List					ProtocolIE-ID ::= 23
+id-DRBs-Required-ToBeReleased-Item					ProtocolIE-ID ::= 24
+id-DRBs-Required-ToBeReleased-List					ProtocolIE-ID ::= 25
+id-DRBs-Setup-Item									ProtocolIE-ID ::= 26
+id-DRBs-Setup-List									ProtocolIE-ID ::= 27
+id-DRBs-SetupMod-Item								ProtocolIE-ID ::= 28
+id-DRBs-SetupMod-List								ProtocolIE-ID ::= 29
+id-DRBs-ToBeModified-Item							ProtocolIE-ID ::= 30
+id-DRBs-ToBeModified-List							ProtocolIE-ID ::= 31
+id-DRBs-ToBeReleased-Item							ProtocolIE-ID ::= 32
+id-DRBs-ToBeReleased-List							ProtocolIE-ID ::= 33
+id-DRBs-ToBeSetup-Item								ProtocolIE-ID ::= 34
+id-DRBs-ToBeSetup-List								ProtocolIE-ID ::= 35
+id-DRBs-ToBeSetupMod-Item							ProtocolIE-ID ::= 36
+id-DRBs-ToBeSetupMod-List							ProtocolIE-ID ::= 37
+id-DRXCycle											ProtocolIE-ID ::= 38
+id-DUtoCURRCInformation								ProtocolIE-ID ::= 39
+id-gNB-CU-UE-F1AP-ID								ProtocolIE-ID ::= 40
+id-gNB-DU-UE-F1AP-ID								ProtocolIE-ID ::= 41
+id-gNB-DU-ID										ProtocolIE-ID ::= 42
+id-GNB-DU-Served-Cells-Item							ProtocolIE-ID ::= 43
+id-gNB-DU-Served-Cells-List							ProtocolIE-ID ::= 44
+id-gNB-DU-Name										ProtocolIE-ID ::= 45
+id-NRCellID											ProtocolIE-ID ::= 46
+id-oldgNB-DU-UE-F1AP-ID								ProtocolIE-ID ::= 47
+id-ResetType										ProtocolIE-ID ::= 48
+id-ResourceCoordinationTransferContainer			ProtocolIE-ID ::= 49
+id-RRCContainer										ProtocolIE-ID ::= 50
+id-SCell-ToBeRemoved-Item							ProtocolIE-ID ::= 51
+id-SCell-ToBeRemoved-List							ProtocolIE-ID ::= 52
+id-SCell-ToBeSetup-Item								ProtocolIE-ID ::= 53
+id-SCell-ToBeSetup-List								ProtocolIE-ID ::= 54
+id-SCell-ToBeSetupMod-Item							ProtocolIE-ID ::= 55
+id-SCell-ToBeSetupMod-List							ProtocolIE-ID ::= 56
+id-Served-Cells-To-Add-Item							ProtocolIE-ID ::= 57
+id-Served-Cells-To-Add-List							ProtocolIE-ID ::= 58
+id-Served-Cells-To-Delete-Item						ProtocolIE-ID ::= 59
+id-Served-Cells-To-Delete-List						ProtocolIE-ID ::= 60
+id-Served-Cells-To-Modify-Item						ProtocolIE-ID ::= 61
+id-Served-Cells-To-Modify-List						ProtocolIE-ID ::= 62
+id-SpCell-ID										ProtocolIE-ID ::= 63
+id-SRBID											ProtocolIE-ID ::= 64
+id-SRBs-FailedToBeSetup-Item						ProtocolIE-ID ::= 65
+id-SRBs-FailedToBeSetup-List						ProtocolIE-ID ::= 66
+id-SRBs-FailedToBeSetupMod-Item						ProtocolIE-ID ::= 67
+id-SRBs-FailedToBeSetupMod-List						ProtocolIE-ID ::= 68
+id-SRBs-Required-ToBeReleased-Item					ProtocolIE-ID ::= 69
+id-SRBs-Required-ToBeReleased-List					ProtocolIE-ID ::= 70
+id-SRBs-ToBeReleased-Item							ProtocolIE-ID ::= 71
+id-SRBs-ToBeReleased-List							ProtocolIE-ID ::= 72
+id-SRBs-ToBeSetup-Item								ProtocolIE-ID ::= 73
+id-SRBs-ToBeSetup-List								ProtocolIE-ID ::= 74
+id-SRBs-ToBeSetupMod-Item							ProtocolIE-ID ::= 75
+id-SRBs-ToBeSetupMod-List							ProtocolIE-ID ::= 76
+id-TimeToWait										ProtocolIE-ID ::= 77
+id-TransactionID									ProtocolIE-ID ::= 78
+id-TransmissionActionIndicator						ProtocolIE-ID ::= 79
+id-UE-associatedLogicalF1-ConnectionItem 			ProtocolIE-ID ::= 80
+id-UE-associatedLogicalF1-ConnectionListResAck		ProtocolIE-ID ::= 81
+id-gNB-CU-Name										ProtocolIE-ID ::= 82
+id-SCell-FailedtoSetup-List							ProtocolIE-ID ::= 83
+id-SCell-FailedtoSetup-Item							ProtocolIE-ID ::= 84
+id-SCell-FailedtoSetupMod-List						ProtocolIE-ID ::= 85
+id-SCell-FailedtoSetupMod-Item						ProtocolIE-ID ::= 86
+id-RRCReconfigurationCompleteIndicator 				ProtocolIE-ID ::= 87
+id-Cells-Status-Item								ProtocolIE-ID ::= 88
+id-Cells-Status-List								ProtocolIE-ID ::= 89
+id-Candidate-SpCell-List							ProtocolIE-ID ::= 90
+id-Candidate-SpCell-Item							ProtocolIE-ID ::= 91
+id-Potential-SpCell-List							ProtocolIE-ID ::= 92
+id-Potential-SpCell-Item							ProtocolIE-ID ::= 93
+id-FullConfiguration								ProtocolIE-ID ::= 94
+id-C-RNTI											ProtocolIE-ID ::= 95
+id-SpCellULConfigured								ProtocolIE-ID ::= 96
+id-InactivityMonitoringRequest						ProtocolIE-ID ::= 97
+id-InactivityMonitoringResponse						ProtocolIE-ID ::= 98
+id-DRB-Activity-Item								ProtocolIE-ID ::= 99
+id-DRB-Activity-List								ProtocolIE-ID ::= 100
+id-EUTRA-NR-CellResourceCoordinationReq-Container 		ProtocolIE-ID ::= 101
+id-EUTRA-NR-CellResourceCoordinationReqAck-Container 	ProtocolIE-ID ::= 102
+id-Protected-EUTRA-Resources-List					ProtocolIE-ID ::= 105
+id-RequestType 										ProtocolIE-ID ::= 106
+id-ServCellIndex									ProtocolIE-ID ::= 107 
+id-RAT-FrequencyPriorityInformation					ProtocolIE-ID ::= 108
+id-ExecuteDuplication								ProtocolIE-ID ::= 109
+id-NRCGI											ProtocolIE-ID ::= 111
+id-PagingCell-Item									ProtocolIE-ID ::= 112
+id-PagingCell-List									ProtocolIE-ID ::= 113
+id-PagingDRX										ProtocolIE-ID ::= 114
+id-PagingPriority 									ProtocolIE-ID ::= 115
+id-SItype-List										ProtocolIE-ID ::= 116
+id-UEIdentityIndexValue								ProtocolIE-ID ::= 117
+id-gNB-CUSystemInformation							ProtocolIE-ID ::= 118
+id-HandoverPreparationInformation					ProtocolIE-ID ::= 119
+id-GNB-CU-TNL-Association-To-Add-Item				ProtocolIE-ID ::= 120
+id-GNB-CU-TNL-Association-To-Add-List				ProtocolIE-ID ::= 121
+id-GNB-CU-TNL-Association-To-Remove-Item			ProtocolIE-ID ::= 122
+id-GNB-CU-TNL-Association-To-Remove-List			ProtocolIE-ID ::= 123
+id-GNB-CU-TNL-Association-To-Update-Item			ProtocolIE-ID ::= 124
+id-GNB-CU-TNL-Association-To-Update-List			ProtocolIE-ID ::= 125
+id-MaskedIMEISV										ProtocolIE-ID ::= 126
+id-PagingIdentity									ProtocolIE-ID ::= 127
+id-DUtoCURRCContainer								ProtocolIE-ID ::= 128
+id-Cells-to-be-Barred-List							ProtocolIE-ID ::= 129
+id-Cells-to-be-Barred-Item							ProtocolIE-ID ::= 130
+id-TAISliceSupportList								ProtocolIE-ID ::= 131
+id-GNB-CU-TNL-Association-Setup-List				ProtocolIE-ID ::= 132
+id-GNB-CU-TNL-Association-Setup-Item				ProtocolIE-ID ::= 133
+id-GNB-CU-TNL-Association-Failed-To-Setup-List		ProtocolIE-ID ::= 134
+id-GNB-CU-TNL-Association-Failed-To-Setup-Item		ProtocolIE-ID ::= 135
+id-DRB-Notify-Item									ProtocolIE-ID ::= 136
+id-DRB-Notify-List									ProtocolIE-ID ::= 137
+id-NotficationControl								ProtocolIE-ID ::= 138
+id-RANAC											ProtocolIE-ID ::= 139
+id-PWSSystemInformation								ProtocolIE-ID ::= 140
+id-RepetitionPeriod									ProtocolIE-ID ::= 141
+id-NumberofBroadcastRequest							ProtocolIE-ID ::= 142
+id-Cells-To-Be-Broadcast-List						ProtocolIE-ID ::= 144
+id-Cells-To-Be-Broadcast-Item						ProtocolIE-ID ::= 145
+id-Cells-Broadcast-Completed-List 					ProtocolIE-ID ::= 146
+id-Cells-Broadcast-Completed-Item 					ProtocolIE-ID ::= 147
+id-Broadcast-To-Be-Cancelled-List 					ProtocolIE-ID ::= 148
+id-Broadcast-To-Be-Cancelled-Item 					ProtocolIE-ID ::= 149
+id-Cells-Broadcast-Cancelled-List 					ProtocolIE-ID ::= 150
+id-Cells-Broadcast-Cancelled-Item 					ProtocolIE-ID ::= 151
+id-NR-CGI-List-For-Restart-List 					ProtocolIE-ID ::= 152
+id-NR-CGI-List-For-Restart-Item 					ProtocolIE-ID ::= 153
+id-PWS-Failed-NR-CGI-List 							ProtocolIE-ID ::= 154
+id-PWS-Failed-NR-CGI-Item 							ProtocolIE-ID ::= 155
+id-ConfirmedUEID									ProtocolIE-ID ::= 156
+id-Cancel-all-Warning-Messages-Indicator			ProtocolIE-ID ::= 157
+id-GNB-DU-UE-AMBR-UL								ProtocolIE-ID ::= 158
+id-DRXConfigurationIndicator						ProtocolIE-ID ::= 159
+id-RLC-Status										ProtocolIE-ID ::= 160
+id-DLPDCPSNLength									ProtocolIE-ID ::= 161
+id-GNB-DUConfigurationQuery							ProtocolIE-ID ::= 162
+id-MeasurementTimingConfiguration					ProtocolIE-ID ::= 163
+id-DRB-Information									ProtocolIE-ID ::= 164
+id-ServingPLMN										ProtocolIE-ID ::= 165
+id-Protected-EUTRA-Resources-Item					ProtocolIE-ID ::= 168
+id-GNB-CU-RRC-Version								ProtocolIE-ID ::= 170
+id-GNB-DU-RRC-Version								ProtocolIE-ID ::= 171
+id-GNBDUOverloadInformation							ProtocolIE-ID ::= 172
+id-CellGroupConfig									ProtocolIE-ID ::= 173
+id-RLCFailureIndication								ProtocolIE-ID ::= 174
+id-UplinkTxDirectCurrentListInformation				ProtocolIE-ID ::= 175
+id-DC-Based-Duplication-Configured					ProtocolIE-ID ::= 176
+id-DC-Based-Duplication-Activation					ProtocolIE-ID ::= 177
+id-SULAccessIndication								ProtocolIE-ID ::= 178
+id-AvailablePLMNList								ProtocolIE-ID ::= 179
+id-PDUSessionID										ProtocolIE-ID ::= 180
+id-ULPDUSessionAggregateMaximumBitRate				ProtocolIE-ID ::= 181
+id-ServingCellMO									ProtocolIE-ID ::= 182
+id-QoSFlowMappingIndication							ProtocolIE-ID ::= 183
+id-RRCDeliveryStatusRequest							ProtocolIE-ID ::= 184
+id-RRCDeliveryStatus								ProtocolIE-ID ::= 185
+id-BearerTypeChange									ProtocolIE-ID ::= 186
+id-RLCMode											ProtocolIE-ID ::= 187
+id-Duplication-Activation							ProtocolIE-ID ::= 188
+id-Dedicated-SIDelivery-NeededUE-List				ProtocolIE-ID ::= 189
+id-Dedicated-SIDelivery-NeededUE-Item				ProtocolIE-ID ::= 190
+id-DRX-LongCycleStartOffset							ProtocolIE-ID ::= 191
+id-ULPDCPSNLength									ProtocolIE-ID ::= 192
+id-SelectedBandCombinationIndex						ProtocolIE-ID ::= 193
+id-SelectedFeatureSetEntryIndex						ProtocolIE-ID ::= 194
+id-ResourceCoordinationTransferInformation			ProtocolIE-ID ::= 195
+id-ExtendedServedPLMNs-List							ProtocolIE-ID ::= 196
+id-ExtendedAvailablePLMN-List						ProtocolIE-ID ::= 197
+id-Associated-SCell-List							ProtocolIE-ID ::= 198
+id-latest-RRC-Version-Enhanced						ProtocolIE-ID ::= 199
+id-Associated-SCell-Item							ProtocolIE-ID ::= 200
+id-Cell-Direction									ProtocolIE-ID ::= 201
+id-SRBs-Setup-List									ProtocolIE-ID ::= 202
+id-SRBs-Setup-Item									ProtocolIE-ID ::= 203
+id-SRBs-SetupMod-List								ProtocolIE-ID ::= 204
+id-SRBs-SetupMod-Item								ProtocolIE-ID ::= 205
+id-SRBs-Modified-List								ProtocolIE-ID ::= 206
+id-SRBs-Modified-Item								ProtocolIE-ID ::= 207
+id-Ph-InfoSCG										ProtocolIE-ID ::= 208
+id-RequestedBandCombinationIndex					ProtocolIE-ID ::= 209
+id-RequestedFeatureSetEntryIndex					ProtocolIE-ID ::= 210
+id-RequestedP-MaxFR2								ProtocolIE-ID ::= 211
+id-DRX-Config										ProtocolIE-ID ::= 212
+id-IgnoreResourceCoordinationContainer				ProtocolIE-ID ::= 213
+id-UEAssistanceInformation							ProtocolIE-ID ::= 214
+id-NeedforGap										ProtocolIE-ID ::= 215
+id-PagingOrigin										ProtocolIE-ID ::= 216
+id-new-gNB-CU-UE-F1AP-ID							ProtocolIE-ID ::= 217
+id-RedirectedRRCmessage								ProtocolIE-ID ::= 218
+id-new-gNB-DU-UE-F1AP-ID							ProtocolIE-ID ::= 219
+id-NotificationInformation							ProtocolIE-ID ::= 220
+id-PLMNAssistanceInfoForNetShar						ProtocolIE-ID ::= 221
+id-UEContextNotRetrievable							ProtocolIE-ID ::= 222
+id-BPLMN-ID-Info-List								ProtocolIE-ID ::= 223
+id-SelectedPLMNID									ProtocolIE-ID ::= 224
+id-UAC-Assistance-Info								ProtocolIE-ID ::= 225
+id-RANUEID											ProtocolIE-ID ::= 226
+id-GNB-DU-TNL-Association-To-Remove-Item			ProtocolIE-ID ::= 227
+id-GNB-DU-TNL-Association-To-Remove-List			ProtocolIE-ID ::= 228
+id-TNLAssociationTransportLayerAddressgNBDU			ProtocolIE-ID ::= 229
+id-portNumber										ProtocolIE-ID ::= 230
+id-AdditionalSIBMessageList							ProtocolIE-ID ::= 231
+id-Cell-Type										ProtocolIE-ID ::= 232
+id-IgnorePRACHConfiguration							ProtocolIE-ID ::= 233
+id-CG-Config										ProtocolIE-ID ::= 234
+id-PDCCH-BlindDetectionSCG							ProtocolIE-ID ::= 235
+id-Requested-PDCCH-BlindDetectionSCG				ProtocolIE-ID ::= 236
+id-Ph-InfoMCG										ProtocolIE-ID ::= 237
+id-MeasGapSharingConfig								ProtocolIE-ID ::= 238
+id-systemInformationAreaID							ProtocolIE-ID ::= 239
+id-areaScope										ProtocolIE-ID ::= 240
+id-RRCContainer-RRCSetupComplete					ProtocolIE-ID ::= 241
+id-TraceActivation									ProtocolIE-ID ::= 242
+id-TraceID											ProtocolIE-ID ::= 243
+id-Neighbour-Cell-Information-List					ProtocolIE-ID ::= 244
+id-SymbolAllocInSlot								ProtocolIE-ID ::= 246
+id-NumDLULSymbols									ProtocolIE-ID ::= 247
+id-AdditionalRRMPriorityIndex						ProtocolIE-ID ::= 248
+id-DUCURadioInformationType							ProtocolIE-ID ::= 249
+id-CUDURadioInformationType 						ProtocolIE-ID ::= 250
+id-AggressorgNBSetID								ProtocolIE-ID ::= 251
+id-VictimgNBSetID									ProtocolIE-ID ::= 252
+id-LowerLayerPresenceStatusChange					ProtocolIE-ID ::= 253
+id-Transport-Layer-Address-Info						ProtocolIE-ID ::= 254
+id-Neighbour-Cell-Information-Item					ProtocolIE-ID ::= 255
+id-IntendedTDD-DL-ULConfig							ProtocolIE-ID ::= 256
+id-QosMonitoringRequest								ProtocolIE-ID ::= 257
+id-BHChannels-ToBeSetup-List						ProtocolIE-ID ::= 258
+id-BHChannels-ToBeSetup-Item						ProtocolIE-ID ::= 259
+id-BHChannels-Setup-List							ProtocolIE-ID ::= 260
+id-BHChannels-Setup-Item							ProtocolIE-ID ::= 261
+id-BHChannels-ToBeModified-Item						ProtocolIE-ID ::= 262
+id-BHChannels-ToBeModified-List						ProtocolIE-ID ::= 263
+id-BHChannels-ToBeReleased-Item						ProtocolIE-ID ::= 264
+id-BHChannels-ToBeReleased-List						ProtocolIE-ID ::= 265
+id-BHChannels-ToBeSetupMod-Item						ProtocolIE-ID ::= 266
+id-BHChannels-ToBeSetupMod-List						ProtocolIE-ID ::= 267
+id-BHChannels-FailedToBeModified-Item				ProtocolIE-ID ::= 268
+id-BHChannels-FailedToBeModified-List				ProtocolIE-ID ::= 269
+id-BHChannels-FailedToBeSetupMod-Item				ProtocolIE-ID ::= 270
+id-BHChannels-FailedToBeSetupMod-List				ProtocolIE-ID ::= 271
+id-BHChannels-Modified-Item							ProtocolIE-ID ::= 272
+id-BHChannels-Modified-List							ProtocolIE-ID ::= 273
+id-BHChannels-SetupMod-Item							ProtocolIE-ID ::= 274
+id-BHChannels-SetupMod-List							ProtocolIE-ID ::= 275
+id-BHChannels-Required-ToBeReleased-Item			ProtocolIE-ID ::= 276
+id-BHChannels-Required-ToBeReleased-List			ProtocolIE-ID ::= 277
+id-BHChannels-FailedToBeSetup-Item					ProtocolIE-ID ::= 278
+id-BHChannels-FailedToBeSetup-List					ProtocolIE-ID ::= 279
+id-BHInfo											ProtocolIE-ID ::= 280
+id-BAPAddress										ProtocolIE-ID ::= 281
+id-ConfiguredBAPAddress								ProtocolIE-ID ::= 282
+id-BH-Routing-Information-Added-List				ProtocolIE-ID ::= 283
+id-BH-Routing-Information-Added-List-Item			ProtocolIE-ID ::= 284
+id-BH-Routing-Information-Removed-List				ProtocolIE-ID ::= 285
+id-BH-Routing-Information-Removed-List-Item			ProtocolIE-ID ::= 286
+id-UL-BH-Non-UP-Traffic-Mapping						ProtocolIE-ID ::= 287
+id-Activated-Cells-to-be-Updated-List				ProtocolIE-ID ::= 288
+id-Child-Nodes-List									ProtocolIE-ID ::= 289
+id-IAB-Info-IAB-DU									ProtocolIE-ID ::= 290
+id-IAB-Info-IAB-donor-CU							ProtocolIE-ID ::= 291
+id-IAB-TNL-Addresses-To-Remove-List					ProtocolIE-ID ::= 292
+id-IAB-TNL-Addresses-To-Remove-Item					ProtocolIE-ID ::= 293
+id-IAB-Allocated-TNL-Address-List					ProtocolIE-ID ::= 294
+id-IAB-Allocated-TNL-Address-Item					ProtocolIE-ID ::= 295
+id-IABIPv6RequestType								ProtocolIE-ID ::= 296
+id-IABv4AddressesRequested							ProtocolIE-ID ::= 297
+id-IAB-Barred										ProtocolIE-ID ::= 298
+id-TrafficMappingInformation						ProtocolIE-ID ::= 299
+id-UL-UP-TNL-Information-to-Update-List				ProtocolIE-ID ::= 300
+id-UL-UP-TNL-Information-to-Update-List-Item		ProtocolIE-ID ::= 301
+id-UL-UP-TNL-Address-to-Update-List					ProtocolIE-ID ::= 302
+id-UL-UP-TNL-Address-to-Update-List-Item			ProtocolIE-ID ::= 303
+id-DL-UP-TNL-Address-to-Update-List					ProtocolIE-ID ::= 304
+id-DL-UP-TNL-Address-to-Update-List-Item			ProtocolIE-ID ::= 305
+id-NRV2XServicesAuthorized							ProtocolIE-ID ::= 306
+id-LTEV2XServicesAuthorized							ProtocolIE-ID ::= 307
+id-NRUESidelinkAggregateMaximumBitrate				ProtocolIE-ID ::= 308
+id-LTEUESidelinkAggregateMaximumBitrate				ProtocolIE-ID ::= 309
+id-SIB12-message									ProtocolIE-ID ::= 310
+id-SIB13-message									ProtocolIE-ID ::= 311
+id-SIB14-message									ProtocolIE-ID ::= 312
+id-SLDRBs-FailedToBeModified-Item					ProtocolIE-ID ::= 313
+id-SLDRBs-FailedToBeModified-List					ProtocolIE-ID ::= 314
+id-SLDRBs-FailedToBeSetup-Item						ProtocolIE-ID ::= 315
+id-SLDRBs-FailedToBeSetup-List						ProtocolIE-ID ::= 316
+id-SLDRBs-Modified-Item								ProtocolIE-ID ::= 317
+id-SLDRBs-Modified-List								ProtocolIE-ID ::= 318
+id-SLDRBs-Required-ToBeModified-Item				ProtocolIE-ID ::= 319
+id-SLDRBs-Required-ToBeModified-List				ProtocolIE-ID ::= 320
+id-SLDRBs-Required-ToBeReleased-Item				ProtocolIE-ID ::= 321
+id-SLDRBs-Required-ToBeReleased-List				ProtocolIE-ID ::= 322
+id-SLDRBs-Setup-Item								ProtocolIE-ID ::= 323
+id-SLDRBs-Setup-List								ProtocolIE-ID ::= 324
+id-SLDRBs-ToBeModified-Item							ProtocolIE-ID ::= 325
+id-SLDRBs-ToBeModified-List							ProtocolIE-ID ::= 326
+id-SLDRBs-ToBeReleased-Item							ProtocolIE-ID ::= 327
+id-SLDRBs-ToBeReleased-List							ProtocolIE-ID ::= 328
+id-SLDRBs-ToBeSetup-Item							ProtocolIE-ID ::= 329
+id-SLDRBs-ToBeSetup-List							ProtocolIE-ID ::= 330
+id-SLDRBs-ToBeSetupMod-Item							ProtocolIE-ID ::= 331
+id-SLDRBs-ToBeSetupMod-List							ProtocolIE-ID ::= 332
+id-SLDRBs-SetupMod-List								ProtocolIE-ID ::= 333
+id-SLDRBs-FailedToBeSetupMod-List					ProtocolIE-ID ::= 334
+id-SLDRBs-SetupMod-Item								ProtocolIE-ID ::= 335
+id-SLDRBs-FailedToBeSetupMod-Item					ProtocolIE-ID ::= 336
+id-SLDRBs-ModifiedConf-List							ProtocolIE-ID ::= 337
+id-SLDRBs-ModifiedConf-Item							ProtocolIE-ID ::= 338
+id-UEAssistanceInformationEUTRA						ProtocolIE-ID ::= 339
+id-PC5LinkAMBR										ProtocolIE-ID ::= 340
+id-SL-PHY-MAC-RLC-Config							ProtocolIE-ID ::= 341
+id-SL-ConfigDedicatedEUTRA							ProtocolIE-ID ::= 342
+id-AlternativeQoSParaSetList						ProtocolIE-ID ::= 343
+id-CurrentQoSParaSetIndex							ProtocolIE-ID ::= 344
+id-gNBCUMeasurementID								ProtocolIE-ID ::= 345
+id-gNBDUMeasurementID								ProtocolIE-ID ::= 346
+id-RegistrationRequest								ProtocolIE-ID ::= 347
+id-ReportCharacteristics							ProtocolIE-ID ::= 348
+id-CellToReportList									ProtocolIE-ID ::= 349
+id-CellMeasurementResultList						ProtocolIE-ID ::= 350
+id-HardwareLoadIndicator							ProtocolIE-ID ::= 351
+id-ReportingPeriodicity								ProtocolIE-ID ::= 352
+id-TNLCapacityIndicator								ProtocolIE-ID ::= 353
+id-CarrierList										ProtocolIE-ID ::= 354
+id-ULCarrierList									ProtocolIE-ID ::= 355
+id-FrequencyShift7p5khz								ProtocolIE-ID ::= 356
+id-SSB-PositionsInBurst								ProtocolIE-ID ::= 357
+id-NRPRACHConfig									ProtocolIE-ID ::= 358
+id-RACHReportInformationList						ProtocolIE-ID ::= 359
+id-RLFReportInformationList							ProtocolIE-ID ::= 360
+id-TDD-UL-DLConfigCommonNR							ProtocolIE-ID ::= 361
+id-CNPacketDelayBudgetDownlink						ProtocolIE-ID ::= 362
+id-ExtendedPacketDelayBudget						ProtocolIE-ID ::= 363
+id-TSCTrafficCharacteristics						ProtocolIE-ID ::= 364
+id-ReportingRequestType								ProtocolIE-ID ::= 365
+id-TimeReferenceInformation							ProtocolIE-ID ::= 366
+id-CNPacketDelayBudgetUplink						ProtocolIE-ID ::= 369
+id-AdditionalPDCPDuplicationTNL-List				ProtocolIE-ID ::= 370
+id-RLCDuplicationInformation						ProtocolIE-ID ::= 371
+id-AdditionalDuplicationIndication					ProtocolIE-ID ::= 372
+id-ConditionalInterDUMobilityInformation			ProtocolIE-ID ::= 373
+id-ConditionalIntraDUMobilityInformation			ProtocolIE-ID ::= 374
+id-targetCellsToCancel								ProtocolIE-ID ::= 375
+id-requestedTargetCellGlobalID						ProtocolIE-ID ::= 376
+id-ManagementBasedMDTPLMNList						ProtocolIE-ID ::= 377
+id-TraceCollectionEntityIPAddress 					ProtocolIE-ID ::= 378
+id-PrivacyIndicator									ProtocolIE-ID ::= 379
+id-TraceCollectionEntityURI							ProtocolIE-ID ::= 380
+id-mdtConfiguration									ProtocolIE-ID ::= 381
+id-ServingNID										ProtocolIE-ID ::= 382
+id-NPNBroadcastInformation							ProtocolIE-ID ::= 383
+id-NPNSupportInfo									ProtocolIE-ID ::= 384
+id-NID												ProtocolIE-ID ::= 385
+id-AvailableSNPN-ID-List							ProtocolIE-ID ::= 386
+id-SIB10-message									ProtocolIE-ID ::= 387
+id-DLCarrierList									ProtocolIE-ID ::= 389
+	id-ExtendedTAISliceSupportList					ProtocolIE-ID ::= 390 
+id-RequestedSRSTransmissionCharacteristics			ProtocolIE-ID ::= 391
+id-PosAssistance-Information						ProtocolIE-ID ::= 392
+id-PosBroadcast										ProtocolIE-ID ::= 393
+id-RoutingID										ProtocolIE-ID ::= 394
+id-PosAssistanceInformationFailureList				ProtocolIE-ID ::= 395
+id-PosMeasurementQuantities							ProtocolIE-ID ::= 396
+id-PosMeasurementResultList							ProtocolIE-ID ::= 397
+id-TRPInformationTypeListTRPReq						ProtocolIE-ID ::= 398
+id-TRPInformationTypeItem							ProtocolIE-ID ::= 399
+id-TRPInformationListTRPResp						ProtocolIE-ID ::= 400
+id-TRPInformationItem								ProtocolIE-ID ::= 401
+id-LMF-MeasurementID								ProtocolIE-ID ::= 402
+id-SRSType									ProtocolIE-ID ::= 403
+id-ActivationTime								ProtocolIE-ID ::= 404
+id-AbortTransmission								ProtocolIE-ID ::= 405
+id-PositioningBroadcastCells							ProtocolIE-ID ::= 406
+id-SRSConfiguration								ProtocolIE-ID ::= 407
+id-PosReportCharacteristics							ProtocolIE-ID ::= 408
+id-PosMeasurementPeriodicity							ProtocolIE-ID ::= 409
+id-TRPList									ProtocolIE-ID ::= 410
+id-RAN-MeasurementID								ProtocolIE-ID ::= 411
+id-LMF-UE-MeasurementID								ProtocolIE-ID ::= 412
+id-RAN-UE-MeasurementID								ProtocolIE-ID ::= 413
+id-E-CID-MeasurementQuantities							ProtocolIE-ID ::= 414
+id-E-CID-MeasurementQuantities-Item						ProtocolIE-ID ::= 415
+id-E-CID-MeasurementPeriodicity							ProtocolIE-ID ::= 416
+id-E-CID-MeasurementResult							ProtocolIE-ID ::= 417
+id-Cell-Portion-ID								ProtocolIE-ID ::= 418
+id-SFNInitialisationTime							ProtocolIE-ID ::= 419
+id-SystemFrameNumber								ProtocolIE-ID ::= 420
+id-SlotNumber									ProtocolIE-ID ::= 421
+id-TRP-MeasurementRequestList							ProtocolIE-ID ::= 422
+id-MeasurementBeamInfoRequest							ProtocolIE-ID ::= 423
+id-E-CID-ReportCharacteristics							ProtocolIE-ID ::= 424
+id-ConfiguredTACIndication							ProtocolIE-ID ::= 425
+id-Extended-GNB-DU-Name								ProtocolIE-ID ::= 426
+id-Extended-GNB-CU-Name								ProtocolIE-ID ::= 427
+
+
+END
diff --git a/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-Containers.asn b/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-Containers.asn
new file mode 100644
index 0000000000000000000000000000000000000000..72c6d6e5512777355ab2e5f0dcb5db06dd4a0450
--- /dev/null
+++ b/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-Containers.asn
@@ -0,0 +1,178 @@
+F1AP-Containers {
+itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
+ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-Containers (5) }
+
+DEFINITIONS AUTOMATIC TAGS ::= 
+
+BEGIN
+
+-- **************************************************************
+--
+-- IE parameter types from other modules.
+--
+-- **************************************************************
+
+IMPORTS
+	Criticality,
+	Presence,
+	PrivateIE-ID,
+	ProtocolExtensionID,
+	ProtocolIE-ID
+
+FROM F1AP-CommonDataTypes
+	maxPrivateIEs,
+	maxProtocolExtensions,
+	maxProtocolIEs
+
+FROM F1AP-Constants;
+
+-- **************************************************************
+--
+-- Class Definition for Protocol IEs
+--
+-- **************************************************************
+
+F1AP-PROTOCOL-IES ::= CLASS {
+	&id				ProtocolIE-ID 					UNIQUE,
+	&criticality	Criticality,
+	&Value,
+	&presence		Presence
+}
+WITH SYNTAX {
+	ID				&id
+	CRITICALITY		&criticality
+	TYPE			&Value
+	PRESENCE		&presence
+}
+
+-- **************************************************************
+--
+-- Class Definition for Protocol IEs
+--
+-- **************************************************************
+
+F1AP-PROTOCOL-IES-PAIR ::= CLASS {
+	&id					ProtocolIE-ID 				UNIQUE,
+	&firstCriticality	Criticality,
+	&FirstValue,
+	&secondCriticality	Criticality,
+	&SecondValue,
+	&presence			Presence
+}
+WITH SYNTAX {
+	ID				&id
+	FIRST CRITICALITY		&firstCriticality
+	FIRST TYPE				&FirstValue
+	SECOND CRITICALITY		&secondCriticality
+	SECOND TYPE				&SecondValue
+	PRESENCE				&presence
+}
+
+-- **************************************************************
+--
+-- Class Definition for Protocol Extensions
+--
+-- **************************************************************
+
+F1AP-PROTOCOL-EXTENSION ::= CLASS {
+	&id				ProtocolExtensionID			UNIQUE,
+	&criticality	Criticality,
+	&Extension,
+	&presence		Presence
+}
+WITH SYNTAX {
+	ID				&id
+	CRITICALITY		&criticality
+	EXTENSION		&Extension
+	PRESENCE		&presence
+}
+
+-- **************************************************************
+--
+-- Class Definition for Private IEs
+--
+-- **************************************************************
+
+F1AP-PRIVATE-IES ::= CLASS {
+	&id				PrivateIE-ID,
+	&criticality	Criticality,
+	&Value,
+	&presence		Presence
+}
+WITH SYNTAX {
+	ID				&id
+	CRITICALITY		&criticality
+	TYPE			&Value
+	PRESENCE		&presence
+}
+
+-- **************************************************************
+--
+-- Container for Protocol IEs
+--
+-- **************************************************************
+
+ProtocolIE-Container {F1AP-PROTOCOL-IES : IEsSetParam} ::= 
+	SEQUENCE (SIZE (0..maxProtocolIEs)) OF
+	ProtocolIE-Field {{IEsSetParam}}
+
+ProtocolIE-SingleContainer {F1AP-PROTOCOL-IES : IEsSetParam} ::= 
+	ProtocolIE-Field {{IEsSetParam}}
+
+ProtocolIE-Field {F1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE {
+	id				F1AP-PROTOCOL-IES.&id				({IEsSetParam}),
+	criticality		F1AP-PROTOCOL-IES.&criticality		({IEsSetParam}{@id}),
+	value			F1AP-PROTOCOL-IES.&Value			({IEsSetParam}{@id})
+}
+
+-- **************************************************************
+--
+-- Container for Protocol IE Pairs
+--
+-- **************************************************************
+
+ProtocolIE-ContainerPair {F1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= 
+	SEQUENCE (SIZE (0..maxProtocolIEs)) OF
+	ProtocolIE-FieldPair {{IEsSetParam}}
+
+ProtocolIE-FieldPair {F1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE {
+	id					F1AP-PROTOCOL-IES-PAIR.&id					({IEsSetParam}),
+	firstCriticality	F1AP-PROTOCOL-IES-PAIR.&firstCriticality	({IEsSetParam}{@id}),
+	firstValue			F1AP-PROTOCOL-IES-PAIR.&FirstValue			({IEsSetParam}{@id}),
+	secondCriticality	F1AP-PROTOCOL-IES-PAIR.&secondCriticality	({IEsSetParam}{@id}),
+	secondValue			F1AP-PROTOCOL-IES-PAIR.&SecondValue			({IEsSetParam}{@id})
+}
+
+-- **************************************************************
+--
+-- Container for Protocol Extensions
+--
+-- **************************************************************
+
+ProtocolExtensionContainer {F1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= 
+	SEQUENCE (SIZE (1..maxProtocolExtensions)) OF
+	ProtocolExtensionField {{ExtensionSetParam}}
+
+ProtocolExtensionField {F1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE {
+	id					F1AP-PROTOCOL-EXTENSION.&id				({ExtensionSetParam}),
+	criticality			F1AP-PROTOCOL-EXTENSION.&criticality	({ExtensionSetParam}{@id}),
+	extensionValue		F1AP-PROTOCOL-EXTENSION.&Extension		({ExtensionSetParam}{@id})
+}
+
+-- **************************************************************
+--
+-- Container for Private IEs
+--
+-- **************************************************************
+
+PrivateIE-Container {F1AP-PRIVATE-IES : IEsSetParam } ::= 
+	SEQUENCE (SIZE (1.. maxPrivateIEs)) OF
+	PrivateIE-Field {{IEsSetParam}}
+
+PrivateIE-Field {F1AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE {
+	id					F1AP-PRIVATE-IES.&id				({IEsSetParam}),
+	criticality			F1AP-PRIVATE-IES.&criticality		({IEsSetParam}{@id}),
+	value				F1AP-PRIVATE-IES.&Value				({IEsSetParam}{@id})
+}
+
+END
diff --git a/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-IEs.asn b/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-IEs.asn
new file mode 100644
index 0000000000000000000000000000000000000000..3e02e1b27ee2d62c7d629766d062670636e838be
--- /dev/null
+++ b/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-IEs.asn
@@ -0,0 +1,5509 @@
+-- **************************************************************
+--
+-- Information Element Definitions
+--
+-- **************************************************************
+
+F1AP-IEs {
+itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
+ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-IEs (2) }
+
+DEFINITIONS AUTOMATIC TAGS ::= 
+
+BEGIN
+
+IMPORTS
+	id-gNB-CUSystemInformation,
+	id-HandoverPreparationInformation,
+	id-TAISliceSupportList,
+	id-RANAC,
+	id-BearerTypeChange,
+	id-Cell-Direction,
+	id-Cell-Type,
+	id-CellGroupConfig,
+	id-AvailablePLMNList,
+	id-PDUSessionID,
+	id-ULPDUSessionAggregateMaximumBitRate, 
+	id-DC-Based-Duplication-Configured,
+	id-DC-Based-Duplication-Activation,
+	id-Duplication-Activation,
+	id-DLPDCPSNLength,
+	id-ULPDCPSNLength,
+	id-RLC-Status,
+	id-MeasurementTimingConfiguration,
+	id-DRB-Information,
+	id-QoSFlowMappingIndication,
+	id-ServingCellMO,
+	id-RLCMode,
+	id-ExtendedServedPLMNs-List,
+	id-ExtendedAvailablePLMN-List,
+	id-DRX-LongCycleStartOffset,
+	id-SelectedBandCombinationIndex,
+	id-SelectedFeatureSetEntryIndex,
+	id-Ph-InfoSCG,
+	id-latest-RRC-Version-Enhanced,
+	id-RequestedBandCombinationIndex,
+	id-RequestedFeatureSetEntryIndex,
+	id-DRX-Config,
+	id-UEAssistanceInformation,
+	id-PDCCH-BlindDetectionSCG,
+	id-Requested-PDCCH-BlindDetectionSCG,
+	id-BPLMN-ID-Info-List,
+	id-NotificationInformation,
+	id-TNLAssociationTransportLayerAddressgNBDU,
+	id-portNumber,
+	id-AdditionalSIBMessageList,
+	id-IgnorePRACHConfiguration,
+	id-CG-Config,
+	id-Ph-InfoMCG,
+	id-AggressorgNBSetID,
+	id-VictimgNBSetID,
+	id-MeasGapSharingConfig,
+	id-systemInformationAreaID,
+	id-areaScope,
+	id-IntendedTDD-DL-ULConfig,
+	id-QosMonitoringRequest,
+	id-BHInfo,
+	id-IAB-Info-IAB-DU,
+	id-IAB-Info-IAB-donor-CU,
+	id-IAB-Barred,
+	id-SIB12-message,
+	id-SIB13-message,
+	id-SIB14-message,
+	id-UEAssistanceInformationEUTRA,
+	id-SL-PHY-MAC-RLC-Config,
+	id-SL-ConfigDedicatedEUTRA,
+	id-AlternativeQoSParaSetList,
+	id-CurrentQoSParaSetIndex,
+	id-CarrierList,
+	id-ULCarrierList,
+	id-FrequencyShift7p5khz,
+	id-SSB-PositionsInBurst,
+	id-NRPRACHConfig, 
+	id-TDD-UL-DLConfigCommonNR,
+	id-CNPacketDelayBudgetDownlink,
+	id-CNPacketDelayBudgetUplink,
+	id-ExtendedPacketDelayBudget,
+	id-TSCTrafficCharacteristics,
+	id-AdditionalPDCPDuplicationTNL-List,
+	id-RLCDuplicationInformation,
+	id-AdditionalDuplicationIndication,
+	id-mdtConfiguration,
+	id-TraceCollectionEntityURI,
+	id-NID,
+	id-NPNSupportInfo,
+	id-NPNBroadcastInformation,
+	id-AvailableSNPN-ID-List,
+	id-SIB10-message,
+	id-RequestedP-MaxFR2,
+	id-DLCarrierList,
+	id-ExtendedTAISliceSupportList,
+	id-E-CID-MeasurementQuantities-Item,
+	id-ConfiguredTACIndication,
+	maxNRARFCN,
+	maxnoofErrors,
+	maxnoofBPLMNs,
+	maxnoofBPLMNsNR,
+	maxnoofDLUPTNLInformation,
+	maxnoofNrCellBands,
+	maxnoofULUPTNLInformation,
+	maxnoofQoSFlows,
+	maxnoofSliceItems,
+	maxnoofSIBTypes,
+	maxnoofSITypes,
+	maxCellineNB,
+	maxnoofExtendedBPLMNs,
+	maxnoofAdditionalSIBs,
+	maxnoofUACPLMNs,
+	maxnoofUACperPLMN,
+	maxCellingNBDU,
+	maxnoofTLAs,
+	maxnoofGTPTLAs,
+	maxnoofslots,
+	maxnoofNonUPTrafficMappings,
+	maxnoofServingCells,
+	maxnoofServedCellsIAB,
+	maxnoofChildIABNodes,
+	maxnoofIABSTCInfo,
+	maxnoofSymbols,
+	maxnoofDUFSlots,
+	maxnoofHSNASlots,
+	maxnoofEgressLinks,
+	maxnoofMappingEntries,
+	maxnoofDSInfo,
+	maxnoofQoSParaSets,
+	maxnoofPC5QoSFlows,
+	maxnoofSSBAreas,
+	maxnoofBPLMNsNR,
+	maxnoofNRSCSs,
+	maxnoofPhysicalResourceBlocks,
+	maxnoofPhysicalResourceBlocks-1,
+	maxnoofPRACHconfigs,
+	maxnoofRACHReports,
+	maxnoofRLFReports,
+	maxnoofAdditionalPDCPDuplicationTNL,
+	maxnoofRLCDuplicationState,
+	maxnoofCHOcells,
+	maxnoofMDTPLMNs,
+	maxnoofCAGsupported,
+	maxnoofNIDsupported,
+	maxnoofNRSCSs,
+	maxnoofPhysicalResourceBlocks,
+	maxnoofExtSliceItems,
+	maxnoofPosMeas,
+	maxnoofTRPInfoTypes,
+	maxnoofSRSTriggerStates,
+	maxnoofSpatialRelations,
+	maxnoBcastCell,
+	maxnoofTRPs,
+	maxnoofAngleInfo,
+	maxnooflcs-gcs-translation,
+	maxnoofPath,
+	maxnoofMeasE-CID,
+	maxnoofSSBs,
+	maxnoSRS-ResourceSets,
+	maxnoSRS-ResourcePerSet,
+	maxnoSRS-Carriers,
+	maxnoSCSs,
+	maxnoSRS-Resources,
+	maxnoSRS-PosResources,
+	maxnoSRS-PosResourceSets,
+	maxnoSRS-PosResourcePerSet,
+	maxnoofPRS-ResourceSets,
+	maxnoofPRS-ResourcesPerSet,
+	maxNoOfMeasTRPs,
+	maxnoofPRSresourceSets,
+	maxnoofPRSresources
+
+
+
+FROM F1AP-Constants
+
+	Criticality,
+	ProcedureCode,
+	ProtocolIE-ID,
+	TriggeringMessage
+
+FROM F1AP-CommonDataTypes
+
+	ProtocolExtensionContainer{},
+	F1AP-PROTOCOL-EXTENSION,
+	ProtocolIE-SingleContainer{},
+	F1AP-PROTOCOL-IES
+
+FROM F1AP-Containers;
+
+-- A
+
+AbortTransmission ::= CHOICE {
+	sRSResourceSetID		SRSResourceSetID,
+	releaseALL				NULL,
+	choice-extension		ProtocolIE-SingleContainer { { AbortTransmission-ExtIEs } }
+}
+
+AbortTransmission-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+AccessPointPosition ::= SEQUENCE {
+	latitudeSign				ENUMERATED {north, south},
+	latitude					INTEGER (0..8388607),
+	longitude					INTEGER (-8388608..8388607),
+	directionOfAltitude			ENUMERATED {height, depth},
+	altitude					INTEGER (0..32767),
+	uncertaintySemi-major		INTEGER (0..127),
+	uncertaintySemi-minor		INTEGER (0..127),
+	orientationOfMajorAxis		INTEGER (0..179),
+	uncertaintyAltitude			INTEGER (0..127),
+	confidence					INTEGER (0..100),
+	iE-Extensions				ProtocolExtensionContainer { { AccessPointPosition-ExtIEs} } OPTIONAL
+}
+
+AccessPointPosition-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Activated-Cells-to-be-Updated-List ::= SEQUENCE (SIZE(1..maxnoofServedCellsIAB)) OF Activated-Cells-to-be-Updated-List-Item
+
+Activated-Cells-to-be-Updated-List-Item ::=	SEQUENCE{
+	nRCGI								NRCGI,
+	iAB-DU-Cell-Resource-Configuration-Mode-Info	IAB-DU-Cell-Resource-Configuration-Mode-Info,
+	iE-Extensions						ProtocolExtensionContainer { { Activated-Cells-to-be-Updated-List-Item-ExtIEs} } OPTIONAL
+}
+
+Activated-Cells-to-be-Updated-List-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ActiveULBWP  ::= SEQUENCE {
+	locationAndBandwidth		INTEGER (0..37949,...),
+	subcarrierSpacing           ENUMERATED {kHz15, kHz30, kHz60, kHz120,...},
+	cyclicPrefix				ENUMERATED {normal, extended},
+	txDirectCurrentLocation		INTEGER (0..3301,...),
+	shift7dot5kHz				ENUMERATED {true, ...} OPTIONAL,
+	sRSConfig					SRSConfig,
+	iE-Extensions					ProtocolExtensionContainer { { ActiveULBWP-ExtIEs} } OPTIONAL
+}
+
+ActiveULBWP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AdditionalDuplicationIndication ::= ENUMERATED { 
+	three,
+	four,
+	...
+}
+
+
+AdditionalPath-List::= SEQUENCE (SIZE(1..maxnoofPath)) OF AdditionalPath-Item
+
+AdditionalPath-Item ::=SEQUENCE {
+	relativePathDelay	RelativePathDelay, 
+	pathQuality			TRPMeasurementQuality 	OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { { AdditionalPath-Item-ExtIEs } }	OPTIONAL
+}
+
+AdditionalPath-Item-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+AdditionalPDCPDuplicationTNL-List ::= SEQUENCE (SIZE(1..maxnoofAdditionalPDCPDuplicationTNL)) OF AdditionalPDCPDuplicationTNL-Item
+
+AdditionalPDCPDuplicationTNL-Item ::=SEQUENCE {
+	additionalPDCPDuplicationUPTNLInformation		UPTransportLayerInformation, 
+	iE-Extensions	ProtocolExtensionContainer { { AdditionalPDCPDuplicationTNL-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+AdditionalPDCPDuplicationTNL-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AdditionalSIBMessageList ::= SEQUENCE (SIZE(1..maxnoofAdditionalSIBs)) OF AdditionalSIBMessageList-Item
+
+AdditionalSIBMessageList-Item ::= SEQUENCE {
+	additionalSIB			OCTET STRING,
+	iE-Extensions		ProtocolExtensionContainer { { AdditionalSIBMessageList-Item-ExtIEs} } OPTIONAL
+}
+
+AdditionalSIBMessageList-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AdditionalRRMPriorityIndex ::= BIT STRING (SIZE(32))
+
+AggressorCellList ::= SEQUENCE (SIZE(1..maxCellingNBDU)) OF AggressorCellList-Item
+
+AggressorCellList-Item ::= SEQUENCE {
+	aggressorCell-ID		NRCGI,
+	iE-Extensions	ProtocolExtensionContainer { { AggressorCellList-Item-ExtIEs } }		OPTIONAL
+}
+
+AggressorCellList-Item-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AggressorgNBSetID ::= SEQUENCE {
+	aggressorgNBSetID		GNBSetID,
+	iE-Extensions	ProtocolExtensionContainer { { AggressorgNBSetID-ExtIEs } }	OPTIONAL
+}
+
+AggressorgNBSetID-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AllocationAndRetentionPriority ::= SEQUENCE {
+	priorityLevel				PriorityLevel,
+	pre-emptionCapability		Pre-emptionCapability,
+	pre-emptionVulnerability	Pre-emptionVulnerability,
+	iE-Extensions				ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL,
+	...
+}
+
+AllocationAndRetentionPriority-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AlternativeQoSParaSetList ::= SEQUENCE (SIZE(1..maxnoofQoSParaSets)) OF AlternativeQoSParaSetItem
+
+AlternativeQoSParaSetItem ::= SEQUENCE {
+	alternativeQoSParaSetIndex			QoSParaSetIndex,
+	guaranteedFlowBitRateDL				BitRate					OPTIONAL,
+	guaranteedFlowBitRateUL				BitRate					OPTIONAL,
+	packetDelayBudget					PacketDelayBudget		OPTIONAL,
+	packetErrorRate						PacketErrorRate			OPTIONAL,
+	iE-Extensions						ProtocolExtensionContainer { {AlternativeQoSParaSetItem-ExtIEs} }	OPTIONAL,
+	...
+}
+
+AlternativeQoSParaSetItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+AngleMeasurementQuality ::= SEQUENCE {
+	azimuthQuality	INTEGER(0..255),
+	zenithQuality	INTEGER(0..255) OPTIONAL,
+	resolution		ENUMERATED{deg0dot1,...},
+	iE-Extensions	ProtocolExtensionContainer { { AngleMeasurementQuality-ExtIEs } }	OPTIONAL
+}
+
+AngleMeasurementQuality-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+AperiodicSRSResourceTriggerList ::= SEQUENCE (SIZE(1..maxnoofSRSTriggerStates)) OF AperiodicSRSResourceTrigger
+
+AperiodicSRSResourceTrigger ::= INTEGER (0..3, ...)
+
+Associated-SCell-Item ::= SEQUENCE {
+	sCell-ID		NRCGI,
+	iE-Extensions	ProtocolExtensionContainer { { Associated-SCell-ItemExtIEs } }	OPTIONAL
+}
+
+Associated-SCell-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AvailablePLMNList ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF AvailablePLMNList-Item
+
+AvailablePLMNList-Item ::= SEQUENCE {
+	pLMNIdentity			PLMN-Identity,
+	iE-Extensions		ProtocolExtensionContainer { { AvailablePLMNList-Item-ExtIEs} } OPTIONAL
+}
+
+AvailablePLMNList-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AvailableSNPN-ID-List ::= SEQUENCE (SIZE(1..maxnoofNIDsupported)) OF AvailableSNPN-ID-List-Item
+
+AvailableSNPN-ID-List-Item ::= SEQUENCE {
+	pLMN-Identity				PLMN-Identity,
+	availableNIDList			BroadcastNIDList,
+	iE-Extensions				ProtocolExtensionContainer { { AvailableSNPN-ID-List-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+AvailableSNPN-ID-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AveragingWindow  ::= INTEGER (0..4095, ...) 
+
+AreaScope ::= ENUMERATED {true, ...}
+
+-- B
+
+BandwidthSRS ::= CHOICE { 
+	fR1								FR1-Bandwidth,
+	fR2								FR2-Bandwidth,
+	choice-extension				ProtocolIE-SingleContainer {{ BandwidthSRS-ExtIEs }}
+}
+
+BandwidthSRS-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+
+BAPAddress ::= BIT STRING (SIZE(10))
+
+BAPCtrlPDUChannel ::= ENUMERATED {true, ...}
+
+BAPlayerBHRLCchannelMappingInfo ::= SEQUENCE {
+	bAPlayerBHRLCchannelMappingInfoToAdd			BAPlayerBHRLCchannelMappingInfoList			OPTIONAL,
+	bAPlayerBHRLCchannelMappingInfoToRemove			MappingInformationtoRemove					OPTIONAL,
+	iE-Extensions									ProtocolExtensionContainer { { BAPlayerBHRLCchannelMappingInfo-ExtIEs} } OPTIONAL,
+	...
+}
+
+BAPlayerBHRLCchannelMappingInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BAPlayerBHRLCchannelMappingInfoList ::= SEQUENCE (SIZE(1..maxnoofMappingEntries)) OF BAPlayerBHRLCchannelMappingInfo-Item
+
+BAPlayerBHRLCchannelMappingInfo-Item ::= SEQUENCE {
+	mappingInformationIndex			MappingInformationIndex,		
+	priorHopBAPAddress				BAPAddress		OPTIONAL,		
+	ingressbHRLCChannelID			BHRLCChannelID		OPTIONAL,		
+	nextHopBAPAddress				BAPAddress		OPTIONAL,		
+	egressbHRLCChannelID			BHRLCChannelID		OPTIONAL,		
+	iE-Extensions					ProtocolExtensionContainer { { BAPlayerBHRLCchannelMappingInfo-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+BAPlayerBHRLCchannelMappingInfo-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BAPPathID ::= BIT STRING (SIZE(10))
+
+BAPRoutingID ::= SEQUENCE {
+	bAPAddress		BAPAddress,
+	bAPPathID		BAPPathID,
+	iE-Extensions	ProtocolExtensionContainer { { BAPRoutingIDExtIEs } }	OPTIONAL
+}
+
+BAPRoutingIDExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BitRate ::= INTEGER (0..4000000000000,...)
+
+BearerTypeChange ::= ENUMERATED {true, ...}
+
+BHRLCChannelID ::= BIT STRING (SIZE(16))
+
+BHChannels-FailedToBeModified-Item ::= SEQUENCE {
+	bHRLCChannelID		BHRLCChannelID,
+	cause		Cause		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-FailedToBeModified-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-FailedToBeModified-ItemExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-FailedToBeSetup-Item ::= SEQUENCE {
+	bHRLCChannelID		BHRLCChannelID,
+	cause	Cause	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-FailedToBeSetup-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-FailedToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-FailedToBeSetupMod-Item ::= SEQUENCE {
+	bHRLCChannelID		BHRLCChannelID,
+	cause		Cause			OPTIONAL ,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-FailedToBeSetupMod-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-FailedToBeSetupMod-ItemExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-Modified-Item ::= SEQUENCE {
+	bHRLCChannelID			BHRLCChannelID,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-Modified-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-Modified-ItemExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-Required-ToBeReleased-Item ::= SEQUENCE {
+	bHRLCChannelID		BHRLCChannelID,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-Required-ToBeReleased-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-Required-ToBeReleased-ItemExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-Setup-Item ::= SEQUENCE {
+	bHRLCChannelID							BHRLCChannelID,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-Setup-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-Setup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-SetupMod-Item ::= SEQUENCE {
+	bHRLCChannelID							BHRLCChannelID,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-SetupMod-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-SetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-ToBeModified-Item ::= SEQUENCE {
+	bHRLCChannelID					BHRLCChannelID,
+	bHQoSInformation				BHQoSInformation,
+	rLCmode				RLCMode	OPTIONAL,
+	bAPCtrlPDUChannel	BAPCtrlPDUChannel		OPTIONAL,
+	trafficMappingInfo	TrafficMappingInfo		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-ToBeModified-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-ToBeModified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-ToBeReleased-Item ::= SEQUENCE {
+	bHRLCChannelID		BHRLCChannelID,
+	iE-Extensions	ProtocolExtensionContainer { { BHChannels-ToBeReleased-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-ToBeReleased-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-ToBeSetup-Item ::= SEQUENCE	{
+	bHRLCChannelID						BHRLCChannelID,
+	bHQoSInformation					BHQoSInformation,
+	rLCmode								RLCMode,
+	bAPCtrlPDUChannel					BAPCtrlPDUChannel		OPTIONAL,
+	trafficMappingInfo					TrafficMappingInfo		OPTIONAL,
+	iE-Extensions						ProtocolExtensionContainer { { BHChannels-ToBeSetup-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-ToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHChannels-ToBeSetupMod-Item ::= SEQUENCE {
+	bHRLCChannelID				BHRLCChannelID,
+	bHQoSInformation			BHQoSInformation,
+	rLCmode				RLCMode,
+	bAPCtrlPDUChannel	BAPCtrlPDUChannel		OPTIONAL,
+	trafficMappingInfo	TrafficMappingInfo		OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { { BHChannels-ToBeSetupMod-ItemExtIEs } }	OPTIONAL
+}
+
+BHChannels-ToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHInfo ::= SEQUENCE {
+	bAProutingID			BAPRoutingID 	OPTIONAL,
+	egressBHRLCCHList		EgressBHRLCCHList	OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer { { BHInfo-ExtIEs} } OPTIONAL
+}
+
+BHInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BHQoSInformation ::= CHOICE {
+	bHRLCCHQoS					QoSFlowLevelQoSParameters,	
+	eUTRANBHRLCCHQoS			EUTRANQoS,
+	cPTrafficType				CPTrafficType,
+	choice-extension			ProtocolIE-SingleContainer { { BHQoSInformation-ExtIEs} }
+}
+
+BHQoSInformation-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+BH-Routing-Information-Added-List-Item ::= SEQUENCE {
+	bAPRoutingID				BAPRoutingID,
+	nextHopBAPAddress			BAPAddress,
+	iE-Extensions				ProtocolExtensionContainer { { BH-Routing-Information-Added-List-ItemExtIEs} }	OPTIONAL
+}
+
+BH-Routing-Information-Added-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BH-Routing-Information-Removed-List-Item ::= SEQUENCE {
+	bAPRoutingID				BAPRoutingID,
+	iE-Extensions				ProtocolExtensionContainer { { BH-Routing-Information-Removed-List-ItemExtIEs} }	OPTIONAL
+}
+
+BH-Routing-Information-Removed-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BPLMN-ID-Info-List ::= SEQUENCE (SIZE(1..maxnoofBPLMNsNR)) OF BPLMN-ID-Info-Item
+
+BPLMN-ID-Info-Item ::= SEQUENCE {
+	pLMN-Identity-List			AvailablePLMNList,
+	extended-PLMN-Identity-List	ExtendedAvailablePLMN-List	OPTIONAL,
+	fiveGS-TAC					FiveGS-TAC					OPTIONAL,
+	nr-cell-ID					NRCellIdentity,
+	ranac						RANAC						OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { BPLMN-ID-Info-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+BPLMN-ID-Info-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{	ID id-ConfiguredTACIndication		CRITICALITY ignore	EXTENSION ConfiguredTACIndication		PRESENCE optional }|
+	{	ID id-NPNBroadcastInformation		CRITICALITY reject EXTENSION NPNBroadcastInformation		PRESENCE optional},
+	...
+}
+
+ServedPLMNs-List ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF ServedPLMNs-Item
+
+ServedPLMNs-Item ::= SEQUENCE {
+	pLMN-Identity				PLMN-Identity,
+	iE-Extensions				ProtocolExtensionContainer { { ServedPLMNs-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+ServedPLMNs-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+{ ID id-TAISliceSupportList	CRITICALITY ignore	EXTENSION SliceSupportList		PRESENCE optional	}|
+{ ID id-NPNSupportInfo	CRITICALITY reject	EXTENSION NPNSupportInfo		PRESENCE optional	}|
+{ ID id-ExtendedTAISliceSupportList	CRITICALITY reject	EXTENSION ExtendedSliceSupportList		PRESENCE optional	},
+	...
+}
+
+BroadcastCAGList ::= SEQUENCE (SIZE(1..maxnoofCAGsupported)) OF CAGID
+
+BroadcastNIDList ::= SEQUENCE (SIZE(1..maxnoofNIDsupported)) OF NID
+
+BroadcastSNPN-ID-List ::= SEQUENCE (SIZE(1..maxnoofNIDsupported)) OF BroadcastSNPN-ID-List-Item
+
+BroadcastSNPN-ID-List-Item ::= SEQUENCE {
+	pLMN-Identity				PLMN-Identity,
+	broadcastNIDList			BroadcastNIDList,
+	iE-Extensions				ProtocolExtensionContainer { { BroadcastSNPN-ID-List-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+BroadcastSNPN-ID-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+BroadcastPNI-NPN-ID-List ::= SEQUENCE (SIZE(1..maxnoofCAGsupported)) OF BroadcastPNI-NPN-ID-List-Item
+
+BroadcastPNI-NPN-ID-List-Item ::= SEQUENCE {
+	pLMN-Identity				PLMN-Identity,
+	broadcastCAGList			BroadcastCAGList,
+	iE-Extensions				ProtocolExtensionContainer { { BroadcastPNI-NPN-ID-List-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+BroadcastPNI-NPN-ID-List-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+BurstArrivalTime ::= OCTET STRING
+
+-- C
+CAGID ::= BIT STRING (SIZE(32))
+
+Cancel-all-Warning-Messages-Indicator ::= ENUMERATED {true, ...}
+
+Candidate-SpCell-Item ::= SEQUENCE {
+	candidate-SpCell-ID			NRCGI	,
+	iE-Extensions	ProtocolExtensionContainer { { Candidate-SpCell-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Candidate-SpCell-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+CapacityValue::= SEQUENCE {
+	capacityValue				INTEGER (0..100),
+	sSBAreaCapacityValueList	SSBAreaCapacityValueList		OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { CapacityValue-ExtIEs} } OPTIONAL
+}
+
+CapacityValue-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Cause ::= CHOICE {
+	radioNetwork		CauseRadioNetwork,
+	transport			CauseTransport,
+	protocol			CauseProtocol,
+	misc				CauseMisc,
+	choice-extension	ProtocolIE-SingleContainer { { Cause-ExtIEs} }
+}
+
+Cause-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+CauseMisc ::= ENUMERATED {
+	control-processing-overload,
+	not-enough-user-plane-processing-resources,
+	hardware-failure,
+	om-intervention,
+	unspecified,
+	...
+}
+
+CauseProtocol ::= ENUMERATED {
+	transfer-syntax-error,
+	abstract-syntax-error-reject,
+	abstract-syntax-error-ignore-and-notify,
+	message-not-compatible-with-receiver-state,
+	semantic-error,
+	abstract-syntax-error-falsely-constructed-message,
+	unspecified,
+	...
+}
+
+CauseRadioNetwork ::= ENUMERATED {
+	unspecified,
+	rl-failure-rlc,
+	unknown-or-already-allocated-gnb-cu-ue-f1ap-id,
+	unknown-or-already-allocated-gnb-du-ue-f1ap-id,
+	unknown-or-inconsistent-pair-of-ue-f1ap-id,
+	interaction-with-other-procedure,
+	not-supported-qci-Value,
+	action-desirable-for-radio-reasons,
+	no-radio-resources-available,
+	procedure-cancelled,
+	normal-release,
+	...,
+	cell-not-available,
+	rl-failure-others,
+	ue-rejection,
+	resources-not-available-for-the-slice,
+	amf-initiated-abnormal-release,
+	release-due-to-pre-emption,
+	plmn-not-served-by-the-gNB-CU,
+	multiple-drb-id-instances,
+	unknown-drb-id,
+	multiple-bh-rlc-ch-id-instances,
+	unknown-bh-rlc-ch-id,
+	cho-cpc-resources-tobechanged,
+	nPN-not-supported, 
+	nPN-access-denied,
+	gNB-CU-Cell-Capacity-Exceeded,
+	report-characteristics-empty,
+	existing-measurement-ID,
+	measurement-temporarily-not-available,
+	measurement-not-supported-for-the-object
+
+}
+
+CauseTransport ::= ENUMERATED {
+	unspecified,
+	transport-resource-unavailable,
+	...,
+	unknown-TNL-address-for-IAB,
+	unknown-UP-TNL-information-for-IAB
+}
+
+CellGroupConfig ::= OCTET STRING
+
+CellCapacityClassValue ::= INTEGER (1..100,...)
+
+Cell-Direction ::= ENUMERATED {dl-only, ul-only}
+
+CellMeasurementResultList ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF CellMeasurementResultItem
+
+CellMeasurementResultItem ::= SEQUENCE {
+	cellID							NRCGI,
+	radioResourceStatus				RadioResourceStatus 			OPTIONAL, 
+	compositeAvailableCapacityGroup	CompositeAvailableCapacityGroup	OPTIONAL,
+	sliceAvailableCapacity			SliceAvailableCapacity 			OPTIONAL, 
+	numberofActiveUEs 				NumberofActiveUEs			OPTIONAL, 
+	iE-Extensions					ProtocolExtensionContainer { { CellMeasurementResultItem-ExtIEs} } OPTIONAL
+}
+
+CellMeasurementResultItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Cell-Portion-ID ::= INTEGER (0..4095,...)
+
+Cells-Failed-to-be-Activated-List-Item ::= SEQUENCE {
+	nRCGI				NRCGI,
+	cause				Cause,
+	iE-Extensions		ProtocolExtensionContainer { { Cells-Failed-to-be-Activated-List-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Cells-Failed-to-be-Activated-List-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Cells-Status-Item ::= SEQUENCE {
+	nRCGI			NRCGI,
+	service-status		Service-Status,
+	iE-Extensions				ProtocolExtensionContainer { { Cells-Status-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Cells-Status-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Cells-To-Be-Broadcast-Item ::= SEQUENCE {
+	nRCGI				NRCGI,
+	iE-Extensions		ProtocolExtensionContainer { { Cells-To-Be-Broadcast-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Cells-To-Be-Broadcast-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Cells-Broadcast-Completed-Item ::= SEQUENCE {
+	nRCGI				NRCGI,
+	iE-Extensions		ProtocolExtensionContainer { { Cells-Broadcast-Completed-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Cells-Broadcast-Completed-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Broadcast-To-Be-Cancelled-Item ::= SEQUENCE {
+	nRCGI				NRCGI,
+	iE-Extensions		ProtocolExtensionContainer { { Broadcast-To-Be-Cancelled-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Broadcast-To-Be-Cancelled-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+Cells-Broadcast-Cancelled-Item ::= SEQUENCE {
+	nRCGI				NRCGI,
+	numberOfBroadcasts	NumberOfBroadcasts,
+	iE-Extensions		ProtocolExtensionContainer { { Cells-Broadcast-Cancelled-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Cells-Broadcast-Cancelled-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Cells-to-be-Activated-List-Item ::= SEQUENCE {
+	nRCGI		NRCGI,
+	nRPCI		NRPCI		OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { Cells-to-be-Activated-List-ItemExtIEs} }	OPTIONAL,
+	...
+}
+
+Cells-to-be-Activated-List-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-gNB-CUSystemInformation			CRITICALITY reject	EXTENSION GNB-CUSystemInformation			PRESENCE optional }|
+	{ ID id-AvailablePLMNList				CRITICALITY ignore	EXTENSION AvailablePLMNList					PRESENCE optional }|
+	{ ID id-ExtendedAvailablePLMN-List		CRITICALITY ignore	EXTENSION ExtendedAvailablePLMN-List		PRESENCE optional }|
+	{ ID id-IAB-Info-IAB-donor-CU			CRITICALITY ignore	EXTENSION IAB-Info-IAB-donor-CU				PRESENCE optional}|
+	{ ID id-AvailableSNPN-ID-List			CRITICALITY ignore	EXTENSION AvailableSNPN-ID-List				PRESENCE optional },
+	...
+}
+
+Cells-to-be-Deactivated-List-Item ::= SEQUENCE {
+	nRCGI			NRCGI	,
+	iE-Extensions				ProtocolExtensionContainer { { Cells-to-be-Deactivated-List-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Cells-to-be-Deactivated-List-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Cells-to-be-Barred-Item::= SEQUENCE {
+	nRCGI			NRCGI	,
+	cellBarred		CellBarred,
+	iE-Extensions				ProtocolExtensionContainer { { Cells-to-be-Barred-Item-ExtIEs } }	OPTIONAL
+}
+
+Cells-to-be-Barred-Item-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-IAB-Barred	CRITICALITY ignore	EXTENSION IAB-Barred		PRESENCE optional },
+
+	...
+}
+
+
+CellBarred	::=	ENUMERATED {barred, not-barred, ...}
+
+CellSize ::= ENUMERATED {verysmall, small, medium, large, ...}
+
+CellToReportList ::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF CellToReportItem
+
+CellToReportItem ::= SEQUENCE {
+	cellID		NRCGI,
+	sSBToReportList		SSBToReportList		 OPTIONAL,
+	sliceToReportList	SliceToReportList	 OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { CellToReportItem-ExtIEs} } OPTIONAL
+}
+
+CellToReportItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+CellType ::= SEQUENCE {
+	cellSize		CellSize,
+	iE-Extensions		ProtocolExtensionContainer { {CellType-ExtIEs} }	OPTIONAL,
+	...
+}
+
+CellType-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+CellULConfigured ::=  ENUMERATED {none, ul, sul, ul-and-sul, ...}
+
+Child-Node-Cells-List ::= SEQUENCE (SIZE(1..maxnoofChildIABNodes)) OF Child-Node-Cells-List-Item
+
+Child-Node-Cells-List-Item ::=	SEQUENCE{
+	nRCGI 								NRCGI,
+	iAB-DU-Cell-Resource-Configuration-Mode-Info 	IAB-DU-Cell-Resource-Configuration-Mode-Info	OPTIONAL,
+	iAB-STC-Info						IAB-STC-Info	OPTIONAL,
+	rACH-Config-Common					RACH-Config-Common	OPTIONAL,
+	rACH-Config-Common-IAB				RACH-Config-Common-IAB	OPTIONAL,
+	cSI-RS-Configuration				OCTET STRING	OPTIONAL,
+	sR-Configuration					OCTET STRING	OPTIONAL,
+	pDCCH-ConfigSIB1					OCTET STRING	OPTIONAL,
+	sCS-Common							OCTET STRING	OPTIONAL,
+	multiplexingInfo					MultiplexingInfo	OPTIONAL,
+	iE-Extensions						ProtocolExtensionContainer {{Child-Node-Cells-List-Item-ExtIEs}}		OPTIONAL
+}
+
+Child-Node-Cells-List-Item-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Child-Nodes-List ::= SEQUENCE (SIZE(1..maxnoofChildIABNodes)) OF Child-Nodes-List-Item
+
+Child-Nodes-List-Item ::= SEQUENCE{
+	gNB-CU-UE-F1AP-ID	GNB-CU-UE-F1AP-ID,
+	gNB-DU-UE-F1AP-ID	GNB-DU-UE-F1AP-ID,
+	child-Node-Cells-List 	Child-Node-Cells-List	OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer {{Child-Nodes-List-Item-ExtIEs}}		OPTIONAL
+}
+
+Child-Nodes-List-Item-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+CHOtrigger-InterDU ::= ENUMERATED {
+	cho-initiation,
+	cho-replace,
+	...
+}
+
+CHOtrigger-IntraDU ::= ENUMERATED {
+	cho-initiation,
+	cho-replace,
+	cho-cancel,
+	...
+}
+
+CNUEPagingIdentity ::= CHOICE {
+	fiveG-S-TMSI			BIT STRING (SIZE(48)),
+	choice-extension			ProtocolIE-SingleContainer { { CNUEPagingIdentity-ExtIEs } }
+}
+
+CNUEPagingIdentity-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+CompositeAvailableCapacityGroup ::= SEQUENCE {
+	compositeAvailableCapacityDownlink	CompositeAvailableCapacity,
+	compositeAvailableCapacityUplink 	CompositeAvailableCapacity,
+	iE-Extensions	ProtocolExtensionContainer { { CompositeAvailableCapacityGroup-ExtIEs} } OPTIONAL
+}
+
+CompositeAvailableCapacityGroup-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+CompositeAvailableCapacity ::= SEQUENCE {
+	cellCapacityClassValue 	CellCapacityClassValue		OPTIONAL,
+	capacityValue			CapacityValue,
+	iE-Extensions	ProtocolExtensionContainer { { CompositeAvailableCapacity-ExtIEs} } OPTIONAL
+}
+
+CompositeAvailableCapacity-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ConditionalInterDUMobilityInformation ::= SEQUENCE {
+	cho-trigger						CHOtrigger-InterDU,
+	targetgNB-DUUEF1APID			GNB-DU-UE-F1AP-ID							OPTIONAL
+		-- This IE shall be present if the cho-trigger IE is present and set to "cho-replace" --,
+	iE-Extensions					ProtocolExtensionContainer { { ConditionalInterDUMobilityInformation-ExtIEs} }	OPTIONAL,
+	...
+}
+
+ConditionalInterDUMobilityInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::={
+	...
+}
+
+ConditionalIntraDUMobilityInformation ::= SEQUENCE {
+	cho-trigger						CHOtrigger-IntraDU,
+	targetCellsTocancel				TargetCellList								OPTIONAL,
+	-- This IE may be present if the cho-trigger IE is present and set to "cho-cancel"
+	iE-Extensions					ProtocolExtensionContainer { { ConditionalIntraDUMobilityInformation-ExtIEs} }	OPTIONAL,
+	...
+}
+
+ConditionalIntraDUMobilityInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::={
+	...
+}
+
+ConfiguredTACIndication ::= ENUMERATED {
+	true,
+	...
+}
+
+
+CoordinateID ::= INTEGER (0..511, ...)
+
+CP-TransportLayerAddress ::= CHOICE {
+	endpoint-IP-address				TransportLayerAddress,
+	endpoint-IP-address-and-port	Endpoint-IP-address-and-port, 
+	choice-extension				ProtocolIE-SingleContainer { { CP-TransportLayerAddress-ExtIEs } }
+}
+
+CP-TransportLayerAddress-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+CPTrafficType ::= INTEGER (1..3,...)
+
+CriticalityDiagnostics ::= SEQUENCE {
+	procedureCode					ProcedureCode														OPTIONAL,
+	triggeringMessage				TriggeringMessage													OPTIONAL,
+	procedureCriticality			Criticality															OPTIONAL,
+	transactionID					TransactionID														OPTIONAL,
+	iEsCriticalityDiagnostics		CriticalityDiagnostics-IE-List										OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer {{CriticalityDiagnostics-ExtIEs}}		OPTIONAL,
+	...
+}
+
+CriticalityDiagnostics-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1.. maxnoofErrors)) OF CriticalityDiagnostics-IE-Item
+
+CriticalityDiagnostics-IE-Item ::= SEQUENCE {
+	iECriticality			Criticality,
+	iE-ID					ProtocolIE-ID,
+	typeOfError 			TypeOfError,
+	iE-Extensions			ProtocolExtensionContainer {{CriticalityDiagnostics-IE-Item-ExtIEs}}	OPTIONAL,
+	...
+}
+
+CriticalityDiagnostics-IE-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+C-RNTI ::= INTEGER (0..65535, ...)
+
+CUDURadioInformationType ::= CHOICE {
+	rIM								CUDURIMInformation,
+	choice-extension				ProtocolIE-SingleContainer { { CUDURadioInformationType-ExtIEs} }
+}
+
+CUDURadioInformationType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+CUDURIMInformation ::= SEQUENCE {
+	victimgNBSetID			GNBSetID, 
+	rIMRSDetectionStatus	RIMRSDetectionStatus,
+	iE-Extensions			ProtocolExtensionContainer { { CUDURIMInformation-ExtIEs} }	OPTIONAL
+}
+
+CUDURIMInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+CUtoDURRCInformation ::= SEQUENCE {
+	cG-ConfigInfo						CG-ConfigInfo						OPTIONAL,
+	uE-CapabilityRAT-ContainerList		UE-CapabilityRAT-ContainerList		OPTIONAL,
+	measConfig							MeasConfig							OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { CUtoDURRCInformation-ExtIEs} } OPTIONAL,
+	...
+}
+
+CUtoDURRCInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-HandoverPreparationInformation	CRITICALITY ignore	EXTENSION HandoverPreparationInformation		PRESENCE optional }|
+	{ ID id-CellGroupConfig					CRITICALITY ignore	EXTENSION CellGroupConfig							PRESENCE optional }|
+	{ ID id-MeasurementTimingConfiguration	CRITICALITY ignore	EXTENSION MeasurementTimingConfiguration		PRESENCE optional }|
+	{ ID id-UEAssistanceInformation			CRITICALITY ignore	EXTENSION UEAssistanceInformation					PRESENCE optional }|
+	{ ID id-CG-Config						CRITICALITY ignore	EXTENSION CG-Config									PRESENCE optional }|
+	{ ID id-UEAssistanceInformationEUTRA	CRITICALITY ignore	EXTENSION UEAssistanceInformationEUTRA			PRESENCE optional },
+	...
+}
+
+-- D
+
+DCBasedDuplicationConfigured::= ENUMERATED{true,..., false}
+
+Dedicated-SIDelivery-NeededUE-Item ::= SEQUENCE {
+	gNB-CU-UE-F1AP-ID						GNB-CU-UE-F1AP-ID,
+	nRCGI									NRCGI,
+	iE-Extensions							ProtocolExtensionContainer { { DedicatedSIDeliveryNeededUE-Item-ExtIEs} } OPTIONAL,
+	...
+}
+
+DedicatedSIDeliveryNeededUE-Item-ExtIEs F1AP-PROTOCOL-EXTENSION::={
+	...
+}
+
+
+DL-PRS ::= SEQUENCE {
+	prsid 					INTEGER (0..255),
+	dl-PRSResourceSetID		PRS-Resource-Set-ID,
+	dl-PRSResourceID		PRS-Resource-ID	OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer { {DL-PRS-ExtIEs} }	OPTIONAL
+}
+
+DL-PRS-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DL-PRSMutingPattern ::= CHOICE {
+	two					BIT STRING (SIZE(2)),
+	four				BIT STRING (SIZE(4)),
+	six					BIT STRING (SIZE(6)),
+	eight				BIT STRING (SIZE(8)),
+	sixteen				BIT STRING (SIZE(16)),
+	thirty-two			BIT STRING (SIZE(32)),
+	choice-extension							ProtocolIE-SingleContainer { { DL-PRSMutingPattern-ExtIEs } }
+}
+
+DL-PRSMutingPattern-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+DLPRSResourceCoordinates ::= SEQUENCE {
+	listofDL-PRSResourceSetARP		SEQUENCE (SIZE(1.. maxnoofPRS-ResourceSets)) OF DLPRSResourceSetARP,
+	iE-Extensions					ProtocolExtensionContainer { { DLPRSResourceCoordinates-ExtIEs } } OPTIONAL
+}
+
+DLPRSResourceCoordinates-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DLPRSResourceSetARP ::= SEQUENCE {
+	dl-PRSResourceSetID				INTEGER (0..7),
+	dL-PRSResourceSetARPLocation	DL-PRSResourceSetARPLocation,
+	listofDL-PRSResourceARP			SEQUENCE (SIZE(1.. maxnoofPRS-ResourcesPerSet)) OF DLPRSResourceARP,
+	iE-Extensions					ProtocolExtensionContainer { { DLPRSResourceSetARP-ExtIEs } } OPTIONAL
+}
+
+DLPRSResourceSetARP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+DL-PRSResourceSetARPLocation ::= CHOICE {
+	relativeGeodeticLocation			RelativeGeodeticLocation,
+	relativeCartesianLocation			RelativeCartesianLocation,
+	choice-Extension					ProtocolIE-SingleContainer { { DL-PRSResourceSetARPLocation-ExtIEs } }
+}
+
+DL-PRSResourceSetARPLocation-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+
+DLPRSResourceARP ::= SEQUENCE {
+	dl-PRSResourceID			INTEGER (0..63),
+	dL-PRSResourceARPLocation	DL-PRSResourceARPLocation,	
+	iE-Extensions				ProtocolExtensionContainer { { DLPRSResourceARP-ExtIEs } } OPTIONAL
+}
+
+DLPRSResourceARP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DL-PRSResourceARPLocation ::= CHOICE {
+	relativeGeodeticLocation			RelativeGeodeticLocation,
+	relativeCartesianLocation			RelativeCartesianLocation,
+	choice-Extension					ProtocolIE-SingleContainer { { DL-PRSResourceARPLocation-ExtIEs } }
+}
+
+DL-PRSResourceARPLocation-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+DL-UP-TNL-Address-to-Update-List-Item	::= SEQUENCE {
+	oldIPAdress						TransportLayerAddress,
+	newIPAdress						TransportLayerAddress,
+	iE-Extensions	ProtocolExtensionContainer { { DL-UP-TNL-Address-to-Update-List-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DL-UP-TNL-Address-to-Update-List-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DLUPTNLInformation-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofDLUPTNLInformation)) OF DLUPTNLInformation-ToBeSetup-Item
+
+DLUPTNLInformation-ToBeSetup-Item ::= SEQUENCE {
+	dLUPTNLInformation	UPTransportLayerInformation	,
+	iE-Extensions	ProtocolExtensionContainer { { DLUPTNLInformation-ToBeSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DLUPTNLInformation-ToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRB-Activity-Item ::= SEQUENCE {
+	dRBID			DRBID,
+	dRB-Activity	DRB-Activity		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { DRB-Activity-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRB-Activity-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRB-Activity ::= ENUMERATED {active, not-active}
+
+DRBID ::= INTEGER (1..32, ...)
+
+DRBs-FailedToBeModified-Item	::= SEQUENCE {
+	dRBID		DRBID		,
+	cause		Cause		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-FailedToBeModified-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-FailedToBeModified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRBs-FailedToBeSetup-Item	::= SEQUENCE {
+	dRBID	DRBID,
+	cause	Cause	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-FailedToBeSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-FailedToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+DRBs-FailedToBeSetupMod-Item	::= SEQUENCE {
+	dRBID		DRBID	,
+	cause		Cause			OPTIONAL ,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-FailedToBeSetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-FailedToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRB-Information	::=	SEQUENCE {
+	dRB-QoS		QoSFlowLevelQoSParameters, 
+	sNSSAI		SNSSAI, 
+	notificationControl		NotificationControl		OPTIONAL,
+	flows-Mapped-To-DRB-List	Flows-Mapped-To-DRB-List,
+	iE-Extensions	ProtocolExtensionContainer { { DRB-Information-ItemExtIEs } }	OPTIONAL
+}
+
+DRB-Information-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRBs-Modified-Item	::= SEQUENCE {
+	dRBID							DRBID,
+	lCID								LCID		OPTIONAL,
+	dLUPTNLInformation-ToBeSetup-List		DLUPTNLInformation-ToBeSetup-List,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-Modified-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-Modified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-RLC-Status							CRITICALITY ignore	EXTENSION RLC-Status									PRESENCE optional }|
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List		PRESENCE optional },
+	...
+}
+
+DRBs-ModifiedConf-Item	::= SEQUENCE {
+	dRBID							DRBID,
+	uLUPTNLInformation-ToBeSetup-List		ULUPTNLInformation-ToBeSetup-List	,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-ModifiedConf-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-ModifiedConf-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List			PRESENCE optional },
+	...
+}
+
+DRB-Notify-Item ::= SEQUENCE {
+	dRBID			DRBID,
+	notification-Cause	Notification-Cause,
+	iE-Extensions	ProtocolExtensionContainer { { DRB-Notify-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRB-Notify-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-CurrentQoSParaSetIndex	CRITICALITY ignore	EXTENSION QoSParaSetNotifyIndex	PRESENCE optional	},
+	...
+}
+
+DRBs-Required-ToBeModified-Item	::= SEQUENCE {
+	dRBID							DRBID,
+	dLUPTNLInformation-ToBeSetup-List		DLUPTNLInformation-ToBeSetup-List	,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-Required-ToBeModified-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-Required-ToBeModified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-RLC-Status			CRITICALITY ignore			EXTENSION RLC-Status				PRESENCE optional }|
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List			PRESENCE optional },
+	...
+}
+
+DRBs-Required-ToBeReleased-Item	::= SEQUENCE {
+	dRBID		DRBID,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-Required-ToBeReleased-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-Required-ToBeReleased-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRBs-Setup-Item ::= SEQUENCE {
+	dRBID							DRBID,
+	lCID								LCID		OPTIONAL,
+	dLUPTNLInformation-ToBeSetup-List		DLUPTNLInformation-ToBeSetup-List	, 
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-Setup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-Setup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List			PRESENCE optional }|
+	{ ID id-RLCDuplicationInformation			CRITICALITY ignore	EXTENSION RLCDuplicationInformation						PRESENCE optional},	...
+}
+
+DRBs-SetupMod-Item	::= SEQUENCE {
+	dRBID							DRBID,
+	lCID								LCID		OPTIONAL,
+	dLUPTNLInformation-ToBeSetup-List		DLUPTNLInformation-ToBeSetup-List	,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-SetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-SetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List			PRESENCE optional },
+	...
+}
+
+
+DRBs-ToBeModified-Item	::= SEQUENCE {
+	dRBID						DRBID,
+	qoSInformation				QoSInformation	OPTIONAL,
+	uLUPTNLInformation-ToBeSetup-List	ULUPTNLInformation-ToBeSetup-List	, 
+	uLConfiguration				ULConfiguration	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-ToBeModified-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-ToBeModified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-DLPDCPSNLength						CRITICALITY ignore	EXTENSION PDCPSNLength										PRESENCE optional }|
+	{ ID id-ULPDCPSNLength						CRITICALITY ignore	EXTENSION PDCPSNLength										PRESENCE optional }|
+	{ID id-BearerTypeChange						CRITICALITY ignore	EXTENSION BearerTypeChange									PRESENCE optional}|
+	{ ID id-RLCMode								CRITICALITY ignore	EXTENSION RLCMode											PRESENCE optional }|
+	{ ID id-Duplication-Activation				CRITICALITY reject	EXTENSION DuplicationActivation							PRESENCE optional }|
+	{ ID id-DC-Based-Duplication-Configured		CRITICALITY reject	EXTENSION DCBasedDuplicationConfigured					PRESENCE optional }|
+	{ ID id-DC-Based-Duplication-Activation		CRITICALITY reject	EXTENSION DuplicationActivation							PRESENCE optional }|
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List			PRESENCE optional }|
+	{ ID id-RLCDuplicationInformation			CRITICALITY ignore	EXTENSION RLCDuplicationInformation						PRESENCE optional},
+	...
+}
+
+DRBs-ToBeReleased-Item	::= SEQUENCE {
+	dRBID	DRBID,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-ToBeReleased-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-ToBeReleased-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRBs-ToBeSetup-Item ::= SEQUENCE	{
+	dRBID						DRBID,
+	qoSInformation				QoSInformation,
+	uLUPTNLInformation-ToBeSetup-List	ULUPTNLInformation-ToBeSetup-List	, 
+	rLCMode						RLCMode, 
+	uLConfiguration				ULConfiguration	OPTIONAL,
+	duplicationActivation		DuplicationActivation	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-ToBeSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-ToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-DC-Based-Duplication-Configured		CRITICALITY reject	EXTENSION DCBasedDuplicationConfigured				PRESENCE optional }|
+	{ ID id-DC-Based-Duplication-Activation		CRITICALITY reject	EXTENSION DuplicationActivation						PRESENCE optional }|
+	{ ID id-DLPDCPSNLength						CRITICALITY ignore	EXTENSION PDCPSNLength									PRESENCE mandatory }|
+	{ ID id-ULPDCPSNLength						CRITICALITY ignore	EXTENSION PDCPSNLength									PRESENCE optional }|
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List		PRESENCE optional },
+	...
+}
+
+
+DRBs-ToBeSetupMod-Item	::= SEQUENCE {
+	dRBID						DRBID,
+	qoSInformation				QoSInformation,
+	uLUPTNLInformation-ToBeSetup-List		ULUPTNLInformation-ToBeSetup-List,
+	rLCMode						RLCMode, 
+	uLConfiguration				ULConfiguration	OPTIONAL,
+	duplicationActivation		DuplicationActivation	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { DRBs-ToBeSetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+DRBs-ToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-DC-Based-Duplication-Configured		CRITICALITY reject	EXTENSION DCBasedDuplicationConfigured				PRESENCE optional }|
+	{ ID id-DC-Based-Duplication-Activation		CRITICALITY reject	EXTENSION DuplicationActivation						PRESENCE optional }|
+	{ ID id-DLPDCPSNLength						CRITICALITY ignore	EXTENSION PDCPSNLength									PRESENCE optional }|
+	{ ID id-ULPDCPSNLength						CRITICALITY ignore	EXTENSION PDCPSNLength									PRESENCE optional }|
+	{ ID id-AdditionalPDCPDuplicationTNL-List	CRITICALITY ignore	EXTENSION AdditionalPDCPDuplicationTNL-List		PRESENCE optional }|
+	{ ID id-RLCDuplicationInformation			CRITICALITY ignore	EXTENSION RLCDuplicationInformation					PRESENCE optional},
+	...
+}
+
+DRXCycle	::= SEQUENCE {
+	longDRXCycleLength	LongDRXCycleLength,
+	shortDRXCycleLength		ShortDRXCycleLength	OPTIONAL,
+	shortDRXCycleTimer	ShortDRXCycleTimer OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { { DRXCycle-ExtIEs} } OPTIONAL,
+	...
+}
+
+DRXCycle-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DRX-Config ::= OCTET STRING
+
+DRXConfigurationIndicator	::=	ENUMERATED{	release, ...}
+
+DRX-LongCycleStartOffset ::= INTEGER (0..10239)
+
+DSInformationList ::= SEQUENCE (SIZE(0..maxnoofDSInfo)) OF DSCP
+
+DSCP ::= BIT STRING (SIZE (6))
+
+DUtoCURRCContainer ::= OCTET STRING
+
+DUCURadioInformationType ::= CHOICE {
+	rIM								DUCURIMInformation,
+	choice-extension				ProtocolIE-SingleContainer { { DUCURadioInformationType-ExtIEs} }
+}
+
+DUCURadioInformationType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+DUCURIMInformation ::= SEQUENCE {
+	victimgNBSetID				GNBSetID, 
+	rIMRSDetectionStatus		RIMRSDetectionStatus,
+	aggressorCellList			AggressorCellList,
+	iE-Extensions				ProtocolExtensionContainer { { DUCURIMInformation-ExtIEs} }		OPTIONAL 
+}
+
+DUCURIMInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+DUF-Slot-Config-Item 	::=	CHOICE {
+	explicitFormat				ExplicitFormat,
+	implicitFormat				ImplicitFormat,
+	choice-extension				ProtocolIE-SingleContainer { { DUF-Slot-Config-Item-ExtIEs} }
+}
+
+DUF-Slot-Config-Item-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+DUF-Slot-Config-List	::= SEQUENCE (SIZE(1..maxnoofDUFSlots)) OF DUF-Slot-Config-Item
+
+DUFSlotformatIndex ::= INTEGER(0..254)
+
+DUFTransmissionPeriodicity ::= ENUMERATED { ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms5, ms10, ...}
+
+DU-RX-MT-RX ::= ENUMERATED {supported, not-supported}
+
+DU-TX-MT-TX ::= ENUMERATED {supported, not-supported}
+
+DU-RX-MT-TX ::= ENUMERATED {supported, not-supported}
+
+DU-TX-MT-RX ::= ENUMERATED {supported, not-supported}
+
+DUtoCURRCInformation ::= SEQUENCE {
+	cellGroupConfig		CellGroupConfig,
+	measGapConfig			MeasGapConfig	OPTIONAL,
+	requestedP-MaxFR1				OCTET STRING				OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { DUtoCURRCInformation-ExtIEs} } OPTIONAL,
+	...
+}
+
+DUtoCURRCInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-DRX-LongCycleStartOffset			CRITICALITY ignore	EXTENSION DRX-LongCycleStartOffset				PRESENCE optional }|
+	{ ID id-SelectedBandCombinationIndex		CRITICALITY ignore	EXTENSION SelectedBandCombinationIndex			PRESENCE optional }|
+	{ ID id-SelectedFeatureSetEntryIndex		CRITICALITY ignore	EXTENSION SelectedFeatureSetEntryIndex			PRESENCE optional }|
+	{ ID id-Ph-InfoSCG							CRITICALITY ignore	EXTENSION Ph-InfoSCG								PRESENCE optional }|
+	{ ID id-RequestedBandCombinationIndex		CRITICALITY ignore	EXTENSION RequestedBandCombinationIndex		PRESENCE optional }|
+	{ ID id-RequestedFeatureSetEntryIndex		CRITICALITY ignore	EXTENSION RequestedFeatureSetEntryIndex		PRESENCE optional }|
+	{ ID id-DRX-Config							CRITICALITY ignore	EXTENSION DRX-Config								PRESENCE optional }|
+	{ ID id-PDCCH-BlindDetectionSCG				CRITICALITY ignore	EXTENSION PDCCH-BlindDetectionSCG				PRESENCE optional }|
+	{ ID id-Requested-PDCCH-BlindDetectionSCG	CRITICALITY ignore	EXTENSION Requested-PDCCH-BlindDetectionSCG	PRESENCE optional }|
+	{ ID id-Ph-InfoMCG							CRITICALITY ignore	EXTENSION Ph-InfoMCG								PRESENCE optional }|
+	{ ID id-MeasGapSharingConfig				CRITICALITY ignore	EXTENSION MeasGapSharingConfig					PRESENCE optional }|
+	{ ID id-SL-PHY-MAC-RLC-Config				CRITICALITY ignore	EXTENSION SL-PHY-MAC-RLC-Config					PRESENCE optional }|
+	{ ID id-SL-ConfigDedicatedEUTRA				CRITICALITY ignore	EXTENSION SL-ConfigDedicatedEUTRA				PRESENCE optional }|
+	{ ID id-RequestedP-MaxFR2					CRITICALITY ignore	EXTENSION RequestedP-MaxFR2							PRESENCE optional },
+	...
+}
+
+DuplicationActivation ::= ENUMERATED{active,inactive,... }
+
+DuplicationIndication ::= ENUMERATED {true, ... , false }
+
+DuplicationState ::= ENUMERATED { 
+	active,
+	inactive,
+	...
+}
+
+Dynamic5QIDescriptor	::= SEQUENCE {
+	qoSPriorityLevel					INTEGER (1..127),
+	packetDelayBudget					PacketDelayBudget,
+	packetErrorRate						PacketErrorRate,
+	fiveQI								INTEGER (0..255, ...)								OPTIONAL,
+	delayCritical						ENUMERATED {delay-critical, non-delay-critical}		OPTIONAL,
+	-- C-ifGBRflow: This IE shall be present if the GBR QoS Flow Information IE is present in the QoS Flow Level QoS Parameters IE.
+	averagingWindow 					AveragingWindow										OPTIONAL,
+	-- C-ifGBRflow: This IE shall be present if the GBR QoS Flow Information IE is present in the QoS Flow Level QoS Parameters IE.
+	maxDataBurstVolume					MaxDataBurstVolume									OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { Dynamic5QIDescriptor-ExtIEs } } OPTIONAL
+}
+
+Dynamic5QIDescriptor-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-ExtendedPacketDelayBudget			CRITICALITY ignore	EXTENSION ExtendedPacketDelayBudget		PRESENCE optional		}|
+	{ ID id-CNPacketDelayBudgetDownlink			CRITICALITY ignore	EXTENSION ExtendedPacketDelayBudget		PRESENCE optional		}|
+	{ ID id-CNPacketDelayBudgetUplink			CRITICALITY ignore	EXTENSION ExtendedPacketDelayBudget		PRESENCE optional		},
+	...
+}
+
+DynamicPQIDescriptor	::= SEQUENCE {
+	resourceType						ENUMERATED {gbr, non-gbr, delay-critical-grb, ...}		OPTIONAL,
+	qoSPriorityLevel					INTEGER (1..8, ...),
+	packetDelayBudget					PacketDelayBudget,
+	packetErrorRate						PacketErrorRate,
+	averagingWindow 					AveragingWindow										OPTIONAL,
+	-- C-ifGBRflow: This IE shall be present if the GBR QoS Flow Information IE is present in the QoS Flow Level QoS Parameters IE.
+	maxDataBurstVolume					MaxDataBurstVolume									OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { DynamicPQIDescriptor-ExtIEs } } OPTIONAL
+}
+
+DynamicPQIDescriptor-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+-- E
+
+E-CID-MeasurementPeriodicity ::= ENUMERATED {
+	ms120,
+	ms240,
+	ms480,
+	ms640,
+	ms1024,
+	ms2048,
+	ms5120,
+	ms10240,
+	min1,
+	min6,
+	min12,
+	min30,
+	min60,
+	...
+}
+
+E-CID-MeasurementQuantities ::= SEQUENCE (SIZE (1.. maxnoofMeasE-CID)) OF ProtocolIE-SingleContainer { {E-CID-MeasurementQuantities-ItemIEs} }
+
+E-CID-MeasurementQuantities-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-E-CID-MeasurementQuantities-Item	CRITICALITY reject	TYPE E-CID-MeasurementQuantities-Item		PRESENCE mandatory}
+}
+
+E-CID-MeasurementQuantities-Item ::= SEQUENCE {
+	e-CIDmeasurementQuantitiesValue				E-CID-MeasurementQuantitiesValue,
+	iE-Extensions								ProtocolExtensionContainer { { E-CID-MeasurementQuantitiesValue-ExtIEs} } OPTIONAL
+}
+
+E-CID-MeasurementQuantitiesValue-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+E-CID-MeasurementQuantitiesValue ::= ENUMERATED {
+	cell-Portion,
+	angleOfArrivalNR,
+	... 
+}
+
+E-CID-MeasurementResult ::= SEQUENCE {
+	geographicalCoordinates		GeographicalCoordinates 	OPTIONAL,
+	measuredResults-List		E-CID-MeasuredResults-List 	OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { E-CID-MeasurementResult-ExtIEs} } OPTIONAL
+}
+
+E-CID-MeasurementResult-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+E-CID-MeasuredResults-List ::= SEQUENCE (SIZE(1..maxnoofMeasE-CID)) OF E-CID-MeasuredResults-Item
+
+E-CID-MeasuredResults-Item ::= SEQUENCE {
+	e-CID-MeasuredResults-Value 	E-CID-MeasuredResults-Value,
+	iE-Extensions			ProtocolExtensionContainer {{ E-CID-MeasuredResults-Item-ExtIEs }}	 OPTIONAL
+}
+
+E-CID-MeasuredResults-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+E-CID-MeasuredResults-Value ::= CHOICE {
+	valueAngleofArrivalNR	UL-AoA,
+	choice-extension		ProtocolIE-SingleContainer { { E-CID-MeasuredResults-Value-ExtIEs} }
+}
+
+E-CID-MeasuredResults-Value-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+E-CID-ReportCharacteristics ::= ENUMERATED {
+	onDemand,
+	periodic,
+	...
+}
+
+EgressBHRLCCHList ::= SEQUENCE (SIZE(1..maxnoofEgressLinks)) OF EgressBHRLCCHItem
+
+EgressBHRLCCHItem ::= SEQUENCE {
+	nextHopBAPAddress 		BAPAddress,
+	bHRLCChannelID			BHRLCChannelID,
+	iE-Extensions			ProtocolExtensionContainer {{EgressBHRLCCHItemExtIEs }}	 OPTIONAL
+}
+
+EgressBHRLCCHItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Endpoint-IP-address-and-port ::=SEQUENCE {
+	endpointIPAddress TransportLayerAddress,
+	iE-Extensions					ProtocolExtensionContainer { { Endpoint-IP-address-and-port-ExtIEs} } OPTIONAL
+}
+
+Endpoint-IP-address-and-port-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-portNumber	CRITICALITY reject	EXTENSION PortNumber		PRESENCE optional},
+	...
+}
+
+ExtendedAvailablePLMN-List ::= SEQUENCE (SIZE(1..maxnoofExtendedBPLMNs)) OF ExtendedAvailablePLMN-Item
+
+ExtendedAvailablePLMN-Item ::= SEQUENCE {
+	pLMNIdentity			PLMN-Identity,
+	iE-Extensions		ProtocolExtensionContainer { { ExtendedAvailablePLMN-Item-ExtIEs} } OPTIONAL
+}
+
+ExplicitFormat ::=	SEQUENCE {
+	permutation			Permutation,
+	noofDownlinkSymbols	NoofDownlinkSymbols		OPTIONAL,
+	noofUplinkSymbols	NoofUplinkSymbols		OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { { ExplicitFormat-ExtIEs} } OPTIONAL
+}
+
+ExplicitFormat-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ExtendedAvailablePLMN-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ExtendedServedPLMNs-List ::= SEQUENCE (SIZE(1.. maxnoofExtendedBPLMNs)) OF ExtendedServedPLMNs-Item
+
+ExtendedServedPLMNs-Item ::= SEQUENCE {
+	pLMN-Identity				PLMN-Identity,
+	tAISliceSupportList 		SliceSupportList	OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { ExtendedServedPLMNs-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+ExtendedServedPLMNs-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-NPNSupportInfo			CRITICALITY reject	EXTENSION NPNSupportInfo				PRESENCE optional	}|
+{ ID id-ExtendedTAISliceSupportList	CRITICALITY reject	EXTENSION ExtendedSliceSupportList		PRESENCE optional	},
+	...
+}
+
+ExtendedSliceSupportList ::= SEQUENCE (SIZE(1.. maxnoofExtSliceItems)) OF SliceSupportItem
+
+EUTRACells-List  ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF EUTRACells-List-item
+
+EUTRACells-List-item ::= SEQUENCE {
+	eUTRA-Cell-ID					EUTRA-Cell-ID,
+	served-EUTRA-Cells-Information	Served-EUTRA-Cells-Information,
+	iE-Extensions ProtocolExtensionContainer { { EUTRACells-List-itemExtIEs } }    OPTIONAL
+}
+
+EUTRACells-List-itemExtIEs    F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+EUTRA-Cell-ID ::= BIT STRING (SIZE(28))
+
+EUTRA-Coex-FDD-Info ::= SEQUENCE {
+	uL-EARFCN						ExtendedEARFCN					OPTIONAL,
+	dL-EARFCN						ExtendedEARFCN,
+	uL-Transmission-Bandwidth		EUTRA-Transmission-Bandwidth	OPTIONAL,
+	dL-Transmission-Bandwidth		EUTRA-Transmission-Bandwidth,
+	iE-Extensions					ProtocolExtensionContainer { {EUTRA-Coex-FDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+EUTRA-Coex-FDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-ULCarrierList				CRITICALITY ignore	EXTENSION NRCarrierList				PRESENCE optional }|
+	{	ID id-DLCarrierList				CRITICALITY ignore EXTENSION NRCarrierList				PRESENCE optional },
+	...
+}
+
+EUTRA-Coex-Mode-Info ::= CHOICE {
+	fDD		EUTRA-Coex-FDD-Info,
+	tDD		EUTRA-Coex-TDD-Info,
+	...
+}
+
+EUTRA-Coex-TDD-Info ::= SEQUENCE {
+	eARFCN							ExtendedEARFCN,
+	transmission-Bandwidth			EUTRA-Transmission-Bandwidth,
+	subframeAssignment				EUTRA-SubframeAssignment,
+	specialSubframe-Info			EUTRA-SpecialSubframe-Info,
+	iE-Extensions					ProtocolExtensionContainer { {EUTRA-Coex-TDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+EUTRA-Coex-TDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+EUTRA-CyclicPrefixDL ::= ENUMERATED { 
+	normal,
+	extended,
+	...
+}
+
+EUTRA-CyclicPrefixUL ::= ENUMERATED { 
+	normal,
+	extended,
+	...
+}
+
+EUTRA-PRACH-Configuration ::= SEQUENCE {
+	rootSequenceIndex						INTEGER (0..837),
+	zeroCorrelationIndex					INTEGER (0..15),
+	highSpeedFlag							BOOLEAN,
+	prach-FreqOffset						INTEGER (0..94),
+	prach-ConfigIndex						INTEGER (0..63)		OPTIONAL,
+	-- C-ifTDD: This IE shall be present if the EUTRA-Mode-Info IE in the Resource Coordination E-UTRA Cell Information IE is set to the value "TDD"
+	iE-Extensions							ProtocolExtensionContainer { {EUTRA-PRACH-Configuration-ExtIEs} }	OPTIONAL,
+	...
+}
+
+EUTRA-PRACH-Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+EUTRA-SpecialSubframe-Info ::= SEQUENCE {
+	specialSubframePatterns		EUTRA-SpecialSubframePatterns,
+	cyclicPrefixDL				EUTRA-CyclicPrefixDL,
+	cyclicPrefixUL				EUTRA-CyclicPrefixUL,
+	iE-Extensions				ProtocolExtensionContainer { { EUTRA-SpecialSubframe-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+EUTRA-SpecialSubframe-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+EUTRA-SpecialSubframePatterns ::= ENUMERATED { 
+	ssp0,
+	ssp1, 
+	ssp2,
+	ssp3,
+	ssp4,
+	ssp5,
+	ssp6,
+	ssp7,
+	ssp8,
+	ssp9,
+	ssp10,
+	...
+}
+
+EUTRA-SubframeAssignment ::= ENUMERATED { 
+	sa0,
+	sa1, 
+	sa2,
+	sa3,
+	sa4,
+	sa5,
+	sa6,
+	...
+}
+
+EUTRA-Transmission-Bandwidth ::= ENUMERATED {
+	bw6,
+	bw15,
+	bw25,
+	bw50,
+	bw75,
+	bw100,
+	...
+}
+
+EUTRANQoS	::= SEQUENCE {
+	qCI								QCI,
+	allocationAndRetentionPriority	AllocationAndRetentionPriority,
+	gbrQosInformation				GBR-QosInformation									OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { EUTRANQoS-ExtIEs} }	OPTIONAL,
+	...
+}
+
+EUTRANQoS-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ExecuteDuplication ::= ENUMERATED{true,...}
+
+ExtendedEARFCN ::= INTEGER (0..262143)
+
+EUTRA-Mode-Info ::= CHOICE {
+	eUTRAFDD		EUTRA-FDD-Info,
+	eUTRATDD		EUTRA-TDD-Info,
+	choice-extension	ProtocolIE-SingleContainer { { EUTRA-Mode-Info-ExtIEs} }
+}
+
+EUTRA-Mode-Info-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+EUTRA-NR-CellResourceCoordinationReq-Container	::= OCTET STRING
+
+EUTRA-NR-CellResourceCoordinationReqAck-Container	::= OCTET STRING
+
+EUTRA-FDD-Info ::= SEQUENCE {
+	uL-offsetToPointA				OffsetToPointA,
+	dL-offsetToPointA				OffsetToPointA,
+	iE-Extensions					ProtocolExtensionContainer { {EUTRA-FDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+EUTRA-FDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+EUTRA-TDD-Info ::= SEQUENCE {
+	offsetToPointA					OffsetToPointA,
+	iE-Extensions					ProtocolExtensionContainer { {EUTRA-TDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+EUTRA-TDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+EventType ::= ENUMERATED {
+	on-demand,
+	periodic,
+	stop,
+	...
+}
+
+ExtendedPacketDelayBudget ::= INTEGER (1..65535, ...)
+
+-- F
+
+FDD-Info ::= SEQUENCE {
+	uL-NRFreqInfo						NRFreqInfo,
+	dL-NRFreqInfo						NRFreqInfo,
+	uL-Transmission-Bandwidth		Transmission-Bandwidth,
+	dL-Transmission-Bandwidth		Transmission-Bandwidth,
+	iE-Extensions					ProtocolExtensionContainer { {FDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+FDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+Flows-Mapped-To-DRB-List	::=	SEQUENCE (SIZE(1.. maxnoofQoSFlows)) OF Flows-Mapped-To-DRB-Item
+
+Flows-Mapped-To-DRB-Item 	::= SEQUENCE {
+	qoSFlowIdentifier							QoSFlowIdentifier,
+	qoSFlowLevelQoSParameters				QoSFlowLevelQoSParameters,
+	iE-Extensions							ProtocolExtensionContainer { { Flows-Mapped-To-DRB-ItemExtIEs} } OPTIONAL
+}
+
+Flows-Mapped-To-DRB-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ID id-QoSFlowMappingIndication		CRITICALITY ignore	EXTENSION QoSFlowMappingIndication			PRESENCE optional}|
+	{ID id-TSCTrafficCharacteristics	CRITICALITY ignore	EXTENSION TSCTrafficCharacteristics			PRESENCE optional},
+	...
+}
+
+FR1-Bandwidth ::= ENUMERATED {bw5, bw10, bw20, bw40, bw50, bw80, bw100, ...}
+
+FR2-Bandwidth ::= ENUMERATED {bw50, bw100, bw200, bw400, ...}
+
+FreqBandNrItem ::= SEQUENCE {
+	freqBandIndicatorNr 		INTEGER (1..1024,...), 
+	supportedSULBandList		SEQUENCE (SIZE(0..maxnoofNrCellBands)) OF SupportedSULFreqBandItem,
+	iE-Extensions				ProtocolExtensionContainer { {FreqBandNrItem-ExtIEs} } OPTIONAL,
+	...
+}
+
+FreqBandNrItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+FreqDomainLength ::= CHOICE {
+	l839							L839Info,
+	l139							L139Info,
+	choice-extension				ProtocolIE-SingleContainer { {FreqDomainLength-ExtIEs} }
+}
+
+FreqDomainLength-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+FrequencyShift7p5khz ::= ENUMERATED {false, true, ...}
+
+FullConfiguration ::= ENUMERATED {full, ...}
+
+FlowsMappedToSLDRB-List ::= SEQUENCE (SIZE(1.. maxnoofPC5QoSFlows)) OF FlowsMappedToSLDRB-Item 
+
+FlowsMappedToSLDRB-Item ::= SEQUENCE {
+	pc5QoSFlowIdentifier			PC5QoSFlowIdentifier,
+	iE-Extensions					ProtocolExtensionContainer { {FlowsMappedToSLDRB-Item-ExtIEs} } OPTIONAL,
+	...
+}
+
+FlowsMappedToSLDRB-Item-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+-- G
+
+
+GBR-QosInformation ::= SEQUENCE {
+	e-RAB-MaximumBitrateDL			BitRate,
+	e-RAB-MaximumBitrateUL			BitRate,
+	e-RAB-GuaranteedBitrateDL		BitRate,
+	e-RAB-GuaranteedBitrateUL		BitRate,
+	iE-Extensions					ProtocolExtensionContainer { { GBR-QosInformation-ExtIEs} } OPTIONAL,
+	...
+}
+
+GBR-QosInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GBR-QoSFlowInformation::= SEQUENCE {
+	maxFlowBitRateDownlink			BitRate,
+	maxFlowBitRateUplink			BitRate, 
+	guaranteedFlowBitRateDownlink	BitRate,
+	guaranteedFlowBitRateUplink		BitRate, 
+	maxPacketLossRateDownlink		MaxPacketLossRate		OPTIONAL,
+	maxPacketLossRateUplink			MaxPacketLossRate		OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { GBR-QosFlowInformation-ExtIEs} } OPTIONAL,
+	...
+}
+
+GBR-QosFlowInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ 	ID id-AlternativeQoSParaSetList	CRITICALITY ignore	EXTENSION AlternativeQoSParaSetList	PRESENCE optional	},
+	...
+}
+
+CG-Config ::= OCTET STRING
+
+GeographicalCoordinates ::= SEQUENCE {
+	tRPPositionDefinitionType	TRPPositionDefinitionType,
+	dLPRSResourceCoordinates	DLPRSResourceCoordinates	OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { GeographicalCoordinates-ExtIEs } } OPTIONAL
+}
+
+GeographicalCoordinates-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNBCUMeasurementID ::= INTEGER (0.. 4095, ...)
+
+GNBDUMeasurementID ::= INTEGER (0.. 4095, ...)
+
+GNB-CUSystemInformation::= SEQUENCE {
+	sibtypetobeupdatedlist	SEQUENCE (SIZE(1.. maxnoofSIBTypes)) OF SibtypetobeupdatedListItem,
+	iE-Extensions					ProtocolExtensionContainer { { GNB-CUSystemInformation-ExtIEs} } OPTIONAL,
+	...
+}
+
+GNB-CUSystemInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ID id-systemInformationAreaID  CRITICALITY ignore	EXTENSION SystemInformationAreaID PRESENCE optional},
+	...
+}
+
+GNB-CU-TNL-Association-Setup-Item::= SEQUENCE {
+	tNLAssociationTransportLayerAddress		CP-TransportLayerAddress	,
+	iE-Extensions					ProtocolExtensionContainer { { GNB-CU-TNL-Association-Setup-Item-ExtIEs} } OPTIONAL
+}
+
+GNB-CU-TNL-Association-Setup-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-CU-TNL-Association-Failed-To-Setup-Item ::= SEQUENCE {
+	tNLAssociationTransportLayerAddress		CP-TransportLayerAddress	,
+	cause									Cause,
+	iE-Extensions					ProtocolExtensionContainer { { GNB-CU-TNL-Association-Failed-To-Setup-Item-ExtIEs} } OPTIONAL
+}
+
+GNB-CU-TNL-Association-Failed-To-Setup-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+GNB-CU-TNL-Association-To-Add-Item ::= SEQUENCE {
+	tNLAssociationTransportLayerAddress		CP-TransportLayerAddress	,
+	tNLAssociationUsage							TNLAssociationUsage,
+	iE-Extensions					ProtocolExtensionContainer { { GNB-CU-TNL-Association-To-Add-Item-ExtIEs} } OPTIONAL
+}
+
+GNB-CU-TNL-Association-To-Add-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-CU-TNL-Association-To-Remove-Item::= SEQUENCE {
+	tNLAssociationTransportLayerAddress		CP-TransportLayerAddress	,
+	iE-Extensions							ProtocolExtensionContainer { { GNB-CU-TNL-Association-To-Remove-Item-ExtIEs} } OPTIONAL
+}
+
+GNB-CU-TNL-Association-To-Remove-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ID id-TNLAssociationTransportLayerAddressgNBDU	CRITICALITY reject	EXTENSION CP-TransportLayerAddress	PRESENCE optional},
+	...
+}
+
+
+GNB-CU-TNL-Association-To-Update-Item::= SEQUENCE {
+	tNLAssociationTransportLayerAddress		CP-TransportLayerAddress	,
+	tNLAssociationUsage						TNLAssociationUsage OPTIONAL,
+	iE-Extensions							ProtocolExtensionContainer { { GNB-CU-TNL-Association-To-Update-Item-ExtIEs} } OPTIONAL
+}
+
+GNB-CU-TNL-Association-To-Update-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-CU-UE-F1AP-ID		::= INTEGER (0..4294967295)
+
+GNB-DU-Cell-Resource-Configuration	::= SEQUENCE { 
+	subcarrierSpacing				SubcarrierSpacing,
+	dUFTransmissionPeriodicity		DUFTransmissionPeriodicity	OPTIONAL,
+	dUF-Slot-Config-List			DUF-Slot-Config-List	OPTIONAL,
+	hSNATransmissionPeriodicity		HSNATransmissionPeriodicity,
+	hNSASlotConfigList				HSNASlotConfigList	OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { GNB-DU-Cell-Resource-Configuration-ExtIEs } } OPTIONAL
+}
+
+GNB-DU-Cell-Resource-Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-DU-UE-F1AP-ID		::= INTEGER (0..4294967295)
+
+GNB-DU-ID			::= INTEGER (0..68719476735)
+
+GNB-CU-Name ::= PrintableString(SIZE(1..150,...))
+
+GNB-DU-Name ::= PrintableString(SIZE(1..150,...)) 
+
+Extended-GNB-CU-Name	 ::= SEQUENCE {
+	gNB-CU-NameVisibleString		GNB-CU-NameVisibleString					OPTIONAL,
+	gNB-CU-NameUTF8String			GNB-CU-NameUTF8String						OPTIONAL, 
+	iE-Extensions					ProtocolExtensionContainer { { Extended-GNB-CU-Name-ExtIEs } } OPTIONAL,
+	...
+}
+
+Extended-GNB-CU-Name-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-CU-NameVisibleString ::= VisibleString(SIZE(1..150,...))
+
+GNB-CU-NameUTF8String ::= UTF8String(SIZE(1..150,...))
+
+Extended-GNB-DU-Name	 ::= SEQUENCE {
+	gNB-DU-NameVisibleString		GNB-DU-NameVisibleString					OPTIONAL,
+	gNB-DU-NameUTF8String			GNB-DU-NameUTF8String						OPTIONAL, 
+	iE-Extensions					ProtocolExtensionContainer { { Extended-GNB-DU-Name-ExtIEs } } OPTIONAL,
+	...
+}
+
+Extended-GNB-DU-Name-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-DU-NameVisibleString ::= VisibleString(SIZE(1..150,...))
+
+GNB-DU-NameUTF8String ::= UTF8String(SIZE(1..150,...))
+
+
+GNB-DU-Served-Cells-Item ::= SEQUENCE {
+	served-Cell-Information		Served-Cell-Information,
+	gNB-DU-System-Information	GNB-DU-System-Information	OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { GNB-DU-Served-Cells-ItemExtIEs} }	OPTIONAL,
+	...
+}
+
+GNB-DU-Served-Cells-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-DU-System-Information ::= SEQUENCE {
+	mIB-message		MIB-message,
+	sIB1-message		SIB1-message,
+	iE-Extensions					ProtocolExtensionContainer { { GNB-DU-System-Information-ExtIEs } } OPTIONAL,
+	...
+}
+
+GNB-DU-System-Information-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-SIB12-message		CRITICALITY ignore	EXTENSION SIB12-message		PRESENCE optional}|
+	{ ID id-SIB13-message		CRITICALITY ignore	EXTENSION SIB13-message		PRESENCE optional}|
+	{ ID id-SIB14-message		CRITICALITY ignore	EXTENSION SIB14-message		PRESENCE optional}|
+	{ ID id-SIB10-message		CRITICALITY ignore	EXTENSION SIB10-message		PRESENCE optional},
+	...
+}
+
+GNB-DUConfigurationQuery ::= ENUMERATED {true, ...}
+
+GNBDUOverloadInformation ::= ENUMERATED {overloaded, not-overloaded}
+
+GNB-DU-TNL-Association-To-Remove-Item::= SEQUENCE {
+	tNLAssociationTransportLayerAddress		CP-TransportLayerAddress	,
+	tNLAssociationTransportLayerAddressgNBCU		CP-TransportLayerAddress		OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { GNB-DU-TNL-Association-To-Remove-Item-ExtIEs} } OPTIONAL
+}
+
+GNB-DU-TNL-Association-To-Remove-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GNB-RxTxTimeDiff ::= SEQUENCE {
+	rxTxTimeDiff			GNBRxTxTimeDiffMeas,
+	additionalPath-List		AdditionalPath-List		OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer { { GNB-RxTxTimeDiff-ExtIEs} }  OPTIONAL
+}
+
+GNB-RxTxTimeDiff-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+
+	...
+}
+
+GNBRxTxTimeDiffMeas ::= CHOICE {
+	k0			INTEGER (0.. 1970049),
+	k1			INTEGER (0.. 985025),
+	k2			INTEGER (0.. 492513),
+	k3			INTEGER (0.. 246257),
+	k4			INTEGER (0.. 123129),
+	k5			INTEGER (0.. 61565),
+	choice-extension		ProtocolIE-SingleContainer { { GNBRxTxTimeDiffMeas-ExtIEs } } 
+}
+
+GNBRxTxTimeDiffMeas-ExtIEs		F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+GNBSetID ::= BIT STRING (SIZE(22))
+
+GTP-TEID				::= OCTET STRING (SIZE (4))
+
+GTPTLAs	::= SEQUENCE (SIZE(1.. maxnoofGTPTLAs)) OF	GTPTLA-Item
+
+
+GTPTLA-Item	::= SEQUENCE {
+	gTPTransportLayerAddress				TransportLayerAddress,
+	iE-Extensions	ProtocolExtensionContainer { { GTPTLA-Item-ExtIEs } }			OPTIONAL
+}
+
+GTPTLA-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+GTPTunnel				::= SEQUENCE {
+	transportLayerAddress		TransportLayerAddress,
+	gTP-TEID		GTP-TEID,
+	iE-Extensions					ProtocolExtensionContainer { { GTPTunnel-ExtIEs } } OPTIONAL,
+	...
+}
+
+GTPTunnel-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+-- H
+
+HandoverPreparationInformation ::= OCTET STRING
+
+HardwareLoadIndicator ::= SEQUENCE {
+	dLHardwareLoadIndicator			INTEGER (0..100, ...),
+	uLHardwareLoadIndicator			INTEGER (0..100, ...),
+	iE-Extensions					ProtocolExtensionContainer { { HardwareLoadIndicator-ExtIEs } } 	OPTIONAL,
+	...
+}
+
+HardwareLoadIndicator-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+HSNASlotConfigList ::= SEQUENCE (SIZE(1..maxnoofHSNASlots)) OF HSNASlotConfigItem
+
+HSNASlotConfigItem 	::=	SEQUENCE {
+	hSNADownlink			HSNADownlink 		OPTIONAL,
+	hSNAUplink				HSNAUplink 			OPTIONAL,
+	hSNAFlexible			HSNAFlexible 		OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer { { HSNASlotConfigItem-ExtIEs } } OPTIONAL
+}
+
+HSNASlotConfigItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+HSNADownlink ::= ENUMERATED { hard, soft, notavailable }
+
+HSNAFlexible ::= ENUMERATED { hard, soft, notavailable }
+
+HSNAUplink ::= ENUMERATED { hard, soft, notavailable }
+
+HSNATransmissionPeriodicity ::=	ENUMERATED { ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms5, ms10, ms20, ms40, ms80, ms160, ...}
+
+-- I
+
+IAB-Barred	::=	ENUMERATED {barred, not-barred, ...}
+
+IAB-Info-IAB-donor-CU ::=	SEQUENCE{
+	iAB-STC-Info	IAB-STC-Info	OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { IAB-Info-IAB-donor-CU-ExtIEs } } OPTIONAL
+}
+
+IAB-Info-IAB-donor-CU-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-Info-IAB-DU ::=	SEQUENCE{
+	multiplexingInfo		MultiplexingInfo	OPTIONAL,
+	iAB-STC-Info		IAB-STC-Info	OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { IAB-Info-IAB-DU-ExtIEs } } OPTIONAL
+}
+
+IAB-Info-IAB-DU-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-MT-Cell-List ::= SEQUENCE (SIZE(1..maxnoofServingCells)) OF IAB-MT-Cell-List-Item
+
+IAB-MT-Cell-List-Item ::= 	SEQUENCE {
+	nRCellIdentity				NRCellIdentity,
+	dU-RX-MT-RX					DU-RX-MT-RX,
+	dU-TX-MT-TX					DU-TX-MT-TX,
+	dU-RX-MT-TX					DU-RX-MT-TX,
+	dU-TX-MT-RX					DU-TX-MT-RX,
+	iE-Extensions				ProtocolExtensionContainer { { IAB-MT-Cell-List-Item-ExtIEs } } OPTIONAL
+}
+
+IAB-MT-Cell-List-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-STC-Info	::=	SEQUENCE{
+	iAB-STC-Info-List	IAB-STC-Info-List,
+	iE-Extensions		ProtocolExtensionContainer { { IAB-STC-Info-ExtIEs } } OPTIONAL
+}
+
+IAB-STC-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-STC-Info-List ::= 	SEQUENCE (SIZE(1..maxnoofIABSTCInfo)) OF IAB-STC-Info-Item
+
+IAB-STC-Info-Item::=	SEQUENCE {
+	sSB-freqInfo						SSB-freqInfo,
+	sSB-subcarrierSpacing				SSB-subcarrierSpacing,
+	sSB-transmissionPeriodicity			SSB-transmissionPeriodicity,
+	sSB-transmissionTimingOffset		SSB-transmissionTimingOffset,
+	sSB-transmissionBitmap				SSB-transmissionBitmap,
+	iE-Extensions		ProtocolExtensionContainer { { IAB-STC-Info-Item-ExtIEs } } OPTIONAL
+}
+
+IAB-STC-Info-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-Allocated-TNL-Address-Item	::= SEQUENCE {
+	iABTNLAddress				IABTNLAddress,
+	iABTNLAddressUsage			IABTNLAddressUsage	 	OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { { IAB-Allocated-TNL-Address-Item-ExtIEs } } OPTIONAL
+}
+
+IAB-Allocated-TNL-Address-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-DU-Cell-Resource-Configuration-Mode-Info	::=	CHOICE {
+	fDD		IAB-DU-Cell-Resource-Configuration-FDD-Info,
+	tDD		IAB-DU-Cell-Resource-Configuration-TDD-Info,
+	choice-extension			ProtocolIE-SingleContainer { { IAB-DU-Cell-Resource-Configuration-Mode-Info-ExtIEs} }
+}
+
+IAB-DU-Cell-Resource-Configuration-Mode-Info-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+IAB-DU-Cell-Resource-Configuration-FDD-Info ::= SEQUENCE {
+	gNB-DU-Cell-Resource-Configuration-FDD-UL				GNB-DU-Cell-Resource-Configuration,
+	gNB-DU-Cell-Resource-Configuration-FDD-DL				GNB-DU-Cell-Resource-Configuration,
+	iE-Extensions					ProtocolExtensionContainer { {IAB-DU-Cell-Resource-Configuration-FDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+IAB-DU-Cell-Resource-Configuration-FDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-DU-Cell-Resource-Configuration-TDD-Info ::= SEQUENCE {
+	gNB-DU-Cell-Resourc-Configuration-TDD				GNB-DU-Cell-Resource-Configuration,
+	iE-Extensions					ProtocolExtensionContainer { {IAB-DU-Cell-Resource-Configuration-TDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+IAB-DU-Cell-Resource-Configuration-TDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IABIPv6RequestType	 ::= CHOICE {
+	iPv6Address						IABTNLAddressesRequested,
+	iPv6Prefix						IABTNLAddressesRequested, 
+	choice-extension				ProtocolIE-SingleContainer { { IABIPv6RequestType-ExtIEs} }
+}
+
+IABIPv6RequestType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+IABTNLAddress ::= CHOICE {
+	iPv4Address						BIT STRING (SIZE(32)), 
+	iPv6Address						BIT STRING (SIZE(128)), 
+	iPv6Prefix						BIT STRING (SIZE(64)), 
+	choice-extension				ProtocolIE-SingleContainer { { IABTNLAddress-ExtIEs} }
+}
+
+IABTNLAddress-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+IABTNLAddressesRequested ::= SEQUENCE {
+	tNLAddressesOrPrefixesRequestedAllTraffic	INTEGER (1..256) 	OPTIONAL,
+	tNLAddressesOrPrefixesRequestedF1-C			INTEGER (1..256) 	OPTIONAL,
+	tNLAddressesOrPrefixesRequestedF1-U			INTEGER (1..256) 	OPTIONAL,
+	tNLAddressesOrPrefixesRequestedNoNF1		INTEGER (1..256) 	OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { { IABTNLAddressesRequested-ExtIEs } } OPTIONAL
+}
+
+IABTNLAddressesRequested-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IAB-TNL-Addresses-To-Remove-Item ::= SEQUENCE {
+	iABTNLAddress			IABTNLAddress,
+	iE-Extensions		ProtocolExtensionContainer { { IAB-TNL-Addresses-To-Remove-Item-ExtIEs} } OPTIONAL
+}
+
+IAB-TNL-Addresses-To-Remove-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IABTNLAddressUsage ::= ENUMERATED {
+	f1-c,
+	f1-u,
+	non-f1,
+	...
+}
+
+
+IABv4AddressesRequested ::= SEQUENCE {
+	iABv4AddressesRequested			IABTNLAddressesRequested,
+	iE-Extensions		ProtocolExtensionContainer { { IABv4AddressesRequested-ExtIEs} } OPTIONAL
+}
+
+IABv4AddressesRequested-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ImplicitFormat	::= SEQUENCE	{ 
+	dUFSlotformatIndex 			DUFSlotformatIndex,
+	iE-Extensions		ProtocolExtensionContainer { { ImplicitFormat-ExtIEs } } OPTIONAL
+}
+
+ImplicitFormat-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IgnorePRACHConfiguration::= ENUMERATED { true,...}
+
+IgnoreResourceCoordinationContainer ::= ENUMERATED { yes,...}
+InactivityMonitoringRequest ::= ENUMERATED { true,...}
+InactivityMonitoringResponse ::= ENUMERATED { not-supported,...}
+InterfacesToTrace ::= BIT STRING (SIZE(8))
+
+IntendedTDD-DL-ULConfig ::= SEQUENCE {
+	nRSCS						ENUMERATED { scs15, scs30, scs60, scs120,...},
+	nRCP						ENUMERATED { normal, extended,...},
+	nRDLULTxPeriodicity			ENUMERATED { ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms3, ms4, ms5, ms10, ms20, ms40, ms60, ms80, ms100, ms120, ms140, ms160, ...},
+	slot-Configuration-List 	Slot-Configuration-List,
+	iE-Extensions						ProtocolExtensionContainer { {IntendedTDD-DL-ULConfig-ExtIEs} } OPTIONAL
+}
+
+IntendedTDD-DL-ULConfig-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IPHeaderInformation ::= SEQUENCE {
+	destinationIABTNLAddress			IABTNLAddress,
+	dsInformationList					DSInformationList	OPTIONAL,
+	iPv6FlowLabel						BIT STRING (SIZE (20))	OPTIONAL,
+	iE-Extensions						ProtocolExtensionContainer { { IPHeaderInformation-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+IPHeaderInformation-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+IPtolayer2TrafficMappingInfo ::= SEQUENCE {
+	iPtolayer2TrafficMappingInfoToAdd					IPtolayer2TrafficMappingInfoList		OPTIONAL,
+	iPtolayer2TrafficMappingInfoToRemove				MappingInformationtoRemove				OPTIONAL,
+	iE-Extensions										ProtocolExtensionContainer { { IPtolayer2TrafficMappingInfo-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+IPtolayer2TrafficMappingInfoList ::= SEQUENCE (SIZE(1..maxnoofMappingEntries)) OF IPtolayer2TrafficMappingInfo-Item
+
+IPtolayer2TrafficMappingInfo-Item ::= SEQUENCE {
+	mappingInformationIndex		MappingInformationIndex,		
+	iPHeaderInformation			IPHeaderInformation,
+	bHInfo	 					BHInfo,	iE-Extensions				ProtocolExtensionContainer { { IPtolayer2TrafficMappingInfo-ItemExtIEs} } OPTIONAL,
+	...
+}
+
+IPtolayer2TrafficMappingInfo-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+-- J
+
+-- K
+
+-- L
+
+L139Info ::= SEQUENCE {
+	msg1SCS						ENUMERATED {scs15, scs30, scs60, scs120, ...},
+	rootSequenceIndex			INTEGER (0..137)								OPTIONAL,
+	iE-Extension				ProtocolExtensionContainer { {L139Info-ExtIEs} } 		OPTIONAL,
+	...
+}
+
+L139Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+L839Info ::= SEQUENCE {
+	rootSequenceIndex			INTEGER (0..837),
+	restrictedSetConfig			ENUMERATED {unrestrictedSet, restrictedSetTypeA,
+											restrictedSetTypeB, ...},
+	iE-Extension		ProtocolExtensionContainer { {L839Info-ExtIEs} } 		OPTIONAL,
+	...
+}
+
+L839Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+LCID ::= INTEGER (1..32, ...)
+
+
+LCStoGCSTranslationList ::= SEQUENCE (SIZE (1.. maxnooflcs-gcs-translation)) OF LCStoGCSTranslation
+
+LCStoGCSTranslation ::= SEQUENCE {
+	alpha			INTEGER (0..359),
+	alpha-fine		INTEGER (0..9),
+	beta			INTEGER (0..359),
+	beta-fine		INTEGER (0..9),
+	gamma			INTEGER (0..359),
+	gamma-fine		INTEGER (0..9),
+	iE-Extensions				ProtocolExtensionContainer { {LCStoGCSTranslation-ExtIEs} } OPTIONAL
+}
+
+LCStoGCSTranslation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+LMF-MeasurementID ::= INTEGER (1.. 65536, ...)
+
+LMF-UE-MeasurementID ::= INTEGER (1.. 256, ...)
+
+LocationUncertainty ::= SEQUENCE {
+	horizontalUncertainty		INTEGER (0..255),
+	horizontalConfidence		INTEGER (0..100),
+	verticalUncertainty			INTEGER (0..255),
+	verticalConfidence			INTEGER (0..100),
+	iE-Extensions				ProtocolExtensionContainer { { LocationUncertainty-ExtIEs} } OPTIONAL
+}
+
+LocationUncertainty-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+LongDRXCycleLength ::= 	ENUMERATED
+{ms10, ms20, ms32, ms40, ms60, ms64, ms70, ms80, ms128, ms160, ms256, ms320, ms512, ms640, ms1024, ms1280, ms2048, ms2560, ms5120, ms10240, ...}
+
+LowerLayerPresenceStatusChange ::= ENUMERATED {
+	suspend-lower-layers,
+	resume-lower-layers,
+	...
+
+}
+
+LTEUESidelinkAggregateMaximumBitrate ::= SEQUENCE {
+	uELTESidelinkAggregateMaximumBitrate		BitRate,
+	iE-Extensions					ProtocolExtensionContainer { {LTEUESidelinkAggregateMaximumBitrate-ExtIEs} } OPTIONAL
+}
+
+LTEUESidelinkAggregateMaximumBitrate-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+LTEV2XServicesAuthorized ::= SEQUENCE {
+	vehicleUE			VehicleUE														OPTIONAL,
+	pedestrianUE 		PedestrianUE													OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { {LTEV2XServicesAuthorized-ExtIEs} }		OPTIONAL
+}
+
+LTEV2XServicesAuthorized-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+-- M
+
+MappingInformationIndex	::= BIT STRING (SIZE (26))
+
+MappingInformationtoRemove	::= SEQUENCE (SIZE(1..maxnoofMappingEntries)) OF MappingInformationIndex
+
+MaskedIMEISV ::= 	BIT STRING (SIZE (64))
+
+MaxDataBurstVolume  ::= INTEGER (0..4095, ..., 4096.. 2000000) 
+MaxPacketLossRate ::= INTEGER (0..1000)
+
+MIB-message ::= OCTET STRING
+
+MeasConfig ::= OCTET STRING
+
+MeasGapConfig ::= OCTET STRING
+
+MeasGapSharingConfig ::= OCTET STRING
+
+MeasurementBeamInfoRequest ::= ENUMERATED {true, ...}
+
+MeasurementBeamInfo	 ::= SEQUENCE {
+	pRS-Resource-ID				PRS-Resource-ID		OPTIONAL,
+	pRS-Resource-Set-ID			PRS-Resource-Set-ID	OPTIONAL,
+	sSB-Index					SSB-Index			OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { MeasurementBeamInfo-ExtIEs} } OPTIONAL
+}
+
+MeasurementBeamInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+MeasurementTimingConfiguration ::= OCTET STRING
+
+MessageIdentifier ::= BIT STRING (SIZE (16))
+
+MultiplexingInfo 	::=	SEQUENCE{
+	iAB-MT-Cell-List 	IAB-MT-Cell-List,
+	iE-Extensions		ProtocolExtensionContainer { {MultiplexingInfo-ExtIEs} } OPTIONAL
+}
+
+MultiplexingInfo-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+M2Configuration ::= ENUMERATED {true, ...}
+
+
+M5Configuration ::= SEQUENCE {
+	m5period			M5period,
+	m5-links-to-log		M5-Links-to-log,
+	iE-Extensions		ProtocolExtensionContainer { { M5Configuration-ExtIEs} } OPTIONAL,
+	...
+}
+
+M5Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+M5period ::= ENUMERATED { ms1024, ms2048, ms5120, ms10240, min1, ... } 
+
+M5-Links-to-log	::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...}
+
+
+M6Configuration ::= SEQUENCE {
+	m6report-Interval	M6report-Interval,
+	m6-links-to-log		M6-Links-to-log,
+	iE-Extensions		ProtocolExtensionContainer { { M6Configuration-ExtIEs} } OPTIONAL,
+	...
+}
+
+M6Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+M6report-Interval ::= ENUMERATED { ms120, ms240, ms640, ms1024, ms2048, ms5120, ms10240, ms20480, ms40960, min1, min6, min12, min30, ... }
+
+
+
+M6-Links-to-log	::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...}
+
+
+M7Configuration ::= SEQUENCE {
+	m7period			M7period,
+	m7-links-to-log		M7-Links-to-log,
+	iE-Extensions		ProtocolExtensionContainer { { M7Configuration-ExtIEs} } OPTIONAL,
+	...
+}
+
+M7Configuration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+M7period	::= INTEGER(1..60, ...)
+
+M7-Links-to-log	::= ENUMERATED {downlink, ...}
+
+MDT-Activation ::= ENUMERATED { 
+	immediate-MDT-only,
+	immediate-MDT-and-Trace,
+	...
+}
+
+MDTConfiguration ::= SEQUENCE {
+	mdt-Activation				MDT-Activation,
+	measurementsToActivate		MeasurementsToActivate,
+	m2Configuration				M2Configuration		OPTIONAL,
+	--  C-ifM2: This IE shall be present if the Measurements to Activate IE has the second bit set to "1".
+	m5Configuration				M5Configuration		OPTIONAL,
+	--  C-ifM5: This IE shall be present if the Measurements to Activate IE has the fifth bit set to "1".
+	m6Configuration				M6Configuration		OPTIONAL,
+	--  C-ifM6: This IE shall be present if the Measurements to Activate IE has the seventh bit set to "1".
+	m7Configuration				M7Configuration		OPTIONAL,
+	--  C-ifM7: This IE shall be present if the Measurements to Activate IE has the eighth bit set to "1".
+	iE-Extensions				ProtocolExtensionContainer { { MDTConfiguration-ExtIEs} } OPTIONAL,
+	...
+}
+MDTConfiguration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+MDTPLMNList ::= SEQUENCE (SIZE(1..maxnoofMDTPLMNs)) OF PLMN-Identity
+
+
+MeasuredResultsValue ::= CHOICE {
+	uL-AngleOfArrival	UL-AoA,
+	uL-SRS-RSRP			UL-SRS-RSRP,
+	uL-RTOA				UL-RTOA-Measurement,
+	gNB-RxTxTimeDiff	GNB-RxTxTimeDiff,
+	choice-extension	ProtocolIE-SingleContainer { { MeasuredResultsValue-ExtIEs } }
+}
+
+MeasuredResultsValue-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+MeasurementsToActivate ::= BIT STRING (SIZE (8))
+
+-- N
+
+NeedforGap::= ENUMERATED {true, ...}
+
+Neighbour-Cell-Information-Item ::= SEQUENCE {
+	nRCGI				NRCGI, 
+	intendedTDD-DL-ULConfig		IntendedTDD-DL-ULConfig OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { Neighbour-Cell-Information-ItemExtIEs } }	OPTIONAL
+}
+
+Neighbour-Cell-Information-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NGRANAllocationAndRetentionPriority ::= SEQUENCE {
+	priorityLevel				PriorityLevel,
+	pre-emptionCapability		Pre-emptionCapability,
+	pre-emptionVulnerability	Pre-emptionVulnerability,
+	iE-Extensions				ProtocolExtensionContainer { {NGRANAllocationAndRetentionPriority-ExtIEs} } OPTIONAL
+}
+
+NGRANAllocationAndRetentionPriority-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+NGRANHighAccuracyAccessPointPosition ::= SEQUENCE {
+	latitude					INTEGER (-2147483648.. 2147483647),
+	longitude					INTEGER (-2147483648.. 2147483647),
+	altitude					INTEGER (-64000..1280000),
+	uncertaintySemi-major		INTEGER (0..255),
+	uncertaintySemi-minor		INTEGER (0..255),
+	orientationOfMajorAxis		INTEGER (0..179),
+	horizontalConfidence		INTEGER (0..100),
+	uncertaintyAltitude			INTEGER (0..255),
+	verticalConfidence			INTEGER (0..100), 
+
+	iE-Extensions				ProtocolExtensionContainer { { NGRANHighAccuracyAccessPointPosition-ExtIEs} } OPTIONAL
+}
+
+NGRANHighAccuracyAccessPointPosition-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NID ::= BIT STRING (SIZE(44))
+
+NR-CGI-List-For-Restart-Item ::= SEQUENCE {
+	nRCGI				NRCGI,
+	iE-Extensions		ProtocolExtensionContainer { { NR-CGI-List-For-Restart-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+NR-CGI-List-For-Restart-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NR-PRSBeamInformation ::= SEQUENCE {
+	nR-PRSBeamInformationList		NR-PRSBeamInformationList,
+	lCStoGCSTranslationList 		LCStoGCSTranslationList,
+	iE-Extensions	ProtocolExtensionContainer { { NR-PRSBeamInformation-ExtIEs } } OPTIONAL
+}
+
+NR-PRSBeamInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NR-PRSBeamInformationList ::= SEQUENCE (SIZE(1.. maxnoofPRS-ResourceSets)) OF NR-PRSBeamInformationItem
+
+NR-PRSBeamInformationItem ::= SEQUENCE {
+	pRSResourceSetID	INTEGER (0..7),
+	pRSAngleList		PRSAngleList,
+	iE-Extensions	ProtocolExtensionContainer { { NR-PRSBeamInformationItem-ExtIEs } } OPTIONAL
+}
+
+NR-PRSBeamInformationItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NonDynamic5QIDescriptor	::= SEQUENCE {
+	fiveQI						INTEGER (0..255, ...),
+	qoSPriorityLevel			INTEGER (1..127)				OPTIONAL,
+	averagingWindow 			AveragingWindow					OPTIONAL,
+	maxDataBurstVolume			MaxDataBurstVolume				OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { NonDynamic5QIDescriptor-ExtIEs } } OPTIONAL
+}
+
+NonDynamic5QIDescriptor-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-CNPacketDelayBudgetDownlink	CRITICALITY ignore	EXTENSION ExtendedPacketDelayBudget		PRESENCE optional	}|
+	{ ID id-CNPacketDelayBudgetUplink	CRITICALITY ignore	EXTENSION ExtendedPacketDelayBudget		PRESENCE optional	},
+	...
+}
+
+NonDynamicPQIDescriptor	::= SEQUENCE {
+	fiveQI						INTEGER (0..255, ...),
+	qoSPriorityLevel			INTEGER (1..8, ...)				OPTIONAL,
+	averagingWindow 			AveragingWindow					OPTIONAL,
+	maxDataBurstVolume			MaxDataBurstVolume				OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { NonDynamicPQIDescriptor-ExtIEs } } OPTIONAL
+}
+
+NonDynamicPQIDescriptor-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NonUPTrafficType ::=	ENUMERATED {ue-associated, non-ue-associated, non-f1, bap-control-pdu,...}
+
+NoofDownlinkSymbols	::= INTEGER (0..14)
+
+NoofUplinkSymbols	::= INTEGER (0..14)
+
+Notification-Cause ::= ENUMERATED {fulfilled, not-fulfilled, ...}
+
+NotificationControl ::= ENUMERATED {active, not-active, ...}
+
+NotificationInformation ::= SEQUENCE {
+	message-Identifier	MessageIdentifier,
+	serialNumber		SerialNumber,
+	iE-Extensions	ProtocolExtensionContainer { { NotificationInformationExtIEs} } OPTIONAL,
+	...
+}
+
+NotificationInformationExtIEs		F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NPNBroadcastInformation ::= CHOICE {
+	sNPN-Broadcast-Information					NPN-Broadcast-Information-SNPN,
+	pNI-NPN-Broadcast-Information				NPN-Broadcast-Information-PNI-NPN,
+	choice-extension					ProtocolIE-SingleContainer { {NPNBroadcastInformation-ExtIEs} }
+}
+
+NPNBroadcastInformation-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+NPN-Broadcast-Information-SNPN ::= SEQUENCE {
+	broadcastSNPNID-List		BroadcastSNPN-ID-List,
+	iE-Extension				ProtocolExtensionContainer { {NPN-Broadcast-Information-SNPN-ExtIEs} }	OPTIONAL,
+	...
+}
+
+NPN-Broadcast-Information-SNPN-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+NPN-Broadcast-Information-PNI-NPN ::= SEQUENCE {
+	broadcastPNI-NPN-ID-Information		BroadcastPNI-NPN-ID-List,
+	iE-Extension							ProtocolExtensionContainer { {NPN-Broadcast-Information-PNI-NPN-ExtIEs} }	OPTIONAL,
+	...
+}
+
+NPN-Broadcast-Information-PNI-NPN-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+NPNSupportInfo ::= CHOICE {
+	sNPN-Information		NID,
+	choice-extension		ProtocolIE-SingleContainer { { NPNSupportInfo-ExtIEs } } 
+}
+
+NPNSupportInfo-ExtIEs		F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+NRCarrierList ::= SEQUENCE (SIZE(1..maxnoofNRSCSs)) OF NRCarrierItem
+
+NRCarrierItem ::= SEQUENCE {
+	carrierSCS						NRSCS,
+	offsetToCarrier					INTEGER (0..2199, ...),
+	carrierBandwidth				INTEGER (0..maxnoofPhysicalResourceBlocks, ...),
+	iE-Extension			ProtocolExtensionContainer { {NRCarrierItem-ExtIEs} } 				OPTIONAL,
+	...
+}
+
+NRCarrierItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NRFreqInfo ::=  SEQUENCE {
+	nRARFCN			INTEGER (0..maxNRARFCN),
+	sul-Information	SUL-Information		OPTIONAL,
+	freqBandListNr	SEQUENCE (SIZE(1..maxnoofNrCellBands)) OF FreqBandNrItem,
+	iE-Extensions	ProtocolExtensionContainer { { NRFreqInfoExtIEs} } OPTIONAL,
+	...
+}
+
+NRFreqInfoExtIEs		F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-FrequencyShift7p5khz	CRITICALITY ignore	EXTENSION FrequencyShift7p5khz	PRESENCE optional },
+	...
+}
+
+NRCGI ::= SEQUENCE {
+	pLMN-Identity			PLMN-Identity,
+	nRCellIdentity			NRCellIdentity,
+	iE-Extensions			ProtocolExtensionContainer { {NRCGI-ExtIEs} } OPTIONAL,
+	...
+}
+
+NRCGI-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NR-Mode-Info ::= CHOICE {
+	fDD		FDD-Info,
+	tDD		TDD-Info,
+	choice-extension			ProtocolIE-SingleContainer { { NR-Mode-Info-ExtIEs} }
+}
+
+NR-Mode-Info-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+
+
+NRPRACHConfig ::= SEQUENCE {
+	ulPRACHConfigList			NRPRACHConfigList									OPTIONAL,
+	sulPRACHConfigList			NRPRACHConfigList									OPTIONAL,
+	iE-Extension				ProtocolExtensionContainer { {NRPRACHConfig-ExtIEs} } 	OPTIONAL,
+	...
+}
+
+NRPRACHConfig-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NRCellIdentity ::= BIT STRING (SIZE(36))
+
+NRNRB ::= ENUMERATED { nrb11, nrb18, nrb24, nrb25, nrb31, nrb32, nrb38, nrb51, nrb52, nrb65, nrb66, nrb78, nrb79, nrb93, nrb106, nrb107, nrb121, nrb132, nrb133, nrb135, nrb160, nrb162, nrb189, nrb216, nrb217, nrb245, nrb264, nrb270, nrb273, ...}
+
+NRPCI ::= INTEGER(0..1007)
+
+
+NRPRACHConfigList ::= SEQUENCE (SIZE(0..maxnoofPRACHconfigs)) OF NRPRACHConfigItem
+
+NRPRACHConfigItem ::= SEQUENCE {
+	nRSCS					NRSCS,
+	prachFreqStartfromCarrier	INTEGER (0..maxnoofPhysicalResourceBlocks-1, ...),
+	msg1FDM						ENUMERATED {one, two, four, eight, ...},
+	parchConfigIndex			INTEGER (0..255, ...),
+	ssb-perRACH-Occasion		ENUMERATED {oneEighth, oneFourth, oneHalf, one, 
+											two, four, eight, sixteen, ...},
+	freqDomainLength			FreqDomainLength, 
+	zeroCorrelZoneConfig		INTEGER (0..15),
+	iE-Extension		ProtocolExtensionContainer { { NRPRACHConfigItem-ExtIEs} } 		OPTIONAL,
+	...
+}
+
+NRPRACHConfigItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NRSCS ::= ENUMERATED { scs15, scs30, scs60, scs120, ...}
+
+NRUERLFReportContainer ::= OCTET STRING
+
+NumberofActiveUEs ::= INTEGER(0..16777215, ...)
+
+NumberOfBroadcasts ::= INTEGER (0..65535)
+
+NumberofBroadcastRequest ::= INTEGER (0..65535)
+
+NumDLULSymbols ::= SEQUENCE {
+	numDLSymbols	INTEGER (0..13, ...),
+	numULSymbols	INTEGER (0..13, ...),
+	iE-Extensions			ProtocolExtensionContainer { { NumDLULSymbols-ExtIEs} } OPTIONAL
+}
+
+NumDLULSymbols-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NRV2XServicesAuthorized ::= SEQUENCE {
+	vehicleUE			VehicleUE														OPTIONAL,
+	pedestrianUE 		PedestrianUE													OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { {NRV2XServicesAuthorized-ExtIEs} }	OPTIONAL
+}
+
+NRV2XServicesAuthorized-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NRUESidelinkAggregateMaximumBitrate ::= SEQUENCE {
+	uENRSidelinkAggregateMaximumBitrate		BitRate,
+	iE-Extensions					ProtocolExtensionContainer { {NRUESidelinkAggregateMaximumBitrate-ExtIEs} } OPTIONAL
+}
+
+NRUESidelinkAggregateMaximumBitrate-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+NZP-CSI-RS-ResourceID::= INTEGER  (0..191, ...)
+
+
+-- O
+
+OffsetToPointA	::= INTEGER (0..2199,...)
+
+
+-- P
+
+PacketDelayBudget ::= INTEGER (0..1023, ...) 
+
+PacketErrorRate ::= SEQUENCE {
+	pER-Scalar			PER-Scalar,
+	pER-Exponent		PER-Exponent,
+	iE-Extensions		ProtocolExtensionContainer { {PacketErrorRate-ExtIEs} }	OPTIONAL,
+	...
+}
+
+PacketErrorRate-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PER-Scalar ::= INTEGER (0..9, ...)
+PER-Exponent ::= INTEGER (0..9, ...)
+
+PagingCell-Item ::= SEQUENCE {
+	nRCGI		NRCGI	,
+	iE-Extensions	ProtocolExtensionContainer { { PagingCell-ItemExtIEs } }	OPTIONAL
+}
+
+PagingCell-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PagingDRX ::= ENUMERATED {
+	v32,
+	v64,
+	v128,
+	v256,
+	...
+}
+
+PagingIdentity ::=	CHOICE {
+	rANUEPagingIdentity	RANUEPagingIdentity,
+	cNUEPagingIdentity	CNUEPagingIdentity, 
+	choice-extension			ProtocolIE-SingleContainer { { PagingIdentity-ExtIEs } }
+}
+
+PagingIdentity-ExtIEs F1AP-PROTOCOL-IES::= {
+	...
+}
+
+PagingOrigin ::= ENUMERATED { non-3gpp,	...}
+
+PagingPriority ::= ENUMERATED { priolevel1, priolevel2, priolevel3, priolevel4, priolevel5, priolevel6, priolevel7, priolevel8,...} 
+
+
+RelativePathDelay ::= CHOICE {
+	k0					INTEGER (0..16351,...),
+	k1					INTEGER (0..8176,...),
+	k2					INTEGER (0..4088,...),
+	k3					INTEGER (0..2044,...),
+	k4					INTEGER (0..1022,...),
+	k5					INTEGER (0..511,...),	 
+	choice-extension			ProtocolIE-SingleContainer { { RelativePathDelay-ExtIEs } }
+}
+
+RelativePathDelay-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+PathlossReferenceInfo ::= SEQUENCE {
+	pathlossReferenceSignal			PathlossReferenceSignal,
+	iE-Extensions					ProtocolExtensionContainer { {PathlossReferenceInfo-ExtIEs} }	OPTIONAL
+}
+
+PathlossReferenceInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PathlossReferenceSignal ::= CHOICE { 
+	sSB										SSB,
+	dL-PRS									DL-PRS,
+	choice-extension						ProtocolIE-SingleContainer {{PathlossReferenceSignal-ExtIEs }}
+}
+
+PathlossReferenceSignal-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+PC5QoSFlowIdentifier ::= INTEGER (1..2048) 
+
+PC5-QoS-Characteristics ::= CHOICE {
+	non-Dynamic-PQI				NonDynamicPQIDescriptor,
+	dynamic-PQI					DynamicPQIDescriptor, 
+	choice-extension			ProtocolIE-SingleContainer { { PC5-QoS-Characteristics-ExtIEs } }
+}
+
+PC5-QoS-Characteristics-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+
+PC5QoSParameters	::= SEQUENCE {
+    pC5-QoS-Characteristics				PC5-QoS-Characteristics,
+	pC5-QoS-Flow-Bit-Rates				PC5FlowBitRates				OPTIONAL,
+	iE-Extensions						ProtocolExtensionContainer { { PC5QoSParameters-ExtIEs } }	OPTIONAL,
+	...
+}
+
+PC5QoSParameters-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PC5FlowBitRates ::= SEQUENCE {
+	guaranteedFlowBitRate		BitRate,
+	maximumFlowBitRate			BitRate,
+	iE-Extensions				ProtocolExtensionContainer { { PC5FlowBitRates-ExtIEs } }	OPTIONAL,
+	...
+}
+
+PC5FlowBitRates-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PDCCH-BlindDetectionSCG ::= OCTET STRING
+
+PDCP-SN ::= INTEGER (0..4095)
+
+PDCPSNLength	::= ENUMERATED { twelve-bits,eighteen-bits,...}
+
+PDUSessionID ::= INTEGER (0..255)
+
+ReportingPeriodicityValue ::= INTEGER (0..512, ...)
+
+Periodicity ::= INTEGER (0..640000, ...) 
+
+PeriodicitySRS ::= ENUMERATED { ms0p125, ms0p25, ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms4, ms5, ms8, ms10, ms16, ms20, ms32, ms40, ms64, ms80, ms160, ms320, ms640, ms1280, ms2560, ms5120, ms10240, ...}
+
+PeriodicityList ::= SEQUENCE (SIZE(1.. maxnoSRS-ResourcePerSet)) OF PeriodicityList-Item
+
+PeriodicityList-Item ::= SEQUENCE {
+	periodicitySRS				PeriodicitySRS,
+	iE-Extensions				ProtocolExtensionContainer { { PeriodicityList-ItemExtIEs} } OPTIONAL
+}
+
+PeriodicityList-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+Permutation ::= ENUMERATED {dfu, ufd, ...}
+
+Ph-InfoMCG  ::= OCTET STRING
+
+Ph-InfoSCG  ::= OCTET STRING
+
+PLMN-Identity ::= OCTET STRING (SIZE(3))
+
+PortNumber ::= BIT STRING (SIZE (16))
+
+
+PosAssistance-Information ::= OCTET STRING
+
+PosAssistanceInformationFailureList ::= OCTET STRING
+
+PosBroadcast ::= ENUMERATED {
+	start,
+	stop,
+	...
+}
+
+PositioningBroadcastCells ::= SEQUENCE (SIZE (1..maxnoBcastCell)) OF NRCGI
+
+PosMeasurementPeriodicity ::= ENUMERATED
+{ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60, ...}
+
+
+PosMeasurementQuantities ::= SEQUENCE (SIZE(1.. maxnoofPosMeas)) OF PosMeasurementQuantities-Item
+
+PosMeasurementQuantities-Item ::= SEQUENCE {
+	posMeasurementType					PosMeasurementType,
+	timingReportingGranularityFactor	INTEGER (0..5) OPTIONAL,
+	iE-Extensions						ProtocolExtensionContainer { { PosMeasurementQuantities-ItemExtIEs} } OPTIONAL
+}
+
+PosMeasurementQuantities-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosMeasurementResult ::= SEQUENCE (SIZE (1.. maxnoofPosMeas)) OF PosMeasurementResultItem 
+
+PosMeasurementResultItem ::= SEQUENCE {
+	measuredResultsValue				MeasuredResultsValue,
+	timeStamp							TimeStamp,
+	measurementQuality					TRPMeasurementQuality	OPTIONAL,
+	measurementBeamInfo					MeasurementBeamInfo		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { PosMeasurementResultItemExtIEs } }	OPTIONAL
+}
+
+PosMeasurementResultItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosMeasurementResultList ::= SEQUENCE (SIZE(1.. maxNoOfMeasTRPs)) OF PosMeasurementResultList-Item
+
+PosMeasurementResultList-Item ::= SEQUENCE {
+	posMeasurementResult			PosMeasurementResult,
+	tRPID							TRPID,
+	iE-Extensions					ProtocolExtensionContainer { { PosMeasurementResultList-ItemExtIEs} } OPTIONAL
+}
+
+PosMeasurementResultList-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosMeasurementType ::= ENUMERATED {
+	gnb-rx-tx,
+	ul-srs-rsrp,
+	ul-aoa,
+	ul-rtoa, 
+	...
+}
+
+PosReportCharacteristics ::= ENUMERATED {
+	ondemand, 
+	periodic, 
+	...
+}
+
+PosResourceSetType  ::= CHOICE {
+	periodic			PosResourceSetTypePR,
+	semi-persistent		PosResourceSetTypeSP,
+	aperiodic			PosResourceSetTypeAP,
+	choice-extension	ProtocolIE-SingleContainer {{ PosResourceSetType-ExtIEs }}
+}
+
+PosResourceSetType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+PosResourceSetTypePR ::= SEQUENCE {
+	posperiodicSet		ENUMERATED{true, ...},
+	iE-Extensions		ProtocolExtensionContainer { { PosResourceSetTypePR-ExtIEs} }	OPTIONAL
+}
+
+PosResourceSetTypePR-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosResourceSetTypeSP ::= SEQUENCE {
+	possemi-persistentSet		ENUMERATED{true, ...},
+	iE-Extensions		ProtocolExtensionContainer { { PosResourceSetTypeSP-ExtIEs} }	OPTIONAL
+}
+
+PosResourceSetTypeSP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosResourceSetTypeAP ::= SEQUENCE {
+	sRSResourceTrigger-List 	INTEGER(1..3),
+	iE-Extensions		ProtocolExtensionContainer { { PosResourceSetTypeAP-ExtIEs} }	OPTIONAL
+}
+
+PosResourceSetTypeAP-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosSRSResourceID-List ::= SEQUENCE (SIZE (1..maxnoSRS-PosResourcePerSet)) OF SRSPosResourceID
+
+PosSRSResource-Item ::= SEQUENCE {
+	srs-PosResourceId				SRSPosResourceID,
+	transmissionCombPos				TransmissionCombPos,
+	startPosition                   INTEGER (0..13),
+	nrofSymbols                     ENUMERATED {n1, n2, n4, n8, n12},
+	freqDomainShift                 INTEGER (0..268),
+	c-SRS	                        INTEGER (0..63),
+	groupOrSequenceHopping          ENUMERATED { neither, groupHopping, sequenceHopping },
+	resourceTypePos					ResourceTypePos,
+	sequenceId                      INTEGER (0.. 65535),
+	spatialRelationPos				SpatialRelationPos 	OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { PosSRSResource-Item-ExtIEs} }	OPTIONAL
+}
+
+PosSRSResource-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosSRSResource-List ::= SEQUENCE (SIZE (1..maxnoSRS-PosResources)) OF PosSRSResource-Item
+
+PosSRSResourceSet-Item ::= SEQUENCE {
+	possrsResourceSetID				INTEGER(0..15),
+	possRSResourceID-List			PosSRSResourceID-List,
+	posresourceSetType				PosResourceSetType,
+	iE-Extensions		ProtocolExtensionContainer { { PosSRSResourceSet-Item-ExtIEs} }	OPTIONAL
+}
+
+PosSRSResourceSet-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PosSRSResourceSet-List ::= SEQUENCE (SIZE (1..maxnoSRS-PosResourceSets)) OF PosSRSResourceSet-Item
+
+PrimaryPathIndication ::= ENUMERATED { 
+	true,
+	false,
+	...
+}
+
+Pre-emptionCapability ::= ENUMERATED {
+	shall-not-trigger-pre-emption,
+	may-trigger-pre-emption
+}
+
+Pre-emptionVulnerability ::= ENUMERATED {
+	not-pre-emptable,
+	pre-emptable
+}
+
+PriorityLevel	::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15)
+
+ProtectedEUTRAResourceIndication		::= OCTET STRING
+
+Protected-EUTRA-Resources-Item ::= SEQUENCE {
+	spectrumSharingGroupID					SpectrumSharingGroupID, 
+	eUTRACells-List		EUTRACells-List,
+	iE-Extensions	ProtocolExtensionContainer { { Protected-EUTRA-Resources-ItemExtIEs } }	OPTIONAL
+}
+
+Protected-EUTRA-Resources-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRSConfiguration ::= SEQUENCE {
+	pRSResourceSet-List			PRSResourceSet-List,
+	iE-Extensions	ProtocolExtensionContainer { { PRSConfiguration-ExtIEs } }	OPTIONAL
+}
+
+PRSConfiguration-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRSInformationPos  ::= SEQUENCE {
+	pRS-IDPos					INTEGER(0..255) OPTIONAL,	
+	pRS-Resource-Set-IDPos		INTEGER(0..7),
+	pRS-Resource-IDPos			INTEGER(0..63),
+	iE-Extensions					ProtocolExtensionContainer { { PRSInformationPos-ExtIEs} } OPTIONAL
+}
+
+PRSInformationPos-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Potential-SpCell-Item ::= SEQUENCE {
+	potential-SpCell-ID			NRCGI	,
+	iE-Extensions	ProtocolExtensionContainer { { Potential-SpCell-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Potential-SpCell-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+PRSAngleList ::= SEQUENCE (SIZE(1.. maxnoofPRS-ResourcesPerSet)) OF PRSAngleItem
+
+PRSAngleItem ::= SEQUENCE {
+	nR-PRS-Azimuth			INTEGER (0..359),
+	nR-PRS-Azimuth-fine		INTEGER (0..9),
+	nR-PRS-Elevation		INTEGER (0..180),
+	nR-PRS-Elevation-fine	INTEGER (0..9),
+	iE-Extensions		ProtocolExtensionContainer { { PRSAngleItem-ItemExtIEs } }	OPTIONAL
+}
+
+PRSAngleItem-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRSMuting::= SEQUENCE {
+	pRSMutingOption1			PRSMutingOption1,
+	pRSMutingOption2			PRSMutingOption2,
+	iE-Extensions					ProtocolExtensionContainer { { PRSMuting-ExtIEs} } OPTIONAL
+}
+
+PRSMuting-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRSMutingOption1 ::= SEQUENCE {
+	mutingPattern					DL-PRSMutingPattern,
+	mutingBitRepetitionFactor		ENUMERATED{rf1,rf2,rf4,rf8,...},
+	iE-Extensions					ProtocolExtensionContainer { { PRSMutingOption1-ExtIEs} } OPTIONAL
+}
+
+PRSMutingOption1-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRSMutingOption2 ::= SEQUENCE {
+	mutingPattern					DL-PRSMutingPattern,
+	iE-Extensions					ProtocolExtensionContainer { { PRSMutingOption2-ExtIEs} } OPTIONAL
+}
+
+PRSMutingOption2-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRS-Resource-ID ::= INTEGER (0..63)
+
+PRSResource-List::= SEQUENCE (SIZE (1..maxnoofPRSresources)) OF PRSResource-Item
+
+PRSResource-Item  ::= SEQUENCE {
+	pRSResourceID			INTEGER(0..63),
+	sequenceID				INTEGER(0..4095,...),
+	rEOffset				INTEGER(0..11),
+	resourceSlotOffset		INTEGER(0..511,...),
+	resourceSymbolOffset	INTEGER(0..12,...),
+	qCLInfo					PRSResource-QCLInfo		OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer { { PRSResource-Item-ExtIEs} } OPTIONAL
+}
+
+PRSResource-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRSResource-QCLInfo  ::= SEQUENCE {
+	qCLSourceSSBIndex		INTEGER(0..63) OPTIONAL,
+	qCLSourcePRSInfo		PRSResource-QCLSourcePRSInfo	OPTIONAL,		
+	iE-Extensions					ProtocolExtensionContainer { { PRSResource-QCLInfo-ExtIEs} } OPTIONAL,
+	...
+}
+PRSResource-QCLInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRSResource-QCLSourcePRSInfo ::= SEQUENCE {
+	qCLSourcePRSResourceSetID		INTEGER(0..7),
+	qCLSourcePRSResourceID 			INTEGER(0..63) OPTIONAL,		
+	iE-Extensions					ProtocolExtensionContainer { { PRSResource-QCLSourcePRSInfo-ExtIEs} } OPTIONAL
+}
+
+PRSResource-QCLSourcePRSInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PRS-Resource-Set-ID ::= INTEGER(0..7)
+
+PRSResourceSet-List ::= SEQUENCE (SIZE (1.. maxnoofPRSresourceSets)) OF PRSResourceSet-Item
+PRSResourceSet-Item ::= SEQUENCE {
+	pRSResourceSetID				PRS-Resource-Set-ID,
+	subcarrierSpacing				ENUMERATED{kHz15, kHz30, kHz60, kHz120, ...},
+	pRSbandwidth					INTEGER(1..63),
+	startPRB						INTEGER(0..2176),
+	pointA							INTEGER (0..3279165),
+	combSize						ENUMERATED{n2, n4, n6, n12, ...},
+	cPType							ENUMERATED{normal, extended, ...},
+	resourceSetPeriodicity			ENUMERATED{n4,n5,n8,n10,n16,n20,n32,n40,n64,n80,n160,n320,n640,n1280,n2560,n5120,n10240,n20480,n40960, n81920,...},
+	resourceSetSlotOffset			INTEGER(0..81919,...),
+	resourceRepetitionFactor		ENUMERATED{rf1,rf2,rf4,rf6,rf8,rf16,rf32,...},
+	resourceTimeGap					ENUMERATED{tg1,tg2,tg4,tg8,tg16,tg32,...},
+	resourceNumberofSymbols			ENUMERATED{n2,n4,n6,n12,...},
+	pRSMuting						PRSMuting 		OPTIONAL,
+	pRSResourceTransmitPower		INTEGER(-60..50),
+	pRSResource-List				PRSResource-List,	
+	iE-Extensions					ProtocolExtensionContainer { { PRSResourceSet-Item-ExtIEs} } OPTIONAL
+}
+
+PRSResourceSet-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PWS-Failed-NR-CGI-Item ::= SEQUENCE {
+	nRCGI				NRCGI,
+	numberOfBroadcasts	NumberOfBroadcasts,
+	iE-Extensions		ProtocolExtensionContainer { { PWS-Failed-NR-CGI-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+PWS-Failed-NR-CGI-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+PWSSystemInformation ::= SEQUENCE {
+	sIBtype 				SIBType-PWS,
+	sIBmessage			OCTET STRING, 
+	iE-Extensions		ProtocolExtensionContainer { { PWSSystemInformationExtIEs } }	OPTIONAL,
+	...
+}
+
+PWSSystemInformationExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ID id-NotificationInformation		CRITICALITY ignore	EXTENSION NotificationInformation		PRESENCE optional}|
+	{ ID id-AdditionalSIBMessageList	CRITICALITY reject	EXTENSION AdditionalSIBMessageList		PRESENCE optional},
+	...
+}
+
+PrivacyIndicator ::= ENUMERATED {immediate-MDT,	logged-MDT,	...}
+
+-- Q
+
+QCI ::= INTEGER (0..255)
+
+QoS-Characteristics ::= CHOICE {
+	non-Dynamic-5QI				NonDynamic5QIDescriptor,
+	dynamic-5QI					Dynamic5QIDescriptor, 
+	choice-extension			ProtocolIE-SingleContainer { { QoS-Characteristics-ExtIEs } }
+}
+
+QoS-Characteristics-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+QoSFlowIdentifier ::= INTEGER (0..63) 
+
+QoSFlowLevelQoSParameters	::= SEQUENCE {
+	qoS-Characteristics					QoS-Characteristics,
+	nGRANallocationRetentionPriority		NGRANAllocationAndRetentionPriority,
+	gBR-QoS-Flow-Information				GBR-QoSFlowInformation				OPTIONAL,
+	reflective-QoS-Attribute				ENUMERATED {subject-to, ...}				OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { QoSFlowLevelQoSParameters-ExtIEs } }	OPTIONAL
+}
+
+QoSFlowLevelQoSParameters-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-PDUSessionID								CRITICALITY ignore	EXTENSION PDUSessionID			PRESENCE optional}|
+	{ ID id-ULPDUSessionAggregateMaximumBitRate			CRITICALITY ignore	EXTENSION BitRate					PRESENCE optional}|
+	{ ID id-QosMonitoringRequest						CRITICALITY ignore	EXTENSION QosMonitoringRequest	PRESENCE optional},
+	...
+}
+
+QoSFlowMappingIndication ::= ENUMERATED {ul,dl,...}
+
+QoSInformation	::=	CHOICE {
+	eUTRANQoS					EUTRANQoS,
+	choice-extension			ProtocolIE-SingleContainer { { QoSInformation-ExtIEs} }
+}
+
+QoSInformation-ExtIEs F1AP-PROTOCOL-IES ::= {
+	{	ID id-DRB-Information		CRITICALITY ignore TYPE DRB-Information		PRESENCE mandatory},
+	...
+}
+
+QosMonitoringRequest ::= ENUMERATED {ul, dl, both, ...}
+
+QoSParaSetIndex ::= INTEGER (1..8, ...) 
+
+QoSParaSetNotifyIndex ::= INTEGER (0..8, ...)
+
+-- R
+
+RACH-Config-Common	::= OCTET STRING
+
+RACH-Config-Common-IAB	::= OCTET STRING
+
+RACHReportContainer::= OCTET STRING
+
+RACHReportInformationList	::= SEQUENCE (SIZE(1.. maxnoofRACHReports)) OF RACHReportInformationItem
+
+RACHReportInformationItem	::= SEQUENCE {
+	rACHReportContainer				RACHReportContainer,
+	uEAssitantIdentifier			GNB-DU-UE-F1AP-ID		OPTIONAL, 
+	iE-Extensions			ProtocolExtensionContainer { { RACHReportInformationItem-ExtIEs} }	OPTIONAL,
+	...
+}
+
+RACHReportInformationItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+
+RadioResourceStatus ::= SEQUENCE {
+	sSBAreaRadioResourceStatusList		SSBAreaRadioResourceStatusList,
+	iE-Extensions	ProtocolExtensionContainer { { RadioResourceStatus-ExtIEs} } OPTIONAL
+}
+
+RadioResourceStatus-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RANAC ::= INTEGER (0..255) 
+
+RAN-MeasurementID ::= INTEGER (1.. 65536, ...)
+
+RAN-UE-MeasurementID ::= INTEGER (1.. 256, ...)
+
+RANUEID ::= OCTET STRING (SIZE (8))
+
+RANUEPagingIdentity ::= SEQUENCE	{
+	iRNTI						BIT STRING (SIZE(40)),
+	iE-Extensions				ProtocolExtensionContainer { { RANUEPagingIdentity-ExtIEs } }	OPTIONAL}
+
+RANUEPagingIdentity-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RAT-FrequencyPriorityInformation::= CHOICE {
+	eNDC		SubscriberProfileIDforRFP,
+	nGRAN		RAT-FrequencySelectionPriority,
+	choice-extension			ProtocolIE-SingleContainer { { RAT-FrequencyPriorityInformation-ExtIEs} }
+}
+
+RAT-FrequencyPriorityInformation-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+RAT-FrequencySelectionPriority::= INTEGER (1.. 256, ...)
+
+Reestablishment-Indication	::=	ENUMERATED  {
+	reestablished,
+	...
+}
+
+ReferencePoint ::= CHOICE {
+	coordinateID					CoordinateID,
+	referencePointCoordinate		AccessPointPosition,
+	referencePointCoordinateHA		NGRANHighAccuracyAccessPointPosition,
+	choice-Extension				ProtocolIE-SingleContainer { { ReferencePoint-ExtIEs} }
+}
+
+ReferencePoint-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+ReferenceSFN ::= INTEGER (0..1023)
+
+ReferenceSignal ::= CHOICE { 
+	nZP-CSI-RS								NZP-CSI-RS-ResourceID,
+	sSB										SSB,
+	sRS										SRSResourceID,
+	positioningSRS							SRSPosResourceID,
+	dL-PRS									DL-PRS,
+	choice-extension						ProtocolIE-SingleContainer {{ReferenceSignal-ExtIEs }}
+}
+
+ReferenceSignal-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+RelativeCartesianLocation ::= SEQUENCE {
+	xYZunit						ENUMERATED {mm, cm, dm, ...},
+	xvalue						INTEGER (-65536..65535),
+	yvalue						INTEGER (-65536..65535),
+	zvalue						INTEGER (-32768..32767),
+	locationUncertainty			LocationUncertainty,
+	iE-Extensions				ProtocolExtensionContainer { { RelativeCartesianLocation-ExtIEs} } OPTIONAL
+}
+
+RelativeCartesianLocation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RelativeGeodeticLocation ::= SEQUENCE { 
+	milli-Arc-SecondUnits		ENUMERATED {zerodot03, zerodot3, three, ...},	
+	heightUnits					ENUMERATED {mm, cm, m, ...}, 
+	deltaLatitude				INTEGER (-1024.. 1023),
+	deltaLongitude				INTEGER (-1024.. 1023),
+	deltaHeight					INTEGER (-1024.. 1023),
+	locationUncertainty			LocationUncertainty,
+	iE-extensions				ProtocolExtensionContainer {{RelativeGeodeticLocation-ExtIEs }} OPTIONAL
+}
+
+RelativeGeodeticLocation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ReferenceTime ::= OCTET STRING
+
+RegistrationRequest ::= ENUMERATED{start, stop, add, ...}
+
+ReportCharacteristics ::= BIT STRING (SIZE(32))
+
+ReportingPeriodicity ::= ENUMERATED{ms500, ms1000, ms2000, ms5000, ms10000, ...}
+
+RequestedBandCombinationIndex ::= OCTET STRING
+
+RequestedFeatureSetEntryIndex ::= OCTET STRING
+
+RequestedP-MaxFR2 ::= OCTET STRING
+
+Requested-PDCCH-BlindDetectionSCG ::= OCTET STRING
+
+
+RequestedSRSTransmissionCharacteristics ::= SEQUENCE {
+	numberOfTransmissions		INTEGER (0..500, ...)		OPTIONAL,
+	resourceType				ENUMERATED  {periodic, semi-persistent, aperiodic,...},
+	bandwidthSRS				BandwidthSRS,
+	sRSResourceSetList 			SRSResourceSetList				OPTIONAL,
+	sSBInformation				SSBInformation				OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer { { RequestedSRSTransmissionCharacteristics-ExtIEs} } OPTIONAL
+}
+
+RequestedSRSTransmissionCharacteristics-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RequestType	::= ENUMERATED {offer, execution, ...}
+
+ResourceCoordinationEUTRACellInfo ::= SEQUENCE {
+	eUTRA-Mode-Info 						EUTRA-Coex-Mode-Info,
+	eUTRA-PRACH-Configuration 				EUTRA-PRACH-Configuration,
+	iE-Extensions	ProtocolExtensionContainer { { ResourceCoordinationEUTRACellInfo-ExtIEs } }	OPTIONAL,
+	...
+}
+
+ResourceCoordinationEUTRACellInfo-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ID id-IgnorePRACHConfiguration		CRITICALITY reject EXTENSION IgnorePRACHConfiguration		PRESENCE optional },
+	...
+}
+
+ResourceCoordinationTransferInformation ::= SEQUENCE {
+	meNB-Cell-ID								EUTRA-Cell-ID,
+	resourceCoordinationEUTRACellInfo		ResourceCoordinationEUTRACellInfo	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { ResourceCoordinationTransferInformation-ExtIEs } }	OPTIONAL,
+	...
+}
+
+ResourceCoordinationTransferInformation-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceCoordinationTransferContainer ::= OCTET STRING
+
+ResourceSetType  ::= CHOICE {
+	periodic			ResourceSetTypePeriodic,
+	semi-persistent		ResourceSetTypeSemi-persistent,
+	aperiodic			ResourceSetTypeAperiodic,
+	choice-extension				ProtocolIE-SingleContainer {{ ResourceSetType-ExtIEs }}
+}
+
+ResourceSetType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+ResourceSetTypePeriodic ::= SEQUENCE {
+	periodicSet			ENUMERATED{true, ...},
+	iE-Extensions		ProtocolExtensionContainer { { ResourceSetTypePeriodic-ExtIEs} }	OPTIONAL
+}
+
+ResourceSetTypePeriodic-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceSetTypeSemi-persistent ::= SEQUENCE {
+	semi-persistentSet	ENUMERATED{true, ...},
+	iE-Extensions		ProtocolExtensionContainer { { ResourceSetTypeSemi-persistent-ExtIEs} }	OPTIONAL
+}
+
+ResourceSetTypeSemi-persistent-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceSetTypeAperiodic ::= SEQUENCE {
+	sRSResourceTrigger-List 	INTEGER(1..3),
+	slotoffset					INTEGER(1..32),
+	iE-Extensions		ProtocolExtensionContainer { { ResourceSetTypeAperiodic-ExtIEs} }	OPTIONAL
+}
+
+ResourceSetTypeAperiodic-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RepetitionPeriod ::= INTEGER (0..131071, ...)
+
+ReportingRequestType ::= SEQUENCE {
+	eventType						EventType,
+	reportingPeriodicityValue						ReportingPeriodicityValue		OPTIONAL,
+	-- C-ifEventTypeisPeriodic: This IE shall be present if the Event Type IE is set to "periodic" in the Event Type IE.
+	iE-Extensions					ProtocolExtensionContainer { {ReportingRequestType-ExtIEs} }	OPTIONAL
+}
+
+ReportingRequestType-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceType ::= CHOICE {
+	periodic			ResourceTypePeriodic,
+	semi-persistent		ResourceTypeSemi-persistent,
+	aperiodic			ResourceTypeAperiodic,
+	choice-extension				ProtocolIE-SingleContainer {{ ResourceType-ExtIEs }}
+}
+
+ResourceType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+ResourceTypePeriodic ::= SEQUENCE {
+	periodicity		   ENUMERATED{slot1, slot2, slot4, slot5, slot8, slot10, slot16, slot20, slot32, slot40, slot64, slot80, slot160, slot320, slot640, slot1280, slot2560, ...},
+	offset				INTEGER(0..2559, ...),
+	iE-Extensions		ProtocolExtensionContainer { { ResourceTypePeriodic-ExtIEs} }	OPTIONAL
+}
+
+ResourceTypePeriodic-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceTypeSemi-persistent ::= SEQUENCE {
+	periodicity		   ENUMERATED{slot1, slot2, slot4, slot5, slot8, slot10, slot16, slot20, slot32, slot40, slot64, slot80, slot160, slot320, slot640, slot1280, slot2560, ...},
+	offset				INTEGER(0..2559, ...),
+	iE-Extensions		ProtocolExtensionContainer { { ResourceTypeSemi-persistent-ExtIEs} }	OPTIONAL
+}
+
+ResourceTypeSemi-persistent-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceTypeAperiodic ::= SEQUENCE {
+	aperiodicResourceType	   ENUMERATED{true, ...},
+	iE-Extensions		ProtocolExtensionContainer { { ResourceTypeAperiodic-ExtIEs} }	OPTIONAL
+}
+
+ResourceTypeAperiodic-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceTypePos ::= CHOICE {
+	periodic			ResourceTypePeriodicPos,
+	semi-persistent		ResourceTypeSemi-persistentPos,
+	aperiodic			ResourceTypeAperiodicPos,
+	choice-extension	ProtocolIE-SingleContainer {{ ResourceTypePos-ExtIEs }}
+}
+
+ResourceTypePos-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+ResourceTypePeriodicPos ::= SEQUENCE {
+	periodicity		   ENUMERATED{slot1, slot2, slot4, slot5, slot8, slot10, slot16, slot20, slot32, slot40, slot64, slot80, slot160, slot320, slot640, slot1280, slot2560, slot5120, slot10240, slot20480, slot40960, slot81920, ...},
+	offset				INTEGER(0..81919, ...),
+	iE-Extensions		ProtocolExtensionContainer { { ResourceTypePeriodicPos-ExtIEs} }	OPTIONAL
+}
+
+ResourceTypePeriodicPos-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceTypeSemi-persistentPos ::= SEQUENCE {
+	periodicity		   ENUMERATED{slot1, slot2, slot4, slot5, slot8, slot10, slot16, slot20, slot32, slot40, slot64, slot80, slot160, slot320, slot640, slot1280, slot2560, slot5120, slot10240, slot20480, slot40960, slot81920, ...},
+	offset				INTEGER(0..81919, ...),
+	iE-Extensions		ProtocolExtensionContainer { { ResourceTypeSemi-persistentPos-ExtIEs} }	OPTIONAL
+}
+
+ResourceTypeSemi-persistentPos-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ResourceTypeAperiodicPos ::= SEQUENCE {
+	slotOffset          INTEGER (1..32),
+	iE-Extensions		ProtocolExtensionContainer { { ResourceTypeAperiodicPos-ExtIEs} }	OPTIONAL
+}
+
+ResourceTypeAperiodicPos-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RLCDuplicationInformation ::= SEQUENCE {
+	rLCDuplicationStateList 		RLCDuplicationStateList,
+	primaryPathIndication			PrimaryPathIndication	OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { {RLCDuplicationInformation-ExtIEs} }	OPTIONAL
+}
+
+RLCDuplicationInformation-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RLCDuplicationStateList	::= SEQUENCE (SIZE(1..maxnoofRLCDuplicationState)) OF RLCDuplicationState-Item
+
+RLCDuplicationState-Item ::=SEQUENCE {
+	duplicationState		DuplicationState, 
+	iE-Extensions	ProtocolExtensionContainer { {RLCDuplicationState-Item-ExtIEs } }	OPTIONAL,
+	...
+}
+
+
+RLCDuplicationState-Item-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RLCFailureIndication ::= SEQUENCE {
+	assocatedLCID				LCID,
+	iE-Extensions				ProtocolExtensionContainer { {RLCFailureIndication-ExtIEs} } OPTIONAL
+}
+
+RLCFailureIndication-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RLCMode ::= ENUMERATED {
+	rlc-am,
+	rlc-um-bidirectional,
+	rlc-um-unidirectional-ul,
+	rlc-um-unidirectional-dl,
+	...
+}
+
+RLC-Status ::= SEQUENCE {
+	reestablishment-Indication 	Reestablishment-Indication,
+	iE-Extensions				ProtocolExtensionContainer { { RLC-Status-ExtIEs } } OPTIONAL,
+	...
+}
+
+RLC-Status-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RLFReportInformationList	::= SEQUENCE (SIZE(1.. maxnoofRLFReports)) OF RLFReportInformationItem
+
+RLFReportInformationItem	::= SEQUENCE {
+	nRUERLFReportContainer		NRUERLFReportContainer,
+	uEAssitantIdentifier			GNB-DU-UE-F1AP-ID		OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { RLFReportInformationItem-ExtIEs} }	OPTIONAL,
+	...
+}
+
+RLFReportInformationItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+RIMRSDetectionStatus ::= ENUMERATED {rs-detected, rs-disappeared, ...}
+
+RRCContainer ::= OCTET STRING
+
+RRCContainer-RRCSetupComplete ::= OCTET STRING
+
+RRCDeliveryStatus ::= SEQUENCE	{
+	delivery-status 			PDCP-SN,
+	triggering-message			PDCP-SN,
+	iE-Extensions				ProtocolExtensionContainer { { RRCDeliveryStatus-ExtIEs } }	OPTIONAL}
+
+RRCDeliveryStatus-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+RRCDeliveryStatusRequest ::= ENUMERATED {true, ...}
+
+RRCReconfigurationCompleteIndicator	::= ENUMERATED {
+	true,
+	 ...,
+	failure
+}
+
+RRC-Version ::= SEQUENCE	{
+	latest-RRC-Version			BIT STRING (SIZE(3)),
+	iE-Extensions				ProtocolExtensionContainer { { RRC-Version-ExtIEs } }	OPTIONAL}
+
+RRC-Version-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ID id-latest-RRC-Version-Enhanced		CRITICALITY ignore EXTENSION OCTET STRING (SIZE(3))		PRESENCE optional },
+	...
+}
+
+RoutingID ::= OCTET STRING
+
+-- S
+
+SCell-FailedtoSetup-Item	::= SEQUENCE {
+	sCell-ID			NRCGI	, 
+	cause		Cause			OPTIONAL ,
+	iE-Extensions	ProtocolExtensionContainer { { SCell-FailedtoSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SCell-FailedtoSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SCell-FailedtoSetupMod-Item	::= SEQUENCE {
+	sCell-ID			NRCGI	, 
+	cause		Cause			OPTIONAL ,
+	iE-Extensions	ProtocolExtensionContainer { { SCell-FailedtoSetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SCell-FailedtoSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SCell-ToBeRemoved-Item	::= SEQUENCE {
+	sCell-ID			NRCGI	, 
+	iE-Extensions	ProtocolExtensionContainer { { SCell-ToBeRemoved-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SCell-ToBeRemoved-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SCell-ToBeSetup-Item ::= SEQUENCE {
+	sCell-ID			NRCGI	,
+	sCellIndex			SCellIndex, 
+	sCellULConfigured		CellULConfigured 	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SCell-ToBeSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SCell-ToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-ServingCellMO		CRITICALITY ignore	EXTENSION ServingCellMO		PRESENCE optional	},
+	...
+}
+
+SCell-ToBeSetupMod-Item	::= SEQUENCE {
+	sCell-ID			NRCGI	, 
+	sCellIndex			SCellIndex,
+	sCellULConfigured		CellULConfigured 	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SCell-ToBeSetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SCell-ToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-ServingCellMO		CRITICALITY ignore	EXTENSION ServingCellMO		PRESENCE optional	},
+	...
+}
+
+SCellIndex ::=INTEGER (1..31, ...) 
+
+SCS-SpecificCarrier ::=            SEQUENCE {
+    offsetToCarrier                     INTEGER (0..2199,...),
+    subcarrierSpacing                   ENUMERATED {kHz15, kHz30, kHz60, kHz120,...},
+    carrierBandwidth                    INTEGER (0..275,...),
+	iE-Extensions						ProtocolExtensionContainer { { SCS-SpecificCarrier-ExtIEs } } OPTIONAL
+}
+
+SCS-SpecificCarrier-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Search-window-information ::= SEQUENCE {
+	expectedPropagationDelay		INTEGER (-3841..3841,...),
+	delayUncertainty				INTEGER (1..246,...),
+	iE-Extensions					ProtocolExtensionContainer { { Search-window-information-ExtIEs } } OPTIONAL
+}
+
+Search-window-information-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SerialNumber ::= BIT STRING (SIZE (16))
+
+SIBType-PWS ::=INTEGER (6..8, ...)
+
+SelectedBandCombinationIndex ::= OCTET STRING
+
+SelectedFeatureSetEntryIndex ::= OCTET STRING
+
+CG-ConfigInfo ::= OCTET STRING
+
+ServCellIndex ::= INTEGER (0..31, ...)
+
+ServingCellMO ::= INTEGER (1..64, ...)
+
+Served-Cell-Information ::= SEQUENCE {
+	nRCGI							NRCGI,
+	nRPCI							NRPCI,
+	fiveGS-TAC							FiveGS-TAC			OPTIONAL,
+	configured-EPS-TAC				Configured-EPS-TAC 		OPTIONAL,
+	servedPLMNs					ServedPLMNs-List,
+	nR-Mode-Info					NR-Mode-Info, 
+	measurementTimingConfiguration	OCTET STRING,
+	iE-Extensions		ProtocolExtensionContainer { {Served-Cell-Information-ExtIEs} } OPTIONAL,
+	...
+}
+
+Served-Cell-Information-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{	ID id-RANAC							CRITICALITY ignore	EXTENSION RANAC							PRESENCE optional }|
+	{	ID id-ExtendedServedPLMNs-List		CRITICALITY ignore	EXTENSION ExtendedServedPLMNs-List	PRESENCE optional }|
+	{	ID id-Cell-Direction				CRITICALITY ignore	EXTENSION Cell-Direction				PRESENCE optional }|
+	{	ID id-BPLMN-ID-Info-List			CRITICALITY ignore	EXTENSION BPLMN-ID-Info-List			PRESENCE optional }|
+	{	ID id-Cell-Type						CRITICALITY ignore	EXTENSION CellType						PRESENCE optional}|
+	{	ID id-ConfiguredTACIndication		CRITICALITY ignore	EXTENSION ConfiguredTACIndication		PRESENCE optional }|
+	{	ID id-AggressorgNBSetID				CRITICALITY ignore	EXTENSION AggressorgNBSetID				PRESENCE optional}|
+	{	ID id-VictimgNBSetID				CRITICALITY ignore	EXTENSION VictimgNBSetID				PRESENCE optional}|
+	{	ID id-IAB-Info-IAB-DU				CRITICALITY ignore	EXTENSION IAB-Info-IAB-DU				PRESENCE optional}|
+	{	ID id-SSB-PositionsInBurst			CRITICALITY ignore	EXTENSION SSB-PositionsInBurst			PRESENCE optional }|
+	{	ID id-NRPRACHConfig					CRITICALITY ignore	EXTENSION NRPRACHConfig					PRESENCE optional },
+	...
+}
+
+Served-Cells-To-Add-Item ::= SEQUENCE {
+	served-Cell-Information		Served-Cell-Information,
+	gNB-DU-System-Information	GNB-DU-System-Information	 OPTIONAL, 
+	iE-Extensions				ProtocolExtensionContainer { { Served-Cells-To-Add-ItemExtIEs} }	OPTIONAL,
+	...
+}
+
+Served-Cells-To-Add-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Served-Cells-To-Delete-Item ::= SEQUENCE {
+	oldNRCGI					NRCGI	,
+	iE-Extensions				ProtocolExtensionContainer { { Served-Cells-To-Delete-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Served-Cells-To-Delete-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Served-Cells-To-Modify-Item ::= SEQUENCE {
+	oldNRCGI					NRCGI							,
+	served-Cell-Information		Served-Cell-Information		,
+	gNB-DU-System-Information	GNB-DU-System-Information 	OPTIONAL	,
+	iE-Extensions				ProtocolExtensionContainer { { Served-Cells-To-Modify-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+Served-Cells-To-Modify-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Served-EUTRA-Cells-Information::= SEQUENCE {
+	eUTRA-Mode-Info						EUTRA-Mode-Info,
+	protectedEUTRAResourceIndication	ProtectedEUTRAResourceIndication,
+	iE-Extensions						ProtocolExtensionContainer { {Served-EUTRA-Cell-Information-ExtIEs} } OPTIONAL,
+	...
+}
+
+Served-EUTRA-Cell-Information-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Service-State ::= ENUMERATED {
+	in-service,
+	out-of-service,
+	...
+}
+
+Service-Status ::= SEQUENCE {
+	service-state				Service-State,
+	switchingOffOngoing			ENUMERATED {true, ...}	OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { Service-Status-ExtIEs } }	OPTIONAL,
+	...
+}
+
+Service-Status-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+SFNInitialisationTime ::= 	BIT STRING (SIZE (64))
+
+ShortDRXCycleLength ::=  ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms7, ms8, ms10, ms14, ms16, ms20, ms30, ms32, ms35, ms40, ms64, ms80, ms128, ms160, ms256, ms320, ms512, ms640, ...}
+
+ShortDRXCycleTimer ::= INTEGER (1..16)
+
+SIB1-message ::= OCTET STRING
+
+SIB10-message ::= OCTET STRING
+
+SIB12-message ::= OCTET STRING
+
+SIB13-message ::= OCTET STRING
+
+SIB14-message ::= OCTET STRING
+
+SItype ::= INTEGER (1..32, ...)
+
+SItype-List ::= SEQUENCE (SIZE(1.. maxnoofSITypes)) OF SItype-Item
+
+SItype-Item ::= SEQUENCE {
+	sItype		SItype	,
+	iE-Extensions	ProtocolExtensionContainer { { SItype-ItemExtIEs } }	OPTIONAL
+}
+
+SItype-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SibtypetobeupdatedListItem ::= SEQUENCE {
+	sIBtype 			INTEGER (2..32,...), 
+	sIBmessage			OCTET STRING, 
+	valueTag			INTEGER (0..31,...), 
+	iE-Extensions	ProtocolExtensionContainer { { SibtypetobeupdatedListItem-ExtIEs } }	OPTIONAL,
+	...
+}
+
+SibtypetobeupdatedListItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ID	id-areaScope	CRITICALITY ignore	EXTENSION	AreaScope	PRESENCE optional},
+	...
+}
+
+SLDRBID ::= INTEGER (1..512, ...)
+
+SLDRBInformation ::= SEQUENCE {
+	sLDRB-QoS				PC5QoSParameters,
+	flowsMappedToSLDRB-List	FlowsMappedToSLDRB-List,
+	...
+}
+
+SLDRBs-FailedToBeModified-Item	::= SEQUENCE {
+	sLDRBID		SLDRBID		,
+	cause		Cause		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-FailedToBeModified-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-FailedToBeModified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-FailedToBeSetup-Item	::= SEQUENCE {
+	sLDRBID	SLDRBID,
+	cause	Cause	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-FailedToBeSetup-ItemExtIEs } }		OPTIONAL
+}
+
+SLDRBs-FailedToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-FailedToBeSetupMod-Item	::= SEQUENCE {
+	sLDRBID		SLDRBID	,
+	cause		Cause			OPTIONAL ,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-FailedToBeSetupMod-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-FailedToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-Modified-Item	::= SEQUENCE {
+	sLDRBID							SLDRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-Modified-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-Modified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-ModifiedConf-Item	::= SEQUENCE {
+	sLDRBID							SLDRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-ModifiedConf-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-ModifiedConf-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-Required-ToBeModified-Item	::= SEQUENCE {
+	sLDRBID							SLDRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-Required-ToBeModified-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-Required-ToBeModified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-Required-ToBeReleased-Item	::= SEQUENCE {
+	sLDRBID		SLDRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-Required-ToBeReleased-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-Required-ToBeReleased-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-Setup-Item ::= SEQUENCE {
+	sLDRBID							SLDRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-Setup-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-Setup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-SetupMod-Item	::= SEQUENCE {
+	sLDRBID							SLDRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-SetupMod-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-SetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-ToBeModified-Item	::= SEQUENCE {
+	sLDRBID						SLDRBID,
+	sLDRBInformation				SLDRBInformation		OPTIONAL,
+	rLCMode						RLCMode			OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-ToBeModified-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-ToBeModified-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-ToBeReleased-Item	::= SEQUENCE {
+	sLDRBID	        SLDRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-ToBeReleased-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-ToBeReleased-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-ToBeSetup-Item ::= SEQUENCE	{
+	sLDRBID						SLDRBID,
+	sLDRBInformation				SLDRBInformation,
+	rLCMode						RLCMode, 
+
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-ToBeSetup-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-ToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SLDRBs-ToBeSetupMod-Item	::= SEQUENCE {
+	sLDRBID						SLDRBID,
+	sLDRBInformation				SLDRBInformation,
+	rLCMode						RLCMode			OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SLDRBs-ToBeSetupMod-ItemExtIEs } }	OPTIONAL
+}
+
+SLDRBs-ToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SL-PHY-MAC-RLC-Config ::= OCTET STRING
+
+SL-ConfigDedicatedEUTRA ::= OCTET STRING
+
+SliceAvailableCapacity ::= SEQUENCE {
+	sliceAvailableCapacityList	SliceAvailableCapacityList,
+	iE-Extensions				ProtocolExtensionContainer { { SliceAvailableCapacity-ExtIEs} } OPTIONAL
+}
+
+SliceAvailableCapacity-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SliceAvailableCapacityList ::= SEQUENCE (SIZE(1.. maxnoofBPLMNsNR)) OF SliceAvailableCapacityItem
+
+SliceAvailableCapacityItem ::= SEQUENCE {
+	pLMNIdentity					PLMN-Identity, 
+	sNSSAIAvailableCapacity-List	SNSSAIAvailableCapacity-List,
+	iE-Extensions	ProtocolExtensionContainer { { SliceAvailableCapacityItem-ExtIEs} } OPTIONAL
+}
+
+SliceAvailableCapacityItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SNSSAIAvailableCapacity-List ::= SEQUENCE (SIZE(1.. maxnoofSliceItems)) OF SNSSAIAvailableCapacity-Item
+
+SNSSAIAvailableCapacity-Item ::= SEQUENCE {
+	sNSSAI		SNSSAI,
+	sliceAvailableCapacityValueDownlink	INTEGER (0..100)	OPTIONAL, 
+	sliceAvailableCapacityValueUplink	INTEGER (0..100)	OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { SNSSAIAvailableCapacity-Item-ExtIEs } }	OPTIONAL
+}
+
+SNSSAIAvailableCapacity-Item-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SliceSupportList ::= SEQUENCE (SIZE(1.. maxnoofSliceItems)) OF SliceSupportItem
+
+SliceSupportItem ::= SEQUENCE {
+	sNSSAI	SNSSAI,
+	iE-Extensions				ProtocolExtensionContainer { { SliceSupportItem-ExtIEs } }	OPTIONAL
+}
+
+SliceSupportItem-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SliceToReportList ::= SEQUENCE (SIZE(1.. maxnoofBPLMNsNR)) OF SliceToReportItem
+
+SliceToReportItem ::= SEQUENCE {
+	pLMNIdentity				PLMN-Identity, 
+	sNSSAIlist					SNSSAI-list,
+	iE-Extensions				ProtocolExtensionContainer { { SliceToReportItem-ExtIEs} } OPTIONAL
+}
+
+SliceToReportItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SlotNumber ::= INTEGER (0..79)
+
+SNSSAI-list ::= SEQUENCE (SIZE(1.. maxnoofSliceItems)) OF SNSSAI-Item
+
+SNSSAI-Item ::= SEQUENCE {
+	sNSSAI		SNSSAI,
+	iE-Extensions				ProtocolExtensionContainer { { SNSSAI-Item-ExtIEs } }	OPTIONAL
+}
+
+SNSSAI-Item-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+Slot-Configuration-List ::= SEQUENCE (SIZE(1.. maxnoofslots)) OF Slot-Configuration-Item
+
+Slot-Configuration-Item ::= SEQUENCE {
+	slotIndex				INTEGER (0..5119, ...),
+	symbolAllocInSlot		SymbolAllocInSlot,
+	iE-Extensions	ProtocolExtensionContainer { { Slot-Configuration-ItemExtIEs } }	OPTIONAL
+}
+
+Slot-Configuration-ItemExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+SNSSAI ::= SEQUENCE {
+	sST			OCTET STRING (SIZE(1)),
+	sD			OCTET STRING (SIZE(3)) 	OPTIONAL	,
+	iE-Extensions				ProtocolExtensionContainer { { SNSSAI-ExtIEs } }	OPTIONAL
+}
+
+SNSSAI-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SpatialDirectionInformation ::= SEQUENCE {
+	nR-PRSBeamInformation			NR-PRSBeamInformation,
+	iE-Extensions					ProtocolExtensionContainer { { SpatialDirectionInformation-ExtIEs } } OPTIONAL
+}
+
+SpatialDirectionInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SpatialRelationInfo ::= SEQUENCE {
+	spatialRelationforResourceID					SpatialRelationforResourceID,
+	iE-Extensions		ProtocolExtensionContainer { {SpatialRelationInfo-ExtIEs} }	OPTIONAL
+}
+
+SpatialRelationInfo-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SpatialRelationforResourceID ::= SEQUENCE (SIZE(1..maxnoofSpatialRelations)) OF SpatialRelationforResourceIDItem
+
+SpatialRelationforResourceIDItem ::= SEQUENCE {
+	referenceSignal		ReferenceSignal,
+	iE-Extensions		ProtocolExtensionContainer { {SpatialRelationforResourceIDItem-ExtIEs} }	OPTIONAL
+}
+
+SpatialRelationforResourceIDItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SpatialRelationPos ::= CHOICE {
+	sSBPos					SSBPos,
+	pRSInformationPos		PRSInformationPos,
+	choice-extension		ProtocolIE-SingleContainer {{ SpatialInformationPos-ExtIEs }}
+}
+
+SpatialInformationPos-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+SpectrumSharingGroupID ::= INTEGER (1..maxCellineNB)
+
+SRBID ::= INTEGER (0..3, ...)
+
+SRBs-FailedToBeSetup-Item	::= SEQUENCE {
+	sRBID		SRBID	,
+	cause		Cause	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-FailedToBeSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-FailedToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRBs-FailedToBeSetupMod-Item	::= SEQUENCE {
+	sRBID		SRBID		,
+	cause		Cause		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-FailedToBeSetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-FailedToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRBs-Modified-Item ::= SEQUENCE {
+	sRBID							SRBID,
+	lCID							LCID,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-Modified-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-Modified-ItemExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRBs-Required-ToBeReleased-Item	::= SEQUENCE {
+	sRBID	SRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-Required-ToBeReleased-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-Required-ToBeReleased-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRBs-Setup-Item ::= SEQUENCE {
+	sRBID							SRBID,
+	lCID								LCID,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-Setup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-Setup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRBs-SetupMod-Item ::= SEQUENCE {
+	sRBID						SRBID,
+	lCID							LCID,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-SetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-SetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRBs-ToBeReleased-Item	::= SEQUENCE {
+	sRBID		SRBID,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-ToBeReleased-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-ToBeReleased-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRBs-ToBeSetup-Item ::= SEQUENCE {
+	sRBID	 SRBID	,
+	duplicationIndication	DuplicationIndication	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-ToBeSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-ToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-AdditionalDuplicationIndication	CRITICALITY ignore	EXTENSION AdditionalDuplicationIndication		PRESENCE optional	},
+	...
+}
+
+SRBs-ToBeSetupMod-Item	::= SEQUENCE {
+	sRBID	SRBID,
+	duplicationIndication	DuplicationIndication	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SRBs-ToBeSetupMod-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+SRBs-ToBeSetupMod-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-AdditionalDuplicationIndication	CRITICALITY ignore	EXTENSION AdditionalDuplicationIndication		PRESENCE optional	},
+	...
+}
+
+SRSCarrier-List ::= SEQUENCE (SIZE(1.. maxnoSRS-Carriers)) OF SRSCarrier-List-Item
+
+SRSCarrier-List-Item ::= SEQUENCE {
+	pointA							INTEGER (0..3279165,...),
+	uplinkChannelBW-PerSCS-List		UplinkChannelBW-PerSCS-List,
+	activeULBWP						ActiveULBWP,
+	pci								NRPCI,
+	iE-Extensions					ProtocolExtensionContainer { { SRSCarrier-List-Item-ExtIEs } } OPTIONAL
+}
+
+SRSCarrier-List-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRSConfig  ::= SEQUENCE {
+	sRSResource-List			SRSResource-List 		OPTIONAL,
+	posSRSResource-List			PosSRSResource-List 	OPTIONAL,
+	sRSResourceSet-List			SRSResourceSet-List 	OPTIONAL,
+	posSRSResourceSet-List		PosSRSResourceSet-List 	OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { SRSConfig-ExtIEs } } OPTIONAL
+}
+
+SRSConfig-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRSConfiguration ::= SEQUENCE {
+	sRSCarrier-List		SRSCarrier-List,
+	iE-Extensions		ProtocolExtensionContainer { { SRSConfiguration-ExtIEs } } OPTIONAL
+}
+
+SRSConfiguration-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+} 
+
+SRSPosResourceID ::= INTEGER (0..63, ...)
+
+SRSResource::= SEQUENCE {
+	sRSResourceID                  	SRSResourceID,
+	nrofSRS-Ports                   ENUMERATED {port1, ports2, ports4},
+	transmissionComb				TransmissionComb,
+	startPosition                   INTEGER (0..13),
+    nrofSymbols                     ENUMERATED {n1, n2, n4},
+    repetitionFactor              	ENUMERATED {n1, n2, n4},
+    freqDomainPosition              INTEGER (0..67),
+	freqDomainShift                 INTEGER (0..268),
+	c-SRS                           INTEGER (0..63),
+	b-SRS                           INTEGER (0..3),
+	b-hop                           INTEGER (0..3),
+	groupOrSequenceHopping          ENUMERATED { neither, groupHopping, sequenceHopping },
+	resourceType					ResourceType,
+	slotOffset						INTEGER (0..2559),
+	sequenceId                      INTEGER (0..1023),
+	iE-Extensions					ProtocolExtensionContainer { { SRSResource-ExtIEs } } OPTIONAL
+}
+
+SRSResource-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRSResourceID ::= INTEGER (0..63, ...)
+
+SRSResourceID-List::= SEQUENCE (SIZE (1..maxnoSRS-ResourcePerSet)) OF SRSResourceID
+
+SRSResource-List ::= SEQUENCE (SIZE (1..maxnoSRS-Resources)) OF SRSResource
+
+SRSResourceSet::= SEQUENCE {
+	sRSResourceSetID                SRSResourceSetID,
+	sRSResourceID-List				SRSResourceID-List,
+	resourceSetType					ResourceSetType,
+	iE-Extensions					ProtocolExtensionContainer { { SRSResourceSet-ExtIEs } } OPTIONAL
+}
+
+SRSResourceSet-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRSResourceSetID ::= INTEGER (0..15, ...)
+
+SRSResourceSetList ::= SEQUENCE (SIZE(1.. maxnoSRS-ResourceSets)) OF SRSResourceSetItem
+
+SRSResourceSetItem ::= SEQUENCE {
+	numSRSresourcesperset		INTEGER (1..16, ...)	OPTIONAL,
+	periodicityList				PeriodicityList			OPTIONAL,
+	spatialRelationInfo			SpatialRelationInfo		OPTIONAL,
+	pathlossReferenceInfo		PathlossReferenceInfo	OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { SRSResourceSetItemExtIEs } }	OPTIONAL
+}
+
+SRSResourceSetItemExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRSResourceSet-List ::= SEQUENCE (SIZE (1..maxnoSRS-ResourceSets)) OF SRSResourceSet 
+
+SRSResourceTrigger ::= SEQUENCE {
+	aperiodicSRSResourceTriggerList					AperiodicSRSResourceTriggerList,
+	iE-Extensions		ProtocolExtensionContainer { {SRSResourceTrigger-ExtIEs} }	OPTIONAL
+}
+
+SRSResourceTrigger-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SRSSpatialRelation ::= SEQUENCE {
+	spatialRelationforResourceID				SpatialRelationforResourceID,
+	iE-Extensions		ProtocolExtensionContainer { {SRSSpatialRelation-ExtIEs} }	OPTIONAL
+}
+
+SRSSpatialRelation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SSB ::= SEQUENCE {
+	pCI-NR				NRPCI,
+	ssb-index			SSB-Index	OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { {SSB-ExtIEs} }	OPTIONAL
+}
+
+SSB-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SSB-freqInfo ::= INTEGER (0..maxNRARFCN) 
+
+SSB-Index ::= INTEGER(0..63)
+
+SSBPos ::= SEQUENCE {
+	pCI-NR				NRPCI		OPTIONAL,
+	ssb-index			SSB-Index,
+	iE-Extensions		ProtocolExtensionContainer { {SSBPos-ExtIEs} }	OPTIONAL
+}
+
+SSBPos-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SSB-subcarrierSpacing ::=  ENUMERATED {kHz15, kHz30, kHz120, kHz240, spare3, spare2, spare1, ...}
+
+SSB-transmissionPeriodicity	::= ENUMERATED {sf10, sf20, sf40, sf80, sf160, sf320, sf640, ...}
+
+SSB-transmissionTimingOffset ::= INTEGER (0..127, ...)
+
+SSB-transmissionBitmap ::= CHOICE {
+	shortBitmap			BIT STRING (SIZE (4)),
+	mediumBitmap		BIT STRING (SIZE (8)),
+	longBitmap			BIT STRING (SIZE (64)),
+	choice-extension	ProtocolIE-SingleContainer { { SSB-transmisisonBitmap-ExtIEs} }
+}
+
+SSB-transmisisonBitmap-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+SSBAreaCapacityValueList ::= SEQUENCE (SIZE(1.. maxnoofSSBAreas)) OF	SSBAreaCapacityValueItem
+
+SSBAreaCapacityValueItem ::= SEQUENCE {
+	sSBIndex				INTEGER(0..63),
+	sSBAreaCapacityValue	INTEGER (0..100),
+	iE-Extensions	ProtocolExtensionContainer { { SSBAreaCapacityValueItem-ExtIEs} } OPTIONAL
+}
+
+SSBAreaCapacityValueItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SSBAreaRadioResourceStatusList::= SEQUENCE (SIZE(1.. maxnoofSSBAreas)) OF	SSBAreaRadioResourceStatusItem
+
+SSBAreaRadioResourceStatusItem::= SEQUENCE {
+	sSBIndex					INTEGER(0..63),
+	sSBAreaDLGBRPRBusage		INTEGER (0..100),
+	sSBAreaULGBRPRBusage		INTEGER (0..100),
+	sSBAreaDLnon-GBRPRBusage	INTEGER (0..100),
+	sSBAreaULnon-GBRPRBusage	INTEGER (0..100),
+	sSBAreaDLTotalPRBusage		INTEGER (0..100),
+	sSBAreaULTotalPRBusage		INTEGER (0..100),
+	dLschedulingPDCCHCCEusage	INTEGER (0..100)		OPTIONAL,
+	uLschedulingPDCCHCCEusage	INTEGER (0..100) 		OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { SSBAreaRadioResourceStatusItem-ExtIEs} } OPTIONAL
+}
+
+SSBAreaRadioResourceStatusItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SSBInformation ::= SEQUENCE {
+	sSBInformationList	SSBInformationList,
+	iE-Extensions	ProtocolExtensionContainer { { SSBInformation-ExtIEs } }	OPTIONAL
+}
+
+SSBInformation-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SSBInformationList ::= SEQUENCE (SIZE(1.. maxnoofSSBs)) OF SSBInformationItem
+
+SSBInformationItem ::= SEQUENCE {
+	sSB-Configuration	SSB-TF-Configuration,
+	pCI-NR				NRPCI,
+	iE-Extensions	ProtocolExtensionContainer { { SSBInformationItem-ExtIEs } }	OPTIONAL
+}
+
+SSBInformationItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SSB-PositionsInBurst ::= CHOICE {
+	shortBitmap						BIT STRING (SIZE (4)),
+	mediumBitmap					BIT STRING (SIZE (8)),
+	longBitmap						BIT STRING (SIZE (64)),
+	choice-extension				ProtocolIE-SingleContainer { {SSB-PositionsInBurst-ExtIEs} }
+}
+
+SSB-PositionsInBurst-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+SSB-TF-Configuration ::= SEQUENCE {
+	sSB-frequency				INTEGER (0..3279165),
+	sSB-subcarrier-spacing		ENUMERATED {kHz15, kHz30, kHz60, kHz120, kHz240, ...},
+	sSB-Transmit-power			INTEGER (-60..50),
+	sSB-periodicity				ENUMERATED {ms5, ms10, ms20, ms40, ms80, ms160, ...},
+	sSB-half-frame-offset		INTEGER(0..1),
+	sSB-SFN-offset				INTEGER(0..15),
+	sSB-position-in-burst		SSB-PositionsInBurst		OPTIONAL,
+	sFNInitialisationTime		SFNInitialisationTime		OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { SSB-TF-Configuration-ExtIEs} } OPTIONAL
+}
+
+SSB-TF-Configuration-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+SSBToReportList ::= SEQUENCE (SIZE(1.. maxnoofSSBAreas)) OF SSBToReportItem
+
+SSBToReportItem ::= SEQUENCE {
+	sSBIndex					INTEGER(0..63),
+	iE-Extensions				ProtocolExtensionContainer { { SSBToReportItem-ExtIEs} } OPTIONAL
+}
+
+SSBToReportItem-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SUL-Information ::= SEQUENCE {
+	sUL-NRARFCN							INTEGER (0..maxNRARFCN),
+	sUL-transmission-Bandwidth			Transmission-Bandwidth,
+	iE-Extensions				ProtocolExtensionContainer { { SUL-InformationExtIEs} } OPTIONAL,
+	...
+}
+
+SUL-InformationExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-CarrierList				CRITICALITY ignore	EXTENSION NRCarrierList			PRESENCE optional }|
+	{ ID id-FrequencyShift7p5khz	CRITICALITY ignore	EXTENSION FrequencyShift7p5khz	PRESENCE optional },
+	...
+}
+
+SubcarrierSpacing ::=	ENUMERATED { kHz15, kHz30, kHz60, kHz120, kHz240, spare3, spare2, spare1, ...}
+
+SubscriberProfileIDforRFP ::= INTEGER (1..256, ...)
+
+SULAccessIndication ::= ENUMERATED {true,...}
+
+
+SupportedSULFreqBandItem ::= SEQUENCE {
+	freqBandIndicatorNr 			INTEGER (1..1024,...),
+	iE-Extensions				ProtocolExtensionContainer { { SupportedSULFreqBandItem-ExtIEs} } OPTIONAL,
+	...
+}
+
+SupportedSULFreqBandItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+SymbolAllocInSlot ::= CHOICE {
+	all-DL				NULL,
+	all-UL				NULL, 
+	both-DL-and-UL			NumDLULSymbols,	
+	choice-extension			ProtocolIE-SingleContainer { { SymbolAllocInSlot-ExtIEs } }
+}
+
+SymbolAllocInSlot-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+SystemFrameNumber ::= INTEGER (0..1023)
+
+SystemInformationAreaID ::=BIT STRING (SIZE (24))
+
+-- T
+
+FiveGS-TAC ::= OCTET STRING (SIZE(3))
+
+Configured-EPS-TAC ::= OCTET STRING (SIZE(2))
+
+TargetCellList ::= SEQUENCE (SIZE(1..maxnoofCHOcells)) OF TargetCellList-Item
+
+TargetCellList-Item ::= SEQUENCE {
+	target-cell								NRCGI,
+	iE-Extensions							ProtocolExtensionContainer { { TargetCellList-Item-ExtIEs} } OPTIONAL
+}
+
+TargetCellList-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TDD-Info ::= SEQUENCE {
+	nRFreqInfo							NRFreqInfo,
+	transmission-Bandwidth			Transmission-Bandwidth,
+	iE-Extensions				ProtocolExtensionContainer { {TDD-Info-ExtIEs} } OPTIONAL,
+	...
+}
+
+TDD-Info-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ID	id-IntendedTDD-DL-ULConfig	CRITICALITY ignore	EXTENSION	IntendedTDD-DL-ULConfig	PRESENCE optional}|
+	{ID id-TDD-UL-DLConfigCommonNR	CRITICALITY ignore	EXTENSION TDD-UL-DLConfigCommonNR	PRESENCE optional }|
+	{ID id-CarrierList				CRITICALITY ignore	EXTENSION NRCarrierList				PRESENCE optional },
+	...
+}
+
+TDD-UL-DLConfigCommonNR ::= OCTET STRING
+
+TimeReferenceInformation ::= SEQUENCE {
+	referenceTime					ReferenceTime,
+	referenceSFN					ReferenceSFN,
+	uncertainty						Uncertainty,
+	timeInformationType				TimeInformationType,
+	iE-Extensions		ProtocolExtensionContainer { {TimeReferenceInformation-ExtIEs} }	OPTIONAL
+}
+
+TimeReferenceInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TimeInformationType ::= ENUMERATED {localClock}
+
+TimeStamp ::= SEQUENCE {
+	systemFrameNumber		SystemFrameNumber,
+	slotIndex				TimeStampSlotIndex,
+	measurementTime			SFNInitialisationTime	OPTIONAL,
+	iE-Extension			ProtocolExtensionContainer { { TimeStamp-ExtIEs} }	OPTIONAL
+}
+
+TimeStamp-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TimeStampSlotIndex ::= CHOICE {
+	sCS-15			INTEGER(0..9),
+	sCS-30			INTEGER(0..19),
+	sCS-60			INTEGER(0..39),
+	sCS-120			INTEGER(0..79),
+	choice-extension		ProtocolIE-SingleContainer { { TimeStampSlotIndex-ExtIEs} }
+}
+
+TimeStampSlotIndex-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+TimeToWait ::= ENUMERATED {v1s, v2s, v5s, v10s, v20s, v60s, ...}
+
+TimingMeasurementQuality ::= SEQUENCE {
+	measurementQuality		INTEGER(0..31),
+	resolution				ENUMERATED{m0dot1, m1, m10, m30, ...},
+	iE-Extensions		ProtocolExtensionContainer { { TimingMeasurementQuality-ExtIEs} }	OPTIONAL
+}
+
+TimingMeasurementQuality-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TNLAssociationUsage ::= ENUMERATED {
+	ue,
+	non-ue,
+	both, 
+	...
+}
+
+TNLCapacityIndicator::= SEQUENCE {
+	dLTNLOfferedCapacity		INTEGER (1.. 16777216,...),
+	dLTNLAvailableCapacity		INTEGER (0.. 100,...),
+	uLTNLOfferedCapacity		INTEGER (1.. 16777216,...),
+	uLTNLAvailableCapacity		INTEGER (0.. 100,...),
+	iE-Extensions	ProtocolExtensionContainer { { TNLCapacityIndicator-ExtIEs} } OPTIONAL
+}
+
+TNLCapacityIndicator-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TraceActivation ::= SEQUENCE {
+	traceID								TraceID,
+	interfacesToTrace					InterfacesToTrace,
+	traceDepth							TraceDepth,
+	traceCollectionEntityIPAddress		TransportLayerAddress,
+	iE-Extensions		ProtocolExtensionContainer { {TraceActivation-ExtIEs} }	OPTIONAL
+}
+
+TraceActivation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ID id-mdtConfiguration	CRITICALITY ignore	EXTENSION	MDTConfiguration		PRESENCE optional}|
+	{ID id-TraceCollectionEntityURI	CRITICALITY ignore	EXTENSION URI-address		PRESENCE optional	},
+	...
+}
+
+TraceDepth ::= ENUMERATED { 
+	minimum,
+	medium,
+	maximum,
+	minimumWithoutVendorSpecificExtension,
+	mediumWithoutVendorSpecificExtension,
+	maximumWithoutVendorSpecificExtension,
+	...
+}
+
+TraceID ::= OCTET STRING (SIZE(8))
+
+TrafficMappingInfo	::= CHOICE {
+	iPtolayer2TrafficMappingInfo					IPtolayer2TrafficMappingInfo,
+	bAPlayerBHRLCchannelMappingInfo					BAPlayerBHRLCchannelMappingInfo,
+	choice-extension								ProtocolIE-SingleContainer { { TrafficMappingInfo-ExtIEs} }
+}
+
+TrafficMappingInfo-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+TransportLayerAddress		::= BIT STRING (SIZE(1..160, ...))
+
+TransactionID				::= INTEGER (0..255, ...)
+
+Transmission-Bandwidth ::= SEQUENCE {
+	nRSCS	NRSCS,
+	nRNRB	NRNRB,
+	iE-Extensions				ProtocolExtensionContainer { { Transmission-Bandwidth-ExtIEs} } OPTIONAL,
+	...
+}
+
+Transmission-Bandwidth-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TransmissionComb ::= CHOICE {
+	n2    SEQUENCE {
+            combOffset-n2              INTEGER (0..1),
+            cyclicShift-n2             INTEGER (0..7)
+        },
+    n4    SEQUENCE {
+            combOffset-n4              INTEGER (0..3),
+            cyclicShift-n4             INTEGER (0..11)
+        },
+	choice-extension				ProtocolIE-SingleContainer { { TransmissionComb-ExtIEs} }
+}
+TransmissionComb-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+TransmissionCombPos ::= CHOICE {
+	n2    SEQUENCE {
+            combOffset-n2              INTEGER (0..1),
+            cyclicShift-n2             INTEGER (0..7)
+        },
+    n4    SEQUENCE {
+            combOffset-n4              INTEGER (0..3),
+            cyclicShift-n4             INTEGER (0..11)
+        },
+    n8    SEQUENCE {
+            combOffset-n8              INTEGER (0..7),
+            cyclicShift-n8             INTEGER (0..5)
+        },
+
+	choice-extension				ProtocolIE-SingleContainer { { TransmissionCombPos-ExtIEs} }
+}
+TransmissionCombPos-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+Transport-UP-Layer-Address-Info-To-Add-List	::= SEQUENCE (SIZE(1.. maxnoofTLAs)) OF Transport-UP-Layer-Address-Info-To-Add-Item
+
+Transport-UP-Layer-Address-Info-To-Add-Item ::= SEQUENCE {
+	iP-SecTransportLayerAddress		TransportLayerAddress,
+	gTPTransportLayerAddressToAdd			GTPTLAs							OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { Transport-UP-Layer-Address-Info-To-Add-ItemExtIEs } }	OPTIONAL
+}
+
+Transport-UP-Layer-Address-Info-To-Add-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { 
+	...
+}
+
+Transport-UP-Layer-Address-Info-To-Remove-List	::= SEQUENCE (SIZE(1.. maxnoofTLAs)) OF Transport-UP-Layer-Address-Info-To-Remove-Item
+
+Transport-UP-Layer-Address-Info-To-Remove-Item ::= SEQUENCE {
+	iP-SecTransportLayerAddress		TransportLayerAddress,
+	gTPTransportLayerAddressToRemove			GTPTLAs							OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer { { Transport-UP-Layer-Address-Info-To-Remove-ItemExtIEs } }	OPTIONAL
+}
+
+Transport-UP-Layer-Address-Info-To-Remove-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { 
+	...
+}
+
+TransmissionActionIndicator ::= ENUMERATED {stop, ..., restart }
+
+TRPID ::= INTEGER (0.. maxnoofTRPs, ...)
+
+TRPInformation ::= SEQUENCE {
+	tRPID							TRPID,
+	tRPInformationTypeResponseList	TRPInformationTypeResponseList,
+	iE-Extensions					ProtocolExtensionContainer { { TRPInformation-ExtIEs } }		OPTIONAL
+}
+
+TRPInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TRPInformationItem ::= SEQUENCE {
+	tRPInformation					TRPInformation,
+	iE-Extensions					ProtocolExtensionContainer { { TRPInformationItem-ExtIEs } }	OPTIONAL
+}
+
+TRPInformationItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { 
+	...
+}
+
+TRPInformationTypeItem ::= ENUMERATED { 
+		nrPCI,
+		nG-RAN-CGI,
+		arfcn, 
+		pRSConfig,
+		sSBConfig,
+		sFNInitTime,
+		spatialDirectInfo,
+		geoCoord,
+...}
+
+
+TRPInformationTypeResponseList ::= SEQUENCE (SIZE(1.. maxnoofTRPInfoTypes)) OF TRPInformationTypeResponseItem 
+
+TRPInformationTypeResponseItem ::= CHOICE {
+	pCI-NR								NRPCI,
+	nG-RAN-CGI							NRCGI,
+	nRARFCN								INTEGER (0..maxNRARFCN),
+	pRSConfiguration					PRSConfiguration,
+	sSBinformation						SSBInformation,
+	sFNInitialisationTime				SFNInitialisationTime,
+	spatialDirectionInformation			SpatialDirectionInformation,
+	geographicalCoordinates				GeographicalCoordinates,
+	choice-extension					ProtocolIE-SingleContainer { { TRPInformationTypeResponseItem-ExtIEs} }
+}
+
+TRPInformationTypeResponseItem-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+
+TRPList ::= SEQUENCE (SIZE(1.. maxnoofTRPs)) OF TRPListItem
+
+TRPListItem ::= SEQUENCE {
+	tRPID							TRPID,
+	iE-Extensions					ProtocolExtensionContainer { { TRPListItem-ExtIEs } }	OPTIONAL
+}
+
+TRPListItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= { 
+	...
+}
+
+TRPMeasurementQuality ::= SEQUENCE {
+	tRPmeasurementQuality-Item 	TRPMeasurementQuality-Item,
+	iE-Extensions				ProtocolExtensionContainer { {TRPMeasurementQuality-ExtIEs} } OPTIONAL
+}
+
+TRPMeasurementQuality-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TRPMeasurementQuality-Item ::= CHOICE {
+	timingMeasurementQuality	TimingMeasurementQuality,
+	angleMeasurementQuality		AngleMeasurementQuality,
+	choice-extension			ProtocolIE-SingleContainer { { TRPMeasurementQuality-Item-ExtIEs } }
+}
+
+TRPMeasurementQuality-Item-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+TRP-MeasurementRequestList ::= SEQUENCE (SIZE (1..maxNoOfMeasTRPs)) OF TRP-MeasurementRequestItem
+
+TRP-MeasurementRequestItem ::= SEQUENCE {
+	tRPID							TRPID, 
+	search-window-information		Search-window-information	OPTIONAL, 
+	iE-extensions		ProtocolExtensionContainer { { TRP-MeasurementRequestItem-ExtIEs } } OPTIONAL
+}
+
+TRP-MeasurementRequestItem-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TRPPositionDefinitionType ::= CHOICE {
+	direct		TRPPositionDirect,
+	referenced	TRPPositionReferenced,
+	choice-extension							ProtocolIE-SingleContainer { { TRPPositionDefinitionType-ExtIEs } }
+}
+
+TRPPositionDefinitionType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+TRPPositionDirect ::= SEQUENCE {
+	accuracy	TRPPositionDirectAccuracy,
+	iE-extensions		ProtocolExtensionContainer { { TRPPositionDirect-ExtIEs } }	OPTIONAL
+}
+
+TRPPositionDirect-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TRPPositionDirectAccuracy ::= CHOICE {
+	tRPPosition				AccessPointPosition,
+	tRPHAposition			NGRANHighAccuracyAccessPointPosition,
+	choice-extension		ProtocolIE-SingleContainer { { TRPPositionDirectAccuracy-ExtIEs } }
+}
+
+TRPPositionDirectAccuracy-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+TRPPositionReferenced ::= SEQUENCE {
+	referencePoint					ReferencePoint,
+	referencePointType				TRPReferencePointType,
+	iE-extensions					ProtocolExtensionContainer { { TRPPositionReferenced-ExtIEs } } 	OPTIONAL
+}
+
+TRPPositionReferenced-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TRPReferencePointType ::= CHOICE {
+	tRPPositionRelativeGeodetic			RelativeGeodeticLocation,
+	tRPPositionRelativeCartesian		RelativeCartesianLocation,
+	choice-extension					ProtocolIE-SingleContainer { { TRPReferencePointType-ExtIEs } }
+}
+
+TRPReferencePointType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+TypeOfError ::= ENUMERATED {
+	not-understood,
+	missing,
+	...
+}
+
+Transport-Layer-Address-Info ::= SEQUENCE {
+	transport-UP-Layer-Address-Info-To-Add-List		Transport-UP-Layer-Address-Info-To-Add-List							OPTIONAL,
+	transport-UP-Layer-Address-Info-To-Remove-List	Transport-UP-Layer-Address-Info-To-Remove-List					OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer { { Transport-Layer-Address-Info-ExtIEs } }								OPTIONAL
+}
+
+Transport-Layer-Address-Info-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TSCAssistanceInformation ::= SEQUENCE {
+	periodicity				Periodicity,
+	burstArrivalTime		BurstArrivalTime													OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer { {TSCAssistanceInformation-ExtIEs} }	OPTIONAL,
+	...
+}
+
+TSCAssistanceInformation-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+TSCTrafficCharacteristics ::= SEQUENCE {
+	tSCAssistanceInformationDL		TSCAssistanceInformation								OPTIONAL,
+	tSCAssistanceInformationUL		TSCAssistanceInformation								OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { {TSCTrafficCharacteristics-ExtIEs} }	OPTIONAL,
+	...
+}
+
+TSCTrafficCharacteristics-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+-- U
+UAC-Assistance-Info ::= SEQUENCE {
+	uACPLMN-List		UACPLMN-List,
+	iE-Extensions		ProtocolExtensionContainer { { UAC-Assistance-InfoExtIEs} } OPTIONAL
+}
+
+UAC-Assistance-InfoExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UACPLMN-List ::= SEQUENCE (SIZE(1..maxnoofUACPLMNs)) OF UACPLMN-Item
+
+UACPLMN-Item::= SEQUENCE {
+	pLMNIdentity				PLMN-Identity,
+	uACType-List				UACType-List,	iE-Extensions		ProtocolExtensionContainer { { UACPLMN-Item-ExtIEs} } OPTIONAL
+}
+
+UACPLMN-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-NID	CRITICALITY ignore	EXTENSION NID	PRESENCE optional },
+	...
+}
+
+UACType-List ::= SEQUENCE (SIZE(1..maxnoofUACperPLMN)) OF UACType-Item
+
+UACType-Item::= SEQUENCE {
+	uACReductionIndication 		UACReductionIndication,
+	uACCategoryType				UACCategoryType,
+	iE-Extensions		ProtocolExtensionContainer { { UACType-Item-ExtIEs } } OPTIONAL
+}
+
+UACType-Item-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UACCategoryType ::= CHOICE {
+	uACstandardized				UACAction,
+	uACOperatorDefined			UACOperatorDefined, 
+	choice-extension			ProtocolIE-SingleContainer { { UACCategoryType-ExtIEs } }
+}
+
+UACCategoryType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+UACOperatorDefined ::= SEQUENCE {
+	accessCategory					INTEGER (32..63,...),
+	accessIdentity					BIT STRING (SIZE(7)),
+	iE-Extensions		ProtocolExtensionContainer { { UACOperatorDefined-ExtIEs} } OPTIONAL
+}
+
+UACOperatorDefined-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+UACAction ::= ENUMERATED {
+	reject-non-emergency-mo-dt,
+	reject-rrc-cr-signalling,
+	permit-emergency-sessions-and-mobile-terminated-services-only,
+	permit-high-priority-sessions-and-mobile-terminated-services-only,
+	...
+}
+
+UACReductionIndication ::= INTEGER (0..100)
+
+
+UE-associatedLogicalF1-ConnectionItem ::= SEQUENCE {
+	gNB-CU-UE-F1AP-ID		GNB-CU-UE-F1AP-ID	 OPTIONAL,
+	gNB-DU-UE-F1AP-ID		GNB-DU-UE-F1AP-ID	 OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer { { UE-associatedLogicalF1-ConnectionItemExtIEs} } OPTIONAL,
+	...
+}
+
+UEAssistanceInformation ::= OCTET STRING
+
+UEAssistanceInformationEUTRA ::= OCTET STRING
+
+UE-associatedLogicalF1-ConnectionItemExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UE-CapabilityRAT-ContainerList::= OCTET STRING
+
+UEContextNotRetrievable ::= ENUMERATED {true, ...}
+
+UEIdentityIndexValue ::= CHOICE {
+	indexLength10			BIT STRING (SIZE (10)),
+	choice-extension		ProtocolIE-SingleContainer { {UEIdentityIndexValueChoice-ExtIEs} }	
+}
+
+UEIdentityIndexValueChoice-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+UL-AoA ::= SEQUENCE {
+	azimuthAoA				INTEGER (0..3599),
+	zenithAoA				INTEGER (0..1799)	OPTIONAL,
+	angleCoordinateSystem	ENUMERATED {lCS, gCS}	OPTIONAL,
+	iE-extensions			ProtocolExtensionContainer { { UL-AoA-ExtIEs } }
+}
+
+UL-AoA-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UL-BH-Non-UP-Traffic-Mapping ::= SEQUENCE {
+	uL-BH-Non-UP-Traffic-Mapping-List			UL-BH-Non-UP-Traffic-Mapping-List,
+	iE-Extensions	ProtocolExtensionContainer { { UL-BH-Non-UP-Traffic-Mapping-ExtIEs } } OPTIONAL
+}
+
+UL-BH-Non-UP-Traffic-Mapping-ExtIEs	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UL-BH-Non-UP-Traffic-Mapping-List ::= SEQUENCE (SIZE(1..maxnoofNonUPTrafficMappings)) OF UL-BH-Non-UP-Traffic-Mapping-Item
+
+UL-BH-Non-UP-Traffic-Mapping-Item ::= SEQUENCE {
+	nonUPTrafficType				NonUPTrafficType,
+	bHInfo						BHInfo,
+	iE-Extensions					ProtocolExtensionContainer { { UL-BH-Non-UP-Traffic-Mapping-ItemExtIEs } }	OPTIONAL
+}
+
+UL-BH-Non-UP-Traffic-Mapping-ItemExtIEs F1AP-PROTOCOL-EXTENSION ::= { 
+	...
+}
+
+ULConfiguration ::= SEQUENCE	{
+	uLUEConfiguration		ULUEConfiguration,
+	iE-Extensions	ProtocolExtensionContainer { { ULConfigurationExtIEs } }	OPTIONAL,
+	...
+}
+ULConfigurationExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UL-RTOA-Measurement ::= SEQUENCE {
+	uL-RTOA-MeasurementItem		UL-RTOA-MeasurementItem,
+	additionalPath-List			AdditionalPath-List OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { { UL-RTOA-Measurement-ExtIEs } }	OPTIONAL
+}
+
+UL-RTOA-Measurement-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UL-RTOA-MeasurementItem ::= CHOICE {
+	k0					INTEGER (0..1970049),
+	k1					INTEGER (0..985025),
+	k2					INTEGER (0..492513),
+	k3					INTEGER (0..246257),
+	k4					INTEGER (0..123129),
+	k5					INTEGER (0..61565),	 
+	choice-extension			ProtocolIE-SingleContainer { { UL-RTOA-MeasurementItem-ExtIEs } }
+}
+
+UL-RTOA-MeasurementItem-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+UL-SRS-RSRP ::= INTEGER (0..127)
+
+ULUEConfiguration ::= ENUMERATED {no-data, shared, only, ...}
+
+UL-UP-TNL-Information-to-Update-List-Item	::= SEQUENCE {
+	uLUPTNLInformation		UPTransportLayerInformation,
+	newULUPTNLInformation	UPTransportLayerInformation		OPTIONAL,
+	bHInfo	BHInfo,
+	iE-Extensions	ProtocolExtensionContainer { { UL-UP-TNL-Information-to-Update-List-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+UL-UP-TNL-Information-to-Update-List-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+UL-UP-TNL-Address-to-Update-List-Item	::= SEQUENCE {
+	oldIPAdress						TransportLayerAddress,
+	newIPAdress						TransportLayerAddress,
+	iE-Extensions	ProtocolExtensionContainer { { UL-UP-TNL-Address-to-Update-List-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+UL-UP-TNL-Address-to-Update-List-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+ULUPTNLInformation-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofULUPTNLInformation)) OF ULUPTNLInformation-ToBeSetup-Item
+
+ULUPTNLInformation-ToBeSetup-Item ::=SEQUENCE {
+	uLUPTNLInformation		UPTransportLayerInformation, 
+	iE-Extensions	ProtocolExtensionContainer { { ULUPTNLInformation-ToBeSetup-ItemExtIEs } }	OPTIONAL,
+	...
+}
+
+ULUPTNLInformation-ToBeSetup-ItemExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	{ ID id-BHInfo		CRITICALITY ignore	EXTENSION BHInfo		PRESENCE optional	},
+	...
+}
+
+Uncertainty ::= INTEGER (0..32767, ...)
+
+UplinkChannelBW-PerSCS-List ::= SEQUENCE (SIZE (1..maxnoSCSs)) OF SCS-SpecificCarrier
+
+UplinkTxDirectCurrentListInformation ::= OCTET STRING
+
+UPTransportLayerInformation		::= CHOICE {
+	gTPTunnel		GTPTunnel,
+	choice-extension			ProtocolIE-SingleContainer { { UPTransportLayerInformation-ExtIEs} }
+}
+
+UPTransportLayerInformation-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+URI-address ::= VisibleString
+
+-- V
+
+VictimgNBSetID ::= SEQUENCE {
+	victimgNBSetID		GNBSetID,
+	iE-Extensions	ProtocolExtensionContainer { { VictimgNBSetID-ExtIEs } }		OPTIONAL
+}
+
+VictimgNBSetID-ExtIEs 	F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+VehicleUE ::= ENUMERATED { 
+	authorized,
+	not-authorized,
+	...
+}
+
+PedestrianUE ::= ENUMERATED { 
+	authorized,
+	not-authorized,
+	...
+}
+
+-- W
+
+-- X
+
+-- Y
+
+-- Z
+
+END
diff --git a/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-PDU-Contents.asn b/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-PDU-Contents.asn
new file mode 100644
index 0000000000000000000000000000000000000000..ba6351eddd286d9b17df7eb2b9a17819d40802f5
--- /dev/null
+++ b/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-PDU-Contents.asn
@@ -0,0 +1,3633 @@
+-- **************************************************************
+--
+-- PDU definitions for F1AP.
+--
+-- **************************************************************
+
+F1AP-PDU-Contents { 
+itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
+ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-PDU-Contents (1) }
+
+DEFINITIONS AUTOMATIC TAGS ::= 
+
+BEGIN
+
+-- **************************************************************
+--
+-- IE parameter types from other modules.
+--
+-- **************************************************************
+
+IMPORTS
+	Candidate-SpCell-Item,
+	Cause,
+	Cells-Failed-to-be-Activated-List-Item,
+	Cells-Status-Item,
+	Cells-to-be-Activated-List-Item,
+	Cells-to-be-Deactivated-List-Item, 
+	CellULConfigured,
+	CriticalityDiagnostics, 
+	C-RNTI,
+	CUtoDURRCInformation, 
+	DRB-Activity-Item,
+	DRBID,
+	DRBs-FailedToBeModified-Item,
+	DRBs-FailedToBeSetup-Item,
+	DRBs-FailedToBeSetupMod-Item,
+	DRB-Notify-Item,
+	DRBs-ModifiedConf-Item,
+	DRBs-Modified-Item,
+	DRBs-Required-ToBeModified-Item,
+	DRBs-Required-ToBeReleased-Item,
+	DRBs-Setup-Item,
+	DRBs-SetupMod-Item,
+	DRBs-ToBeModified-Item,
+	DRBs-ToBeReleased-Item,
+	DRBs-ToBeSetup-Item,
+	DRBs-ToBeSetupMod-Item,
+	DRXCycle,
+	DRXConfigurationIndicator,
+	DUtoCURRCInformation,
+	EUTRANQoS,
+	ExecuteDuplication,
+	FullConfiguration,
+	GNB-CU-UE-F1AP-ID,
+	GNB-DU-UE-F1AP-ID,
+	GNB-DU-ID,
+	GNB-DU-Served-Cells-Item,
+	GNB-DU-System-Information, 
+	GNB-CU-Name,
+	GNB-DU-Name,
+	InactivityMonitoringRequest,
+	InactivityMonitoringResponse,
+	LowerLayerPresenceStatusChange,
+	NotificationControl,
+	NRCGI,
+	NRPCI,
+	UEContextNotRetrievable,
+	Potential-SpCell-Item,
+	RAT-FrequencyPriorityInformation,
+	RequestedSRSTransmissionCharacteristics,
+	ResourceCoordinationTransferContainer,
+	RRCContainer,
+	RRCContainer-RRCSetupComplete,
+	RRCReconfigurationCompleteIndicator,
+	SCellIndex,
+	SCell-ToBeRemoved-Item,
+	SCell-ToBeSetup-Item,
+	SCell-ToBeSetupMod-Item,
+	SCell-FailedtoSetup-Item,
+	SCell-FailedtoSetupMod-Item, 
+	ServCellIndex,
+	Served-Cell-Information,
+	Served-Cells-To-Add-Item,
+	Served-Cells-To-Delete-Item,
+	Served-Cells-To-Modify-Item,
+	ServingCellMO,
+	SRBID,
+	SRBs-FailedToBeSetup-Item,
+	SRBs-FailedToBeSetupMod-Item,
+	SRBs-Required-ToBeReleased-Item,
+	SRBs-ToBeReleased-Item,
+	SRBs-ToBeSetup-Item,
+	SRBs-ToBeSetupMod-Item,
+	SRBs-Modified-Item,
+	SRBs-Setup-Item,
+	SRBs-SetupMod-Item,
+	TimeToWait,
+	TransactionID,
+	TransmissionActionIndicator,
+	UE-associatedLogicalF1-ConnectionItem,
+	DUtoCURRCContainer,
+	PagingCell-Item, 
+	SItype-List,
+	UEIdentityIndexValue,
+	GNB-CU-TNL-Association-Setup-Item,
+	GNB-CU-TNL-Association-Failed-To-Setup-Item,
+	GNB-CU-TNL-Association-To-Add-Item,
+	GNB-CU-TNL-Association-To-Remove-Item,
+	GNB-CU-TNL-Association-To-Update-Item,
+	MaskedIMEISV,
+	PagingDRX,
+	PagingPriority,
+	PagingIdentity,
+	Cells-to-be-Barred-Item,
+	PWSSystemInformation,
+	Broadcast-To-Be-Cancelled-Item,
+	Cells-Broadcast-Cancelled-Item,
+	NR-CGI-List-For-Restart-Item,
+	PWS-Failed-NR-CGI-Item,
+	RepetitionPeriod,
+	NumberofBroadcastRequest,
+	Cells-To-Be-Broadcast-Item,
+	Cells-Broadcast-Completed-Item,
+	Cancel-all-Warning-Messages-Indicator,
+	EUTRA-NR-CellResourceCoordinationReq-Container,
+	EUTRA-NR-CellResourceCoordinationReqAck-Container,
+	RequestType,
+	PLMN-Identity,
+	RLCFailureIndication, 
+	UplinkTxDirectCurrentListInformation,
+	SULAccessIndication,
+	Protected-EUTRA-Resources-Item,
+	GNB-DUConfigurationQuery,
+	BitRate,
+	RRC-Version,
+	GNBDUOverloadInformation,
+	RRCDeliveryStatusRequest,
+	NeedforGap,
+	RRCDeliveryStatus,
+	ResourceCoordinationTransferInformation,
+	Dedicated-SIDelivery-NeededUE-Item,
+	Associated-SCell-Item,
+	IgnoreResourceCoordinationContainer,
+	PagingOrigin,
+	UAC-Assistance-Info,
+	RANUEID,
+	GNB-DU-TNL-Association-To-Remove-Item,
+	NotificationInformation,
+	TraceActivation,
+	TraceID,
+	Neighbour-Cell-Information-Item,
+	SymbolAllocInSlot,
+	NumDLULSymbols,
+	AdditionalRRMPriorityIndex,
+	DUCURadioInformationType,
+	CUDURadioInformationType,
+	Transport-Layer-Address-Info,
+	BHChannels-ToBeSetup-Item,
+	BHChannels-Setup-Item,
+	BHChannels-FailedToBeSetup-Item,
+	BHChannels-ToBeModified-Item,
+	BHChannels-ToBeReleased-Item,
+	BHChannels-ToBeSetupMod-Item,
+	BHChannels-FailedToBeModified-Item,
+	BHChannels-FailedToBeSetupMod-Item,
+	BHChannels-Modified-Item,
+	BHChannels-SetupMod-Item,
+	BHChannels-Required-ToBeReleased-Item,
+	BAPAddress,
+	BAPPathID,
+	BAPRoutingID,
+	BH-Routing-Information-Added-List-Item,
+	BH-Routing-Information-Removed-List-Item,
+	Child-Nodes-List,
+	Child-Nodes-List-Item,
+	Child-Node-Cells-List,
+	Child-Node-Cells-List-Item,
+	Activated-Cells-to-be-Updated-List,
+	Activated-Cells-to-be-Updated-List-Item,
+	UL-BH-Non-UP-Traffic-Mapping,
+	IABTNLAddressesRequested,
+	IABIPv6RequestType,
+	IAB-TNL-Addresses-To-Remove-Item,
+	IABTNLAddress,
+	IAB-Allocated-TNL-Address-Item,
+	IABv4AddressesRequested,
+	TrafficMappingInfo,
+	UL-UP-TNL-Information-to-Update-List-Item,
+	UL-UP-TNL-Address-to-Update-List-Item,
+	DL-UP-TNL-Address-to-Update-List-Item,
+	NRV2XServicesAuthorized,
+	LTEV2XServicesAuthorized,
+	NRUESidelinkAggregateMaximumBitrate,
+	LTEUESidelinkAggregateMaximumBitrate,
+	SLDRBs-SetupMod-Item,
+	SLDRBs-ModifiedConf-Item,
+	SLDRBID,
+	SLDRBs-FailedToBeModified-Item,
+	SLDRBs-FailedToBeSetup-Item,
+	SLDRBs-FailedToBeSetupMod-Item,
+	SLDRBs-Modified-Item,
+	SLDRBs-Required-ToBeModified-Item,
+	SLDRBs-Required-ToBeReleased-Item,
+	SLDRBs-Setup-Item,
+	SLDRBs-ToBeModified-Item,
+	SLDRBs-ToBeReleased-Item,
+	SLDRBs-ToBeSetup-Item,
+	SLDRBs-ToBeSetupMod-Item,
+	GNBCUMeasurementID,
+	GNBDUMeasurementID,
+	RegistrationRequest,
+	ReportCharacteristics,
+	CellToReportList,
+	HardwareLoadIndicator,
+	CellMeasurementResultList,
+	ReportingPeriodicity,
+	TNLCapacityIndicator,
+	RACHReportInformationList,
+	RLFReportInformationList,
+	ReportingRequestType,
+	TimeReferenceInformation,
+	ConditionalInterDUMobilityInformation,
+	ConditionalIntraDUMobilityInformation,
+	TargetCellList,
+	MDTPLMNList,
+	PrivacyIndicator,
+	TransportLayerAddress,
+	URI-address,
+	NID,
+	PosAssistance-Information,
+	PosBroadcast,
+	PositioningBroadcastCells,
+	RoutingID,
+	PosAssistanceInformationFailureList,
+	PosMeasurementQuantities,
+	PosMeasurementResultList,
+	PosMeasurementPeriodicity,
+	PosReportCharacteristics,
+	TRPInformationTypeItem,
+	TRPInformationItem,
+	LMF-MeasurementID,
+	RAN-MeasurementID,
+	SRSResourceSetID,
+	SRSSpatialRelation,
+	SRSResourceTrigger,
+	SRSConfiguration,
+	TRPList,
+	E-CID-MeasurementQuantities,
+	E-CID-MeasurementPeriodicity,
+	E-CID-MeasurementResult,
+	Cell-Portion-ID,
+	LMF-UE-MeasurementID,
+	RAN-UE-MeasurementID,
+	SFNInitialisationTime,
+	SystemFrameNumber,
+	SlotNumber,
+	AbortTransmission,
+	TRP-MeasurementRequestList,
+	MeasurementBeamInfoRequest,
+	E-CID-ReportCharacteristics,
+	Extended-GNB-CU-Name,
+	Extended-GNB-DU-Name
+
+
+
+FROM F1AP-IEs
+
+	PrivateIE-Container{},
+	ProtocolExtensionContainer{},
+	ProtocolIE-Container{},
+	ProtocolIE-ContainerPair{},
+	ProtocolIE-SingleContainer{},
+	F1AP-PRIVATE-IES,
+	F1AP-PROTOCOL-EXTENSION,
+	F1AP-PROTOCOL-IES,
+	F1AP-PROTOCOL-IES-PAIR
+
+FROM F1AP-Containers
+
+	id-Candidate-SpCell-Item,
+	id-Candidate-SpCell-List,
+	id-Cause,
+	id-Cancel-all-Warning-Messages-Indicator,
+	id-Cells-Failed-to-be-Activated-List,
+	id-Cells-Failed-to-be-Activated-List-Item, 
+	id-Cells-Status-Item,
+	id-Cells-Status-List,
+	id-Cells-to-be-Activated-List,
+	id-Cells-to-be-Activated-List-Item,
+	id-Cells-to-be-Deactivated-List,
+	id-Cells-to-be-Deactivated-List-Item,
+	id-ConfirmedUEID,
+	id-CriticalityDiagnostics,
+	id-C-RNTI,
+	id-CUtoDURRCInformation,
+	id-DRB-Activity-Item,
+	id-DRB-Activity-List,
+	id-DRBs-FailedToBeModified-Item,
+	id-DRBs-FailedToBeModified-List,
+	id-DRBs-FailedToBeSetup-Item,
+	id-DRBs-FailedToBeSetup-List,
+	id-DRBs-FailedToBeSetupMod-Item,
+	id-DRBs-FailedToBeSetupMod-List,
+	id-DRBs-ModifiedConf-Item,
+	id-DRBs-ModifiedConf-List,
+	id-DRBs-Modified-Item,
+	id-DRBs-Modified-List,
+	id-DRB-Notify-Item,
+	id-DRB-Notify-List,
+	id-DRBs-Required-ToBeModified-Item,
+	id-DRBs-Required-ToBeModified-List,
+	id-DRBs-Required-ToBeReleased-Item,
+	id-DRBs-Required-ToBeReleased-List,
+	id-DRBs-Setup-Item,
+	id-DRBs-Setup-List,
+	id-DRBs-SetupMod-Item,
+	id-DRBs-SetupMod-List,
+	id-DRBs-ToBeModified-Item,
+	id-DRBs-ToBeModified-List,
+	id-DRBs-ToBeReleased-Item,
+	id-DRBs-ToBeReleased-List,
+	id-DRBs-ToBeSetup-Item,
+	id-DRBs-ToBeSetup-List,
+	id-DRBs-ToBeSetupMod-Item,
+	id-DRBs-ToBeSetupMod-List,
+	id-DRXCycle,
+	id-DUtoCURRCInformation,
+	id-ExecuteDuplication,
+	id-FullConfiguration,
+	id-gNB-CU-UE-F1AP-ID,
+	id-gNB-DU-UE-F1AP-ID,
+	id-gNB-DU-ID,
+	id-GNB-DU-Served-Cells-Item,
+	id-gNB-DU-Served-Cells-List, 
+	id-gNB-CU-Name,
+	id-gNB-DU-Name,
+	id-Extended-GNB-CU-Name,
+	id-Extended-GNB-DU-Name,
+	id-InactivityMonitoringRequest,
+	id-InactivityMonitoringResponse,
+	id-new-gNB-CU-UE-F1AP-ID,
+	id-new-gNB-DU-UE-F1AP-ID,
+	id-oldgNB-DU-UE-F1AP-ID,
+	id-PLMNAssistanceInfoForNetShar,
+	id-Potential-SpCell-Item,
+	id-Potential-SpCell-List,
+	id-RAT-FrequencyPriorityInformation, 
+	id-RedirectedRRCmessage,
+	id-ResetType,
+	id-RequestedSRSTransmissionCharacteristics,
+	id-ResourceCoordinationTransferContainer,
+	id-RRCContainer,
+	id-RRCContainer-RRCSetupComplete,
+	id-RRCReconfigurationCompleteIndicator,
+	id-SCell-FailedtoSetup-List,
+	id-SCell-FailedtoSetup-Item,
+	id-SCell-FailedtoSetupMod-List,
+	id-SCell-FailedtoSetupMod-Item,
+	id-SCell-ToBeRemoved-Item,
+	id-SCell-ToBeRemoved-List,
+	id-SCell-ToBeSetup-Item,
+	id-SCell-ToBeSetup-List,
+	id-SCell-ToBeSetupMod-Item,
+	id-SCell-ToBeSetupMod-List,
+	id-SelectedPLMNID,
+	id-Served-Cells-To-Add-Item,
+	id-Served-Cells-To-Add-List,
+	id-Served-Cells-To-Delete-Item,
+	id-Served-Cells-To-Delete-List,
+	id-Served-Cells-To-Modify-Item,
+	id-Served-Cells-To-Modify-List,
+	id-ServCellIndex,
+	id-ServingCellMO,
+	id-SpCell-ID,
+	id-SpCellULConfigured,
+	id-SRBID,
+	id-SRBs-FailedToBeSetup-Item,
+	id-SRBs-FailedToBeSetup-List,
+	id-SRBs-FailedToBeSetupMod-Item,
+	id-SRBs-FailedToBeSetupMod-List,
+	id-SRBs-Required-ToBeReleased-Item,
+	id-SRBs-Required-ToBeReleased-List,
+	id-SRBs-ToBeReleased-Item,
+	id-SRBs-ToBeReleased-List, 
+	id-SRBs-ToBeSetup-Item,
+	id-SRBs-ToBeSetup-List,
+	id-SRBs-ToBeSetupMod-Item,
+	id-SRBs-ToBeSetupMod-List,
+	id-SRBs-Modified-Item,
+	id-SRBs-Modified-List,
+	id-SRBs-Setup-Item,
+	id-SRBs-Setup-List,
+	id-SRBs-SetupMod-Item,
+	id-SRBs-SetupMod-List,
+	id-TimeToWait,
+	id-TransactionID,
+	id-TransmissionActionIndicator, 
+	id-UEContextNotRetrievable,
+	id-UE-associatedLogicalF1-ConnectionItem,
+	id-UE-associatedLogicalF1-ConnectionListResAck,
+	id-DUtoCURRCContainer,
+	id-NRCGI,
+	id-PagingCell-Item,
+	id-PagingCell-List,
+	id-PagingDRX,
+	id-PagingPriority,
+	id-SItype-List,
+	id-UEIdentityIndexValue,
+	id-GNB-CU-TNL-Association-Setup-List,
+	id-GNB-CU-TNL-Association-Setup-Item,
+	id-GNB-CU-TNL-Association-Failed-To-Setup-List,
+	id-GNB-CU-TNL-Association-Failed-To-Setup-Item,
+	id-GNB-CU-TNL-Association-To-Add-Item,
+	id-GNB-CU-TNL-Association-To-Add-List,
+	id-GNB-CU-TNL-Association-To-Remove-Item,
+	id-GNB-CU-TNL-Association-To-Remove-List,
+	id-GNB-CU-TNL-Association-To-Update-Item,
+	id-GNB-CU-TNL-Association-To-Update-List,
+	id-MaskedIMEISV,
+	id-PagingIdentity,
+	id-Cells-to-be-Barred-List,
+	id-Cells-to-be-Barred-Item,
+	id-PWSSystemInformation,
+	id-RepetitionPeriod,
+	id-NumberofBroadcastRequest,
+	id-Cells-To-Be-Broadcast-List,
+	id-Cells-To-Be-Broadcast-Item,
+	id-Cells-Broadcast-Completed-List,
+	id-Cells-Broadcast-Completed-Item,
+	id-Broadcast-To-Be-Cancelled-List,
+	id-Broadcast-To-Be-Cancelled-Item,
+	id-Cells-Broadcast-Cancelled-List,
+	id-Cells-Broadcast-Cancelled-Item,
+	id-NR-CGI-List-For-Restart-List,
+	id-NR-CGI-List-For-Restart-Item,
+	id-PWS-Failed-NR-CGI-List,
+	id-PWS-Failed-NR-CGI-Item,
+	id-EUTRA-NR-CellResourceCoordinationReq-Container,
+	id-EUTRA-NR-CellResourceCoordinationReqAck-Container,
+	id-Protected-EUTRA-Resources-List,
+	id-RequestType,
+	id-ServingPLMN,
+	id-DRXConfigurationIndicator,
+	id-RLCFailureIndication,
+	id-UplinkTxDirectCurrentListInformation,
+	id-SULAccessIndication,
+	id-Protected-EUTRA-Resources-Item,
+	id-GNB-DUConfigurationQuery,
+	id-GNB-DU-UE-AMBR-UL,
+	id-GNB-CU-RRC-Version,
+	id-GNB-DU-RRC-Version,
+	id-GNBDUOverloadInformation,
+	id-NeedforGap,
+	id-RRCDeliveryStatusRequest,
+	id-RRCDeliveryStatus,
+	id-Dedicated-SIDelivery-NeededUE-List,
+	id-Dedicated-SIDelivery-NeededUE-Item,
+	id-ResourceCoordinationTransferInformation,
+	id-Associated-SCell-List,
+	id-Associated-SCell-Item,
+	id-IgnoreResourceCoordinationContainer,
+	id-UAC-Assistance-Info,
+	id-RANUEID,
+	id-PagingOrigin,
+	id-GNB-DU-TNL-Association-To-Remove-Item,
+	id-GNB-DU-TNL-Association-To-Remove-List,
+	id-NotificationInformation,
+	id-TraceActivation,
+	id-TraceID,
+	id-Neighbour-Cell-Information-List,
+	id-Neighbour-Cell-Information-Item,
+	id-SymbolAllocInSlot,
+	id-NumDLULSymbols,
+	id-AdditionalRRMPriorityIndex,
+	id-DUCURadioInformationType,
+	id-CUDURadioInformationType,
+	id-LowerLayerPresenceStatusChange,
+	id-Transport-Layer-Address-Info,
+	id-BHChannels-ToBeSetup-List,
+	id-BHChannels-ToBeSetup-Item,
+	id-BHChannels-Setup-List,
+	id-BHChannels-Setup-Item,
+	id-BHChannels-ToBeModified-Item,
+	id-BHChannels-ToBeModified-List,
+	id-BHChannels-ToBeReleased-Item,
+	id-BHChannels-ToBeReleased-List,
+	id-BHChannels-ToBeSetupMod-Item,
+	id-BHChannels-ToBeSetupMod-List,
+	id-BHChannels-FailedToBeSetup-Item,
+	id-BHChannels-FailedToBeSetup-List,
+	id-BHChannels-FailedToBeModified-Item,
+	id-BHChannels-FailedToBeModified-List,
+	id-BHChannels-FailedToBeSetupMod-Item,
+	id-BHChannels-FailedToBeSetupMod-List,
+	id-BHChannels-Modified-Item,
+	id-BHChannels-Modified-List,
+	id-BHChannels-SetupMod-Item,
+	id-BHChannels-SetupMod-List,
+	id-BHChannels-Required-ToBeReleased-Item,
+	id-BHChannels-Required-ToBeReleased-List,
+	id-BAPAddress,
+	id-ConfiguredBAPAddress,
+	id-BH-Routing-Information-Added-List,
+	id-BH-Routing-Information-Added-List-Item,
+	id-BH-Routing-Information-Removed-List,
+	id-BH-Routing-Information-Removed-List-Item,
+	id-UL-BH-Non-UP-Traffic-Mapping,
+	id-Child-Nodes-List,
+	id-Activated-Cells-to-be-Updated-List, 
+	id-IABIPv6RequestType,
+	id-IAB-TNL-Addresses-To-Remove-List,
+	id-IAB-TNL-Addresses-To-Remove-Item,
+	id-IAB-Allocated-TNL-Address-List,
+	id-IAB-Allocated-TNL-Address-Item,
+	id-IABv4AddressesRequested,
+	id-TrafficMappingInformation,
+	id-UL-UP-TNL-Information-to-Update-List,
+	id-UL-UP-TNL-Information-to-Update-List-Item,
+	id-UL-UP-TNL-Address-to-Update-List,
+	id-UL-UP-TNL-Address-to-Update-List-Item,
+	id-DL-UP-TNL-Address-to-Update-List,
+	id-DL-UP-TNL-Address-to-Update-List-Item,
+	id-NRV2XServicesAuthorized,
+	id-LTEV2XServicesAuthorized,
+	id-NRUESidelinkAggregateMaximumBitrate,
+	id-LTEUESidelinkAggregateMaximumBitrate,
+	id-PC5LinkAMBR,
+	id-SLDRBs-FailedToBeModified-Item,
+	id-SLDRBs-FailedToBeModified-List,
+	id-SLDRBs-FailedToBeSetup-Item,
+	id-SLDRBs-FailedToBeSetup-List,
+	id-SLDRBs-Modified-Item,
+	id-SLDRBs-Modified-List,
+	id-SLDRBs-Required-ToBeModified-Item,
+	id-SLDRBs-Required-ToBeModified-List,
+	id-SLDRBs-Required-ToBeReleased-Item,
+	id-SLDRBs-Required-ToBeReleased-List,
+	id-SLDRBs-Setup-Item,
+	id-SLDRBs-Setup-List,
+	id-SLDRBs-ToBeModified-Item,
+	id-SLDRBs-ToBeModified-List,
+	id-SLDRBs-ToBeReleased-Item,
+	id-SLDRBs-ToBeReleased-List,
+	id-SLDRBs-ToBeSetup-Item,
+	id-SLDRBs-ToBeSetup-List,
+	id-SLDRBs-ToBeSetupMod-Item,
+	id-SLDRBs-ToBeSetupMod-List,
+	id-SLDRBs-SetupMod-List,
+	id-SLDRBs-FailedToBeSetupMod-List,
+	id-SLDRBs-SetupMod-Item,
+	id-SLDRBs-FailedToBeSetupMod-Item,
+	id-SLDRBs-ModifiedConf-List,
+	id-SLDRBs-ModifiedConf-Item,
+	id-gNBCUMeasurementID,
+	id-gNBDUMeasurementID,
+	id-RegistrationRequest,
+	id-ReportCharacteristics,
+	id-CellToReportList,
+	id-CellMeasurementResultList,
+	id-HardwareLoadIndicator,
+	id-ReportingPeriodicity, 
+	id-TNLCapacityIndicator, 
+	id-RACHReportInformationList,
+	id-RLFReportInformationList,
+	id-ReportingRequestType,
+	id-TimeReferenceInformation,
+	id-ConditionalInterDUMobilityInformation,
+	id-ConditionalIntraDUMobilityInformation,
+	id-targetCellsToCancel,
+	id-requestedTargetCellGlobalID,
+	id-TraceCollectionEntityIPAddress,
+	id-ManagementBasedMDTPLMNList,
+	id-PrivacyIndicator,
+	id-TraceCollectionEntityURI,
+	id-ServingNID,
+	id-PosAssistance-Information,
+	id-PosBroadcast,
+	id-PositioningBroadcastCells,
+	id-RoutingID,
+	id-PosAssistanceInformationFailureList,
+	id-PosMeasurementQuantities,
+	id-PosMeasurementResultList,
+	id-PosMeasurementPeriodicity,
+	id-PosReportCharacteristics,
+	id-TRPInformationTypeListTRPReq,
+	id-TRPInformationTypeItem,
+	id-TRPInformationListTRPResp,
+	id-TRPInformationItem,
+	id-LMF-MeasurementID,
+	id-RAN-MeasurementID,
+	id-SRSType,
+	id-ActivationTime,
+	id-AbortTransmission,
+	id-SRSConfiguration,
+	id-TRPList,
+	id-E-CID-MeasurementQuantities,
+	id-E-CID-MeasurementPeriodicity,
+	id-E-CID-MeasurementResult,
+	id-Cell-Portion-ID,
+	id-LMF-UE-MeasurementID,
+	id-RAN-UE-MeasurementID,
+	id-SFNInitialisationTime,
+	id-SystemFrameNumber,
+	id-SlotNumber,
+	id-TRP-MeasurementRequestList,
+	id-MeasurementBeamInfoRequest,
+	id-E-CID-ReportCharacteristics,
+
+	maxCellingNBDU,
+	maxnoofCandidateSpCells,
+	maxnoofDRBs,
+	maxnoofErrors,
+	maxnoofIndividualF1ConnectionsToReset,
+	maxnoofPotentialSpCells,
+	maxnoofSCells,
+	maxnoofSRBs,
+	maxnoofPagingCells,
+	maxnoofTNLAssociations,
+	maxCellineNB,
+	maxnoofUEIDs,
+	maxnoofBHRLCChannels,
+	maxnoofRoutingEntries,
+	maxnoofChildIABNodes,
+	maxnoofServedCellsIAB,
+	maxnoofTLAsIAB,
+	maxnoofULUPTNLInformationforIAB,
+	maxnoofUPTNLAddresses,
+	maxnoofSLDRBs,
+	maxnoofTRPInfoTypes,
+	maxnoofTRPs
+
+
+
+FROM F1AP-Constants;
+
+
+-- **************************************************************
+--
+-- RESET ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Reset
+--
+-- **************************************************************
+
+Reset ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {ResetIEs} },
+	...
+}
+
+ResetIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-ResetType					CRITICALITY reject	TYPE ResetType					PRESENCE mandatory	},
+	...
+}
+
+ResetType ::= CHOICE {
+	f1-Interface					ResetAll,
+	partOfF1-Interface				UE-associatedLogicalF1-ConnectionListRes, 
+	choice-extension				ProtocolIE-SingleContainer { { ResetType-ExtIEs} }
+}
+
+ResetType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+
+ResetAll ::= ENUMERATED {
+	reset-all,
+	...
+}
+
+UE-associatedLogicalF1-ConnectionListRes ::= SEQUENCE (SIZE(1.. maxnoofIndividualF1ConnectionsToReset)) OF ProtocolIE-SingleContainer { { UE-associatedLogicalF1-ConnectionItemRes } }
+
+UE-associatedLogicalF1-ConnectionItemRes F1AP-PROTOCOL-IES ::= {
+	{ ID id-UE-associatedLogicalF1-ConnectionItem	CRITICALITY reject	TYPE UE-associatedLogicalF1-ConnectionItem	PRESENCE mandatory},
+	...
+}
+
+
+-- **************************************************************
+--
+-- Reset Acknowledge
+--
+-- **************************************************************
+
+ResetAcknowledge ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {ResetAcknowledgeIEs} },
+	...
+}
+
+ResetAcknowledgeIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID									CRITICALITY reject	TYPE TransactionID													PRESENCE mandatory	}|
+	{ ID id-UE-associatedLogicalF1-ConnectionListResAck		CRITICALITY ignore	TYPE UE-associatedLogicalF1-ConnectionListResAck			PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional	},
+	...
+}
+
+UE-associatedLogicalF1-ConnectionListResAck ::= SEQUENCE (SIZE(1.. maxnoofIndividualF1ConnectionsToReset)) OF ProtocolIE-SingleContainer { { UE-associatedLogicalF1-ConnectionItemResAck } }
+
+UE-associatedLogicalF1-ConnectionItemResAck 	F1AP-PROTOCOL-IES ::= {
+	{ ID id-UE-associatedLogicalF1-ConnectionItem	 CRITICALITY ignore 	TYPE UE-associatedLogicalF1-ConnectionItem  	PRESENCE mandatory },
+	...
+}
+
+-- **************************************************************
+--
+-- ERROR INDICATION ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Error Indication
+--
+-- **************************************************************
+
+ErrorIndication ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ErrorIndicationIEs}},
+	...
+}
+
+ErrorIndicationIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory}|
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-CU-UE-F1AP-ID			PRESENCE optional	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID			PRESENCE optional	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+-- F1 SETUP ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- F1 Setup Request
+--
+-- **************************************************************
+
+F1SetupRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {F1SetupRequestIEs} },
+	...
+}
+
+F1SetupRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID						PRESENCE mandatory	}|
+	{ ID id-gNB-DU-ID						CRITICALITY reject	TYPE GNB-DU-ID							PRESENCE mandatory	}|
+	{ ID id-gNB-DU-Name						CRITICALITY ignore	TYPE GNB-DU-Name						PRESENCE optional	}|
+	{ ID id-gNB-DU-Served-Cells-List		CRITICALITY reject	TYPE GNB-DU-Served-Cells-List			PRESENCE optional	}|
+	{ ID id-GNB-DU-RRC-Version				CRITICALITY reject	TYPE RRC-Version						PRESENCE mandatory	}|
+	{ ID id-Transport-Layer-Address-Info	CRITICALITY ignore	TYPE Transport-Layer-Address-Info		PRESENCE optional	}|
+	{ ID id-BAPAddress						CRITICALITY ignore	TYPE BAPAddress							PRESENCE optional	}|
+	{ ID id-Extended-GNB-CU-Name			CRITICALITY ignore	TYPE Extended-GNB-CU-Name				PRESENCE optional	},
+	...
+} 
+
+
+GNB-DU-Served-Cells-List 	::= SEQUENCE (SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { GNB-DU-Served-Cells-ItemIEs } }
+
+GNB-DU-Served-Cells-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-GNB-DU-Served-Cells-Item		CRITICALITY reject	TYPE		GNB-DU-Served-Cells-Item	PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- F1 Setup Response
+--
+-- **************************************************************
+
+F1SetupResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {F1SetupResponseIEs} },
+	...
+}
+
+
+F1SetupResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID						PRESENCE mandatory	}|
+	{ ID id-gNB-CU-Name						CRITICALITY ignore	TYPE GNB-CU-Name						PRESENCE optional	}|
+	{ ID id-Cells-to-be-Activated-List		CRITICALITY reject	TYPE Cells-to-be-Activated-List			PRESENCE optional	}|
+	{ ID id-GNB-CU-RRC-Version				CRITICALITY reject	TYPE RRC-Version						PRESENCE mandatory	}|
+	{ ID id-Transport-Layer-Address-Info	CRITICALITY ignore	TYPE Transport-Layer-Address-Info		PRESENCE optional	}|
+	{ ID id-UL-BH-Non-UP-Traffic-Mapping	CRITICALITY reject	TYPE UL-BH-Non-UP-Traffic-Mapping		PRESENCE optional	}|
+	{ ID id-BAPAddress						CRITICALITY ignore	TYPE BAPAddress							PRESENCE optional	}|
+	{ ID id-Extended-GNB-DU-Name			CRITICALITY ignore	TYPE Extended-GNB-DU-Name				PRESENCE optional	},
+	...
+}
+
+
+Cells-to-be-Activated-List	::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Cells-to-be-Activated-List-ItemIEs } }
+
+Cells-to-be-Activated-List-ItemIEs	F1AP-PROTOCOL-IES::= {
+	{ ID id-Cells-to-be-Activated-List-Item				CRITICALITY reject	TYPE Cells-to-be-Activated-List-Item						PRESENCE mandatory},
+	...
+}
+
+
+
+-- **************************************************************
+--
+-- F1 Setup Failure
+--
+-- **************************************************************
+
+F1SetupFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {F1SetupFailureIEs} },
+	...
+}
+
+F1SetupFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-TimeToWait					CRITICALITY ignore	TYPE TimeToWait					PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- GNB-DU CONFIGURATION UPDATE ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- GNB-DU CONFIGURATION UPDATE
+--
+-- **************************************************************
+
+GNBDUConfigurationUpdate::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {GNBDUConfigurationUpdateIEs} },
+	...
+}
+
+GNBDUConfigurationUpdateIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID												PRESENCE mandatory	}|
+	{ ID id-Served-Cells-To-Add-List				CRITICALITY reject	TYPE Served-Cells-To-Add-List								PRESENCE optional	}|
+	{ ID id-Served-Cells-To-Modify-List				CRITICALITY reject	TYPE Served-Cells-To-Modify-List							PRESENCE optional	}|
+	{ ID id-Served-Cells-To-Delete-List				CRITICALITY reject	TYPE Served-Cells-To-Delete-List							PRESENCE optional	}|
+	{ ID id-Cells-Status-List						CRITICALITY reject	TYPE Cells-Status-List											PRESENCE optional	}|
+	{ ID id-Dedicated-SIDelivery-NeededUE-List		CRITICALITY ignore	TYPE Dedicated-SIDelivery-NeededUE-List					PRESENCE optional	}|
+	{ ID id-gNB-DU-ID								CRITICALITY reject	TYPE GNB-DU-ID													PRESENCE optional	}|
+	{ ID id-GNB-DU-TNL-Association-To-Remove-List	CRITICALITY reject	TYPE GNB-DU-TNL-Association-To-Remove-List				PRESENCE optional	}|
+	{ ID id-Transport-Layer-Address-Info			CRITICALITY ignore	TYPE Transport-Layer-Address-Info							PRESENCE optional	},
+	...
+} 
+
+Served-Cells-To-Add-List		::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Served-Cells-To-Add-ItemIEs } }
+Served-Cells-To-Modify-List	::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Served-Cells-To-Modify-ItemIEs } }
+Served-Cells-To-Delete-List	::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Served-Cells-To-Delete-ItemIEs } }
+Cells-Status-List	::= SEQUENCE (SIZE(0.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Cells-Status-ItemIEs } }
+
+Dedicated-SIDelivery-NeededUE-List::= SEQUENCE (SIZE(1.. maxnoofUEIDs))	OF ProtocolIE-SingleContainer { { Dedicated-SIDelivery-NeededUE-ItemIEs } }
+
+GNB-DU-TNL-Association-To-Remove-List	::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations))	OF ProtocolIE-SingleContainer { { GNB-DU-TNL-Association-To-Remove-ItemIEs } }
+
+
+Served-Cells-To-Add-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Served-Cells-To-Add-Item		CRITICALITY reject	TYPE	Served-Cells-To-Add-Item				PRESENCE mandatory	},
+	...
+}
+
+Served-Cells-To-Modify-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Served-Cells-To-Modify-Item			CRITICALITY reject	TYPE		Served-Cells-To-Modify-Item							PRESENCE mandatory	},
+	...
+}
+
+Served-Cells-To-Delete-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Served-Cells-To-Delete-Item				CRITICALITY reject	TYPE		Served-Cells-To-Delete-Item					PRESENCE mandatory	},
+	...
+}
+
+Cells-Status-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Cells-Status-Item				CRITICALITY reject	TYPE		Cells-Status-Item					PRESENCE mandatory	},
+	...
+}
+
+Dedicated-SIDelivery-NeededUE-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Dedicated-SIDelivery-NeededUE-Item		CRITICALITY ignore	TYPE	Dedicated-SIDelivery-NeededUE-Item				PRESENCE mandatory	},
+	...
+} 
+
+GNB-DU-TNL-Association-To-Remove-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-GNB-DU-TNL-Association-To-Remove-Item		CRITICALITY reject	TYPE	 GNB-DU-TNL-Association-To-Remove-Item			PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- GNB-DU CONFIGURATION UPDATE ACKNOWLEDGE
+--
+-- **************************************************************
+
+GNBDUConfigurationUpdateAcknowledge ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {GNBDUConfigurationUpdateAcknowledgeIEs} },
+	...
+}
+
+
+GNBDUConfigurationUpdateAcknowledgeIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID						CRITICALITY reject	TYPE TransactionID								PRESENCE mandatory	}|
+	{ ID id-Cells-to-be-Activated-List			CRITICALITY reject	TYPE Cells-to-be-Activated-List				PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics				CRITICALITY ignore	TYPE CriticalityDiagnostics						PRESENCE optional	}|
+	{ ID id-Cells-to-be-Deactivated-List		CRITICALITY reject	TYPE Cells-to-be-Deactivated-List			PRESENCE optional	}|
+	{ ID id-Transport-Layer-Address-Info		CRITICALITY ignore	TYPE Transport-Layer-Address-Info			PRESENCE optional	}|
+	{ ID id-UL-BH-Non-UP-Traffic-Mapping		CRITICALITY reject	TYPE UL-BH-Non-UP-Traffic-Mapping			PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+-- GNB-DU CONFIGURATION UPDATE FAILURE
+--
+-- **************************************************************
+
+GNBDUConfigurationUpdateFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {GNBDUConfigurationUpdateFailureIEs} },
+	...
+}
+
+GNBDUConfigurationUpdateFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-TimeToWait					CRITICALITY ignore	TYPE TimeToWait					PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+-- GNB-CU CONFIGURATION UPDATE ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- GNB-CU CONFIGURATION UPDATE
+--
+-- **************************************************************
+
+GNBCUConfigurationUpdate ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { GNBCUConfigurationUpdateIEs} },
+	...
+}
+
+GNBCUConfigurationUpdateIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID												PRESENCE mandatory	}|
+	{ ID id-Cells-to-be-Activated-List				CRITICALITY reject	TYPE	 Cells-to-be-Activated-List						PRESENCE optional	}|
+	{ ID id-Cells-to-be-Deactivated-List			CRITICALITY reject	TYPE	 Cells-to-be-Deactivated-List						PRESENCE optional	}|
+	{ ID id-GNB-CU-TNL-Association-To-Add-List		CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-To-Add-List				PRESENCE optional	}|
+	{ ID id-GNB-CU-TNL-Association-To-Remove-List	CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-To-Remove-List			PRESENCE optional	}|
+	{ ID id-GNB-CU-TNL-Association-To-Update-List	CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-To-Update-List			PRESENCE optional	}|
+	{ ID id-Cells-to-be-Barred-List					CRITICALITY ignore	TYPE	 Cells-to-be-Barred-List							PRESENCE optional	}|
+	{ ID id-Protected-EUTRA-Resources-List			CRITICALITY reject	TYPE	 Protected-EUTRA-Resources-List					PRESENCE optional	}|
+	{ ID id-Neighbour-Cell-Information-List			CRITICALITY ignore	TYPE	 Neighbour-Cell-Information-List					PRESENCE optional	}|
+	{ ID id-Transport-Layer-Address-Info			CRITICALITY ignore	TYPE	 Transport-Layer-Address-Info						PRESENCE optional	}|
+	{ ID id-UL-BH-Non-UP-Traffic-Mapping			CRITICALITY reject	TYPE	 UL-BH-Non-UP-Traffic-Mapping						PRESENCE optional	},
+	...
+} 
+
+Cells-to-be-Deactivated-List	::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Cells-to-be-Deactivated-List-ItemIEs } }
+GNB-CU-TNL-Association-To-Add-List		::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations))	OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-To-Add-ItemIEs } }
+GNB-CU-TNL-Association-To-Remove-List	::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations))	OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-To-Remove-ItemIEs } }
+GNB-CU-TNL-Association-To-Update-List	::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations))	OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-To-Update-ItemIEs } }
+Cells-to-be-Barred-List			::= SEQUENCE(SIZE(1.. maxCellingNBDU)) OF ProtocolIE-SingleContainer { { Cells-to-be-Barred-ItemIEs } }
+
+
+Cells-to-be-Deactivated-List-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Cells-to-be-Deactivated-List-Item						CRITICALITY reject	TYPE	Cells-to-be-Deactivated-List-Item					PRESENCE mandatory	},
+	...
+}
+
+
+GNB-CU-TNL-Association-To-Add-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-GNB-CU-TNL-Association-To-Add-Item		CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-To-Add-Item			PRESENCE mandatory	},
+	...
+}
+
+GNB-CU-TNL-Association-To-Remove-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-GNB-CU-TNL-Association-To-Remove-Item		CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-To-Remove-Item			PRESENCE mandatory	},
+	...
+}
+
+GNB-CU-TNL-Association-To-Update-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-GNB-CU-TNL-Association-To-Update-Item		CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-To-Update-Item			PRESENCE mandatory	},
+	...
+}
+
+Cells-to-be-Barred-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Cells-to-be-Barred-Item		CRITICALITY ignore	TYPE	 Cells-to-be-Barred-Item				PRESENCE mandatory	},
+	...
+}
+
+Protected-EUTRA-Resources-List ::= SEQUENCE (SIZE(1.. maxCellineNB))	OF ProtocolIE-SingleContainer { { Protected-EUTRA-Resources-ItemIEs } }
+Protected-EUTRA-Resources-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Protected-EUTRA-Resources-Item 					CRITICALITY reject 	TYPE Protected-EUTRA-Resources-Item							PRESENCE mandatory},
+	...
+}
+
+Neighbour-Cell-Information-List ::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Neighbour-Cell-Information-ItemIEs } }
+Neighbour-Cell-Information-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Neighbour-Cell-Information-Item 					CRITICALITY ignore 	TYPE Neighbour-Cell-Information-Item							PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- GNB-CU CONFIGURATION UPDATE ACKNOWLEDGE
+--
+-- **************************************************************
+
+GNBCUConfigurationUpdateAcknowledge ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { GNBCUConfigurationUpdateAcknowledgeIEs} },
+	...
+}
+
+
+GNBCUConfigurationUpdateAcknowledgeIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID								CRITICALITY reject	TYPE TransactionID											PRESENCE mandatory	}|
+	{ ID id-Cells-Failed-to-be-Activated-List			CRITICALITY reject	TYPE Cells-Failed-to-be-Activated-List				PRESENCE optional}|
+	{ ID id-CriticalityDiagnostics							CRITICALITY ignore	TYPE CriticalityDiagnostics								PRESENCE optional	}|
+	{ ID id-GNB-CU-TNL-Association-Setup-List			CRITICALITY ignore	TYPE GNB-CU-TNL-Association-Setup-List				PRESENCE optional	}|
+	{ ID id-GNB-CU-TNL-Association-Failed-To-Setup-List	CRITICALITY ignore	TYPE GNB-CU-TNL-Association-Failed-To-Setup-List	PRESENCE optional	}|
+	{ ID id-Dedicated-SIDelivery-NeededUE-List				CRITICALITY ignore	TYPE Dedicated-SIDelivery-NeededUE-List				PRESENCE optional	}|
+	{ ID id-Transport-Layer-Address-Info				CRITICALITY ignore	TYPE Transport-Layer-Address-Info						PRESENCE optional	},
+	...
+}
+
+Cells-Failed-to-be-Activated-List	::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Cells-Failed-to-be-Activated-List-ItemIEs } }
+GNB-CU-TNL-Association-Setup-List ::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations))	OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-Setup-ItemIEs } }
+GNB-CU-TNL-Association-Failed-To-Setup-List ::= SEQUENCE (SIZE(1.. maxnoofTNLAssociations))	OF ProtocolIE-SingleContainer { { GNB-CU-TNL-Association-Failed-To-Setup-ItemIEs } }
+
+Cells-Failed-to-be-Activated-List-ItemIEs F1AP-PROTOCOL-IES		::= {
+	{ ID id-Cells-Failed-to-be-Activated-List-Item		CRITICALITY reject	TYPE Cells-Failed-to-be-Activated-List-Item		PRESENCE mandatory	},
+	...
+}
+
+GNB-CU-TNL-Association-Setup-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-GNB-CU-TNL-Association-Setup-Item		CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-Setup-Item			PRESENCE mandatory	},
+	...
+}
+
+
+GNB-CU-TNL-Association-Failed-To-Setup-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-GNB-CU-TNL-Association-Failed-To-Setup-Item		CRITICALITY ignore	TYPE	 GNB-CU-TNL-Association-Failed-To-Setup-Item			PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- GNB-CU CONFIGURATION UPDATE FAILURE
+--
+-- **************************************************************
+
+GNBCUConfigurationUpdateFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { GNBCUConfigurationUpdateFailureIEs} },
+	...
+}
+
+GNBCUConfigurationUpdateFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-TimeToWait					CRITICALITY ignore	TYPE TimeToWait					PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- GNB-DU RESOURCE COORDINATION REQUEST 
+--
+-- **************************************************************
+
+GNBDUResourceCoordinationRequest ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{{GNBDUResourceCoordinationRequest-IEs}},
+	...
+}
+
+GNBDUResourceCoordinationRequest-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID									CRITICALITY reject	TYPE TransactionID									PRESENCE mandatory	}|
+	{ ID id-RequestType										CRITICALITY reject	TYPE RequestType										PRESENCE mandatory	}|
+	{ ID id-EUTRA-NR-CellResourceCoordinationReq-Container	CRITICALITY reject	TYPE EUTRA-NR-CellResourceCoordinationReq-Container	PRESENCE mandatory}|
+	{ ID id-IgnoreResourceCoordinationContainer				CRITICALITY reject	TYPE IgnoreResourceCoordinationContainer		PRESENCE optional },
+	...
+}
+
+
+-- **************************************************************
+--
+-- GNB-DU RESOURCE COORDINATION RESPONSE 
+--
+-- **************************************************************
+
+GNBDUResourceCoordinationResponse ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{{GNBDUResourceCoordinationResponse-IEs}},
+	...
+}
+
+GNBDUResourceCoordinationResponse-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID										CRITICALITY reject	TYPE TransactionID						PRESENCE mandatory	}|
+	{ ID id-EUTRA-NR-CellResourceCoordinationReqAck-Container	CRITICALITY reject	TYPE EUTRA-NR-CellResourceCoordinationReqAck-Container		PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- UE Context Setup ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- UE CONTEXT SETUP REQUEST
+--
+-- **************************************************************
+
+UEContextSetupRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextSetupRequestIEs} },
+	...
+}
+
+UEContextSetupRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID									PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID						CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID									PRESENCE optional 	}|
+	{ ID id-SpCell-ID								CRITICALITY reject	TYPE NRCGI												PRESENCE mandatory	}|
+	{ ID id-ServCellIndex							CRITICALITY reject	TYPE ServCellIndex										PRESENCE mandatory	}|
+	{ ID id-SpCellULConfigured						CRITICALITY ignore	TYPE CellULConfigured									PRESENCE optional	}|
+	{ ID id-CUtoDURRCInformation					CRITICALITY reject	TYPE CUtoDURRCInformation								PRESENCE mandatory}|
+	{ ID id-Candidate-SpCell-List					CRITICALITY ignore	TYPE Candidate-SpCell-List							PRESENCE optional	}|
+	{ ID id-DRXCycle								CRITICALITY ignore	TYPE DRXCycle											PRESENCE optional	}|
+	{ ID id-ResourceCoordinationTransferContainer	CRITICALITY ignore	TYPE ResourceCoordinationTransferContainer		PRESENCE optional	}|
+	{ ID id-SCell-ToBeSetup-List					CRITICALITY ignore	TYPE SCell-ToBeSetup-List								PRESENCE optional	}|
+	{ ID id-SRBs-ToBeSetup-List						CRITICALITY reject	TYPE SRBs-ToBeSetup-List								PRESENCE optional	}|
+	{ ID id-DRBs-ToBeSetup-List						CRITICALITY reject	TYPE DRBs-ToBeSetup-List								PRESENCE optional	}|
+	{ ID id-InactivityMonitoringRequest				CRITICALITY reject	TYPE InactivityMonitoringRequest					PRESENCE optional	}|
+	{ ID id-RAT-FrequencyPriorityInformation		CRITICALITY reject	TYPE RAT-FrequencyPriorityInformation				PRESENCE optional	}|
+	{ ID id-RRCContainer							CRITICALITY ignore	TYPE RRCContainer										PRESENCE optional	}|
+	{ ID id-MaskedIMEISV							CRITICALITY ignore	TYPE MaskedIMEISV										PRESENCE optional	}|
+	{ ID id-ServingPLMN								CRITICALITY ignore	TYPE PLMN-Identity										PRESENCE optional	}|
+	{ ID id-GNB-DU-UE-AMBR-UL						CRITICALITY ignore	TYPE BitRate											PRESENCE conditional }|
+	{ ID id-RRCDeliveryStatusRequest				CRITICALITY ignore	TYPE RRCDeliveryStatusRequest						PRESENCE optional }|
+	{ ID id-ResourceCoordinationTransferInformation	CRITICALITY ignore	TYPE ResourceCoordinationTransferInformation	PRESENCE optional	}|
+	{ ID id-ServingCellMO							CRITICALITY ignore	TYPE ServingCellMO										PRESENCE optional	}|
+	{ ID id-new-gNB-CU-UE-F1AP-ID					CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID									PRESENCE optional }|
+	{ ID id-RANUEID									CRITICALITY ignore	TYPE RANUEID											PRESENCE optional	}|
+	{ ID id-TraceActivation							CRITICALITY ignore	TYPE TraceActivation									PRESENCE optional	}|
+	{ ID id-AdditionalRRMPriorityIndex				CRITICALITY ignore	TYPE AdditionalRRMPriorityIndex						PRESENCE optional }|
+	{ ID id-BHChannels-ToBeSetup-List				CRITICALITY reject	TYPE BHChannels-ToBeSetup-List						PRESENCE optional	}|
+	{ ID id-ConfiguredBAPAddress					CRITICALITY reject	TYPE BAPAddress											PRESENCE optional	}|
+	{ ID id-NRV2XServicesAuthorized					CRITICALITY ignore	TYPE NRV2XServicesAuthorized							PRESENCE optional }|
+	{ ID id-LTEV2XServicesAuthorized				CRITICALITY ignore	TYPE LTEV2XServicesAuthorized						PRESENCE optional }|
+	{ ID id-NRUESidelinkAggregateMaximumBitrate		CRITICALITY ignore	TYPE NRUESidelinkAggregateMaximumBitrate			PRESENCE optional }|
+	{ ID id-LTEUESidelinkAggregateMaximumBitrate	CRITICALITY ignore	TYPE LTEUESidelinkAggregateMaximumBitrate		PRESENCE optional }|
+	{ ID id-PC5LinkAMBR								CRITICALITY ignore	TYPE BitRate											PRESENCE optional}|
+	{ ID id-SLDRBs-ToBeSetup-List					CRITICALITY reject	TYPE SLDRBs-ToBeSetup-List							PRESENCE optional	}|
+	{ ID id-ConditionalInterDUMobilityInformation	CRITICALITY reject	TYPE ConditionalInterDUMobilityInformation		PRESENCE optional}|
+	{ ID id-ManagementBasedMDTPLMNList				CRITICALITY ignore	TYPE 		MDTPLMNList									PRESENCE optional }|
+	{ ID id-ServingNID								CRITICALITY reject	TYPE NID												PRESENCE optional },
+	...
+} 
+
+Candidate-SpCell-List::= SEQUENCE (SIZE(1..maxnoofCandidateSpCells)) OF ProtocolIE-SingleContainer { { Candidate-SpCell-ItemIEs} }
+SCell-ToBeSetup-List::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-ToBeSetup-ItemIEs} }
+SRBs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-ToBeSetup-ItemIEs} }
+DRBs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ToBeSetup-ItemIEs} }
+BHChannels-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-ToBeSetup-ItemIEs} }
+SLDRBs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ToBeSetup-ItemIEs} }
+
+Candidate-SpCell-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-Candidate-SpCell-Item					CRITICALITY ignore	TYPE Candidate-SpCell-Item						PRESENCE mandatory	},
+	...
+}
+
+
+SCell-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SCell-ToBeSetup-Item						CRITICALITY ignore	TYPE SCell-ToBeSetup-Item					PRESENCE mandatory	},
+	...
+}
+
+SRBs-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-ToBeSetup-Item		CRITICALITY reject		TYPE SRBs-ToBeSetup-Item		PRESENCE mandatory},
+	...
+}
+
+DRBs-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-ToBeSetup-Item					CRITICALITY reject	TYPE DRBs-ToBeSetup-Item					PRESENCE mandatory},
+	...
+}
+
+BHChannels-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-ToBeSetup-Item					CRITICALITY reject	TYPE BHChannels-ToBeSetup-Item					PRESENCE mandatory},
+	...
+}
+
+SLDRBs-ToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-ToBeSetup-Item					CRITICALITY reject	TYPE SLDRBs-ToBeSetup-Item					PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- UE CONTEXT SETUP RESPONSE
+--
+-- **************************************************************
+
+UEContextSetupResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextSetupResponseIEs} },
+	...
+}
+
+
+UEContextSetupResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-DUtoCURRCInformation					CRITICALITY reject	TYPE DUtoCURRCInformation							PRESENCE mandatory }|
+	{ ID id-C-RNTI									CRITICALITY ignore	TYPE C-RNTI											PRESENCE optional	}|
+	{ ID id-ResourceCoordinationTransferContainer	CRITICALITY ignore	TYPE ResourceCoordinationTransferContainer	PRESENCE optional	}|
+	{ ID id-FullConfiguration						CRITICALITY reject	TYPE FullConfiguration								PRESENCE optional	}|
+	{ ID id-DRBs-Setup-List							CRITICALITY ignore	TYPE DRBs-Setup-List								PRESENCE optional	}|
+	{ ID id-SRBs-FailedToBeSetup-List				CRITICALITY ignore	TYPE SRBs-FailedToBeSetup-List					PRESENCE optional	}|
+	{ ID id-DRBs-FailedToBeSetup-List				CRITICALITY ignore	TYPE DRBs-FailedToBeSetup-List					PRESENCE optional	}|
+	{ ID id-SCell-FailedtoSetup-List				CRITICALITY ignore	TYPE SCell-FailedtoSetup-List					PRESENCE optional	}|
+	{ ID id-InactivityMonitoringResponse			CRITICALITY reject	TYPE InactivityMonitoringResponse				PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics					CRITICALITY ignore	TYPE CriticalityDiagnostics						PRESENCE optional	}|
+	{ ID id-SRBs-Setup-List							CRITICALITY ignore	TYPE SRBs-Setup-List								PRESENCE optional	}|
+	{ ID id-BHChannels-Setup-List					CRITICALITY ignore	TYPE BHChannels-Setup-List						PRESENCE optional	}|
+	{ ID id-BHChannels-FailedToBeSetup-List			CRITICALITY ignore	TYPE BHChannels-FailedToBeSetup-List			PRESENCE optional	}|
+	{ ID id-SLDRBs-Setup-List						CRITICALITY ignore	TYPE SLDRBs-Setup-List								PRESENCE optional	}|
+	{ ID id-SLDRBs-FailedToBeSetup-List				CRITICALITY ignore	TYPE SLDRBs-FailedToBeSetup-List				PRESENCE optional	}|
+	{ ID id-requestedTargetCellGlobalID				CRITICALITY reject	TYPE NRCGI											PRESENCE optional},
+	...
+}
+
+DRBs-Setup-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-Setup-ItemIEs} }
+
+
+SRBs-FailedToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-FailedToBeSetup-ItemIEs} }
+DRBs-FailedToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-FailedToBeSetup-ItemIEs} }
+SCell-FailedtoSetup-List ::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-FailedtoSetup-ItemIEs} }
+SRBs-Setup-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-Setup-ItemIEs} }
+BHChannels-Setup-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-Setup-ItemIEs} }
+BHChannels-FailedToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-FailedToBeSetup-ItemIEs} }
+
+DRBs-Setup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-Setup-Item						CRITICALITY ignore	TYPE DRBs-Setup-Item						PRESENCE mandatory},
+	...
+}
+
+SRBs-Setup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-Setup-Item						CRITICALITY ignore	TYPE SRBs-Setup-Item						PRESENCE mandatory},
+	...
+}
+
+SRBs-FailedToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-FailedToBeSetup-Item		CRITICALITY ignore		TYPE SRBs-FailedToBeSetup-Item		PRESENCE mandatory},
+	...
+}
+
+
+DRBs-FailedToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-FailedToBeSetup-Item		CRITICALITY ignore	TYPE DRBs-FailedToBeSetup-Item			PRESENCE mandatory},
+	...
+}
+
+SCell-FailedtoSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SCell-FailedtoSetup-Item			CRITICALITY ignore	TYPE SCell-FailedtoSetup-Item			PRESENCE mandatory},
+	...
+}
+
+BHChannels-Setup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-Setup-Item						CRITICALITY ignore	TYPE BHChannels-Setup-Item						PRESENCE mandatory},
+	...
+}
+
+BHChannels-FailedToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-FailedToBeSetup-Item						CRITICALITY ignore	TYPE BHChannels-FailedToBeSetup-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-Setup-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-Setup-ItemIEs} }
+
+SLDRBs-FailedToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-FailedToBeSetup-ItemIEs} }
+
+SLDRBs-Setup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-Setup-Item						CRITICALITY ignore	TYPE SLDRBs-Setup-Item						PRESENCE mandatory},
+	...
+}
+
+SLDRBs-FailedToBeSetup-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-FailedToBeSetup-Item		CRITICALITY ignore	TYPE SLDRBs-FailedToBeSetup-Item			PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- UE CONTEXT SETUP FAILURE
+--
+-- **************************************************************
+
+UEContextSetupFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextSetupFailureIEs} },
+	...
+}
+
+UEContextSetupFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID			PRESENCE optional	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	}|
+	{ ID id-Potential-SpCell-List		CRITICALITY ignore	TYPE Potential-SpCell-List		PRESENCE optional	}|
+	{ ID id-requestedTargetCellGlobalID	CRITICALITY reject	TYPE NRCGI						PRESENCE optional},
+	...
+}
+
+Potential-SpCell-List::= SEQUENCE (SIZE(0..maxnoofPotentialSpCells)) OF ProtocolIE-SingleContainer { { Potential-SpCell-ItemIEs} }
+
+Potential-SpCell-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-Potential-SpCell-Item				CRITICALITY ignore	TYPE Potential-SpCell-Item					PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- UE Context Release Request ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- UE Context Release Request
+--
+-- **************************************************************
+
+UEContextReleaseRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ UEContextReleaseRequestIEs}},
+	...
+}
+
+UEContextReleaseRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-Cause							CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	}|
+	{ ID id-targetCellsToCancel				CRITICALITY reject	TYPE TargetCellList					PRESENCE optional		},
+	...
+}
+
+
+-- **************************************************************
+--
+-- UE Context Release (gNB-CU initiated) ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- UE CONTEXT RELEASE COMMAND 
+--
+-- **************************************************************
+
+UEContextReleaseCommand ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextReleaseCommandIEs} },
+	...
+}
+
+UEContextReleaseCommandIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-Cause							CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	}|
+	{ ID id-RRCContainer					CRITICALITY ignore	TYPE RRCContainer					PRESENCE optional	}|
+	{ ID id-SRBID							CRITICALITY ignore	TYPE SRBID							PRESENCE conditional	}|
+	{ ID id-oldgNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID				PRESENCE optional	}|
+	{ ID id-ExecuteDuplication				CRITICALITY ignore	TYPE ExecuteDuplication				PRESENCE optional}|
+	{ ID id-RRCDeliveryStatusRequest		CRITICALITY ignore	TYPE RRCDeliveryStatusRequest		PRESENCE optional }|
+	{ ID id-targetCellsToCancel				CRITICALITY reject	TYPE TargetCellList					PRESENCE optional},
+	...
+} 
+
+-- **************************************************************
+--
+-- UE CONTEXT RELEASE COMPLETE
+--
+-- **************************************************************
+
+UEContextReleaseComplete ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextReleaseCompleteIEs} },
+	...
+}
+
+
+UEContextReleaseCompleteIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+-- UE Context Modification ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- UE CONTEXT MODIFICATION REQUEST
+--
+-- **************************************************************
+
+UEContextModificationRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextModificationRequestIEs} },
+	...
+}
+
+UEContextModificationRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID									PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID									PRESENCE mandatory	}|
+	{ ID id-SpCell-ID								CRITICALITY ignore	TYPE NRCGI												PRESENCE optional	}|
+	{ ID id-ServCellIndex							CRITICALITY reject	TYPE ServCellIndex										PRESENCE optional	}|
+	{ ID id-SpCellULConfigured						CRITICALITY ignore	TYPE CellULConfigured									PRESENCE optional	}|
+	{ ID id-DRXCycle								CRITICALITY ignore	TYPE DRXCycle											PRESENCE optional	}|
+	{ ID id-CUtoDURRCInformation					CRITICALITY reject	TYPE CUtoDURRCInformation								PRESENCE optional	}|
+	{ ID id-TransmissionActionIndicator				CRITICALITY ignore	TYPE TransmissionActionIndicator					PRESENCE optional	}|
+	{ ID id-ResourceCoordinationTransferContainer	CRITICALITY ignore	TYPE ResourceCoordinationTransferContainer		PRESENCE optional	}|
+	{ ID id-RRCReconfigurationCompleteIndicator		CRITICALITY ignore	TYPE RRCReconfigurationCompleteIndicator			PRESENCE optional	}|
+	{ ID id-RRCContainer							CRITICALITY reject	TYPE RRCContainer										PRESENCE optional	}|
+	{ ID id-SCell-ToBeSetupMod-List					CRITICALITY ignore	TYPE SCell-ToBeSetupMod-List							PRESENCE optional	}|
+	{ ID id-SCell-ToBeRemoved-List					CRITICALITY ignore	TYPE SCell-ToBeRemoved-List 							PRESENCE optional }|
+	{ ID id-SRBs-ToBeSetupMod-List					CRITICALITY reject	TYPE SRBs-ToBeSetupMod-List							PRESENCE optional	}|
+	{ ID id-DRBs-ToBeSetupMod-List					CRITICALITY reject	TYPE DRBs-ToBeSetupMod-List							PRESENCE optional	}|
+	{ ID id-DRBs-ToBeModified-List					CRITICALITY reject	TYPE DRBs-ToBeModified-List							PRESENCE optional	}|
+	{ ID id-SRBs-ToBeReleased-List					CRITICALITY reject	TYPE SRBs-ToBeReleased-List							PRESENCE optional	}|
+	{ ID id-DRBs-ToBeReleased-List					CRITICALITY reject	TYPE DRBs-ToBeReleased-List							PRESENCE optional	}|
+	{ ID id-InactivityMonitoringRequest				CRITICALITY reject	TYPE InactivityMonitoringRequest					PRESENCE optional	}|
+	{ ID id-RAT-FrequencyPriorityInformation		CRITICALITY reject	TYPE RAT-FrequencyPriorityInformation				PRESENCE optional	}|
+	{ ID id-DRXConfigurationIndicator				CRITICALITY ignore	TYPE DRXConfigurationIndicator						PRESENCE optional	}|
+	{ ID id-RLCFailureIndication					CRITICALITY ignore	TYPE RLCFailureIndication								PRESENCE optional	}|
+	{ ID id-UplinkTxDirectCurrentListInformation	CRITICALITY ignore	TYPE UplinkTxDirectCurrentListInformation		PRESENCE optional	}|
+	{ ID id-GNB-DUConfigurationQuery				CRITICALITY reject	TYPE GNB-DUConfigurationQuery						PRESENCE optional	}|
+	{ ID id-GNB-DU-UE-AMBR-UL						CRITICALITY ignore	TYPE BitRate											PRESENCE optional	}|
+	{ ID id-ExecuteDuplication						CRITICALITY ignore	TYPE ExecuteDuplication									PRESENCE optional}|
+	{ ID id-RRCDeliveryStatusRequest				CRITICALITY ignore	TYPE RRCDeliveryStatusRequest						PRESENCE optional }|
+	{ ID id-ResourceCoordinationTransferInformation	CRITICALITY ignore	TYPE ResourceCoordinationTransferInformation	PRESENCE optional	}|
+	{ ID id-ServingCellMO							CRITICALITY ignore	TYPE ServingCellMO										PRESENCE optional	}|
+	{ ID id-NeedforGap								CRITICALITY ignore	TYPE NeedforGap											PRESENCE optional	}|
+	{ ID id-FullConfiguration						CRITICALITY reject	TYPE FullConfiguration									PRESENCE optional	}|
+	{ ID id-AdditionalRRMPriorityIndex				CRITICALITY ignore	TYPE AdditionalRRMPriorityIndex						PRESENCE optional }|
+	{ ID id-LowerLayerPresenceStatusChange			CRITICALITY ignore	TYPE LowerLayerPresenceStatusChange				PRESENCE optional	}|
+	{ ID id-BHChannels-ToBeSetupMod-List			CRITICALITY reject	TYPE BHChannels-ToBeSetupMod-List					PRESENCE optional	}|
+	{ ID id-BHChannels-ToBeModified-List			CRITICALITY reject	TYPE BHChannels-ToBeModified-List					PRESENCE optional	}|
+	{ ID id-BHChannels-ToBeReleased-List			CRITICALITY reject	TYPE BHChannels-ToBeReleased-List					PRESENCE optional	}|
+	{ ID id-NRV2XServicesAuthorized					CRITICALITY ignore	TYPE NRV2XServicesAuthorized							PRESENCE optional }|
+	{ ID id-LTEV2XServicesAuthorized				CRITICALITY ignore	TYPE LTEV2XServicesAuthorized						PRESENCE optional }|
+	{ ID id-NRUESidelinkAggregateMaximumBitrate		CRITICALITY ignore	TYPE NRUESidelinkAggregateMaximumBitrate			PRESENCE optional }|
+	{ ID id-LTEUESidelinkAggregateMaximumBitrate	CRITICALITY ignore	TYPE LTEUESidelinkAggregateMaximumBitrate		PRESENCE optional }|
+	{ ID id-PC5LinkAMBR								CRITICALITY ignore	TYPE BitRate											PRESENCE optional}|
+	{ ID id-SLDRBs-ToBeSetupMod-List				CRITICALITY reject	TYPE SLDRBs-ToBeSetupMod-List						PRESENCE optional	}|
+	{ ID id-SLDRBs-ToBeModified-List				CRITICALITY reject	TYPE SLDRBs-ToBeModified-List						PRESENCE optional	}|
+	{ ID id-SLDRBs-ToBeReleased-List				CRITICALITY reject	TYPE SLDRBs-ToBeReleased-List						PRESENCE optional	}|
+	{ ID id-ConditionalIntraDUMobilityInformation	CRITICALITY reject	TYPE ConditionalIntraDUMobilityInformation		PRESENCE optional},
+	...
+} 
+
+SCell-ToBeSetupMod-List::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-ToBeSetupMod-ItemIEs} }
+SCell-ToBeRemoved-List::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-ToBeRemoved-ItemIEs} }
+SRBs-ToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-ToBeSetupMod-ItemIEs} }
+DRBs-ToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ToBeSetupMod-ItemIEs} }
+BHChannels-ToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-ToBeSetupMod-ItemIEs} }
+
+DRBs-ToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ToBeModified-ItemIEs} }
+BHChannels-ToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-ToBeModified-ItemIEs} }
+SRBs-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-ToBeReleased-ItemIEs} }
+DRBs-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ToBeReleased-ItemIEs} }
+BHChannels-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-ToBeReleased-ItemIEs} }
+
+SCell-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SCell-ToBeSetupMod-Item			CRITICALITY ignore	TYPE SCell-ToBeSetupMod-Item			PRESENCE mandatory	},
+	...
+}
+
+SCell-ToBeRemoved-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SCell-ToBeRemoved-Item			CRITICALITY ignore	TYPE SCell-ToBeRemoved-Item			PRESENCE mandatory	},
+	...
+}
+
+
+SRBs-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-ToBeSetupMod-Item		CRITICALITY reject	TYPE SRBs-ToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+
+DRBs-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-ToBeSetupMod-Item		CRITICALITY reject	TYPE DRBs-ToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+DRBs-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-ToBeModified-Item		CRITICALITY reject	TYPE DRBs-ToBeModified-Item			PRESENCE mandatory},
+	...
+}
+
+
+SRBs-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-ToBeReleased-Item	CRITICALITY reject	TYPE SRBs-ToBeReleased-Item		PRESENCE mandatory},
+	...
+}
+
+DRBs-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-ToBeReleased-Item		CRITICALITY reject	TYPE DRBs-ToBeReleased-Item		PRESENCE mandatory},
+	...
+}
+
+BHChannels-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-ToBeSetupMod-Item		CRITICALITY reject	TYPE BHChannels-ToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+BHChannels-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-ToBeModified-Item		CRITICALITY reject	TYPE BHChannels-ToBeModified-Item		PRESENCE mandatory},
+	...
+}
+
+BHChannels-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-ToBeReleased-Item		CRITICALITY reject	TYPE BHChannels-ToBeReleased-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-ToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ToBeSetupMod-ItemIEs} }
+SLDRBs-ToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ToBeModified-ItemIEs} }
+SLDRBs-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ToBeReleased-ItemIEs} }
+
+SLDRBs-ToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-ToBeSetupMod-Item		CRITICALITY reject	TYPE SLDRBs-ToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-ToBeModified-Item		CRITICALITY reject	TYPE SLDRBs-ToBeModified-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-ToBeReleased-Item		CRITICALITY reject	TYPE SLDRBs-ToBeReleased-Item		PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- UE CONTEXT MODIFICATION RESPONSE
+--
+-- **************************************************************
+
+UEContextModificationResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextModificationResponseIEs} },
+	...
+}
+
+
+UEContextModificationResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-ResourceCoordinationTransferContainer	CRITICALITY ignore	TYPE ResourceCoordinationTransferContainer	PRESENCE optional	}|
+	{ ID id-DUtoCURRCInformation					CRITICALITY reject	TYPE DUtoCURRCInformation							PRESENCE optional}|
+	{ ID id-DRBs-SetupMod-List						CRITICALITY ignore	TYPE DRBs-SetupMod-List								PRESENCE optional}|
+	{ ID id-DRBs-Modified-List						CRITICALITY ignore	TYPE DRBs-Modified-List								PRESENCE optional}|
+	{ ID id-SRBs-FailedToBeSetupMod-List			CRITICALITY ignore	TYPE SRBs-FailedToBeSetupMod-List				PRESENCE optional	}|
+	{ ID id-DRBs-FailedToBeSetupMod-List			CRITICALITY ignore	TYPE DRBs-FailedToBeSetupMod-List				PRESENCE optional	}|
+	{ ID id-SCell-FailedtoSetupMod-List				CRITICALITY ignore	TYPE SCell-FailedtoSetupMod-List				PRESENCE optional	}|
+	{ ID id-DRBs-FailedToBeModified-List			CRITICALITY ignore	TYPE DRBs-FailedToBeModified-List				PRESENCE optional	}|
+	{ ID id-InactivityMonitoringResponse			CRITICALITY reject	TYPE InactivityMonitoringResponse				PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics					CRITICALITY ignore	TYPE CriticalityDiagnostics						PRESENCE optional	}|
+	{ ID id-C-RNTI									CRITICALITY ignore	TYPE C-RNTI											PRESENCE optional	}|
+	{ ID id-Associated-SCell-List					CRITICALITY ignore  TYPE Associated-SCell-List						PRESENCE optional	}|
+	{ ID id-SRBs-SetupMod-List						CRITICALITY ignore	TYPE SRBs-SetupMod-List								PRESENCE optional	}|
+	{ ID id-SRBs-Modified-List						CRITICALITY ignore	TYPE SRBs-Modified-List								PRESENCE optional	}|
+	{ ID id-FullConfiguration						CRITICALITY reject	TYPE FullConfiguration								PRESENCE optional	}|
+	{ ID id-BHChannels-SetupMod-List				CRITICALITY ignore	TYPE BHChannels-SetupMod-List					PRESENCE optional}|
+	{ ID id-BHChannels-Modified-List				CRITICALITY ignore	TYPE BHChannels-Modified-List					PRESENCE optional}|
+	{ ID id-BHChannels-FailedToBeSetupMod-List		CRITICALITY ignore	TYPE BHChannels-FailedToBeSetupMod-List		PRESENCE optional	}|
+	{ ID id-BHChannels-FailedToBeModified-List		CRITICALITY ignore	TYPE BHChannels-FailedToBeModified-List		PRESENCE optional	}|
+	{ ID id-SLDRBs-SetupMod-List					CRITICALITY ignore	TYPE SLDRBs-SetupMod-List							PRESENCE optional	}|
+	{ ID id-SLDRBs-Modified-List					CRITICALITY ignore	TYPE SLDRBs-Modified-List							PRESENCE optional	}|
+	{ ID id-SLDRBs-FailedToBeSetupMod-List			CRITICALITY ignore	TYPE SLDRBs-FailedToBeSetupMod-List			PRESENCE optional	}|
+	{ ID id-SLDRBs-FailedToBeModified-List			CRITICALITY ignore	TYPE SLDRBs-FailedToBeModified-List			PRESENCE optional	}|
+	{ ID id-requestedTargetCellGlobalID				CRITICALITY reject	TYPE NRCGI											PRESENCE optional},
+	...
+}
+
+
+DRBs-SetupMod-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-SetupMod-ItemIEs} }
+DRBs-Modified-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-Modified-ItemIEs } } 
+SRBs-SetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-SetupMod-ItemIEs} }
+SRBs-Modified-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-Modified-ItemIEs } }
+DRBs-FailedToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-FailedToBeModified-ItemIEs} }
+SRBs-FailedToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-FailedToBeSetupMod-ItemIEs} }
+DRBs-FailedToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-FailedToBeSetupMod-ItemIEs} }
+SCell-FailedtoSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofSCells)) OF ProtocolIE-SingleContainer { { SCell-FailedtoSetupMod-ItemIEs} }
+BHChannels-SetupMod-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-SetupMod-ItemIEs} }
+BHChannels-Modified-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-Modified-ItemIEs } } 
+BHChannels-FailedToBeModified-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-FailedToBeModified-ItemIEs} }
+BHChannels-FailedToBeSetupMod-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-FailedToBeSetupMod-ItemIEs} }
+
+Associated-SCell-List ::= SEQUENCE (SIZE(1.. maxnoofSCells)) OF ProtocolIE-SingleContainer { { Associated-SCell-ItemIEs} }
+
+DRBs-SetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-SetupMod-Item		CRITICALITY ignore		TYPE DRBs-SetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+
+DRBs-Modified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-Modified-Item			CRITICALITY ignore	TYPE DRBs-Modified-Item		PRESENCE mandatory},
+	...
+}
+
+SRBs-SetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-SetupMod-Item		CRITICALITY ignore		TYPE SRBs-SetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+
+SRBs-Modified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-Modified-Item			CRITICALITY ignore	TYPE SRBs-Modified-Item		PRESENCE mandatory},
+	...
+}
+
+SRBs-FailedToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-FailedToBeSetupMod-Item		CRITICALITY ignore	TYPE SRBs-FailedToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+
+DRBs-FailedToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-FailedToBeSetupMod-Item		CRITICALITY ignore	TYPE DRBs-FailedToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+
+DRBs-FailedToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-FailedToBeModified-Item		CRITICALITY ignore	TYPE DRBs-FailedToBeModified-Item		PRESENCE mandatory},
+	...
+}
+
+SCell-FailedtoSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SCell-FailedtoSetupMod-Item			CRITICALITY ignore	TYPE SCell-FailedtoSetupMod-Item			PRESENCE mandatory},
+	...
+}
+
+Associated-SCell-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-Associated-SCell-Item			CRITICALITY ignore	TYPE Associated-SCell-Item			PRESENCE mandatory},
+	...
+}
+
+BHChannels-SetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-SetupMod-Item		CRITICALITY ignore		TYPE BHChannels-SetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+
+BHChannels-Modified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-Modified-Item		CRITICALITY ignore	TYPE BHChannels-Modified-Item		PRESENCE mandatory},
+	...
+}
+
+BHChannels-FailedToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-FailedToBeSetupMod-Item		CRITICALITY ignore	TYPE BHChannels-FailedToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+BHChannels-FailedToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-FailedToBeModified-Item		CRITICALITY ignore	TYPE BHChannels-FailedToBeModified-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-SetupMod-List 			::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-SetupMod-ItemIEs} }
+SLDRBs-Modified-List				::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-Modified-ItemIEs } } 
+SLDRBs-FailedToBeModified-List 	::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-FailedToBeModified-ItemIEs} }
+SLDRBs-FailedToBeSetupMod-List 	::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-FailedToBeSetupMod-ItemIEs} }
+
+SLDRBs-SetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-SetupMod-Item		CRITICALITY ignore		TYPE SLDRBs-SetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-Modified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-Modified-Item			CRITICALITY ignore	TYPE SLDRBs-Modified-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-FailedToBeSetupMod-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-FailedToBeSetupMod-Item		CRITICALITY ignore	TYPE SLDRBs-FailedToBeSetupMod-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-FailedToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-FailedToBeModified-Item		CRITICALITY ignore	TYPE SLDRBs-FailedToBeModified-Item		PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- UE CONTEXT MODIFICATION FAILURE
+--
+-- **************************************************************
+
+UEContextModificationFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextModificationFailureIEs} },
+	...
+}
+
+UEContextModificationFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-Cause							CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics			CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional	}|
+	{ ID id-requestedTargetCellGlobalID		CRITICALITY reject	TYPE NRCGI							PRESENCE optional},
+	...
+}
+
+
+-- **************************************************************
+--
+-- UE Context Modification Required (gNB-DU initiated) ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- UE CONTEXT MODIFICATION REQUIRED
+--
+-- **************************************************************
+
+UEContextModificationRequired ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextModificationRequiredIEs} },
+	...
+}
+
+UEContextModificationRequiredIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-ResourceCoordinationTransferContainer		CRITICALITY ignore	TYPE ResourceCoordinationTransferContainer		PRESENCE optional	}|
+	{ ID id-DUtoCURRCInformation						CRITICALITY reject	TYPE DUtoCURRCInformation							PRESENCE optional}|
+	{ ID id-DRBs-Required-ToBeModified-List				CRITICALITY reject	TYPE DRBs-Required-ToBeModified-List				PRESENCE optional}|
+	{ ID id-SRBs-Required-ToBeReleased-List				CRITICALITY reject	TYPE SRBs-Required-ToBeReleased-List				PRESENCE optional}|
+	{ ID id-DRBs-Required-ToBeReleased-List				CRITICALITY reject	TYPE DRBs-Required-ToBeReleased-List				PRESENCE optional}|
+	{ ID id-Cause										CRITICALITY ignore	TYPE Cause												PRESENCE mandatory	}|
+	{ ID id-BHChannels-Required-ToBeReleased-List		CRITICALITY reject	TYPE BHChannels-Required-ToBeReleased-List		PRESENCE optional}|
+	{ ID id-SLDRBs-Required-ToBeModified-List			CRITICALITY reject	TYPE SLDRBs-Required-ToBeModified-List			PRESENCE optional}|
+	{ ID id-SLDRBs-Required-ToBeReleased-List			CRITICALITY reject	TYPE SLDRBs-Required-ToBeReleased-List			PRESENCE optional}|
+	{ ID id-targetCellsToCancel							CRITICALITY reject	TYPE TargetCellList										PRESENCE optional},
+	...
+} 
+
+DRBs-Required-ToBeModified-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-Required-ToBeModified-ItemIEs } }
+DRBs-Required-ToBeReleased-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-Required-ToBeReleased-ItemIEs } }
+
+SRBs-Required-ToBeReleased-List::= SEQUENCE (SIZE(1..maxnoofSRBs)) OF ProtocolIE-SingleContainer { { SRBs-Required-ToBeReleased-ItemIEs } }
+
+BHChannels-Required-ToBeReleased-List ::= SEQUENCE (SIZE(1..maxnoofBHRLCChannels)) OF ProtocolIE-SingleContainer { { BHChannels-Required-ToBeReleased-ItemIEs } }
+
+DRBs-Required-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-Required-ToBeModified-Item			CRITICALITY reject	TYPE DRBs-Required-ToBeModified-Item		PRESENCE mandatory},
+	...
+}
+
+DRBs-Required-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-Required-ToBeReleased-Item			CRITICALITY reject	TYPE DRBs-Required-ToBeReleased-Item		PRESENCE mandatory},
+	...
+}
+
+SRBs-Required-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SRBs-Required-ToBeReleased-Item			CRITICALITY reject	TYPE SRBs-Required-ToBeReleased-Item			PRESENCE mandatory},
+	...
+}
+
+BHChannels-Required-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-BHChannels-Required-ToBeReleased-Item			CRITICALITY reject	TYPE BHChannels-Required-ToBeReleased-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-Required-ToBeModified-List::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-Required-ToBeModified-ItemIEs } }
+SLDRBs-Required-ToBeReleased-List::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-Required-ToBeReleased-ItemIEs } }
+
+SLDRBs-Required-ToBeModified-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-Required-ToBeModified-Item			CRITICALITY reject	TYPE SLDRBs-Required-ToBeModified-Item		PRESENCE mandatory},
+	...
+}
+
+SLDRBs-Required-ToBeReleased-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-Required-ToBeReleased-Item			CRITICALITY reject	TYPE SLDRBs-Required-ToBeReleased-Item		PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- UE CONTEXT MODIFICATION CONFIRM
+--
+-- **************************************************************
+
+UEContextModificationConfirm::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextModificationConfirmIEs} },
+	...
+}
+
+
+UEContextModificationConfirmIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID								PRESENCE mandatory	}|
+	{ ID id-ResourceCoordinationTransferContainer		CRITICALITY ignore	TYPE ResourceCoordinationTransferContainer		PRESENCE optional	}|
+	{ ID id-DRBs-ModifiedConf-List						CRITICALITY ignore	TYPE DRBs-ModifiedConf-List							PRESENCE optional}|
+	{ ID id-RRCContainer								CRITICALITY ignore	TYPE RRCContainer										PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics						CRITICALITY ignore	TYPE CriticalityDiagnostics							PRESENCE optional	}|
+	{ ID id-ExecuteDuplication							CRITICALITY ignore	TYPE ExecuteDuplication								PRESENCE optional}|
+	{ ID id-ResourceCoordinationTransferInformation		CRITICALITY ignore	TYPE ResourceCoordinationTransferInformation	PRESENCE optional	}|
+	{ ID id-SLDRBs-ModifiedConf-List					CRITICALITY ignore	TYPE SLDRBs-ModifiedConf-List						PRESENCE optional},
+	...
+}
+
+DRBs-ModifiedConf-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRBs-ModifiedConf-ItemIEs } }
+
+DRBs-ModifiedConf-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRBs-ModifiedConf-Item		CRITICALITY ignore	TYPE DRBs-ModifiedConf-Item			PRESENCE mandatory},
+	...
+}
+
+SLDRBs-ModifiedConf-List::= SEQUENCE (SIZE(1..maxnoofSLDRBs)) OF ProtocolIE-SingleContainer { { SLDRBs-ModifiedConf-ItemIEs } }
+
+SLDRBs-ModifiedConf-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-SLDRBs-ModifiedConf-Item		CRITICALITY ignore	TYPE SLDRBs-ModifiedConf-Item			PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- UE CONTEXT MODIFICATION REFUSE
+--
+-- **************************************************************
+
+UEContextModificationRefuse::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { UEContextModificationRefuseIEs} },
+	...
+}
+
+
+UEContextModificationRefuseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-Cause							CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics			CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional	},
+	...
+}
+
+
+-- ************************************************************** 
+-- 
+-- WRITE-REPLACE WARNING ELEMENTARY PROCEDURE 
+-- 
+-- ************************************************************** 
+
+-- ************************************************************** 
+-- 
+-- Write-Replace Warning Request 
+-- 
+-- ************************************************************** 
+
+WriteReplaceWarningRequest ::= SEQUENCE { 
+	protocolIEs ProtocolIE-Container { {WriteReplaceWarningRequestIEs} }, 
+	... 
+} 
+
+WriteReplaceWarningRequestIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID						CRITICALITY reject	TYPE TransactionID								PRESENCE mandatory	}|
+	{ ID id-PWSSystemInformation 				CRITICALITY reject	TYPE PWSSystemInformation 						PRESENCE mandatory }| 
+	{ ID id-RepetitionPeriod 					CRITICALITY reject	TYPE RepetitionPeriod 							PRESENCE mandatory }| 
+	{ ID id-NumberofBroadcastRequest 			CRITICALITY reject	TYPE NumberofBroadcastRequest 				PRESENCE mandatory }| 
+	{ ID id-Cells-To-Be-Broadcast-List			CRITICALITY reject	TYPE Cells-To-Be-Broadcast-List				PRESENCE optional	},
+	... 
+}
+
+Cells-To-Be-Broadcast-List		::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Cells-To-Be-Broadcast-List-ItemIEs } }
+
+Cells-To-Be-Broadcast-List-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Cells-To-Be-Broadcast-Item		CRITICALITY reject	TYPE	Cells-To-Be-Broadcast-Item		PRESENCE mandatory	},
+	...
+}
+
+-- ************************************************************** 
+-- 
+-- Write-Replace Warning Response 
+-- 
+-- ************************************************************** 
+
+WriteReplaceWarningResponse ::= SEQUENCE { 
+	protocolIEs ProtocolIE-Container { {WriteReplaceWarningResponseIEs} }, 
+	... 
+} 
+
+WriteReplaceWarningResponseIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID										PRESENCE mandatory	}|
+	{ ID id-Cells-Broadcast-Completed-List			CRITICALITY reject	TYPE Cells-Broadcast-Completed-List				PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics					CRITICALITY ignore	TYPE CriticalityDiagnostics							PRESENCE optional	}|
+	{ ID id-Dedicated-SIDelivery-NeededUE-List		CRITICALITY ignore	TYPE Dedicated-SIDelivery-NeededUE-List			PRESENCE optional	},
+	...
+}
+
+Cells-Broadcast-Completed-List		::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Cells-Broadcast-Completed-List-ItemIEs } }
+
+Cells-Broadcast-Completed-List-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Cells-Broadcast-Completed-Item		CRITICALITY reject	TYPE	Cells-Broadcast-Completed-Item		PRESENCE mandatory	},
+	...
+}
+
+
+-- ************************************************************** 
+-- 
+-- PWS CANCEL ELEMENTARY PROCEDURE 
+-- 
+-- ************************************************************** 
+
+-- ************************************************************** 
+-- 
+-- PWS Cancel Request 
+-- 
+-- ************************************************************** 
+
+PWSCancelRequest ::= SEQUENCE { 
+	protocolIEs ProtocolIE-Container { {PWSCancelRequestIEs} }, 
+	... 
+} 
+
+PWSCancelRequestIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID							CRITICALITY reject TYPE TransactionID									PRESENCE mandatory	}|
+	{ ID id-NumberofBroadcastRequest 				CRITICALITY reject TYPE NumberofBroadcastRequest						PRESENCE mandatory }| 
+	{ ID id-Broadcast-To-Be-Cancelled-List			CRITICALITY reject TYPE Broadcast-To-Be-Cancelled-List				PRESENCE optional	}|
+	{ ID id-Cancel-all-Warning-Messages-Indicator	CRITICALITY reject TYPE Cancel-all-Warning-Messages-Indicator	PRESENCE optional	}|
+	{ ID id-NotificationInformation					CRITICALITY reject TYPE NotificationInformation						PRESENCE optional},
+	... 
+}
+
+Broadcast-To-Be-Cancelled-List		::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Broadcast-To-Be-Cancelled-List-ItemIEs } }
+
+Broadcast-To-Be-Cancelled-List-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Broadcast-To-Be-Cancelled-Item		CRITICALITY reject	TYPE	Broadcast-To-Be-Cancelled-Item		PRESENCE mandatory	},
+	...
+}
+
+-- ************************************************************** 
+-- 
+-- PWS Cancel Response 
+-- 
+-- ************************************************************** 
+
+PWSCancelResponse ::= SEQUENCE { 
+	protocolIEs ProtocolIE-Container { {PWSCancelResponseIEs} }, 
+	... 
+} 
+
+PWSCancelResponseIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID						PRESENCE mandatory	}|
+	{ ID id-Cells-Broadcast-Cancelled-List	CRITICALITY reject	TYPE Cells-Broadcast-Cancelled-List	PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics			CRITICALITY ignore	TYPE CriticalityDiagnostics				PRESENCE optional	},
+	... 
+}
+
+Cells-Broadcast-Cancelled-List		::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { Cells-Broadcast-Cancelled-List-ItemIEs } }
+
+Cells-Broadcast-Cancelled-List-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-Cells-Broadcast-Cancelled-Item		CRITICALITY reject	TYPE	Cells-Broadcast-Cancelled-Item		PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- UE Inactivity Notification ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- UE Inactivity Notification
+--
+-- **************************************************************
+
+UEInactivityNotification ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ UEInactivityNotificationIEs}},
+	...
+}
+
+UEInactivityNotificationIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID							PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID							PRESENCE mandatory	}|
+	{ ID id-DRB-Activity-List							CRITICALITY reject	TYPE DRB-Activity-List							PRESENCE mandatory	}	,
+	...
+}
+
+DRB-Activity-List::= SEQUENCE (SIZE(1..maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRB-Activity-ItemIEs } }
+
+DRB-Activity-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRB-Activity-Item			CRITICALITY reject	TYPE DRB-Activity-Item		PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- Initial UL RRC Message Transfer ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- INITIAL UL RRC Message Transfer
+--
+-- **************************************************************
+
+InitialULRRCMessageTransfer ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ InitialULRRCMessageTransferIEs}},
+	...
+}
+
+InitialULRRCMessageTransferIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-DU-UE-F1AP-ID					CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID						PRESENCE mandatory	}|
+	{ ID id-NRCGI								CRITICALITY reject	TYPE NRCGI									PRESENCE mandatory	}|
+	{ ID id-C-RNTI								CRITICALITY reject	TYPE C-RNTI									PRESENCE mandatory	}|
+	{ ID id-RRCContainer						CRITICALITY reject	TYPE RRCContainer							PRESENCE mandatory	}|
+	{ ID id-DUtoCURRCContainer					CRITICALITY reject	TYPE DUtoCURRCContainer						PRESENCE optional	}|
+	{ ID id-SULAccessIndication					CRITICALITY ignore	TYPE SULAccessIndication					PRESENCE optional	}|
+	{ ID id-TransactionID						CRITICALITY ignore	TYPE TransactionID							PRESENCE mandatory	}|
+	{ ID id-RANUEID								CRITICALITY ignore	TYPE RANUEID								PRESENCE optional	}|
+	{ ID id-RRCContainer-RRCSetupComplete		CRITICALITY ignore	TYPE RRCContainer-RRCSetupComplete 		PRESENCE optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- DL RRC Message Transfer ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- DL RRC Message Transfer
+--
+-- **************************************************************
+
+DLRRCMessageTransfer ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ DLRRCMessageTransferIEs}},
+	...
+}
+
+DLRRCMessageTransferIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID							PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID							CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID							PRESENCE mandatory	}|
+	{ ID id-oldgNB-DU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID							PRESENCE optional	}|
+	{ ID id-SRBID										CRITICALITY reject	TYPE SRBID											PRESENCE mandatory	}|
+	{ ID id-ExecuteDuplication							CRITICALITY ignore	TYPE ExecuteDuplication							PRESENCE optional}|
+	{ ID id-RRCContainer								CRITICALITY reject	TYPE RRCContainer									PRESENCE mandatory	}|
+	{ ID id-RAT-FrequencyPriorityInformation			CRITICALITY reject	TYPE RAT-FrequencyPriorityInformation		PRESENCE optional	}|
+	{ ID id-RRCDeliveryStatusRequest					CRITICALITY ignore	TYPE RRCDeliveryStatusRequest					PRESENCE optional }|
+	{ ID id-UEContextNotRetrievable						CRITICALITY reject	TYPE UEContextNotRetrievable					PRESENCE optional }|
+	{ ID id-RedirectedRRCmessage						CRITICALITY reject	TYPE OCTET STRING									PRESENCE optional }|
+	{ ID id-PLMNAssistanceInfoForNetShar				CRITICALITY ignore	TYPE PLMN-Identity									PRESENCE optional }|
+	{ ID id-new-gNB-CU-UE-F1AP-ID						CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID							PRESENCE optional }|
+	{ ID id-AdditionalRRMPriorityIndex					CRITICALITY ignore	TYPE AdditionalRRMPriorityIndex				PRESENCE optional },
+	...
+}
+-- **************************************************************
+--
+-- UL RRC Message Transfer ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- UL RRC Message Transfer
+--
+-- **************************************************************
+
+ULRRCMessageTransfer ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ ULRRCMessageTransferIEs}},
+	...
+}
+
+ULRRCMessageTransferIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-SRBID							CRITICALITY reject	TYPE SRBID							PRESENCE mandatory	}|
+	{ ID id-RRCContainer					CRITICALITY reject	TYPE RRCContainer					PRESENCE mandatory	}|
+	{ ID id-SelectedPLMNID					CRITICALITY reject	TYPE PLMN-Identity					PRESENCE optional		}|
+	{ ID id-new-gNB-DU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE optional		},
+	...
+}
+
+-- **************************************************************
+--
+-- PRIVATE MESSAGE
+--
+-- **************************************************************
+
+PrivateMessage ::= SEQUENCE {
+	privateIEs		PrivateIE-Container	{{PrivateMessage-IEs}},
+	...
+}
+
+PrivateMessage-IEs F1AP-PRIVATE-IES ::= {
+	...
+}
+
+
+-- **************************************************************
+--
+-- System Information ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- System information Delivery Command
+--
+-- **************************************************************
+
+SystemInformationDeliveryCommand ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ SystemInformationDeliveryCommandIEs}},
+	...
+}
+
+SystemInformationDeliveryCommandIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID			CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-NRCGI					CRITICALITY reject	TYPE NRCGI							PRESENCE mandatory	}|
+	{ ID id-SItype-List				CRITICALITY reject	TYPE SItype-List					PRESENCE mandatory	}|
+	{ ID id-ConfirmedUEID 			CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- Paging PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Paging
+--
+-- **************************************************************
+
+Paging ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ PagingIEs}},
+	...
+}
+
+PagingIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-UEIdentityIndexValue	CRITICALITY reject	TYPE UEIdentityIndexValue		PRESENCE mandatory	}|
+	{ ID id-PagingIdentity			CRITICALITY reject	TYPE PagingIdentity				PRESENCE mandatory	}|
+	{ ID id-PagingDRX				CRITICALITY ignore	TYPE PagingDRX					PRESENCE optional	}|
+	{ ID id-PagingPriority			CRITICALITY ignore	TYPE PagingPriority				PRESENCE optional	}|
+	{ ID id-PagingCell-List			CRITICALITY ignore	TYPE PagingCell-list			PRESENCE mandatory	}|
+	{ ID id-PagingOrigin			CRITICALITY ignore	TYPE PagingOrigin				PRESENCE optional	},
+	...
+}
+
+PagingCell-list::= SEQUENCE (SIZE(1.. maxnoofPagingCells)) OF ProtocolIE-SingleContainer { { PagingCell-ItemIEs } }
+
+PagingCell-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-PagingCell-Item		CRITICALITY ignore	TYPE PagingCell-Item			PRESENCE mandatory}	,
+	...
+}
+
+
+
+-- **************************************************************
+--
+-- Notify
+--
+-- **************************************************************
+
+Notify ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ NotifyIEs}},
+	...
+}
+
+NotifyIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID					CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID						PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID					CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID						PRESENCE mandatory	}|
+	{ ID id-DRB-Notify-List						CRITICALITY reject	TYPE DRB-Notify-List						PRESENCE mandatory	},
+	...
+}
+
+DRB-Notify-List::= SEQUENCE (SIZE(1.. maxnoofDRBs)) OF ProtocolIE-SingleContainer { { DRB-Notify-ItemIEs } }
+
+DRB-Notify-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DRB-Notify-Item			CRITICALITY reject	TYPE DRB-Notify-Item		PRESENCE mandatory},
+	...
+}
+
+
+-- **************************************************************
+--
+-- NETWORK ACCESS RATE REDUCTION ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Network Access Rate Reduction
+--
+-- **************************************************************
+
+NetworkAccessRateReduction ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ NetworkAccessRateReductionIEs }},
+	...
+}
+
+NetworkAccessRateReductionIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID 					CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-UAC-Assistance-Info				CRITICALITY reject	TYPE UAC-Assistance-Info			PRESENCE mandatory	},
+	...
+}
+
+-- ************************************************************** 
+-- 
+-- PWS RESTART INDICATION ELEMENTARY PROCEDURE 
+-- 
+-- ************************************************************** 
+
+-- ************************************************************** 
+-- 
+-- PWS Restart Indication 
+-- 
+-- ************************************************************** 
+
+PWSRestartIndication ::= SEQUENCE { 
+	protocolIEs ProtocolIE-Container { { PWSRestartIndicationIEs} }, 
+	... 
+} 
+
+PWSRestartIndicationIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-NR-CGI-List-For-Restart-List	CRITICALITY reject	TYPE NR-CGI-List-For-Restart-List	PRESENCE mandatory	},
+	... 
+}
+
+NR-CGI-List-For-Restart-List		::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { NR-CGI-List-For-Restart-List-ItemIEs } }
+
+NR-CGI-List-For-Restart-List-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-NR-CGI-List-For-Restart-Item		CRITICALITY reject	TYPE	NR-CGI-List-For-Restart-Item		PRESENCE mandatory	},
+	...
+}
+
+-- ************************************************************** 
+-- 
+-- PWS FAILURE INDICATION ELEMENTARY PROCEDURE 
+-- 
+-- ************************************************************** 
+
+-- ************************************************************** 
+-- 
+-- PWS Failure Indication 
+-- 
+-- ************************************************************** 
+
+PWSFailureIndication ::= SEQUENCE { 
+	protocolIEs ProtocolIE-Container { { PWSFailureIndicationIEs} }, 
+	... 
+} 
+
+PWSFailureIndicationIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID			CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-PWS-Failed-NR-CGI-List	CRITICALITY reject	TYPE PWS-Failed-NR-CGI-List		PRESENCE optional	},
+	... 
+}
+
+PWS-Failed-NR-CGI-List		::= SEQUENCE (SIZE(1.. maxCellingNBDU))	OF ProtocolIE-SingleContainer { { PWS-Failed-NR-CGI-List-ItemIEs } }
+
+PWS-Failed-NR-CGI-List-ItemIEs F1AP-PROTOCOL-IES	::= {
+	{ ID id-PWS-Failed-NR-CGI-Item		CRITICALITY reject	TYPE	PWS-Failed-NR-CGI-Item		PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- gNB-DU STATUS INDICATION ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- gNB-DU Status Indication
+--
+-- **************************************************************
+
+GNBDUStatusIndication ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {GNBDUStatusIndicationIEs} },
+	...
+}
+
+GNBDUStatusIndicationIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-GNBDUOverloadInformation		CRITICALITY reject	TYPE GNBDUOverloadInformation		PRESENCE mandatory	},
+	...
+}
+
+
+
+-- **************************************************************
+--
+-- RRC Delivery Report ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- RRC Delivery Report
+--
+-- **************************************************************
+
+RRCDeliveryReport ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ RRCDeliveryReportIEs}},
+	...
+}
+
+RRCDeliveryReportIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID	CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID	PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID	CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID	PRESENCE mandatory	}|
+	{ ID id-RRCDeliveryStatus	CRITICALITY ignore	TYPE RRCDeliveryStatus	PRESENCE mandatory	}|
+	{ ID id-SRBID				CRITICALITY ignore	TYPE SRBID				PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- F1 Removal ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- F1 Removal Request
+--
+-- **************************************************************
+
+F1RemovalRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ F1RemovalRequestIEs }},
+	...
+}
+
+F1RemovalRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID			CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- F1 Removal Response
+--
+-- **************************************************************
+
+F1RemovalResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ F1RemovalResponseIEs }},
+	...
+}
+
+F1RemovalResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional	},
+
+	...
+}
+
+-- **************************************************************
+--
+-- F1 Removal Failure
+--
+-- **************************************************************
+
+F1RemovalFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ F1RemovalFailureIEs }},
+	...
+}
+
+F1RemovalFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional	},
+
+	...
+}
+
+
+-- **************************************************************
+--
+-- TRACE ELEMENTARY PROCEDURES
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- TRACE START
+--
+-- **************************************************************
+
+TraceStart ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ {TraceStartIEs} },
+	...
+}
+
+TraceStartIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-TraceActivation				CRITICALITY ignore	TYPE TraceActivation				PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- DEACTIVATE TRACE
+--
+-- **************************************************************
+
+DeactivateTrace ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ {DeactivateTraceIEs} },
+	...
+}
+
+DeactivateTraceIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-TraceID						CRITICALITY ignore	TYPE TraceID						PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- CELL TRAFFIC TRACE
+--
+-- **************************************************************
+
+CellTrafficTrace ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ {CellTrafficTraceIEs} },
+	...
+}
+
+CellTrafficTraceIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ID id-TraceID							CRITICALITY ignore	TYPE TraceID						PRESENCE mandatory	}|
+	{ID id-TraceCollectionEntityIPAddress	CRITICALITY ignore	TYPE TransportLayerAddress			PRESENCE mandatory	}|
+	{ID id-PrivacyIndicator					CRITICALITY ignore	TYPE PrivacyIndicator				PRESENCE optional	}|
+
+	{ID id-TraceCollectionEntityURI	CRITICALITY ignore	TYPE URI-address		PRESENCE optional	},
+	...
+
+}
+
+-- **************************************************************
+--
+-- DU-CU Radio Information Transfer ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- DU-CU Radio Information Transfer
+--
+-- **************************************************************
+
+DUCURadioInformationTransfer ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ DUCURadioInformationTransferIEs}},
+	...
+}
+
+DUCURadioInformationTransferIEs F1AP-PROTOCOL-IES ::= {
+		{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID						PRESENCE mandatory	}|
+	{ ID id-DUCURadioInformationType		CRITICALITY ignore	TYPE DUCURadioInformationType				PRESENCE mandatory	},
+	...
+}
+
+
+
+-- **************************************************************
+--
+-- CU-DU Radio Information Transfer ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- CU-DU Radio Information Transfer
+--
+-- **************************************************************
+
+CUDURadioInformationTransfer ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ CUDURadioInformationTransferIEs}},
+	...
+}
+
+CUDURadioInformationTransferIEs F1AP-PROTOCOL-IES ::= {
+		{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID						PRESENCE mandatory	}|
+	{ ID id-CUDURadioInformationType	CRITICALITY ignore	TYPE CUDURadioInformationType				PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- IAB PROCEDURES 
+--
+-- **************************************************************
+-- **************************************************************
+--
+-- BAP Mapping Configuration ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- BAP MAPPING CONFIGURATION
+-- **************************************************************
+
+
+BAPMappingConfiguration ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container	{ {BAPMappingConfiguration-IEs} },
+	...
+ }
+
+BAPMappingConfiguration-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID		CRITICALITY reject	TYPE	TransactionID	PRESENCE mandatory}|
+	{ ID id-BH-Routing-Information-Added-List		CRITICALITY ignore	TYPE	BH-Routing-Information-Added-List	PRESENCE optional}|
+	{ ID id-BH-Routing-Information-Removed-List		CRITICALITY ignore	TYPE	BH-Routing-Information-Removed-List	PRESENCE optional}|
+	{ ID id-TrafficMappingInformation				CRITICALITY ignore	TYPE	TrafficMappingInfo						PRESENCE optional},
+	...
+}
+
+BH-Routing-Information-Added-List ::= SEQUENCE (SIZE(1.. maxnoofRoutingEntries))	OF ProtocolIE-SingleContainer { { BH-Routing-Information-Added-List-ItemIEs } }
+BH-Routing-Information-Removed-List ::= SEQUENCE (SIZE(1.. maxnoofRoutingEntries))	OF ProtocolIE-SingleContainer { { BH-Routing-Information-Removed-List-ItemIEs } }
+
+BH-Routing-Information-Added-List-ItemIEs	F1AP-PROTOCOL-IES ::= {
+	{ ID id-BH-Routing-Information-Added-List-Item				CRITICALITY ignore	TYPE BH-Routing-Information-Added-List-Item						PRESENCE optional},
+	...
+}
+
+BH-Routing-Information-Removed-List-ItemIEs	F1AP-PROTOCOL-IES ::= {
+	{ ID id-BH-Routing-Information-Removed-List-Item				CRITICALITY ignore	TYPE BH-Routing-Information-Removed-List-Item						PRESENCE optional},
+	...
+}
+
+
+-- **************************************************************
+--
+-- BAP MAPPING CONFIGURATION ACKNOWLEDGE
+-- **************************************************************
+
+BAPMappingConfigurationAcknowledge ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ {BAPMappingConfigurationAcknowledge-IEs} },
+	... 
+}
+
+BAPMappingConfigurationAcknowledge-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID			CRITICALITY reject	TYPE	TransactionID			PRESENCE mandatory}|
+	{ ID id-CriticalityDiagnostics	CRITICALITY ignore	TYPE	CriticalityDiagnostics	PRESENCE optional},
+	...
+}
+
+
+
+-- **************************************************************
+--
+-- GNB-DU Configuration ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- GNB-DU RESOURCE CONFIGURATION
+-- **************************************************************
+
+
+GNBDUResourceConfiguration ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container		{{ GNBDUResourceConfigurationIEs}},
+	...
+}
+
+
+GNBDUResourceConfigurationIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID								PRESENCE mandatory	}|
+	{ ID id-Activated-Cells-to-be-Updated-List		CRITICALITY reject	TYPE Activated-Cells-to-be-Updated-List	PRESENCE optional}|
+	{ ID id-Child-Nodes-List						CRITICALITY reject	TYPE Child-Nodes-List							PRESENCE optional},
+	...
+} 
+
+
+
+
+-- **************************************************************
+--
+-- GNB-DU RESOURCE CONFIGURATION ACKNOWLEDGE
+-- **************************************************************
+
+
+GNBDUResourceConfigurationAcknowledge ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container		{ { GNBDUResourceConfigurationAcknowledgeIEs} },
+	...
+}
+
+
+GNBDUResourceConfigurationAcknowledgeIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID						CRITICALITY reject	TYPE TransactionID							PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics				CRITICALITY ignore	TYPE CriticalityDiagnostics					PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+-- IAB TNL Address Allocation ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- IAB TNL ADDRESS REQUEST
+-- **************************************************************
+
+
+
+IABTNLAddressRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container		{ {IABTNLAddressRequestIEs} },
+	...
+}
+
+IABTNLAddressRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID						CRITICALITY reject	TYPE TransactionID								PRESENCE mandatory	}|
+	{ ID id-IABv4AddressesRequested				CRITICALITY reject	TYPE IABv4AddressesRequested					PRESENCE optional	}|
+	{ ID id-IABIPv6RequestType					CRITICALITY reject	TYPE IABIPv6RequestType							PRESENCE optional	}|
+	{ ID id-IAB-TNL-Addresses-To-Remove-List	CRITICALITY reject	TYPE IAB-TNL-Addresses-To-Remove-List		PRESENCE optional	},
+	...
+}
+
+
+IAB-TNL-Addresses-To-Remove-List	::= SEQUENCE (SIZE(1..maxnoofTLAsIAB))	OF ProtocolIE-SingleContainer { { IAB-TNL-Addresses-To-Remove-ItemIEs } }
+
+IAB-TNL-Addresses-To-Remove-ItemIEs	F1AP-PROTOCOL-IES::= {
+	{ ID id-IAB-TNL-Addresses-To-Remove-Item			CRITICALITY reject	TYPE IAB-TNL-Addresses-To-Remove-Item					PRESENCE mandatory},
+	...
+}
+
+
+-- **************************************************************
+--
+-- IAB TNL ADDRESS RESPONSE
+-- **************************************************************
+
+
+IABTNLAddressResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container		{ {IABTNLAddressResponseIEs} },
+	...
+}
+
+
+IABTNLAddressResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID								CRITICALITY reject	TYPE TransactionID									PRESENCE mandatory	}|
+	{ ID id-IAB-Allocated-TNL-Address-List				CRITICALITY reject	TYPE IAB-Allocated-TNL-Address-List			PRESENCE mandatory	},
+	...
+}
+
+
+IAB-Allocated-TNL-Address-List ::= SEQUENCE (SIZE(1.. maxnoofTLAsIAB))	OF ProtocolIE-SingleContainer { { IAB-Allocated-TNL-Address-List-ItemIEs } }
+
+
+IAB-Allocated-TNL-Address-List-ItemIEs	F1AP-PROTOCOL-IES::= {
+	{ ID id-IAB-Allocated-TNL-Address-Item			CRITICALITY reject	TYPE IAB-Allocated-TNL-Address-Item					PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- IAB UP Configuration Update ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- IAB UP Configuration Update Request
+--
+-- **************************************************************
+
+IABUPConfigurationUpdateRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container		{ { IABUPConfigurationUpdateRequestIEs} },
+	...
+}
+
+IABUPConfigurationUpdateRequestIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID										PRESENCE mandatory  }|
+	{ ID id-UL-UP-TNL-Information-to-Update-List	CRITICALITY ignore	TYPE UL-UP-TNL-Information-to-Update-List		PRESENCE optional	}|
+	{ ID id-UL-UP-TNL-Address-to-Update-List		CRITICALITY ignore	TYPE UL-UP-TNL-Address-to-Update-List				PRESENCE optional	},
+	...
+}
+
+UL-UP-TNL-Information-to-Update-List ::= SEQUENCE (SIZE(1.. maxnoofULUPTNLInformationforIAB))	OF ProtocolIE-SingleContainer { { UL-UP-TNL-Information-to-Update-List-ItemIEs } }
+
+UL-UP-TNL-Information-to-Update-List-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-UL-UP-TNL-Information-to-Update-List-Item	CRITICALITY ignore	TYPE UL-UP-TNL-Information-to-Update-List-Item PRESENCE optional},
+	...
+}
+
+UL-UP-TNL-Address-to-Update-List ::= SEQUENCE (SIZE(1.. maxnoofUPTNLAddresses))	OF ProtocolIE-SingleContainer { { UL-UP-TNL-Address-to-Update-List-ItemIEs } }
+
+UL-UP-TNL-Address-to-Update-List-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-UL-UP-TNL-Address-to-Update-List-Item	CRITICALITY ignore	TYPE UL-UP-TNL-Address-to-Update-List-Item PRESENCE optional},
+	...
+}
+
+
+-- **************************************************************
+--
+-- IAB UP Configuration Update Response
+--
+-- **************************************************************
+
+IABUPConfigurationUpdateResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container		{ { IABUPConfigurationUpdateResponseIEs} },
+	...
+}
+
+IABUPConfigurationUpdateResponseIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID						CRITICALITY reject	TYPE TransactionID							PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics				CRITICALITY ignore	TYPE CriticalityDiagnostics					PRESENCE optional	}|
+	{ ID id-DL-UP-TNL-Address-to-Update-List	CRITICALITY reject	TYPE DL-UP-TNL-Address-to-Update-List	PRESENCE optional	},
+	...
+}
+
+DL-UP-TNL-Address-to-Update-List ::= SEQUENCE (SIZE(1.. maxnoofUPTNLAddresses))	OF ProtocolIE-SingleContainer { { DL-UP-TNL-Address-to-Update-List-ItemIEs } }
+
+DL-UP-TNL-Address-to-Update-List-ItemIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-DL-UP-TNL-Address-to-Update-List-Item	CRITICALITY ignore	TYPE DL-UP-TNL-Address-to-Update-List-Item	PRESENCE optional},
+	...
+}
+
+-- **************************************************************
+--
+-- IAB UP Configuration Update Failure
+--
+-- **************************************************************
+
+IABUPConfigurationUpdateFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container		{ { IABUPConfigurationUpdateFailureIEs} },
+	...
+}
+
+IABUPConfigurationUpdateFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-TimeToWait					CRITICALITY ignore	TYPE TimeToWait					PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+-- Resource Status Reporting Initiation ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Resource Status Request
+--
+-- **************************************************************
+
+ResourceStatusRequest::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { {ResourceStatusRequestIEs} },
+	...
+}
+
+ResourceStatusRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID			CRITICALITY reject	TYPE TransactionID			PRESENCE mandatory	}|
+	{ ID id-gNBCUMeasurementID		CRITICALITY reject	TYPE GNBCUMeasurementID		PRESENCE mandatory	}|
+	{ ID id-gNBDUMeasurementID		CRITICALITY ignore	TYPE GNBDUMeasurementID		PRESENCE conditional	}|
+	{ ID id-RegistrationRequest		CRITICALITY ignore	TYPE RegistrationRequest	PRESENCE mandatory	}|
+	{ ID id-ReportCharacteristics	CRITICALITY ignore	TYPE ReportCharacteristics	PRESENCE conditional	}|
+	{ ID id-CellToReportList		CRITICALITY ignore	TYPE CellToReportList		PRESENCE optional	}|
+	{ ID id-ReportingPeriodicity	CRITICALITY ignore	TYPE ReportingPeriodicity	PRESENCE  optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- Resource Status Response
+--
+-- **************************************************************
+
+ResourceStatusResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { ResourceStatusResponseIEs} },
+	...
+}
+
+
+ResourceStatusResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID			CRITICALITY reject	TYPE TransactionID			PRESENCE mandatory	}|
+	{ ID id-gNBCUMeasurementID		CRITICALITY reject	TYPE GNBCUMeasurementID		PRESENCE mandatory	}|
+	{ ID id-gNBDUMeasurementID		CRITICALITY ignore	TYPE GNBDUMeasurementID		PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics	CRITICALITY ignore	TYPE CriticalityDiagnostics	PRESENCE optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- Resource Status Failure
+--
+-- **************************************************************
+
+ResourceStatusFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { ResourceStatusFailureIEs} },
+	...
+}
+
+ResourceStatusFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID			CRITICALITY reject	TYPE TransactionID			PRESENCE mandatory	}|
+	{ ID id-gNBCUMeasurementID		CRITICALITY reject	TYPE GNBCUMeasurementID		PRESENCE mandatory	}|
+	{ ID id-gNBDUMeasurementID		CRITICALITY ignore	TYPE GNBDUMeasurementID		PRESENCE mandatory	}|
+	{ ID id-Cause					CRITICALITY ignore	TYPE Cause					PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics	CRITICALITY ignore	TYPE CriticalityDiagnostics	PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+-- Resource Status Reporting ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Resource Status Update 
+--
+-- **************************************************************
+
+ResourceStatusUpdate ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ ResourceStatusUpdateIEs}},
+	...
+}
+
+ResourceStatusUpdateIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID			PRESENCE mandatory	}|
+	{ ID id-gNBCUMeasurementID			CRITICALITY reject	TYPE GNBCUMeasurementID				PRESENCE mandatory	}|
+	{ ID id-gNBDUMeasurementID			CRITICALITY ignore	TYPE GNBDUMeasurementID			PRESENCE mandatory	}|
+	{ ID id-HardwareLoadIndicator			CRITICALITY ignore	TYPE HardwareLoadIndicator			PRESENCE optional	}|
+	{ ID id-TNLCapacityIndicator			CRITICALITY ignore	TYPE TNLCapacityIndicator		PRESENCE optional	}|
+	{ ID id-CellMeasurementResultList		CRITICALITY ignore	TYPE CellMeasurementResultList	PRESENCE optional	},
+	...
+}
+
+-- **************************************************************
+--
+--  Access And Mobility Indication ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Access And Mobility Indication 
+--
+-- **************************************************************
+
+AccessAndMobilityIndication ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { AccessAndMobilityIndicationIEs} },
+	...
+}
+
+AccessAndMobilityIndicationIEs F1AP-PROTOCOL-IES ::= { 
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID						PRESENCE mandatory }|
+	{ ID id-RACHReportInformationList				CRITICALITY ignore	TYPE RACHReportInformationList			PRESENCE optional }|
+	{ ID id-RLFReportInformationList				CRITICALITY ignore	TYPE RLFReportInformationList				PRESENCE optional },
+	...
+}
+
+
+-- **************************************************************
+--
+-- REFERENCE TIME INFORMATION REPORTING CONTROL
+--
+-- **************************************************************
+
+ReferenceTimeInformationReportingControl::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { ReferenceTimeInformationReportingControlIEs} },
+	...
+}
+
+ReferenceTimeInformationReportingControlIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-ReportingRequestType		CRITICALITY reject	TYPE ReportingRequestType		PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- REFERENCE TIME INFORMATION REPORT
+--
+-- **************************************************************
+
+ReferenceTimeInformationReport::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { ReferenceTimeInformationReportIEs} },
+	...
+}
+
+ReferenceTimeInformationReportIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY ignore	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-TimeReferenceInformation	CRITICALITY ignore	TYPE TimeReferenceInformation		PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- Access Success
+--
+-- **************************************************************
+
+AccessSuccess ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ AccessSuccessIEs}},
+	...
+}
+
+AccessSuccessIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID					CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID						PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID					CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID						PRESENCE mandatory	}|
+	{ ID id-NRCGI								CRITICALITY reject	TYPE NRCGI									PRESENCE mandatory	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- POSITIONING ASSISTANCE INFORMATION CONTROL ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Assistance Information Control
+--
+-- **************************************************************
+
+PositioningAssistanceInformationControl ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ PositioningAssistanceInformationControlIEs}},
+	...
+}
+
+PositioningAssistanceInformationControlIEs F1AP-PROTOCOL-IES ::= {
+		{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+		{ ID id-PosAssistance-Information		CRITICALITY reject	TYPE PosAssistance-Information		PRESENCE optional}|
+		{ ID id-PosBroadcast					CRITICALITY reject	TYPE PosBroadcast				PRESENCE optional}|
+		{ ID id-PositioningBroadcastCells		CRITICALITY reject	TYPE PositioningBroadcastCells		PRESENCE optional}|
+		{ ID id-RoutingID						CRITICALITY reject	TYPE RoutingID				PRESENCE optional},
+	...
+}
+
+-- **************************************************************
+--
+-- POSITIONING ASSISTANCE INFORMATION FEEDBACK ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Assistance Information Feedback
+--
+-- **************************************************************
+
+PositioningAssistanceInformationFeedback ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       {{ PositioningAssistanceInformationFeedbackIEs}},
+	...
+}
+
+PositioningAssistanceInformationFeedbackIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID							PRESENCE mandatory	}|
+	{ ID id-PosAssistanceInformationFailureList	CRITICALITY reject	TYPE PosAssistanceInformationFailureList	PRESENCE optional}|
+	{ ID id-PositioningBroadcastCells				CRITICALITY reject	TYPE PositioningBroadcastCells				PRESENCE optional}|
+	{ ID id-RoutingID								CRITICALITY reject	TYPE RoutingID									PRESENCE optional}|
+	{ ID id-CriticalityDiagnostics				CRITICALITY ignore	TYPE CriticalityDiagnostics						PRESENCE optional},
+	...
+}
+
+-- **************************************************************
+--
+-- POSITONING MEASUREMENT EXCHANGE ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Measurement Request
+--
+-- **************************************************************
+
+PositioningMeasurementRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningMeasurementRequestIEs} },
+	...
+}
+
+PositioningMeasurementRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID									PRESENCE mandatory}|
+	{ ID id-LMF-MeasurementID						CRITICALITY reject	TYPE LMF-MeasurementID								PRESENCE mandatory}|
+	{ ID id-RAN-MeasurementID						CRITICALITY reject	TYPE RAN-MeasurementID								PRESENCE mandatory}|
+	{ ID id-TRP-MeasurementRequestList				CRITICALITY reject	TYPE TRP-MeasurementRequestList					PRESENCE mandatory}|
+	{ ID id-PosReportCharacteristics				CRITICALITY reject	TYPE PosReportCharacteristics				PRESENCE mandatory}|
+	{ ID id-PosMeasurementPeriodicity				CRITICALITY reject	TYPE PosMeasurementPeriodicity					PRESENCE conditional }|
+	-- The above IE shall be present if the PosReportCharacteristics IE is set to “periodic” --
+	{ ID id-PosMeasurementQuantities				CRITICALITY reject	TYPE PosMeasurementQuantities					PRESENCE mandatory}|
+	{ ID id-SFNInitialisationTime					CRITICALITY ignore	TYPE SFNInitialisationTime	PRESENCE optional	}|
+	{ ID id-SRSConfiguration						CRITICALITY ignore	TYPE SRSConfiguration								PRESENCE optional}|
+	{ ID id-MeasurementBeamInfoRequest				CRITICALITY ignore	TYPE MeasurementBeamInfoRequest	PRESENCE optional	}|
+	{ ID id-SystemFrameNumber						CRITICALITY ignore	TYPE SystemFrameNumber		PRESENCE optional}|
+	{ ID id-SlotNumber								CRITICALITY ignore	TYPE SlotNumber				PRESENCE optional},
+	...
+} 
+
+
+-- **************************************************************
+--
+-- Positioning Measurement Response
+--
+-- **************************************************************
+
+PositioningMeasurementResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningMeasurementResponseIEs} },
+	...
+}
+
+
+PositioningMeasurementResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID							CRITICALITY reject	TYPE TransactionID									PRESENCE mandatory}|
+	{ ID id-LMF-MeasurementID						CRITICALITY reject	TYPE LMF-MeasurementID								PRESENCE mandatory}|
+	{ ID id-RAN-MeasurementID						CRITICALITY reject	TYPE RAN-MeasurementID								PRESENCE mandatory}|
+	{ ID id-PosMeasurementResultList				CRITICALITY reject	TYPE PosMeasurementResultList					PRESENCE optional	}|
+	{ ID id-CriticalityDiagnostics					CRITICALITY ignore	TYPE CriticalityDiagnostics						PRESENCE optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- Positioning Measurement Failure
+--
+-- **************************************************************
+
+PositioningMeasurementFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningMeasurementFailureIEs} },
+	...
+}
+
+PositioningMeasurementFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-LMF-MeasurementID				CRITICALITY reject	TYPE LMF-MeasurementID			PRESENCE mandatory	}|
+	{ ID id-RAN-MeasurementID				CRITICALITY reject	TYPE RAN-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-Cause							CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics			CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- POSITIONING MEASUREMENT REPORT ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Measurement Report
+--
+-- **************************************************************
+
+PositioningMeasurementReport ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { PositioningMeasurementReportIEs} },
+	...
+}
+
+PositioningMeasurementReportIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-LMF-MeasurementID			CRITICALITY reject	TYPE LMF-MeasurementID			PRESENCE mandatory	}|
+	{ ID id-RAN-MeasurementID			CRITICALITY reject	TYPE RAN-MeasurementID			PRESENCE mandatory	}|
+	{ ID id-PosMeasurementResultList	CRITICALITY reject	TYPE PosMeasurementResultList	PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- POSITIONING MEASUREMENT ABORT ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Measurement Abort
+--
+-- **************************************************************
+
+PositioningMeasurementAbort ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { PositioningMeasurementAbortIEs} },
+	...
+}
+
+PositioningMeasurementAbortIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|	
+	{ ID id-LMF-MeasurementID				CRITICALITY reject	TYPE LMF-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-RAN-MeasurementID				CRITICALITY reject	TYPE RAN-MeasurementID				PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- POSITIONING MEASUREMENT FAILURE INDICATION ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Measurement Failure Indication
+--
+-- **************************************************************
+
+PositioningMeasurementFailureIndication ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { PositioningMeasurementFailureIndicationIEs} },
+	...
+}
+
+PositioningMeasurementFailureIndicationIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-LMF-MeasurementID			CRITICALITY reject	TYPE LMF-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-RAN-MeasurementID			CRITICALITY reject	TYPE RAN-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	},
+	...
+}
+
+-- **************************************************************
+--
+-- POSITIONING MEASUREMENT UPDATE ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Measurement Update
+--
+-- **************************************************************
+
+PositioningMeasurementUpdate ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { PositioningMeasurementUpdateIEs} },
+	...
+}
+
+PositioningMeasurementUpdateIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-LMF-MeasurementID			CRITICALITY reject	TYPE LMF-MeasurementID			PRESENCE mandatory	}|
+	{ ID id-RAN-MeasurementID			CRITICALITY reject	TYPE RAN-MeasurementID			PRESENCE mandatory	}|
+	{ ID id-SRSConfiguration			CRITICALITY ignore	TYPE SRSConfiguration			PRESENCE optional},
+	...
+}
+
+
+-- **************************************************************
+--
+-- TRP INFORMATION EXCHANGE ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- TRP Information Request
+--
+-- **************************************************************
+
+TRPInformationRequest ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { TRPInformationRequestIEs} },
+	...
+}
+
+TRPInformationRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID						CRITICALITY reject	TYPE TransactionID								PRESENCE mandatory	}|
+	{ ID id-TRPList								CRITICALITY ignore	TYPE TRPList									PRESENCE optional	}|
+	{ ID id-TRPInformationTypeListTRPReq		CRITICALITY reject	TYPE TRPInformationTypeListTRPReq			PRESENCE mandatory	},
+	...
+}
+
+TRPInformationTypeListTRPReq ::= SEQUENCE (SIZE(1.. maxnoofTRPInfoTypes)) OF ProtocolIE-SingleContainer { { TRPInformationTypeItemTRPReq } }
+
+TRPInformationTypeItemTRPReq 	F1AP-PROTOCOL-IES ::= {
+	{ ID id-TRPInformationTypeItem	 CRITICALITY reject		TYPE TRPInformationTypeItem  	PRESENCE mandatory },
+	...
+}
+
+
+-- **************************************************************
+--
+-- TRP Information Response
+--
+-- **************************************************************
+
+TRPInformationResponse ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { TRPInformationResponseIEs} },
+	...
+}
+
+TRPInformationResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID					CRITICALITY reject	TYPE TransactionID					PRESENCE mandatory	}|
+	{ ID id-TRPInformationListTRPResp		CRITICALITY ignore	TYPE TRPInformationListTRPResp		PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics			CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional	},
+	...
+}
+
+TRPInformationListTRPResp ::= SEQUENCE (SIZE(1.. maxnoofTRPs)) OF ProtocolIE-SingleContainer { { TRPInformationItemTRPResp } }
+
+TRPInformationItemTRPResp 	F1AP-PROTOCOL-IES ::= {
+	{ ID id-TRPInformationItem	 CRITICALITY ignore		TYPE TRPInformationItem  	PRESENCE mandatory },
+	...
+}
+
+
+-- **************************************************************
+--
+-- TRP Information Failure
+--
+-- **************************************************************
+
+TRPInformationFailure ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container		{ { TRPInformationFailureIEs} },
+	...
+}
+
+TRPInformationFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-TransactionID				CRITICALITY reject	TYPE TransactionID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional	},
+	...
+}
+
+
+-- **************************************************************
+--
+-- POSITIONING INFORMATION EXCHANGE ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Information Request
+--
+-- **************************************************************
+
+PositioningInformationRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningInformationRequestIEs} },
+	...
+}
+
+PositioningInformationRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-RequestedSRSTransmissionCharacteristics	CRITICALITY ignore	TYPE RequestedSRSTransmissionCharacteristics	PRESENCE optional},
+	...
+} 
+
+
+-- **************************************************************
+--
+-- Positioning Information Response
+--
+-- **************************************************************
+
+PositioningInformationResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningInformationResponseIEs} },
+	...
+}
+
+
+PositioningInformationResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|	
+	{ ID id-SRSConfiguration			CRITICALITY ignore	TYPE SRSConfiguration			PRESENCE optional}|
+	{ ID id-SFNInitialisationTime		CRITICALITY ignore	TYPE SFNInitialisationTime		PRESENCE optional}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional },
+	...
+}
+
+
+-- **************************************************************
+--
+-- Positioning Information Failure
+--
+-- **************************************************************
+
+PositioningInformationFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningInformationFailureIEs} },
+	...
+}
+
+PositioningInformationFailureIEs F1AP-PROTOCOL-IES ::= {
+	
+	{ ID id-gNB-CU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional },
+	...
+}
+
+
+-- **************************************************************
+--
+-- POSITIONING ACTIVATION PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Activation Request
+--
+-- **************************************************************
+
+PositioningActivationRequest ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningActivationRequestIEs} },
+	...
+}
+
+PositioningActivationRequestIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-SRSType					CRITICALITY reject	TYPE SRSType					PRESENCE mandatory	}|
+	{ ID id-ActivationTime			CRITICALITY ignore	TYPE SFNInitialisationTime		PRESENCE optional	},
+	...
+} 
+
+SRSType ::= CHOICE {
+	semipersistentSRS				SemipersistentSRS,
+	aperiodicSRS					AperiodicSRS, 
+	choice-extension				ProtocolIE-SingleContainer { { SRSType-ExtIEs} }
+}
+
+SRSType-ExtIEs F1AP-PROTOCOL-IES ::= {
+	...
+}
+
+SemipersistentSRS ::= SEQUENCE {
+	sRSResourceSetID			SRSResourceSetID,
+	sRSSpatialRelation			SRSSpatialRelation	OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { {SemipersistentSRS-ExtIEs} } OPTIONAL,
+	...
+}
+
+SemipersistentSRS-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+AperiodicSRS ::= SEQUENCE {
+	aperiodic					ENUMERATED {true, ...},
+	sRSResourceTrigger			SRSResourceTrigger		OPTIONAL,
+	iE-Extensions				ProtocolExtensionContainer { {AperiodicSRS-ExtIEs} } OPTIONAL,
+	...
+}
+
+AperiodicSRS-ExtIEs F1AP-PROTOCOL-EXTENSION ::= {
+	...
+}
+
+
+-- **************************************************************
+--
+-- Positioning Activation Response
+--
+-- **************************************************************
+
+PositioningActivationResponse ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningActivationResponseIEs} },
+	...
+}
+
+
+PositioningActivationResponseIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-SystemFrameNumber		CRITICALITY ignore	TYPE SystemFrameNumber			PRESENCE optional }|
+	{ ID id-SlotNumber				CRITICALITY ignore	TYPE SlotNumber					PRESENCE optional }|
+	{ ID id-CriticalityDiagnostics	CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional },
+	...
+}
+
+
+
+
+-- **************************************************************
+--
+-- Positioning Activation Failure
+--
+-- **************************************************************
+
+PositioningActivationFailure ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningActivationFailureIEs} },
+	...
+}
+
+PositioningActivationFailureIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional },
+	...
+}
+
+
+-- **************************************************************
+--
+-- POSITIONING DEACTIVATION PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Deactivation
+--
+-- **************************************************************
+
+PositioningDeactivation ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningDeactivationIEs} },
+	...
+}
+
+PositioningDeactivationIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-AbortTransmission		CRITICALITY ignore	TYPE AbortTransmission			PRESENCE mandatory	},
+	...
+} 
+
+-- **************************************************************
+--
+-- POSITIONING INFORMATION UPDATE PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- Positioning Information Update
+--
+-- **************************************************************
+
+PositioningInformationUpdate ::= SEQUENCE {
+	protocolIEs			ProtocolIE-Container       { { PositioningInformationUpdateIEs} },
+	...
+}
+
+
+PositioningInformationUpdateIEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID		CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-SRSConfiguration		CRITICALITY ignore	TYPE SRSConfiguration			PRESENCE optional}|
+	{ ID id-SFNInitialisationTime	CRITICALITY ignore	TYPE SFNInitialisationTime		PRESENCE optional},
+	...
+}
+
+-- **************************************************************
+--
+-- E-CID MEASUREMENT PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- E-CID Measurement Initiation Request
+--
+-- **************************************************************
+
+E-CIDMeasurementInitiationRequest ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container	{{E-CIDMeasurementInitiationRequest-IEs}},
+	...
+}
+
+E-CIDMeasurementInitiationRequest-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-CU-UE-F1AP-ID					PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID				CRITICALITY reject	TYPE GNB-DU-UE-F1AP-ID					PRESENCE mandatory	}|
+	{ ID id-LMF-UE-MeasurementID			CRITICALITY reject	TYPE LMF-UE-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-RAN-UE-MeasurementID			CRITICALITY reject	TYPE RAN-UE-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-E-CID-ReportCharacteristics		CRITICALITY reject	TYPE E-CID-ReportCharacteristics		PRESENCE mandatory	}|
+	{ ID id-E-CID-MeasurementPeriodicity	CRITICALITY reject	TYPE E-CID-MeasurementPeriodicity		PRESENCE conditional	}|
+-- The above IE shall be present if the E-CID-ReportCharacteristics IE is set to “periodic” –-
+	{ ID id-E-CID-MeasurementQuantities		CRITICALITY reject	TYPE E-CID-MeasurementQuantities		PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- E-CID Measurement Initiation Response
+--
+-- **************************************************************
+
+E-CIDMeasurementInitiationResponse ::= SEQUENCE {
+	protocolIEs		ProtocolIE-Container	{{E-CIDMeasurementInitiationResponse-IEs}},
+	...
+}
+
+E-CIDMeasurementInitiationResponse-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-LMF-UE-MeasurementID		CRITICALITY reject	TYPE LMF-UE-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-RAN-UE-MeasurementID		CRITICALITY reject	TYPE RAN-UE-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-E-CID-MeasurementResult		CRITICALITY ignore	TYPE E-CID-MeasurementResult		PRESENCE optional}|
+	{ ID id-Cell-Portion-ID				CRITICALITY ignore	TYPE Cell-Portion-ID				PRESENCE optional}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics		PRESENCE optional},
+	...
+}
+
+-- **************************************************************
+--
+-- E-CID Measurement Initiation Failure
+--
+-- **************************************************************
+
+E-CIDMeasurementInitiationFailure ::= SEQUENCE {
+	protocolIEs						ProtocolIE-Container		{{E-CIDMeasurementInitiationFailure-IEs}},
+	...
+}
+
+
+E-CIDMeasurementInitiationFailure-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-LMF-UE-MeasurementID		CRITICALITY reject	TYPE LMF-UE-MeasurementID			PRESENCE mandatory	}|
+	{ ID id-RAN-UE-MeasurementID		CRITICALITY reject	TYPE RAN-UE-MeasurementID			PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause							PRESENCE mandatory	}|
+	{ ID id-CriticalityDiagnostics		CRITICALITY ignore	TYPE CriticalityDiagnostics			PRESENCE optional},
+	...
+}
+
+-- **************************************************************
+--
+-- E-CID MEASUREMENT FAILURE INDICATION PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- E-CID Measurement Failure Indication
+--
+-- **************************************************************
+
+E-CIDMeasurementFailureIndication ::= SEQUENCE {
+	protocolIEs						ProtocolIE-Container		{{E-CIDMeasurementFailureIndication-IEs}},
+	...
+}
+
+
+E-CIDMeasurementFailureIndication-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-CU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID			PRESENCE mandatory	}|
+	{ ID id-LMF-UE-MeasurementID		CRITICALITY reject	TYPE LMF-UE-MeasurementID		PRESENCE mandatory	}|
+	{ ID id-RAN-UE-MeasurementID		CRITICALITY reject	TYPE RAN-UE-MeasurementID		PRESENCE mandatory	}|
+	{ ID id-Cause						CRITICALITY ignore	TYPE Cause						PRESENCE mandatory},
+	...
+}
+
+-- **************************************************************
+--
+-- E-CID MEASUREMENT REPORT PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- E-CID Measurement Report
+--
+-- **************************************************************
+
+E-CIDMeasurementReport ::= SEQUENCE {
+	protocolIEs						ProtocolIE-Container		{{E-CIDMeasurementReport-IEs}},
+	...
+}
+
+
+E-CIDMeasurementReport-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-CU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID				PRESENCE mandatory	}|
+	{ ID id-LMF-UE-MeasurementID		CRITICALITY reject	TYPE LMF-UE-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-RAN-UE-MeasurementID		CRITICALITY reject	TYPE RAN-UE-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-E-CID-MeasurementResult		CRITICALITY ignore	TYPE E-CID-MeasurementResult		PRESENCE mandatory }|
+	{ ID id-Cell-Portion-ID				CRITICALITY ignore	TYPE Cell-Portion-ID				PRESENCE optional},
+
+	...
+}
+
+-- **************************************************************
+--
+-- E-CID MEASUREMENT TERMINATION PROCEDURE
+--
+-- **************************************************************
+
+-- **************************************************************
+--
+-- E-CID Measurement Termination Command
+--
+-- **************************************************************
+
+
+E-CIDMeasurementTerminationCommand ::= SEQUENCE {
+	protocolIEs						ProtocolIE-Container		{{E-CIDMeasurementTerminationCommand-IEs}},
+	...
+}
+
+
+E-CIDMeasurementTerminationCommand-IEs F1AP-PROTOCOL-IES ::= {
+	{ ID id-gNB-CU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-CU-UE-F1AP-ID					PRESENCE mandatory	}|
+	{ ID id-gNB-DU-UE-F1AP-ID			CRITICALITY ignore	TYPE GNB-DU-UE-F1AP-ID					PRESENCE mandatory	}|
+	{ ID id-LMF-UE-MeasurementID		CRITICALITY reject	TYPE LMF-UE-MeasurementID				PRESENCE mandatory	}|
+	{ ID id-RAN-UE-MeasurementID		CRITICALITY reject	TYPE RAN-UE-MeasurementID				PRESENCE mandatory	},
+	...
+}
+
+
+
+END
diff --git a/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-PDU-Descriptions.asn b/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-PDU-Descriptions.asn
new file mode 100644
index 0000000000000000000000000000000000000000..6ec795ab10078f7c86a976e35a6b93f62af01fe6
--- /dev/null
+++ b/openair2/F1AP/MESSAGES/ASN1/R16.3.1/F1AP-PDU-Descriptions.asn
@@ -0,0 +1,723 @@
+-- **************************************************************
+--
+-- Elementary Procedure definitions
+--
+-- **************************************************************
+
+F1AP-PDU-Descriptions  { 
+itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
+ngran-access (22) modules (3) f1ap (3) version1 (1) f1ap-PDU-Descriptions (0)}
+
+DEFINITIONS AUTOMATIC TAGS ::= 
+
+BEGIN
+
+-- **************************************************************
+--
+-- IE parameter types from other modules.
+--
+-- **************************************************************
+
+IMPORTS
+	Criticality,
+	ProcedureCode
+
+FROM F1AP-CommonDataTypes
+	Reset,
+	ResetAcknowledge,
+	F1SetupRequest,
+	F1SetupResponse,
+	F1SetupFailure, 
+	GNBDUConfigurationUpdate,
+	GNBDUConfigurationUpdateAcknowledge,
+	GNBDUConfigurationUpdateFailure,
+	GNBCUConfigurationUpdate,
+	GNBCUConfigurationUpdateAcknowledge,
+	GNBCUConfigurationUpdateFailure,
+	UEContextSetupRequest,
+	UEContextSetupResponse,
+	UEContextSetupFailure,
+	UEContextReleaseCommand,
+	UEContextReleaseComplete,
+	UEContextModificationRequest,
+	UEContextModificationResponse,
+	UEContextModificationFailure,
+	UEContextModificationRequired,
+	UEContextModificationConfirm,
+	ErrorIndication,
+	UEContextReleaseRequest,
+	DLRRCMessageTransfer,
+	ULRRCMessageTransfer,
+	GNBDUResourceCoordinationRequest,
+	GNBDUResourceCoordinationResponse,
+	PrivateMessage,
+	UEInactivityNotification,
+	InitialULRRCMessageTransfer,
+	SystemInformationDeliveryCommand,
+	Paging,
+	Notify,
+	WriteReplaceWarningRequest,
+	WriteReplaceWarningResponse,
+	PWSCancelRequest,
+	PWSCancelResponse,
+	PWSRestartIndication,
+	PWSFailureIndication,
+	GNBDUStatusIndication,
+	RRCDeliveryReport,
+	UEContextModificationRefuse,
+	F1RemovalRequest,
+	F1RemovalResponse,
+	F1RemovalFailure,
+	NetworkAccessRateReduction,
+	TraceStart,
+	DeactivateTrace,
+	DUCURadioInformationTransfer,
+	CUDURadioInformationTransfer,
+	BAPMappingConfiguration,
+	BAPMappingConfigurationAcknowledge,
+	GNBDUResourceConfiguration,
+	GNBDUResourceConfigurationAcknowledge,
+	IABTNLAddressRequest,
+	IABTNLAddressResponse,
+	IABUPConfigurationUpdateRequest,
+	IABUPConfigurationUpdateResponse,
+	IABUPConfigurationUpdateFailure,
+	ResourceStatusRequest,
+	ResourceStatusResponse,
+	ResourceStatusFailure,
+	ResourceStatusUpdate,
+	AccessAndMobilityIndication,
+	ReferenceTimeInformationReportingControl,
+	ReferenceTimeInformationReport,
+	AccessSuccess,
+	CellTrafficTrace,
+	PositioningMeasurementRequest,
+	PositioningMeasurementResponse,
+	PositioningMeasurementFailure,
+	PositioningAssistanceInformationControl,
+	PositioningAssistanceInformationFeedback,
+	PositioningMeasurementReport,
+	PositioningMeasurementAbort,
+	PositioningMeasurementFailureIndication,
+	PositioningMeasurementUpdate,
+	TRPInformationRequest,
+	TRPInformationResponse,
+	TRPInformationFailure,
+	PositioningInformationRequest,
+	PositioningInformationResponse,
+	PositioningInformationFailure,
+	PositioningActivationRequest,
+	PositioningActivationResponse,
+	PositioningActivationFailure,
+	PositioningDeactivation,
+	PositioningInformationUpdate,
+	E-CIDMeasurementInitiationRequest,
+	E-CIDMeasurementInitiationResponse,
+	E-CIDMeasurementInitiationFailure,
+	E-CIDMeasurementFailureIndication,
+	E-CIDMeasurementReport,
+	E-CIDMeasurementTerminationCommand
+
+
+
+FROM F1AP-PDU-Contents
+	id-Reset,
+	id-F1Setup,
+	id-gNBDUConfigurationUpdate,
+	id-gNBCUConfigurationUpdate,
+	id-UEContextSetup,
+	id-UEContextRelease,
+	id-UEContextModification,
+	id-UEContextModificationRequired,
+	id-ErrorIndication, 
+	id-UEContextReleaseRequest,
+	id-DLRRCMessageTransfer,
+	id-ULRRCMessageTransfer,
+	id-GNBDUResourceCoordination,
+	id-privateMessage,
+	id-UEInactivityNotification,
+	id-InitialULRRCMessageTransfer,
+	id-SystemInformationDeliveryCommand,
+	id-Paging,
+	id-Notify,
+	id-WriteReplaceWarning,
+	id-PWSCancel,
+	id-PWSRestartIndication,
+	id-PWSFailureIndication,
+	id-GNBDUStatusIndication,
+	id-RRCDeliveryReport,
+	id-F1Removal,
+	id-NetworkAccessRateReduction,
+	id-TraceStart,
+	id-DeactivateTrace,
+	id-DUCURadioInformationTransfer,
+	id-CUDURadioInformationTransfer,
+	id-BAPMappingConfiguration,
+	id-GNBDUResourceConfiguration,
+	id-IABTNLAddressAllocation,
+	id-IABUPConfigurationUpdate,
+	id-resourceStatusReportingInitiation,
+	id-resourceStatusReporting,
+	id-accessAndMobilityIndication,
+	id-ReferenceTimeInformationReportingControl,
+	id-ReferenceTimeInformationReport,
+	id-accessSuccess,
+	id-cellTrafficTrace,
+	id-PositioningMeasurementExchange,
+	id-PositioningAssistanceInformationControl,
+	id-PositioningAssistanceInformationFeedback,
+	id-PositioningMeasurementReport,
+	id-PositioningMeasurementAbort,
+	id-PositioningMeasurementFailureIndication,
+	id-PositioningMeasurementUpdate,
+	id-TRPInformationExchange,
+	id-PositioningInformationExchange,
+	id-PositioningActivation,
+	id-PositioningDeactivation,
+	id-PositioningInformationUpdate,
+	id-E-CIDMeasurementInitiation,
+	id-E-CIDMeasurementFailureIndication,
+	id-E-CIDMeasurementReport,
+	id-E-CIDMeasurementTermination
+
+
+FROM F1AP-Constants
+
+	ProtocolIE-SingleContainer{},
+	F1AP-PROTOCOL-IES
+
+FROM F1AP-Containers;
+
+
+-- **************************************************************
+--
+-- Interface Elementary Procedure Class
+--
+-- **************************************************************
+
+F1AP-ELEMENTARY-PROCEDURE ::= CLASS {
+	&InitiatingMessage				,
+	&SuccessfulOutcome							OPTIONAL,
+	&UnsuccessfulOutcome						OPTIONAL,
+	&procedureCode				ProcedureCode 	UNIQUE,
+	&criticality				Criticality 	DEFAULT ignore
+}
+WITH SYNTAX {
+	INITIATING MESSAGE			&InitiatingMessage
+	[SUCCESSFUL OUTCOME			&SuccessfulOutcome]
+	[UNSUCCESSFUL OUTCOME		&UnsuccessfulOutcome]
+	PROCEDURE CODE				&procedureCode
+	[CRITICALITY				&criticality]
+}
+
+-- **************************************************************
+--
+-- Interface PDU Definition
+--
+-- **************************************************************
+
+F1AP-PDU ::= CHOICE {
+	initiatingMessage	InitiatingMessage,
+	successfulOutcome	SuccessfulOutcome,
+	unsuccessfulOutcome	UnsuccessfulOutcome, 
+	choice-extension	ProtocolIE-SingleContainer { { F1AP-PDU-ExtIEs} }
+}
+
+F1AP-PDU-ExtIEs F1AP-PROTOCOL-IES ::= { -- this extension is not used
+	...
+}
+
+InitiatingMessage ::= SEQUENCE {
+	procedureCode	F1AP-ELEMENTARY-PROCEDURE.&procedureCode		({F1AP-ELEMENTARY-PROCEDURES}),
+	criticality		F1AP-ELEMENTARY-PROCEDURE.&criticality			({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
+	value			F1AP-ELEMENTARY-PROCEDURE.&InitiatingMessage	({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
+}
+
+SuccessfulOutcome ::= SEQUENCE {
+	procedureCode	F1AP-ELEMENTARY-PROCEDURE.&procedureCode		({F1AP-ELEMENTARY-PROCEDURES}),
+	criticality		F1AP-ELEMENTARY-PROCEDURE.&criticality			({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
+	value			F1AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome	({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
+}
+
+UnsuccessfulOutcome ::= SEQUENCE {
+	procedureCode	F1AP-ELEMENTARY-PROCEDURE.&procedureCode		({F1AP-ELEMENTARY-PROCEDURES}),
+	criticality		F1AP-ELEMENTARY-PROCEDURE.&criticality			({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
+	value			F1AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome	({F1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
+}
+
+-- **************************************************************
+--
+-- Interface Elementary Procedure List
+--
+-- **************************************************************
+
+F1AP-ELEMENTARY-PROCEDURES F1AP-ELEMENTARY-PROCEDURE ::= {
+	F1AP-ELEMENTARY-PROCEDURES-CLASS-1			|
+	F1AP-ELEMENTARY-PROCEDURES-CLASS-2,	
+	...
+}
+
+
+F1AP-ELEMENTARY-PROCEDURES-CLASS-1 F1AP-ELEMENTARY-PROCEDURE ::= {
+	reset							|
+	f1Setup							|
+	gNBDUConfigurationUpdate		|
+	gNBCUConfigurationUpdate		|
+	uEContextSetup					|
+	uEContextRelease				|
+	uEContextModification			|
+	uEContextModificationRequired	|
+	writeReplaceWarning				|
+	pWSCancel					|
+	gNBDUResourceCoordination		|
+	f1Removal						|
+	bAPMappingConfiguration			|
+	gNBDUResourceConfiguration		|
+	iABTNLAddressAllocation			|
+	iABUPConfigurationUpdate		|
+	resourceStatusReportingInitiation	|
+	positioningMeasurementExchange	|
+	tRPInformationExchange			|
+	positioningInformationExchange	|
+	positioningActivation			|
+	e-CIDMeasurementInitiation,
+	...
+}
+
+F1AP-ELEMENTARY-PROCEDURES-CLASS-2 F1AP-ELEMENTARY-PROCEDURE ::= {	
+	errorIndication							|
+	uEContextReleaseRequest					|
+	dLRRCMessageTransfer					|
+	uLRRCMessageTransfer					|
+	uEInactivityNotification				|
+	privateMessage							|
+	initialULRRCMessageTransfer				|
+	systemInformationDelivery				|
+	paging									|
+	notify									|
+	pWSRestartIndication					|
+	pWSFailureIndication					|
+	gNBDUStatusIndication					|
+	rRCDeliveryReport						|
+	networkAccessRateReduction				|
+	traceStart								|
+	deactivateTrace							|
+	dUCURadioInformationTransfer			|
+	cUDURadioInformationTransfer			|
+	resourceStatusReporting					|
+	accessAndMobilityIndication				|
+	referenceTimeInformationReportingControl|
+	referenceTimeInformationReport			|
+	accessSuccess							|
+	cellTrafficTrace						|
+	positioningAssistanceInformationControl		|
+	positioningAssistanceInformationFeedback	|
+	positioningMeasurementReport				|
+	positioningMeasurementAbort					|
+	positioningMeasurementFailureIndication		|
+	positioningMeasurementUpdate				|
+	positioningDeactivation						|
+	e-CIDMeasurementFailureIndication			|
+	e-CIDMeasurementReport						|
+	e-CIDMeasurementTermination					|
+	positioningInformationUpdate,
+	...
+}
+-- **************************************************************
+--
+-- Interface Elementary Procedures
+--
+-- **************************************************************
+
+reset F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		Reset
+	SUCCESSFUL OUTCOME		ResetAcknowledge
+	PROCEDURE CODE			id-Reset
+	CRITICALITY				reject
+}
+
+f1Setup F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		F1SetupRequest
+	SUCCESSFUL OUTCOME		F1SetupResponse
+	UNSUCCESSFUL OUTCOME	F1SetupFailure
+	PROCEDURE CODE			id-F1Setup
+	CRITICALITY				reject
+}
+
+gNBDUConfigurationUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		GNBDUConfigurationUpdate
+	SUCCESSFUL OUTCOME		GNBDUConfigurationUpdateAcknowledge
+	UNSUCCESSFUL OUTCOME	GNBDUConfigurationUpdateFailure
+	PROCEDURE CODE			id-gNBDUConfigurationUpdate
+	CRITICALITY				reject
+}
+
+gNBCUConfigurationUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		GNBCUConfigurationUpdate
+	SUCCESSFUL OUTCOME		GNBCUConfigurationUpdateAcknowledge
+	UNSUCCESSFUL OUTCOME	GNBCUConfigurationUpdateFailure
+	PROCEDURE CODE			id-gNBCUConfigurationUpdate
+	CRITICALITY				reject
+}
+
+uEContextSetup F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		UEContextSetupRequest
+	SUCCESSFUL OUTCOME		UEContextSetupResponse
+	UNSUCCESSFUL OUTCOME	UEContextSetupFailure
+	PROCEDURE CODE			id-UEContextSetup
+	CRITICALITY				reject
+}
+
+uEContextRelease F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		UEContextReleaseCommand
+	SUCCESSFUL OUTCOME		UEContextReleaseComplete
+	PROCEDURE CODE			id-UEContextRelease
+	CRITICALITY				reject
+}
+
+uEContextModification F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		UEContextModificationRequest
+	SUCCESSFUL OUTCOME		UEContextModificationResponse
+	UNSUCCESSFUL OUTCOME	UEContextModificationFailure
+	PROCEDURE CODE			id-UEContextModification
+	CRITICALITY				reject
+}
+
+uEContextModificationRequired F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		UEContextModificationRequired
+	SUCCESSFUL OUTCOME		UEContextModificationConfirm
+	UNSUCCESSFUL OUTCOME	UEContextModificationRefuse
+	PROCEDURE CODE			id-UEContextModificationRequired
+	CRITICALITY				reject
+}
+
+writeReplaceWarning F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		WriteReplaceWarningRequest
+	SUCCESSFUL OUTCOME		WriteReplaceWarningResponse
+	PROCEDURE CODE			id-WriteReplaceWarning
+	CRITICALITY				reject
+}
+
+pWSCancel F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PWSCancelRequest
+	SUCCESSFUL OUTCOME		PWSCancelResponse
+	PROCEDURE CODE			id-PWSCancel
+	CRITICALITY				reject
+}
+
+errorIndication F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		ErrorIndication
+	PROCEDURE CODE			id-ErrorIndication
+	CRITICALITY				ignore
+}
+
+uEContextReleaseRequest F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		UEContextReleaseRequest
+	PROCEDURE CODE			id-UEContextReleaseRequest
+	CRITICALITY				ignore
+}
+
+
+initialULRRCMessageTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		InitialULRRCMessageTransfer
+	PROCEDURE CODE			id-InitialULRRCMessageTransfer
+	CRITICALITY				ignore
+}
+
+dLRRCMessageTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		DLRRCMessageTransfer
+	PROCEDURE CODE			id-DLRRCMessageTransfer
+	CRITICALITY				ignore
+}
+
+uLRRCMessageTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		ULRRCMessageTransfer
+	PROCEDURE CODE			id-ULRRCMessageTransfer
+	CRITICALITY				ignore
+}
+
+
+uEInactivityNotification  F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		UEInactivityNotification
+	PROCEDURE CODE			id-UEInactivityNotification
+	CRITICALITY				ignore
+}
+
+gNBDUResourceCoordination F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		GNBDUResourceCoordinationRequest
+	SUCCESSFUL OUTCOME		GNBDUResourceCoordinationResponse
+	PROCEDURE CODE			id-GNBDUResourceCoordination
+	CRITICALITY				reject
+}
+
+privateMessage F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PrivateMessage
+	PROCEDURE CODE			id-privateMessage
+	CRITICALITY				ignore
+}
+
+systemInformationDelivery F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		SystemInformationDeliveryCommand
+	PROCEDURE CODE			id-SystemInformationDeliveryCommand
+	CRITICALITY				ignore
+}
+
+
+paging F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		Paging
+	PROCEDURE CODE			id-Paging
+	CRITICALITY				ignore
+}
+
+notify F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		Notify
+	PROCEDURE CODE			id-Notify
+	CRITICALITY				ignore
+}
+
+networkAccessRateReduction F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		NetworkAccessRateReduction
+	PROCEDURE CODE			id-NetworkAccessRateReduction
+	CRITICALITY				ignore
+}
+
+
+pWSRestartIndication F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PWSRestartIndication
+	PROCEDURE CODE			id-PWSRestartIndication
+	CRITICALITY				ignore
+}
+
+pWSFailureIndication F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PWSFailureIndication
+	PROCEDURE CODE			id-PWSFailureIndication
+	CRITICALITY				ignore
+}
+
+gNBDUStatusIndication 	F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		GNBDUStatusIndication
+	PROCEDURE CODE			id-GNBDUStatusIndication
+	CRITICALITY				ignore
+}
+
+
+rRCDeliveryReport F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		RRCDeliveryReport
+	PROCEDURE CODE			id-RRCDeliveryReport
+	CRITICALITY				ignore
+}
+
+f1Removal F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		F1RemovalRequest
+	SUCCESSFUL OUTCOME		F1RemovalResponse
+	UNSUCCESSFUL OUTCOME	F1RemovalFailure
+	PROCEDURE CODE			id-F1Removal
+	CRITICALITY				reject
+}
+
+traceStart F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		TraceStart
+	PROCEDURE CODE			id-TraceStart
+	CRITICALITY				ignore
+}
+
+deactivateTrace F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		DeactivateTrace
+	PROCEDURE CODE			id-DeactivateTrace
+	CRITICALITY				ignore
+}
+
+dUCURadioInformationTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		DUCURadioInformationTransfer
+	PROCEDURE CODE			id-DUCURadioInformationTransfer
+	CRITICALITY				ignore
+}
+
+cUDURadioInformationTransfer F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		CUDURadioInformationTransfer
+	PROCEDURE CODE			id-CUDURadioInformationTransfer
+	CRITICALITY				ignore
+}
+
+bAPMappingConfiguration F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		BAPMappingConfiguration
+	SUCCESSFUL OUTCOME		BAPMappingConfigurationAcknowledge
+	PROCEDURE CODE			id-BAPMappingConfiguration
+	CRITICALITY				reject
+}
+
+gNBDUResourceConfiguration F1AP-ELEMENTARY-PROCEDURE ::= { 
+	INITIATING MESSAGE		GNBDUResourceConfiguration
+	SUCCESSFUL OUTCOME		GNBDUResourceConfigurationAcknowledge
+	PROCEDURE CODE			id-GNBDUResourceConfiguration
+	CRITICALITY				reject
+}
+
+iABTNLAddressAllocation F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		IABTNLAddressRequest
+	SUCCESSFUL OUTCOME		IABTNLAddressResponse
+	PROCEDURE CODE			id-IABTNLAddressAllocation
+	CRITICALITY				reject
+}
+
+iABUPConfigurationUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		IABUPConfigurationUpdateRequest
+	SUCCESSFUL OUTCOME		IABUPConfigurationUpdateResponse
+	UNSUCCESSFUL OUTCOME	IABUPConfigurationUpdateFailure
+	PROCEDURE CODE			id-IABUPConfigurationUpdate
+	CRITICALITY				reject
+}
+
+resourceStatusReportingInitiation F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		ResourceStatusRequest
+	SUCCESSFUL OUTCOME		ResourceStatusResponse
+	UNSUCCESSFUL OUTCOME	ResourceStatusFailure
+	PROCEDURE CODE			id-resourceStatusReportingInitiation
+	CRITICALITY				reject
+}
+
+resourceStatusReporting F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		ResourceStatusUpdate
+	PROCEDURE CODE			id-resourceStatusReporting
+	CRITICALITY				ignore
+}
+
+accessAndMobilityIndication F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		AccessAndMobilityIndication
+	PROCEDURE CODE			id-accessAndMobilityIndication
+	CRITICALITY				ignore
+}
+
+referenceTimeInformationReportingControl F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		ReferenceTimeInformationReportingControl
+	PROCEDURE CODE			id-ReferenceTimeInformationReportingControl
+	CRITICALITY				ignore
+}
+
+referenceTimeInformationReport F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		ReferenceTimeInformationReport
+	PROCEDURE CODE			id-ReferenceTimeInformationReport
+	CRITICALITY				ignore
+}
+
+accessSuccess F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		AccessSuccess
+	PROCEDURE CODE			id-accessSuccess
+	CRITICALITY				ignore
+}
+
+cellTrafficTrace F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		CellTrafficTrace
+	PROCEDURE CODE			id-cellTrafficTrace
+	CRITICALITY				ignore
+}
+
+positioningAssistanceInformationControl F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningAssistanceInformationControl
+	PROCEDURE CODE			id-PositioningAssistanceInformationControl
+	CRITICALITY				ignore
+}
+
+positioningAssistanceInformationFeedback F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningAssistanceInformationFeedback
+	PROCEDURE CODE			id-PositioningAssistanceInformationFeedback
+	CRITICALITY				ignore
+}
+
+positioningMeasurementExchange F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningMeasurementRequest
+	SUCCESSFUL OUTCOME		PositioningMeasurementResponse
+	UNSUCCESSFUL OUTCOME	PositioningMeasurementFailure
+	PROCEDURE CODE			id-PositioningMeasurementExchange
+	CRITICALITY				reject
+}
+
+positioningMeasurementReport F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningMeasurementReport
+	PROCEDURE CODE			id-PositioningMeasurementReport
+	CRITICALITY				ignore
+}
+
+positioningMeasurementAbort F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningMeasurementAbort
+	PROCEDURE CODE			id-PositioningMeasurementAbort
+	CRITICALITY				ignore
+}
+
+positioningMeasurementFailureIndication F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningMeasurementFailureIndication
+	PROCEDURE CODE			id-PositioningMeasurementFailureIndication
+	CRITICALITY				ignore
+}
+
+positioningMeasurementUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningMeasurementUpdate
+	PROCEDURE CODE			id-PositioningMeasurementUpdate
+	CRITICALITY				ignore
+}
+
+
+tRPInformationExchange F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		TRPInformationRequest
+	SUCCESSFUL OUTCOME		TRPInformationResponse
+	UNSUCCESSFUL OUTCOME	TRPInformationFailure
+	PROCEDURE CODE			id-TRPInformationExchange
+	CRITICALITY				reject
+}
+
+positioningInformationExchange F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningInformationRequest
+	SUCCESSFUL OUTCOME		PositioningInformationResponse
+	UNSUCCESSFUL OUTCOME	PositioningInformationFailure
+	PROCEDURE CODE			id-PositioningInformationExchange
+	CRITICALITY				reject
+}
+
+positioningActivation F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningActivationRequest
+	SUCCESSFUL OUTCOME		PositioningActivationResponse
+	UNSUCCESSFUL OUTCOME	PositioningActivationFailure
+	PROCEDURE CODE			id-PositioningActivation
+	CRITICALITY				reject
+}
+
+positioningDeactivation F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningDeactivation
+	PROCEDURE CODE			id-PositioningDeactivation
+	CRITICALITY				ignore
+}
+
+e-CIDMeasurementInitiation F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		E-CIDMeasurementInitiationRequest
+	SUCCESSFUL OUTCOME		E-CIDMeasurementInitiationResponse
+	UNSUCCESSFUL OUTCOME	E-CIDMeasurementInitiationFailure
+	PROCEDURE CODE			id-E-CIDMeasurementInitiation
+	CRITICALITY				reject
+}
+
+e-CIDMeasurementFailureIndication F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		E-CIDMeasurementFailureIndication
+	PROCEDURE CODE			id-E-CIDMeasurementFailureIndication
+	CRITICALITY				ignore
+}
+
+e-CIDMeasurementReport F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		E-CIDMeasurementReport
+	PROCEDURE CODE			id-E-CIDMeasurementReport
+	CRITICALITY				ignore
+}
+
+e-CIDMeasurementTermination F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		E-CIDMeasurementTerminationCommand
+	PROCEDURE CODE			id-E-CIDMeasurementTermination
+	CRITICALITY				ignore
+}
+
+positioningInformationUpdate F1AP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PositioningInformationUpdate
+	PROCEDURE CODE			id-PositioningInformationUpdate
+	CRITICALITY				ignore
+}
+
+
+END
diff --git a/openair2/F1AP/f1ap_common.h b/openair2/F1AP/f1ap_common.h
index ee57a7ec838e41ca4374e03a1fc1e762b1a3f345..7781a78412ecb4e1c9caf08d805c62995a9c79ed 100644
--- a/openair2/F1AP/f1ap_common.h
+++ b/openair2/F1AP/f1ap_common.h
@@ -46,7 +46,6 @@
 inline void ASN_DEBUG(const char *fmt, ...);
 #endif
 
-#include "F1AP_Active-Cells-List.h"
 #include "F1AP_RAT-FrequencyPriorityInformation.h"
 #include "F1AP_DLUPTNLInformation-ToBeSetup-Item.h"
 #include "F1AP_PrivateMessage.h"
@@ -55,6 +54,7 @@ inline void ASN_DEBUG(const char *fmt, ...);
 #include "F1AP_NRPCI.h"
 #include "F1AP_Transmission-Bandwidth.h"
 #include "F1AP_SIB1-message.h"
+#include "F1AP_SibtypetobeupdatedListItem.h"
 #include "F1AP_GNBCUConfigurationUpdateAcknowledge.h"
 #include "F1AP_DRBs-Setup-Item.h"
 #include "F1AP_EUTRA-NR-CellResourceCoordinationReqAck-Container.h"
@@ -75,7 +75,6 @@ inline void ASN_DEBUG(const char *fmt, ...);
 #include "F1AP_DRBs-Required-ToBeModified-Item.h"
 #include "F1AP_BitRate.h"
 #include "F1AP_SRBs-ToBeSetup-List.h"
-#include "F1AP_ConcurrentWarningMessageIndicator.h"
 #include "F1AP_CriticalityDiagnostics-IE-Item.h"
 #include "F1AP_GNB-CU-TNL-Association-To-Update-List.h"
 #include "F1AP_DRB-Notify-List.h"
@@ -85,6 +84,7 @@ inline void ASN_DEBUG(const char *fmt, ...);
 #include "F1AP_PWS-Failed-NR-CGI-List.h"
 #include "F1AP_InitialULRRCMessageTransfer.h"
 #include "F1AP_Served-Cell-Information.h"
+#include "F1AP_ServedPLMNs-Item.h"
 #include "F1AP_Served-EUTRA-Cells-Information.h"
 #include "F1AP_Cells-Broadcast-Cancelled-Item.h"
 #include "F1AP_F1SetupRequest.h"
@@ -128,13 +128,11 @@ inline void ASN_DEBUG(const char *fmt, ...);
 #include "F1AP_TransactionID.h"
 #include "F1AP_AllocationAndRetentionPriority.h"
 #include "F1AP_ShortDRXCycleLength.h"
-#include "F1AP_BroadcastPLMNs-Item.h"
 #include "F1AP_DRB-Information.h"
 #include "F1AP_TimeToWait.h"
 #include "F1AP_NonDynamic5QIDescriptor.h"
 #include "F1AP_C-RNTI.h"
 #include "F1AP_MIB-message.h"
-#include "F1AP_SIBtype-Item.h"
 #include "F1AP_Served-Cells-To-Modify-List.h"
 #include "F1AP_NRCGI.h"
 #include "F1AP_DuplicationActivation.h"
@@ -187,6 +185,7 @@ inline void ASN_DEBUG(const char *fmt, ...);
 #include "F1AP_CellULConfigured.h"
 #include "F1AP_DRB-Activity.h"
 #include "F1AP_GNB-CU-TNL-Association-Failed-To-Setup-Item.h"
+#include "F1AP_ProtocolIE-ID.h"
 #include "F1AP_PrivateIE-ID.h"
 #include "F1AP_WriteReplaceWarningResponse.h"
 #include "F1AP_CauseMisc.h"
@@ -231,9 +230,7 @@ inline void ASN_DEBUG(const char *fmt, ...);
 #include "F1AP_SUL-Information.h"
 #include "F1AP_CriticalityDiagnostics-IE-List.h"
 #include "F1AP_EUTRA-FDD-Info.h"
-#include "F1AP_BroadcastPLMNs-List.h"
 #include "F1AP_Served-Cells-To-Delete-Item.h"
-#include "F1AP_ListofEUTRACellsinGNBDUCoordination.h"
 #include "F1AP_Candidate-SpCell-Item.h"
 #include "F1AP_Cells-To-Be-Broadcast-List.h"
 #include "F1AP_ULRRCMessageTransfer.h"
@@ -255,7 +252,6 @@ inline void ASN_DEBUG(const char *fmt, ...);
 #include "F1AP_SRBs-ToBeReleased-List.h"
 #include "F1AP_MeasGapConfig.h"
 #include "F1AP_NR-Mode-Info.h"
-#include "F1AP_Active-Cells-Item.h"
 #include "F1AP_Protected-EUTRA-Resources-List.h"
 #include "F1AP_SRBs-FailedToBeSetup-Item.h"
 #include "F1AP_ResetAll.h"
@@ -287,7 +283,6 @@ inline void ASN_DEBUG(const char *fmt, ...);
 #include "F1AP_UEContextReleaseRequest.h"
 #include "F1AP_GNB-DU-Name.h"
 #include "F1AP_DRBs-ToBeModified-Item.h"
-#include "F1AP_SIBtype-List.h"
 #include "F1AP_EUTRA-NR-CellResourceCoordinationReq-Container.h"
 #include "F1AP_DRBs-SetupMod-List.h"
 #include "F1AP_DRBs-Required-ToBeModified-List.h"
@@ -296,7 +291,6 @@ inline void ASN_DEBUG(const char *fmt, ...);
 #include "F1AP_PacketDelayBudget.h"
 #include "F1AP_GNBCUConfigurationUpdate.h"
 #include "F1AP_Cells-Broadcast-Completed-Item.h"
-#include "F1AP_RRCRconfigurationCompleteIndicator.h"
 #include "F1AP_PagingPriority.h"
 #include "F1AP_Cells-Failed-to-be-Activated-List.h"
 #include "F1AP_Endpoint-IP-address-and-port.h"
@@ -306,7 +300,6 @@ inline void ASN_DEBUG(const char *fmt, ...);
 #include "F1AP_ResetType.h"
 #include "F1AP_FDD-Info.h"
 #include "F1AP_DLUPTNLInformation-ToBeSetup-List.h"
-#include "F1AP_QoSFlowIndicator.h"
 #include "F1AP_NR-CGI-List-For-Restart-List.h"
 #include "F1AP_F1SetupResponse.h"
 #include "F1AP_UEContextSetupResponse.h"
@@ -325,7 +318,6 @@ inline void ASN_DEBUG(const char *fmt, ...);
 #include "F1AP_Cells-to-be-Barred-List.h"
 #include "F1AP_Presence.h"
 #include "F1AP_CellBarred.h"
-#include "F1AP_SIBtype.h"
 #include "F1AP_RequestType.h"
 #include "F1AP_NRFreqInfo.h"
 #include "F1AP_Potential-SpCell-Item.h"
@@ -348,7 +340,6 @@ inline void ASN_DEBUG(const char *fmt, ...);
 #include "F1AP_GBR-QoSFlowInformation.h"
 #include "F1AP_SCellIndex.h"
 #include "F1AP_DRBs-SetupMod-Item.h"
-#include "F1AP_TransmissionStopIndicator.h"
 #include "F1AP_UEContextSetupFailure.h"
 #include "F1AP_DRBs-FailedToBeModified-List.h"
 #include "F1AP_DRBs-FailedToBeSetupMod-Item.h"
diff --git a/openair2/F1AP/f1ap_cu_interface_management.c b/openair2/F1AP/f1ap_cu_interface_management.c
index 01cd4aa9e029793870aac5b071d99ce1954e67b6..20926c10d1f94353af85d501b12f433145658d89 100644
--- a/openair2/F1AP/f1ap_cu_interface_management.c
+++ b/openair2/F1AP/f1ap_cu_interface_management.c
@@ -139,10 +139,11 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
     served_celles_item_p = &(((F1AP_GNB_DU_Served_Cells_ItemIEs_t *)ie->value.choice.GNB_DU_Served_Cells_List.list.array[i])->value.choice.GNB_DU_Served_Cells_Item);
     
     /* tac */
-    OCTET_STRING_TO_INT16(&(served_celles_item_p->served_Cell_Information.fiveGS_TAC), F1AP_SETUP_REQ(message_p).tac[i]);
-    LOG_D(F1AP, "F1AP_SETUP_REQ(message_p).tac[%d] %d \n",
-          i, F1AP_SETUP_REQ(message_p).tac[i]);
-
+    if (served_celles_item_p->served_Cell_Information.fiveGS_TAC) {
+      OCTET_STRING_TO_INT16(served_celles_item_p->served_Cell_Information.fiveGS_TAC, F1AP_SETUP_REQ(message_p).tac[i]);
+      LOG_D(F1AP, "F1AP_SETUP_REQ(message_p).tac[%d] %d \n",
+            i, F1AP_SETUP_REQ(message_p).tac[i]);
+    }
     /* - nRCGI */
     TBCD_TO_MCC_MNC(&(served_celles_item_p->served_Cell_Information.nRCGI.pLMN_Identity), F1AP_SETUP_REQ(message_p).mcc[i],
                     F1AP_SETUP_REQ(message_p).mnc[i],
@@ -356,20 +357,32 @@ int CU_send_F1_SETUP_RESPONSE(instance_t instance,
       //for (int n = 0; n < f1ap_setup_resp->SI_container_length[i][0]; n++)
       //  printf("%02x ", f1ap_setup_resp->SI_container[i][0][n]);
       //printf("\n");
-      OCTET_STRING_fromBuf(&gNB_CUSystemInformation->sImessage,
-                           (const char*)f1ap_setup_resp->SI_container[i][0], 
-                           f1ap_setup_resp->SI_container_length[i][0]);
-
-      LOG_D(F1AP, "f1ap_setup_resp->SI_container_length = %d \n", f1ap_setup_resp->SI_container_length[0][0]);
+      for (int j=2;
+           j<10;
+           j++) {
+        if (j==6) j=9;
+        if (f1ap_setup_resp->SI_container[i][j]!=NULL) {
+          LOG_I(F1AP,"SETUP RESP: SI %d, Type %d\n",i,j);
+          AssertFatal((j < 6) || (j == 9), "Illegal SI type %d\n",j);
+          F1AP_SibtypetobeupdatedListItem_t *sib_item = calloc(1,sizeof(*sib_item));
+	  sib_item->sIBtype = j;
+          OCTET_STRING_fromBuf(&sib_item->sIBmessage,
+                               (const char*)f1ap_setup_resp->SI_container[i][j], 
+                               f1ap_setup_resp->SI_container_length[i][j]);
+        
+          LOG_I(F1AP, "f1ap_setup_resp->SI_container_length[%d][%d] = %d \n", i,j,f1ap_setup_resp->SI_container_length[i][j]);
+	  ASN_SEQUENCE_ADD(&gNB_CUSystemInformation->sibtypetobeupdatedlist.list,sib_item);
+        }
+      }
       cells_to_be_activated_list_itemExtIEs->extensionValue.choice.GNB_CUSystemInformation = *gNB_CUSystemInformation;
 
 
-      F1AP_ProtocolExtensionContainer_160P9_t p_160P9_t;
-      memset((void *)&p_160P9_t, 0, sizeof(F1AP_ProtocolExtensionContainer_160P9_t));
+      F1AP_ProtocolExtensionContainer_154P112_t p_154P112_t;
+      memset((void *)&p_154P112_t, 0, sizeof(F1AP_ProtocolExtensionContainer_154P112_t));
 
-      ASN_SEQUENCE_ADD(&p_160P9_t.list,
+      ASN_SEQUENCE_ADD(&p_154P112_t.list,
                       cells_to_be_activated_list_itemExtIEs);
-      cells_to_be_activated_list_item.iE_Extensions = (struct F1AP_ProtocolExtensionContainer*)&p_160P9_t;
+      cells_to_be_activated_list_item.iE_Extensions = (struct F1AP_ProtocolExtensionContainer*)&p_154P112_t;
 
       free(gNB_CUSystemInformation);
       gNB_CUSystemInformation = NULL;
@@ -829,17 +842,13 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, module_id_t du_mod_
        protected_eutra_resources_item_ies = (F1AP_Protected_EUTRA_Resources_ItemIEs_t *)calloc(1, sizeof(F1AP_Protected_EUTRA_Resources_ItemIEs_t));
        protected_eutra_resources_item_ies->id = F1AP_ProtocolIE_ID_id_Protected_EUTRA_Resources_List;
        protected_eutra_resources_item_ies->criticality = F1AP_Criticality_reject;
-       protected_eutra_resources_item_ies->value.present = F1AP_Protected_EUTRA_Resources_ItemIEs__value_PR_SpectrumSharingGroupID;
-       protected_eutra_resources_item_ies->value.choice.SpectrumSharingGroupID = 1L;
-
+       protected_eutra_resources_item_ies->value.present = F1AP_Protected_EUTRA_Resources_ItemIEs__value_PR_Protected_EUTRA_Resources_Item;
+       ((F1AP_Protected_EUTRA_Resources_Item_t*)&protected_eutra_resources_item_ies->value.choice.Protected_EUTRA_Resources_Item)->spectrumSharingGroupID = 123L;
+       memset(&protected_eutra_resources_item_ies->value.choice.Protected_EUTRA_Resources_Item,0,
+	      sizeof(F1AP_Protected_EUTRA_Resources_Item_t));
        ASN_SEQUENCE_ADD(&ie->value.choice.Protected_EUTRA_Resources_List.list, protected_eutra_resources_item_ies);
 
-       /* 8.2 ListofEUTRACellsinGNBDUCoordination */
-       protected_eutra_resources_item_ies = (F1AP_Protected_EUTRA_Resources_ItemIEs_t *)calloc(1, sizeof(F1AP_Protected_EUTRA_Resources_ItemIEs_t));
-       protected_eutra_resources_item_ies->id = F1AP_ProtocolIE_ID_id_Protected_EUTRA_Resources_List;
-       protected_eutra_resources_item_ies->criticality = F1AP_Criticality_reject;
-       protected_eutra_resources_item_ies->value.present = F1AP_Protected_EUTRA_Resources_ItemIEs__value_PR_ListofEUTRACellsinGNBDUCoordination;
-
+/*
        F1AP_Served_EUTRA_Cells_Information_t served_eutra_cells_information;
        memset((void *)&served_eutra_cells_information, 0, sizeof(F1AP_Served_EUTRA_Cells_Information_t));
 
@@ -870,6 +879,7 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, module_id_t du_mod_
        ASN_SEQUENCE_ADD(&protected_eutra_resources_item_ies->value.choice.ListofEUTRACellsinGNBDUCoordination.list, &served_eutra_cells_information);
 
        ASN_SEQUENCE_ADD(&ie->value.choice.Protected_EUTRA_Resources_List.list, protected_eutra_resources_item_ies);
+*/
   }
   ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
 
diff --git a/openair2/F1AP/f1ap_cu_rrc_message_transfer.c b/openair2/F1AP/f1ap_cu_rrc_message_transfer.c
index 306a1fe14bb73216444dbab6d878f8bf925fba5b..f4c09c4725408ec063c28d3e7eeb5b2ce64e7836 100644
--- a/openair2/F1AP/f1ap_cu_rrc_message_transfer.c
+++ b/openair2/F1AP/f1ap_cu_rrc_message_transfer.c
@@ -109,7 +109,7 @@ int CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t             instance,
   /* RNTI */
   F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_InitialULRRCMessageTransferIEs_t, ie, container,
                              F1AP_ProtocolIE_ID_id_C_RNTI, true);
-  BUFFER_TO_INT16(ie->value.choice.C_RNTI.buf, rnti);
+  rnti = ie->value.choice.C_RNTI;
 
   /* RRC Container */
   F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_InitialULRRCMessageTransferIEs_t, ie, container,
@@ -260,19 +260,22 @@ int CU_send_DL_RRC_MESSAGE_TRANSFER(instance_t                instance,
   /* optional */
   /* c7. RAT_FrequencyPriorityInformation */
   /* TODO */ 
-  if (0) {
-    ie = (F1AP_DLRRCMessageTransferIEs_t *)calloc(1, sizeof(F1AP_DLRRCMessageTransferIEs_t));
-    ie->id                            = F1AP_ProtocolIE_ID_id_RAT_FrequencyPriorityInformation;
-    ie->criticality                   = F1AP_Criticality_reject;
-    ie->value.present                 = F1AP_DLRRCMessageTransferIEs__value_PR_RAT_FrequencyPriorityInformation;
-
-    ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_subscriberProfileIDforRFP;
-    ie->value.choice.RAT_FrequencyPriorityInformation.choice.subscriberProfileIDforRFP = 123L;
-
+  int endc=1;
+  ie = (F1AP_DLRRCMessageTransferIEs_t *)calloc(1, sizeof(F1AP_DLRRCMessageTransferIEs_t));
+  ie->id                            = F1AP_ProtocolIE_ID_id_RAT_FrequencyPriorityInformation;
+  ie->criticality                   = F1AP_Criticality_reject;
+  ie->value.present                 = F1AP_DLRRCMessageTransferIEs__value_PR_RAT_FrequencyPriorityInformation;
+  if (endc==1) {
+    ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_eNDC;
+    ie->value.choice.RAT_FrequencyPriorityInformation.choice.eNDC = 123L;
+  }
+  else {
+    ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_nGRAN;
+    ie->value.choice.RAT_FrequencyPriorityInformation.choice.nGRAN = 11L;
+  }
     //ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_rAT_FrequencySelectionPriority;
     //ie->value.choice.RAT_FrequencyPriorityInformation.choice.rAT_FrequencySelectionPriority = 123L;
-    ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
-  }
+  ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
  
   /* encode */
   if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) {
diff --git a/openair2/F1AP/f1ap_cu_ue_context_management.c b/openair2/F1AP/f1ap_cu_ue_context_management.c
index 789ce4c715b3dd5336e866786b5fd5c150ce4962..1857678ce9a7d7e60585fa13ffc76f388197a04b 100644
--- a/openair2/F1AP/f1ap_cu_ue_context_management.c
+++ b/openair2/F1AP/f1ap_cu_ue_context_management.c
@@ -108,7 +108,7 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
   /* mandatory */
   /* c4. ServCellIndex */
   ie = (F1AP_UEContextSetupRequestIEs_t *)calloc(1, sizeof(F1AP_UEContextSetupRequestIEs_t));
-  ie->id                             = F1AP_ProtocolIE_ID_id_ServCellndex;
+  ie->id                             = F1AP_ProtocolIE_ID_id_ServCellIndex;
   ie->criticality                    = F1AP_Criticality_reject;
   ie->value.present                  = F1AP_UEContextSetupRequestIEs__value_PR_ServCellIndex;
   ie->value.choice.ServCellIndex = 2;
@@ -379,75 +379,86 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
       }
 
     } else { 
-      /* 12.1.2 dRB_Information */
-      drbs_toBeSetup_item.qoSInformation.present = F1AP_QoSInformation_PR_dRB_Information;
-      drbs_toBeSetup_item.qoSInformation.choice.dRB_Information = (F1AP_DRB_Information_t *)calloc(1, sizeof(F1AP_DRB_Information_t));
-      
+      /* 12.1.2 DRB_Information */
+      drbs_toBeSetup_item.qoSInformation.present = F1AP_QoSInformation_PR_choice_extension;
+
+      F1AP_QoSInformation_ExtIEs_t *ie;
+      ie = (F1AP_QoSInformation_ExtIEs_t *)calloc(1, sizeof(F1AP_QoS_Characteristics_ExtIEs_t));
+      ie->id                             = F1AP_ProtocolIE_ID_id_DRB_Information;
+      ie->criticality                    = F1AP_Criticality_reject;
+      ie->value.present                  = F1AP_QoSInformation_ExtIEs__value_PR_DRB_Information;
+      F1AP_DRB_Information_t   *DRB_Information = &ie->value.choice.DRB_Information;
+
+      drbs_toBeSetup_item.qoSInformation.choice.choice_extension = (struct F1AP_ProtocolIE_SingleContainer*)ie;
+
+
       /* 12.1.2.1 dRB_QoS */
       {
         /* qoS_Characteristics */
         {
           int some_decide_qoS_characteristics = 1; // BK: Need Check
           if (some_decide_qoS_characteristics) {
-            drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.present = F1AP_QoS_Characteristics_PR_non_Dynamic_5QI;
-            drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI = (F1AP_NonDynamic5QIDescriptor_t *)calloc(1, sizeof(F1AP_NonDynamic5QIDescriptor_t));
+            DRB_Information->dRB_QoS.qoS_Characteristics.present = F1AP_QoS_Characteristics_PR_non_Dynamic_5QI;
+            DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI = (F1AP_NonDynamic5QIDescriptor_t *)calloc(1, sizeof(F1AP_NonDynamic5QIDescriptor_t));
             
             /* fiveQI */
-            drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->fiveQI = 1L;
+            DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->fiveQI = 1L;
 
             /* OPTIONAL */
             /* qoSPriorityLevel */
             if (0) {
-              drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->qoSPriorityLevel = (long *)calloc(1, sizeof(long));
-              *drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->qoSPriorityLevel = 1L;
+              DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->qoSPriorityLevel = (long *)calloc(1, sizeof(long));
+              *DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->qoSPriorityLevel = 1L;
             }
 
             /* OPTIONAL */
             /* averagingWindow */
             if (0) {
-              drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow = (F1AP_AveragingWindow_t *)calloc(1, sizeof(F1AP_AveragingWindow_t));
-              *drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow = 1L;
+              DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow = (F1AP_AveragingWindow_t *)calloc(1, sizeof(F1AP_AveragingWindow_t));
+              *DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->averagingWindow = 1L;
             }
 
             /* OPTIONAL */
             /* maxDataBurstVolume */
             if (0) {
-              drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume = (F1AP_MaxDataBurstVolume_t *)calloc(1, sizeof(F1AP_MaxDataBurstVolume_t));
-              *drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume = 1L;
+              DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume = (F1AP_MaxDataBurstVolume_t *)calloc(1, sizeof(F1AP_MaxDataBurstVolume_t));
+              *DRB_Information->dRB_QoS.qoS_Characteristics.choice.non_Dynamic_5QI->maxDataBurstVolume = 1L;
             }
 
           } else {
-            drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.present = F1AP_QoS_Characteristics_PR_dynamic_5QI;
-            drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI = (F1AP_Dynamic5QIDescriptor_t *)calloc(1, sizeof(F1AP_Dynamic5QIDescriptor_t));
+            DRB_Information->dRB_QoS.qoS_Characteristics.present = F1AP_QoS_Characteristics_PR_dynamic_5QI;
+            DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI = (F1AP_Dynamic5QIDescriptor_t *)calloc(1, sizeof(F1AP_Dynamic5QIDescriptor_t));
             
             /* qoSPriorityLevel */
-            drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->qoSPriorityLevel = 1L;
+            DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->qoSPriorityLevel = 1L;
 
             /* packetDelayBudget */
-            drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->packetDelayBudget = 1L;
+            DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->packetDelayBudget = 1L;
 
             /* packetErrorRate */
-            drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->packetErrorRate = 1L;
+            DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->packetErrorRate.pER_Scalar = 1L;
+            DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->packetErrorRate.pER_Exponent = 6L;
+
 
             /* OPTIONAL */
             /* delayCritical */
             if (0) {
-              drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->delayCritical = (long *)calloc(1, sizeof(long));
-              *drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->delayCritical = 1L;
+              DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->delayCritical = (long *)calloc(1, sizeof(long));
+              *DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->delayCritical = 1L;
             }
 
             /* OPTIONAL */
             /* averagingWindow */
             if (0) {
-              drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->averagingWindow = (F1AP_AveragingWindow_t *)calloc(1, sizeof(F1AP_AveragingWindow_t));
-              *drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->averagingWindow = 1L;
+              DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->averagingWindow = (F1AP_AveragingWindow_t *)calloc(1, sizeof(F1AP_AveragingWindow_t));
+              *DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->averagingWindow = 1L;
             }
 
             /* OPTIONAL */
             /* maxDataBurstVolume */
             if (0) {
-              drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->maxDataBurstVolume = (F1AP_MaxDataBurstVolume_t *)calloc(1, sizeof(F1AP_MaxDataBurstVolume_t));
-              *drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->maxDataBurstVolume = 1L;
+              DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->maxDataBurstVolume = (F1AP_MaxDataBurstVolume_t *)calloc(1, sizeof(F1AP_MaxDataBurstVolume_t));
+              *DRB_Information->dRB_QoS.qoS_Characteristics.choice.dynamic_5QI->maxDataBurstVolume = 1L;
             }
 
           } // if some_decide_qoS_characteristics
@@ -456,32 +467,32 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
 
         /* nGRANallocationRetentionPriority */
         {
-            drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.nGRANallocationRetentionPriority.priorityLevel = F1AP_PriorityLevel_highest; // enum
-            drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.nGRANallocationRetentionPriority.pre_emptionCapability = F1AP_Pre_emptionCapability_shall_not_trigger_pre_emption; // enum
-            drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.nGRANallocationRetentionPriority.pre_emptionVulnerability = F1AP_Pre_emptionVulnerability_not_pre_emptable; // enum
+            DRB_Information->dRB_QoS.nGRANallocationRetentionPriority.priorityLevel = F1AP_PriorityLevel_highest; // enum
+            DRB_Information->dRB_QoS.nGRANallocationRetentionPriority.pre_emptionCapability = F1AP_Pre_emptionCapability_shall_not_trigger_pre_emption; // enum
+            DRB_Information->dRB_QoS.nGRANallocationRetentionPriority.pre_emptionVulnerability = F1AP_Pre_emptionVulnerability_not_pre_emptable; // enum
         } // nGRANallocationRetentionPriority
 
         /* OPTIONAL */
         /* gBR_QoS_Flow_Information */
         if (0) {
-          drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information = (F1AP_GBR_QoSFlowInformation_t *)calloc(1, sizeof(F1AP_GBR_QoSFlowInformation_t)); 
-          asn_long2INTEGER(&drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxFlowBitRateDownlink, 1L);
-          asn_long2INTEGER(&drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxFlowBitRateUplink, 1L);
-          asn_long2INTEGER(&drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->guaranteedFlowBitRateDownlink, 1L);
-          asn_long2INTEGER(&drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->guaranteedFlowBitRateUplink, 1L);
+          DRB_Information->dRB_QoS.gBR_QoS_Flow_Information = (F1AP_GBR_QoSFlowInformation_t *)calloc(1, sizeof(F1AP_GBR_QoSFlowInformation_t)); 
+          asn_long2INTEGER(&DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxFlowBitRateDownlink, 1L);
+          asn_long2INTEGER(&DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxFlowBitRateUplink, 1L);
+          asn_long2INTEGER(&DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->guaranteedFlowBitRateDownlink, 1L);
+          asn_long2INTEGER(&DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->guaranteedFlowBitRateUplink, 1L);
 
           /* OPTIONAL */
           /* maxPacketLossRateDownlink */
           if (0) {
-            drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateDownlink = (F1AP_MaxPacketLossRate_t *)calloc(1, sizeof(F1AP_MaxPacketLossRate_t)); 
-            *drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateDownlink = 1L;
+            DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateDownlink = (F1AP_MaxPacketLossRate_t *)calloc(1, sizeof(F1AP_MaxPacketLossRate_t)); 
+            *DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateDownlink = 1L;
           }
 
           /* OPTIONAL */
           /* maxPacketLossRateUplink */
           if (0) {
-            drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateUplink = (F1AP_MaxPacketLossRate_t *)calloc(1, sizeof(F1AP_MaxPacketLossRate_t)); 
-            *drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateUplink = 1L;
+            DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateUplink = (F1AP_MaxPacketLossRate_t *)calloc(1, sizeof(F1AP_MaxPacketLossRate_t)); 
+            *DRB_Information->dRB_QoS.gBR_QoS_Flow_Information->maxPacketLossRateUplink = 1L;
           }
 
         }
@@ -489,8 +500,8 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
         /* OPTIONAL */
         /* reflective_QoS_Attribute */
         if (0) {
-          drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.reflective_QoS_Attribute = (long *)calloc(1, sizeof(long)); 
-          *drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->dRB_QoS.reflective_QoS_Attribute = 1L;
+          DRB_Information->dRB_QoS.reflective_QoS_Attribute = (long *)calloc(1, sizeof(long)); 
+          *DRB_Information->dRB_QoS.reflective_QoS_Attribute = 1L;
         }
 
       } // dRB_QoS
@@ -498,21 +509,21 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
       /* 12.1.2.2 sNSSAI */
       {
         /* sST */
-        OCTET_STRING_fromBuf(&drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->sNSSAI.sST, "asdsa1d32sa1d31asd31as",
+        OCTET_STRING_fromBuf(&DRB_Information->sNSSAI.sST, "asdsa1d32sa1d31asd31as",
                            strlen("asdsa1d32sa1d31asd31as"));
         /* OPTIONAL */
         /* sD */
         if (0) {
-          drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->sNSSAI.sD = (OCTET_STRING_t *)calloc(1, sizeof(OCTET_STRING_t));
-          OCTET_STRING_fromBuf(drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->sNSSAI.sD, "asdsa1d32sa1d31asd31as",
+          DRB_Information->sNSSAI.sD = (OCTET_STRING_t *)calloc(1, sizeof(OCTET_STRING_t));
+          OCTET_STRING_fromBuf(DRB_Information->sNSSAI.sD, "asdsa1d32sa1d31asd31as",
                            strlen("asdsa1d32sa1d31asd31as"));
         }
       }
       /* OPTIONAL */
       /* 12.1.2.3 notificationControl */
       if (0) {
-        drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->notificationControl = (F1AP_NotificationControl_t *)calloc(1, sizeof(F1AP_NotificationControl_t));
-        *drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->notificationControl = F1AP_NotificationControl_active; // enum
+        DRB_Information->notificationControl = (F1AP_NotificationControl_t *)calloc(1, sizeof(F1AP_NotificationControl_t));
+        *DRB_Information->notificationControl = F1AP_NotificationControl_active; // enum
       }
 
       /* 12.1.2.4 flows_Mapped_To_DRB_List */  // BK: need verifiy
@@ -523,7 +534,7 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
         memset((void *)&flows_mapped_to_drb_item, 0, sizeof(F1AP_Flows_Mapped_To_DRB_Item_t));
         
         /* qoSFlowIndicator */
-        flows_mapped_to_drb_item.qoSFlowIndicator = 1L;
+        flows_mapped_to_drb_item.qoSFlowIdentifier = 1L;
 
         /* qoSFlowLevelQoSParameters */
         {  
@@ -569,8 +580,8 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
               flows_mapped_to_drb_item.qoSFlowLevelQoSParameters.qoS_Characteristics.choice.dynamic_5QI->packetDelayBudget = 1L;
 
               /* packetErrorRate */
-              flows_mapped_to_drb_item.qoSFlowLevelQoSParameters.qoS_Characteristics.choice.dynamic_5QI->packetErrorRate = 1L;
-
+              flows_mapped_to_drb_item.qoSFlowLevelQoSParameters.qoS_Characteristics.choice.dynamic_5QI->packetErrorRate.pER_Scalar = 1L;
+	      flows_mapped_to_drb_item.qoSFlowLevelQoSParameters.qoS_Characteristics.choice.dynamic_5QI->packetErrorRate.pER_Exponent = 6L;
               /* OPTIONAL */
               /* delayCritical */
               if (0) {
@@ -637,7 +648,7 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
 
         } // qoSFlowLevelQoSParameters
         // BK: need check
-        ASN_SEQUENCE_ADD(&drbs_toBeSetup_item.qoSInformation.choice.dRB_Information->flows_Mapped_To_DRB_List.list, &flows_mapped_to_drb_item);
+        ASN_SEQUENCE_ADD(&DRB_Information->flows_Mapped_To_DRB_List.list, &flows_mapped_to_drb_item);
       }
 
     } // if some_decide_qos
@@ -672,7 +683,7 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
         drbs_toBeSetup_item.rLCMode = F1AP_RLCMode_rlc_am;
         break;
       default:
-        drbs_toBeSetup_item.rLCMode = F1AP_RLCMode_rlc_um;
+        drbs_toBeSetup_item.rLCMode = F1AP_RLCMode_rlc_um_bidirectional;
     }
 
     /* OPTIONAL */
@@ -716,13 +727,13 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
     ie->criticality                    = F1AP_Criticality_reject;
     ie->value.present                  = F1AP_UEContextSetupRequestIEs__value_PR_RAT_FrequencyPriorityInformation;
 
-    int some_decide_rat = 1; // BK: Need Check
-    if (some_decide_rat) {
-      ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_subscriberProfileIDforRFP;
-      ie->value.choice.RAT_FrequencyPriorityInformation.choice.subscriberProfileIDforRFP = 11L;
+    int endc = 1; // RK: Get this from somewhere ... 
+    if (endc) {
+      ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_eNDC;
+      ie->value.choice.RAT_FrequencyPriorityInformation.choice.eNDC = 11L;
     } else {
-      ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_rAT_FrequencySelectionPriority;
-      ie->value.choice.RAT_FrequencyPriorityInformation.choice.rAT_FrequencySelectionPriority = 11L;
+      ie->value.choice.RAT_FrequencyPriorityInformation.present = F1AP_RAT_FrequencyPriorityInformation_PR_nGRAN;
+      ie->value.choice.RAT_FrequencyPriorityInformation.choice.nGRAN = 11L;
     }
     ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
   }
@@ -1070,7 +1081,7 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance) {
   /* mandatory */
   /* c4. ServCellIndex */
   ie = (F1AP_UEContextModificationRequestIEs_t *)calloc(1, sizeof(F1AP_UEContextModificationRequestIEs_t));
-  ie->id                             = F1AP_ProtocolIE_ID_id_ServCellndex;
+  ie->id                             = F1AP_ProtocolIE_ID_id_ServCellIndex;
   ie->criticality                    = F1AP_Criticality_reject;
   ie->value.present                  = F1AP_UEContextModificationRequestIEs__value_PR_ServCellIndex;
   ie->value.choice.ServCellIndex     = 5L;
@@ -1114,13 +1125,13 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance) {
   }
 
   /* optional */
-  /* c6. TransmissionStopIndicator */
+  /* c6. TransmissionActionIndicator */
   if (1) {
     ie = (F1AP_UEContextModificationRequestIEs_t *)calloc(1, sizeof(F1AP_UEContextModificationRequestIEs_t));
-    ie->id                                     = F1AP_ProtocolIE_ID_id_TransmissionStopIndicator;
+    ie->id                                     = F1AP_ProtocolIE_ID_id_TransmissionActionIndicator;
     ie->criticality                            = F1AP_Criticality_ignore;
-    ie->value.present                          = F1AP_UEContextModificationRequestIEs__value_PR_TransmissionStopIndicator;
-    ie->value.choice.TransmissionStopIndicator = F1AP_TransmissionStopIndicator_true;
+    ie->value.present                          = F1AP_UEContextModificationRequestIEs__value_PR_TransmissionActionIndicator;
+    ie->value.choice.TransmissionActionIndicator = F1AP_TransmissionActionIndicator_stop;
     ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
   }
 
@@ -1140,10 +1151,10 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance) {
   /* c7. RRCRconfigurationCompleteIndicator */
   if (1) {
     ie = (F1AP_UEContextModificationRequestIEs_t *)calloc(1, sizeof(F1AP_UEContextModificationRequestIEs_t));
-    ie->id                             = F1AP_ProtocolIE_ID_id_RRCRconfigurationCompleteIndicator;
+    ie->id                             = F1AP_ProtocolIE_ID_id_RRCReconfigurationCompleteIndicator;
     ie->criticality                    = F1AP_Criticality_ignore;
-    ie->value.present                  = F1AP_UEContextModificationRequestIEs__value_PR_RRCRconfigurationCompleteIndicator;
-    ie->value.choice.RRCRconfigurationCompleteIndicator = F1AP_RRCRconfigurationCompleteIndicator_true;
+    ie->value.present                  = F1AP_UEContextModificationRequestIEs__value_PR_RRCReconfigurationCompleteIndicator;
+    ie->value.choice.RRCReconfigurationCompleteIndicator = F1AP_RRCReconfigurationCompleteIndicator_true;
     ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
   }
 
@@ -1325,7 +1336,7 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance) {
     }
 
     /* rLCMode */
-    drbs_toBeSetupMod_item.rLCMode = F1AP_RLCMode_rlc_um; // enum
+    drbs_toBeSetupMod_item.rLCMode = F1AP_RLCMode_rlc_um_bidirectional; // enum
 
     /* OPTIONAL */
     /* ULConfiguration */
@@ -1366,9 +1377,10 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance) {
     drbs_toBeModified_item.dRBID = 30L;
 
     /* qoSInformation */
-    drbs_toBeModified_item.qoSInformation.present = F1AP_QoSInformation_PR_eUTRANQoS;
-    drbs_toBeModified_item.qoSInformation.choice.eUTRANQoS = (F1AP_EUTRANQoS_t *)calloc(1, sizeof(F1AP_EUTRANQoS_t));
-    drbs_toBeModified_item.qoSInformation.choice.eUTRANQoS->qCI = 254L;
+    drbs_toBeModified_item.qoSInformation =calloc(1,sizeof(*drbs_toBeModified_item.qoSInformation));
+    drbs_toBeModified_item.qoSInformation->present = F1AP_QoSInformation_PR_eUTRANQoS;
+    drbs_toBeModified_item.qoSInformation->choice.eUTRANQoS = (F1AP_EUTRANQoS_t *)calloc(1, sizeof(F1AP_EUTRANQoS_t));
+    drbs_toBeModified_item.qoSInformation->choice.eUTRANQoS->qCI = 254L;
 
     /* ULTunnels_ToBeModified_List */
     int j = 0;
diff --git a/openair2/F1AP/f1ap_du_interface_management.c b/openair2/F1AP/f1ap_du_interface_management.c
index 86b5b1cb77748c836525e84a5911b3e6b11837a4..0b71ce38b7eeed765beb79ed2721019aff1cda9b 100644
--- a/openair2/F1AP/f1ap_du_interface_management.c
+++ b/openair2/F1AP/f1ap_du_interface_management.c
@@ -95,7 +95,6 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
   uint8_t  *buffer;
   uint32_t  len;
   int       i = 0;
-  int       j = 0;
 
   /* Create */
   /* 0. pdu Type */
@@ -189,7 +188,7 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
         served_cell_information.nRPCI = f1ap_du_data->nr_pci[i];  // int 0..1007
 
         /* - fiveGS_TAC */
-        OCTET_STRING_fromBuf(&served_cell_information.fiveGS_TAC,
+        OCTET_STRING_fromBuf(served_cell_information.fiveGS_TAC,
                              (const char*)&f1ap_du_data->tac[i],
                              3);
 
@@ -201,19 +200,11 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
                              2);
         }
 
-        /* - broadcast PLMNs */
-        // RK: add the num_available_broadcast_PLMNs to the message 
-        int num_available_broadcast_PLMNs = 1; //f1ap_du_data->num_available_broadcast_PLMNs;
-        LOG_D(F1AP, "num_available_broadcast_PLMNs = %d \n", num_available_broadcast_PLMNs);
-        for (j=0;
-            j<num_available_broadcast_PLMNs;    // num_available_broadcast_PLMNs
-            j++) {
-            /* > PLMN BroadcastPLMNs Item */
-            F1AP_BroadcastPLMNs_Item_t *broadcastPLMNs_Item = (F1AP_BroadcastPLMNs_Item_t *)calloc(1, sizeof(F1AP_BroadcastPLMNs_Item_t));
-            //MCC_MNC_TO_PLMNID(208, 95, 2, &broadcastPLMNs_Item->pLMN_Identity);
-            MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &broadcastPLMNs_Item->pLMN_Identity);
-            ASN_SEQUENCE_ADD(&served_cell_information.servedPLMNs.list, broadcastPLMNs_Item);
-        }
+        /* servedPLMN information */
+        F1AP_ServedPLMNs_Item_t *servedPLMN_item = calloc(1,sizeof(*servedPLMN_item));
+        memset(servedPLMN_item,0,sizeof(*servedPLMN_item));
+        MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &servedPLMN_item->pLMN_Identity);
+        ASN_SEQUENCE_ADD(&served_cell_information.servedPLMNs.list, servedPLMN_item);
 
         // // /* - CHOICE NR-MODE-Info */
         F1AP_NR_Mode_Info_t nR_Mode_Info;
@@ -237,7 +228,7 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
 
             /* FDD.1.3 freqBandListNr */
             int fdd_ul_num_available_freq_Bands = f1ap_du_data->nr_mode_info[i].fdd.ul_num_frequency_bands;
-            LOG_D(F1AP, "fdd_ul_num_available_freq_Bands = %d \n", fdd_ul_num_available_freq_Bands);
+            LOG_I(F1AP, "fdd_ul_num_available_freq_Bands = %d \n", fdd_ul_num_available_freq_Bands);
             int fdd_ul_j;
             for (fdd_ul_j=0;
                  fdd_ul_j<fdd_ul_num_available_freq_Bands;
@@ -279,7 +270,7 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
 
             /* FDD.2.3 freqBandListNr */
             int fdd_dl_num_available_freq_Bands = f1ap_du_data->nr_mode_info[i].fdd.dl_num_frequency_bands;
-            LOG_D(F1AP, "fdd_dl_num_available_freq_Bands = %d \n", fdd_dl_num_available_freq_Bands);
+            LOG_I(F1AP, "fdd_dl_num_available_freq_Bands = %d \n", fdd_dl_num_available_freq_Bands);
             int fdd_dl_j;
             for (fdd_dl_j=0;
                  fdd_dl_j<fdd_dl_num_available_freq_Bands;
@@ -333,7 +324,8 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
 
             /* TDD.1.3 freqBandListNr */
             int tdd_num_available_freq_Bands = f1ap_du_data->nr_mode_info[i].tdd.num_frequency_bands;
-            LOG_D(F1AP, "tdd_num_available_freq_Bands = %d \n", tdd_num_available_freq_Bands);
+            LOG_I(F1AP, "tdd_num_available_freq_Bands = %d \n", tdd_num_available_freq_Bands);
+            AssertFatal(tdd_num_available_freq_Bands > 0, "should have at least one TDD band available\n");
             int j;
             for (j=0;
                  j<tdd_num_available_freq_Bands;
@@ -503,27 +495,59 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
 					F1AP_SETUP_RESP (msg_p).nr_cellid[i]);
 	 F1AP_SETUP_RESP (msg_p).nrpci[i] = *cell->nRPCI;
 
-	 F1AP_ProtocolExtensionContainer_160P9_t *ext = (F1AP_ProtocolExtensionContainer_160P9_t *)cell->iE_Extensions;
-	 AssertFatal(ext!=NULL,"Extension for SI is null\n");
-	 F1AP_SETUP_RESP (msg_p).num_SI[i] = ext->list.count;
-	 AssertFatal(ext->list.count==1,"At least one SI message should be there, and only 1 for now!\n");
-   LOG_D(F1AP, "F1AP: F1Setup-Resp Cell %d MCC %d MNC %d NRCellid %lx num_si %d\n",
-         i, F1AP_SETUP_RESP (msg_p).mcc[i], F1AP_SETUP_RESP (msg_p).mnc[i],
-         F1AP_SETUP_RESP (msg_p).nr_cellid[i], F1AP_SETUP_RESP (msg_p).num_SI[i]);
-	 for (int si =0;si < ext->list.count;si++) {
-	   size_t size = ext->list.array[si]->extensionValue.choice.GNB_CUSystemInformation.sImessage.size;
-	   F1AP_SETUP_RESP (msg_p).SI_container_length[i][si] = size;
-     LOG_D(F1AP, "F1AP: F1Setup-Resp SI_container_length[%d][%d] %ld bytes\n", i, si, size);
-	   F1AP_SETUP_RESP (msg_p).SI_container[i][si] = malloc(F1AP_SETUP_RESP (msg_p).SI_container_length[i][si]);
-
-	   memcpy((void*)F1AP_SETUP_RESP (msg_p).SI_container[i][si],
-		  (void*)ext->list.array[si]->extensionValue.choice.GNB_CUSystemInformation.sImessage.buf,
-		  F1AP_SETUP_RESP (msg_p).SI_container_length[i][si]);
-	 }
-       }
-       break;
-     }
-   }
+	 F1AP_ProtocolExtensionContainer_154P112_t *ext = (F1AP_ProtocolExtensionContainer_154P112_t *)cell->iE_Extensions;
+	 AssertFatal(ext!=NULL,"Extension is null\n");
+         for (int cnt=0;cnt<ext->list.count;cnt++) {
+            F1AP_Cells_to_be_Activated_List_ItemExtIEs_t *cells_to_be_activated_list_itemExtIEs=(F1AP_Cells_to_be_Activated_List_ItemExtIEs_t *)ext->list.array[cnt];
+            switch (cells_to_be_activated_list_itemExtIEs->id) {
+/*
+               case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_NOTHING:
+               case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_GNB_CUSystemInformation,
+               case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_AvailablePLMNList,
+               case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_ExtendedAvailablePLMN_List,
+               case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_IAB_Info_IAB_donor_CU,
+               case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_AvailableSNPN_ID_List
+*/
+	       case F1AP_ProtocolIE_ID_id_gNB_CUSystemInformation:
+                  {
+                    F1AP_GNB_CUSystemInformation_t *gNB_CUSystemInformation = (F1AP_GNB_CUSystemInformation_t*)&cells_to_be_activated_list_itemExtIEs->extensionValue.choice.GNB_CUSystemInformation;
+                    F1AP_SETUP_RESP (msg_p).num_SI[i] = gNB_CUSystemInformation->sibtypetobeupdatedlist.list.count;
+                    AssertFatal(ext->list.count==1,"At least one SI message should be there, and only 1 for now!\n");
+                    LOG_D(F1AP, "F1AP: F1Setup-Resp Cell %d MCC %d MNC %d NRCellid %lx num_si %d\n",
+                          i, F1AP_SETUP_RESP (msg_p).mcc[i], F1AP_SETUP_RESP (msg_p).mnc[i],
+                          F1AP_SETUP_RESP (msg_p).nr_cellid[i], F1AP_SETUP_RESP (msg_p).num_SI[i]);
+                    for (int si =0;si < gNB_CUSystemInformation->sibtypetobeupdatedlist.list.count;si++) {
+                        F1AP_SibtypetobeupdatedListItem_t *sib_item = gNB_CUSystemInformation->sibtypetobeupdatedlist.list.array[si];
+                        size_t size = sib_item->sIBmessage.size;
+                        F1AP_SETUP_RESP (msg_p).SI_container_length[i][sib_item->sIBtype] = size;
+                        LOG_I(F1AP, "F1AP: F1Setup-Resp SI_container_length[%d][%d] %ld bytes\n", i, (int)sib_item->sIBtype, size);
+                        F1AP_SETUP_RESP (msg_p).SI_container[i][sib_item->sIBtype] = malloc(size);
+                        memcpy((void*)F1AP_SETUP_RESP (msg_p).SI_container[i][sib_item->sIBtype],
+                               (void*)sib_item->sIBmessage.buf,
+                               size);
+                    }
+                 }
+                 break;
+               case F1AP_ProtocolIE_ID_id_AvailablePLMNList:
+                 AssertFatal(1==0,"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet\n");
+                 break;
+	       case F1AP_ProtocolIE_ID_id_ExtendedAvailablePLMN_List:
+                 AssertFatal(1==0,"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet\n");
+                 break;
+               case F1AP_ProtocolIE_ID_id_IAB_Info_IAB_donor_CU:
+                 AssertFatal(1==0,"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet\n");
+                 break;
+               case F1AP_ProtocolIE_ID_id_AvailableSNPN_ID_List:
+                 AssertFatal(1==0,"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet\n");
+                 break;
+	       default:
+                 AssertFatal(1==0,"F1AP_ProtocolIE_ID_id %d unknown\n",(int)cells_to_be_activated_list_itemExtIEs->id);
+                 break;
+            }
+         } // for (cnt=...
+       } // for (cells_to_activate...
+     } // switch ie
+   } // for IE
    AssertFatal(TransactionId!=-1,"TransactionId was not sent\n");
    AssertFatal(num_cells_to_activate>0,"No cells activated\n");
    F1AP_SETUP_RESP (msg_p).num_cells_to_activate = num_cells_to_activate;
@@ -542,7 +566,7 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
  
    LOG_D(F1AP, "Sending F1AP_SETUP_RESP ITTI message to ENB_APP with assoc_id (%d->%d)\n",
          assoc_id,ENB_MODULE_ID_TO_INSTANCE(assoc_id));
-   itti_send_msg_to_task(TASK_ENB_APP, ENB_MODULE_ID_TO_INSTANCE(assoc_id), msg_p);
+   itti_send_msg_to_task(TASK_ENB_APP, instance, msg_p);
 
    return 0;
 }
@@ -635,7 +659,7 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
         served_cell_information.nRPCI = f1ap_setup_req->nr_pci[i];  // int 0..1007
 
         /* - fiveGS_TAC */
-        OCTET_STRING_fromBuf(&served_cell_information.fiveGS_TAC,
+        OCTET_STRING_fromBuf(served_cell_information.fiveGS_TAC,
                              (const char *) &f1ap_setup_req->tac[i],
                              3);
 
@@ -647,17 +671,11 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
                              2);
         }
 
-        /* - broadcast PLMNs */
-        int maxnoofBPLMNS = 1;
-        for (i=0;
-            i<maxnoofBPLMNS;
-            i++) {
-            /* > PLMN BroadcastPLMNs Item */
-            F1AP_BroadcastPLMNs_Item_t *broadcastPLMNs_Item = (F1AP_BroadcastPLMNs_Item_t *)calloc(1, sizeof(F1AP_BroadcastPLMNs_Item_t));
-            //memset((void *)&broadcastPLMNs_Item, 0, sizeof(F1AP_BroadcastPLMNs_Item_t));
-            MCC_MNC_TO_PLMNID(f1ap_setup_req->mcc[i], f1ap_setup_req->mnc[i], f1ap_setup_req->mnc_digit_length[i], &broadcastPLMNs_Item->pLMN_Identity);
-            ASN_SEQUENCE_ADD(&served_cell_information.servedPLMNs.list, broadcastPLMNs_Item);
-        }
+        F1AP_ServedPLMNs_Item_t *servedPLMN_item = calloc(1,sizeof(*servedPLMN_item));
+        memset(servedPLMN_item,0,sizeof(*servedPLMN_item));
+        MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &servedPLMN_item->pLMN_Identity);
+        ASN_SEQUENCE_ADD(&served_cell_information.servedPLMNs.list, servedPLMN_item);
+
 
         // // /* - CHOICE NR-MODE-Info */
         F1AP_NR_Mode_Info_t nR_Mode_Info;
@@ -803,7 +821,7 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
         served_cell_information.nRPCI = f1ap_setup_req->nr_pci[i];  // int 0..1007
 
         /* - fiveGS_TAC */
-        OCTET_STRING_fromBuf(&served_cell_information.fiveGS_TAC,
+        OCTET_STRING_fromBuf(served_cell_information.fiveGS_TAC,
                              (const char *) &f1ap_setup_req->tac[i],
                              3);
 
@@ -815,17 +833,12 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
                              2);
         }
 
-        /* - broadcast PLMNs */
-        int maxnoofBPLMNS = 1;
-        for (i=0;
-            i<maxnoofBPLMNS;
-            i++) {
-            /* > PLMN BroadcastPLMNs Item */
-            F1AP_BroadcastPLMNs_Item_t *broadcastPLMNs_Item = (F1AP_BroadcastPLMNs_Item_t *)calloc(1, sizeof(F1AP_BroadcastPLMNs_Item_t));
-            //memset((void *)&broadcastPLMNs_Item, 0, sizeof(F1AP_BroadcastPLMNs_Item_t));
-            MCC_MNC_TO_PLMNID(f1ap_setup_req->mcc[i], f1ap_setup_req->mnc[i], f1ap_setup_req->mnc_digit_length[i], &broadcastPLMNs_Item->pLMN_Identity);
-            ASN_SEQUENCE_ADD(&served_cell_information.servedPLMNs.list, broadcastPLMNs_Item);
-        }
+        F1AP_ServedPLMNs_Item_t *servedPLMN_item = calloc(1,sizeof(*servedPLMN_item));
+        memset(servedPLMN_item,0,sizeof(*servedPLMN_item));
+        MCC_MNC_TO_PLMNID(f1ap_du_data->mcc[i], f1ap_du_data->mnc[i], f1ap_du_data->mnc_digit_length[i], &servedPLMN_item->pLMN_Identity);
+        ASN_SEQUENCE_ADD(&served_cell_information.servedPLMNs.list, servedPLMN_item);
+
+
 
         // // /* - CHOICE NR-MODE-Info */
         F1AP_NR_Mode_Info_t nR_Mode_Info;
@@ -963,42 +976,6 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
   ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
 
 
-  /* mandatory */
-  /* c5. Active_Cells_List */
-  ie = (F1AP_GNBDUConfigurationUpdateIEs_t *)calloc(1, sizeof(F1AP_GNBDUConfigurationUpdateIEs_t));
-  ie->id                        = F1AP_ProtocolIE_ID_id_Active_Cells_List;
-  ie->criticality               = F1AP_Criticality_reject;
-  ie->value.present             = F1AP_GNBDUConfigurationUpdateIEs__value_PR_Active_Cells_List;
-
-  for (i=0;
-       i<1;
-       i++) {
-        //
-        F1AP_Active_Cells_ItemIEs_t *active_cells_item_ies;
-        active_cells_item_ies = (F1AP_Active_Cells_ItemIEs_t *)calloc(1, sizeof(F1AP_Active_Cells_ItemIEs_t));
-        active_cells_item_ies->id            = F1AP_ProtocolIE_ID_id_Active_Cells_Item;
-        active_cells_item_ies->criticality   = F1AP_Criticality_reject;
-        active_cells_item_ies->value.present = F1AP_Active_Cells_ItemIEs__value_PR_Active_Cells_Item;
-        
-        F1AP_Active_Cells_Item_t active_cells_item;
-        memset((void *)&active_cells_item, 0, sizeof(F1AP_Active_Cells_Item_t));
-
-        /* 3.1 oldNRCGI */
-        F1AP_NRCGI_t nRCGI;
-        memset(&nRCGI, 0, sizeof(F1AP_NRCGI_t));
-        MCC_MNC_TO_PLMNID(f1ap_setup_req->mcc[i], f1ap_setup_req->mnc[i], f1ap_setup_req->mnc_digit_length[i],
-                                         &nRCGI.pLMN_Identity);
-        NR_CELL_ID_TO_BIT_STRING(f1ap_setup_req->nr_cellid[i], &nRCGI.nRCellIdentity);
-        active_cells_item.nRCGI = nRCGI;
-        
-        /* ADD */
-        active_cells_item_ies->value.choice.Active_Cells_Item = active_cells_item;
-
-        ASN_SEQUENCE_ADD(&ie->value.choice.Active_Cells_List.list, 
-                         active_cells_item_ies);
-  }
-  ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
-
 
   if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) {
     LOG_E(F1AP, "Failed to encode F1 setup request\n");
diff --git a/openair2/F1AP/f1ap_du_rrc_message_transfer.c b/openair2/F1AP/f1ap_du_rrc_message_transfer.c
index ee096337ddb508ca0ed6ec4f24a444976f4a35ac..74840439e06d48520edb8ad636f8946cbda99547 100644
--- a/openair2/F1AP/f1ap_du_rrc_message_transfer.c
+++ b/openair2/F1AP/f1ap_du_rrc_message_transfer.c
@@ -161,10 +161,10 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t       instance,
                              F1AP_ProtocolIE_ID_id_RAT_FrequencyPriorityInformation, true);
 
     switch(ie->value.choice.RAT_FrequencyPriorityInformation.present) {
-      case F1AP_RAT_FrequencyPriorityInformation_PR_subscriberProfileIDforRFP:
+      case F1AP_RAT_FrequencyPriorityInformation_PR_eNDC:
         //subscriberProfileIDforRFP = ie->value.choice.RAT_FrequencyPriorityInformation.choice.subscriberProfileIDforRFP;
         break;
-      case F1AP_RAT_FrequencyPriorityInformation_PR_rAT_FrequencySelectionPriority:
+      case F1AP_RAT_FrequencyPriorityInformation_PR_nGRAN:
         //rAT_FrequencySelectionPriority = ie->value.choice.RAT_FrequencyPriorityInformation.choice.rAT_FrequencySelectionPriority;
         break;
       default:
@@ -836,7 +836,7 @@ int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(module_id_t     module_idP,
   ie->id                             = F1AP_ProtocolIE_ID_id_C_RNTI;
   ie->criticality                    = F1AP_Criticality_reject;
   ie->value.present                  = F1AP_InitialULRRCMessageTransferIEs__value_PR_C_RNTI;
-  C_RNTI_TO_BIT_STRING(rntiP, &ie->value.choice.C_RNTI);
+  ie->value.choice.C_RNTI=rntiP;
   ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
 
   /* mandatory */
diff --git a/openair2/F1AP/f1ap_du_task.c b/openair2/F1AP/f1ap_du_task.c
index b66141250b5f117d22b4e58986f7106733eb37a3..c8aa4a61192c62d7990a2097cd2e658d54b27546 100644
--- a/openair2/F1AP/f1ap_du_task.c
+++ b/openair2/F1AP/f1ap_du_task.c
@@ -86,9 +86,9 @@ void du_task_handle_sctp_association_resp(instance_t instance, sctp_new_associat
   DevAssert(sctp_new_association_resp != NULL);
 
   if (sctp_new_association_resp->sctp_state != SCTP_STATE_ESTABLISHED) {
-    LOG_W(F1AP, "Received unsuccessful result for SCTP association (%u), instance %ld, cnx_id %u\n",
+    LOG_E(F1AP, "Received unsuccessful result for SCTP association (%u), instance %d, cnx_id %u\n",
               sctp_new_association_resp->sctp_state,
-              instance,
+              (int)instance,
               sctp_new_association_resp->ulp_cnx_id);
 
       //f1ap_handle_setup_message(instance, sctp_new_association_resp->sctp_state == SCTP_STATE_SHUTDOWN);
diff --git a/openair2/F1AP/f1ap_du_ue_context_management.c b/openair2/F1AP/f1ap_du_ue_context_management.c
index 841c77eef5f906896ffb44af3cb51b33fef5c9ca..bfd0e8e9af138b395e0e7a25dfb65b214203c68a 100644
--- a/openair2/F1AP/f1ap_du_ue_context_management.c
+++ b/openair2/F1AP/f1ap_du_ue_context_management.c
@@ -91,7 +91,7 @@ int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t       instance,
   BIT_STRING_TO_NR_CELL_IDENTITY(&ie->value.choice.NRCGI.nRCellIdentity, f1ap_ue_context_setup_req->nr_cellid);
   /* ServCellIndex */
   F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupRequestIEs_t, ie, container,
-                             F1AP_ProtocolIE_ID_id_ServCellndex, true);
+                             F1AP_ProtocolIE_ID_id_ServCellIndex, true);
   f1ap_ue_context_setup_req->servCellIndex = ie->value.choice.ServCellIndex;
   /* optional */
   /* CellULConfigured */
@@ -227,7 +227,8 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance) {
     ie->id                             = F1AP_ProtocolIE_ID_id_C_RNTI;
     ie->criticality                    = F1AP_Criticality_ignore;
     ie->value.present                  = F1AP_UEContextSetupResponseIEs__value_PR_C_RNTI;
-    C_RNTI_TO_BIT_STRING(rntiP, &ie->value.choice.C_RNTI);
+    //C_RNTI_TO_BIT_STRING(rntiP, &ie->value.choice.C_RNTI);
+    ie->value.choice.C_RNTI=rntiP;
     ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
   }
 
@@ -1016,7 +1017,7 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
     srbs_failedToBeSetupMod_item.sRBID = 50L;
     srbs_failedToBeSetupMod_item.cause = (F1AP_Cause_t *)calloc(1, sizeof(F1AP_Cause_t));
     srbs_failedToBeSetupMod_item.cause->present = F1AP_Cause_PR_radioNetwork;
-    srbs_failedToBeSetupMod_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnd_du_ue_f1ap_id;
+    srbs_failedToBeSetupMod_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
     /* ADD */
     srbs_failedToBeSetupMod_item_ies->value.choice.SRBs_FailedToBeSetupMod_Item = srbs_failedToBeSetupMod_item;
     ASN_SEQUENCE_ADD(&ie->value.choice.SRBs_FailedToBeSetupMod_List.list,
@@ -1047,7 +1048,7 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
     drbs_failedToBeSetupMod_item.dRBID = 30L;
     drbs_failedToBeSetupMod_item.cause = (F1AP_Cause_t *)calloc(1, sizeof(F1AP_Cause_t));
     drbs_failedToBeSetupMod_item.cause->present = F1AP_Cause_PR_radioNetwork;
-    drbs_failedToBeSetupMod_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnd_du_ue_f1ap_id;
+    drbs_failedToBeSetupMod_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
     /* ADD */
     drbs_failedToBeSetupMod_item_ies->value.choice.DRBs_FailedToBeSetupMod_Item = drbs_failedToBeSetupMod_item;
     ASN_SEQUENCE_ADD(&ie->value.choice.DRBs_FailedToBeSetupMod_List.list,
@@ -1083,7 +1084,7 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
     scell_failedtoSetupMod_item.sCell_ID = nRCGI;
     scell_failedtoSetupMod_item.cause = (F1AP_Cause_t *)calloc(1, sizeof(F1AP_Cause_t));
     scell_failedtoSetupMod_item.cause->present = F1AP_Cause_PR_radioNetwork;
-    scell_failedtoSetupMod_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnd_du_ue_f1ap_id;
+    scell_failedtoSetupMod_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
     /* ADD */
     scell_failedtoSetupMod_item_ies->value.choice.SCell_FailedtoSetupMod_Item = scell_failedtoSetupMod_item;
     ASN_SEQUENCE_ADD(&ie->value.choice.SCell_FailedtoSetupMod_List.list,
@@ -1114,7 +1115,7 @@ int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance) {
     drbs_failedToBeModified_item.dRBID = 30L;
     drbs_failedToBeModified_item.cause = (F1AP_Cause_t *)calloc(1, sizeof(F1AP_Cause_t));
     drbs_failedToBeModified_item.cause->present = F1AP_Cause_PR_radioNetwork;
-    drbs_failedToBeModified_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnd_du_ue_f1ap_id;
+    drbs_failedToBeModified_item.cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
     /* ADD */
     drbs_failedToBeModified_item_ies->value.choice.DRBs_FailedToBeModified_Item = drbs_failedToBeModified_item;
     ASN_SEQUENCE_ADD(&ie->value.choice.DRBs_FailedToBeModified_List.list,
diff --git a/openair2/F1AP/f1ap_encoder.c b/openair2/F1AP/f1ap_encoder.c
index e448690139f64ebb62a4a34394ffa29bf35d0683..6e5f0f4e493ed63a12498d617fe7fb59fb1e4e2e 100644
--- a/openair2/F1AP/f1ap_encoder.c
+++ b/openair2/F1AP/f1ap_encoder.c
@@ -84,12 +84,8 @@ int f1ap_encode_pdu(F1AP_F1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *length)
     LOG_E(F1AP, "----------------- ASN1 ENCODER PRINT END----------------- \n");
   }
 
-  encoded = aper_encode_to_new_buffer(&asn_DEF_F1AP_F1AP_PDU, 0, pdu, (void **)buffer);
-
-  if (encoded < 0) {
-    LOG_E(F1AP, "Failed to encode F1AP message\n");
-    return -1;
-  }
+  AssertFatal((encoded = aper_encode_to_new_buffer(&asn_DEF_F1AP_F1AP_PDU, 0, pdu, (void **)buffer))>0,
+	      "Failed to encode F1AP message\n");
 
   *length = encoded;
 
diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c
index b9bf141fce69d43738d3b7d049c066bbb18af01e..e578e98c5e18bba7ce47d29847802219889cc8c5 100644
--- a/openair2/GNB_APP/gnb_config.c
+++ b/openair2/GNB_APP/gnb_config.c
@@ -35,6 +35,7 @@
 #include "assertions.h"
 #include "gnb_config.h"
 #include "gnb_paramdef.h"
+#include "enb_paramdef.h"
 #include "UTIL/OTG/otg.h"
 #include "UTIL/OTG/otg_externs.h"
 #include "intertask_interface.h"
diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index ccbff6a5eb59a4ea151a8bad4ba60a2e889d2d16..4e063d22072c6702bcb3aa61bd829b2b0a7421ac 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -595,6 +595,7 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP,
       CC_id = UE_PCCID(module_idP, UE_id);
       UE_scheduling_control = &(UE_info->UE_sched_ctrl[UE_id]);
 
+/* to be merged with MAC_stats.log generation. probably redundant
       if (((frameP & 127) == 0) && (subframeP == 0)) {
         double total_bler;
         if(UE_scheduling_control->pusch_rx_num[CC_id] == 0 && UE_scheduling_control->pusch_rx_error_num[CC_id] == 0) {
@@ -632,7 +633,7 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP,
               UE_scheduling_control->aperiodic_ri_received[CC_id]
         );
       }
-
+*/
       RC.eNB[module_idP][CC_id]->pusch_stats_bsr[UE_id][(frameP * 10) + subframeP] = -63;
 
       if (UE_id == UE_info->list.head) {
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
index 3dea211dbcbeb75b56f46114e351684b3a5ddd48..8a400af1f30a4b7576aad53ad6062c4ae013c9aa 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
@@ -476,8 +476,8 @@ void generate_Msg2(module_id_t module_idP,
       first_rb = 0;
       vrb_map[first_rb] = 1;
       vrb_map[first_rb + 1] = 1;
-      vrb_map[first_rb + 2] = 1;
-      vrb_map[first_rb + 3] = 1;
+      //vrb_map[first_rb + 2] = 1;
+      //vrb_map[first_rb + 3] = 1;
       memset((void *) dl_config_pdu, 0, sizeof(nfapi_dl_config_request_pdu_t));
       dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE;
       dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu));
@@ -488,12 +488,12 @@ void generate_Msg2(module_id_t module_idP,
       dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 2;  // RA-RNTI : see Table 4-10 from SCF082 - nFAPI specifications
       dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000;  // equal to RS power
       dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process = 0;
-      dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = 1;  // no TPC
+      dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = 0;  // no TPC
       dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1 = 1;
-      dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = 0;
+      dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = 1;
       dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1 = 0;
       dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.virtual_resource_block_assignment_flag = 0;
-      dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 4);
+      dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 2);
 
       // This checks if the above DCI allocation is feasible in current subframe
       if (!CCE_allocation_infeasible(module_idP, CC_idP, 0, subframeP,
@@ -512,7 +512,7 @@ void generate_Msg2(module_id_t module_idP,
         dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = ra->RA_rnti;
         dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type               = 2; // format 1A/1B/1D
         dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized
-        dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding                  = getRIV(N_RB_DL, first_rb, 4);
+        dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding                  = getRIV(N_RB_DL, first_rb, 2);
         dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation                             = 2; //QPSK
         dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version                     = 0;
         dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks                       = 1; // first block
@@ -901,7 +901,7 @@ generate_Msg4(module_id_t module_idP,
   }                             // rach_resource_type > 0
   else {
     // This is normal LTE case
-    LOG_I(MAC, "generate_Msg4 ra->Msg4_frame SFN/SF: %d.%d,  frameP SFN/SF: %d.%d FOR eNB_Mod: %d \n", ra->Msg4_frame, ra->Msg4_subframe, frameP, subframeP, module_idP);
+    LOG_D(MAC, "generate_Msg4 ra->Msg4_frame SFN/SF: %d.%d,  frameP SFN/SF: %d.%d FOR eNB_Mod: %d \n", ra->Msg4_frame, ra->Msg4_subframe, frameP, subframeP, module_idP);
 
     if ((ra->Msg4_frame == frameP) && (ra->Msg4_subframe == subframeP)) {
       // Get RRCConnectionSetup for Piggyback
@@ -918,7 +918,7 @@ generate_Msg4(module_id_t module_idP,
               module_idP, CC_idP, frameP, subframeP, UE_id, rrc_sdu_length);
         //          AssertFatal(rrc_sdu_length > 0,
         //          "[MAC][eNB Scheduler] CCCH not allocated, rrc_sdu_length: %d\n", rrc_sdu_length);
-        LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Generating Msg4 with RRC Piggyback (RNTI %x)\n",
+        LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Generating Msg4 with RRC Piggyback (RNTI %x)\n",
               module_idP, CC_idP, frameP, subframeP, ra->rnti);
         /// Choose first 4 RBs for Msg4, should really check that these are free!
         first_rb = 0;
@@ -1086,7 +1086,7 @@ generate_Msg4(module_id_t module_idP,
           }
         }     // CCE Allocation feasible
       } else {
-        LOG_I(MAC,
+        LOG_D(MAC,
               "eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Delaying Msg4 for RRC Piggyback (RNTI %x)\n",
               module_idP, CC_idP, frameP, subframeP, ra->rnti);
         ra->Msg4_subframe ++;
@@ -1289,8 +1289,8 @@ initiate_ra_proc(module_id_t module_idP,
   }
 
   LOG_D(MAC,
-        "[eNB %d][RAPROC] CC_id %d Frame %d, Subframe %d  Initiating RA procedure for preamble index %d\n",
-        module_idP, CC_id, frameP, subframeP, preamble_index);
+        "[eNB %d][RAPROC] CC_id %d Frame %d, Subframe %d  Initiating RA procedure for preamble index %d, timing offset %d\n",
+        module_idP, CC_id, frameP, subframeP, preamble_index, timing_offset);
   LOG_D(MAC,
         "[eNB %d][RAPROC] CC_id %d Frame %d, Subframe %d  PRACH resource type %d\n",
         module_idP, CC_id, frameP, subframeP, rach_resource_type);
@@ -1332,6 +1332,9 @@ initiate_ra_proc(module_id_t module_idP,
             abort();
 
           case 1 :
+	  case 3 :
+	  case 4 :
+          case 5 :
             offset = 6;
             break;
         }
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
index b516b04e03d6c990516e98d7f7dd09b03712b78d..596d978a98900184c5ea0840ba701858ae11a84e 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
@@ -651,7 +651,7 @@ schedule_ue_spec(module_id_t module_idP,
     eNB_UE_stats->rrc_status = mac_eNB_get_rrc_status(module_idP, rnti);
     eNB_UE_stats->harq_pid = harq_pid;
     eNB_UE_stats->harq_round = round_DL;
-
+    eNB_UE_stats->dlsch_rounds[round_DL&7]++;
     if (eNB_UE_stats->rrc_status < RRC_RECONFIGURED) {
       ue_sched_ctrl->uplane_inactivity_timer = 0;
     }
@@ -792,7 +792,6 @@ schedule_ue_spec(module_id_t module_idP,
           // No TX request for retransmission (check if null request for FAPI)
       }
 
-      //eNB_UE_stats->dlsch_trials[round]++;
       eNB_UE_stats->num_retransmission += 1;
       eNB_UE_stats->rbs_used_retx = nb_rb;
       eNB_UE_stats->total_rbs_used_retx += nb_rb;
@@ -1065,20 +1064,23 @@ schedule_ue_spec(module_id_t module_idP,
             ue_template->pucch_tpc_tx_frame = frameP;
             ue_template->pucch_tpc_tx_subframe = subframeP;
 
-            if (snr > target_snr + 4) {
+            if (snr > target_snr + PUCCH_PCHYST) {
               tpc = 0;  //-1
-            } else if (snr < target_snr - 4) {
+	      ue_sched_ctrl->pucch_tpc_accumulated[CC_id]--;
+            } else if (snr < target_snr - PUCCH_PCHYST) {
               tpc = 2;  //+1
+              ue_sched_ctrl->pucch_tpc_accumulated[CC_id]--;
             } else {
               tpc = 1;  //0
             }
 
-            LOG_D(MAC, "[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, snr/target snr %d/%d (normal case)\n",
+            LOG_D(MAC, "[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d (accumulated %d), snr/target snr %d/%d (normal case)\n",
                   module_idP,
                   frameP,
                   subframeP,
                   harq_pid,
                   tpc,
+		  ue_sched_ctrl->pucch_tpc_accumulated[CC_id],
                   snr,
                   target_snr);
           } // Po_PUCCH has been updated
@@ -1700,9 +1702,9 @@ schedule_ue_spec_br(module_id_t module_idP,
               UE_info->UE_template[CC_id][UE_id].pucch_tpc_tx_frame = frameP;
               UE_info->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe = subframeP;
 
-              if (snr > target_snr + 4) {
+              if (snr > target_snr + PUCCH_PCHYST) {
                 tpc = 0; //-1
-              } else if (snr < target_snr - 4) {
+              } else if (snr < target_snr - PUCCH_PCHYST) {
                 tpc = 2; //+1
               } else {
                 tpc = 1; //0
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
index 23137b78875023fde361a1e6fb68141c404d7bab..e9f0b807c4f7d44f9a0360fd4b22e6a5b924d5b0 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
@@ -47,7 +47,7 @@
 #include "OCG_extern.h"
 #include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
 #include "rlc.h"
-
+#include "common/utils/lte/prach_utils.h"
 #include "T.h"
 
 
@@ -195,7 +195,7 @@ void dlsch_scheduler_pre_ue_select_fairRR(
 
   // Initialization
   for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
-    dlsch_ue_max_num[CC_id] = (uint16_t)RC.rrc[module_idP]->configuration.radioresourceconfig[CC_id].ue_multiple_max;
+    dlsch_ue_max_num[CC_id] = eNB->ue_multiple_max;
     // save origin DL PDU number
     DL_req          = &eNB->DL_req[CC_id].dl_config_request_body;
     saved_dlsch_dci[CC_id] = DL_req->number_pdu;
@@ -1044,48 +1044,6 @@ void dlsch_scheduler_pre_processor_fairRR (module_id_t   Mod_id,
     }
   }
 
-#ifdef TM5
-
-  // This has to be revisited!!!!
-  for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
-    i1 = 0;
-    i2 = 0;
-    i3 = 0;
-
-    for (j = 0; j < N_RBG[CC_id]; j++) {
-      if (MIMO_mode_indicator[CC_id][j] == 2) {
-        i1 = i1 + 1;
-      } else if (MIMO_mode_indicator[CC_id][j] == 1) {
-        i2 = i2 + 1;
-      } else if (MIMO_mode_indicator[CC_id][j] == 0) {
-        i3 = i3 + 1;
-      }
-    }
-
-    if ((i1 < N_RBG[CC_id]) && (i2 > 0) && (i3 == 0)) {
-      PHY_vars_eNB_g[Mod_id][CC_id]->check_for_SUMIMO_transmissions =
-        PHY_vars_eNB_g[Mod_id][CC_id]->
-        check_for_SUMIMO_transmissions + 1;
-    }
-
-    if (i3 == N_RBG[CC_id] && i1 == 0 && i2 == 0) {
-      PHY_vars_eNB_g[Mod_id][CC_id]->FULL_MUMIMO_transmissions =
-        PHY_vars_eNB_g[Mod_id][CC_id]->FULL_MUMIMO_transmissions +
-        1;
-    }
-
-    if((i1 < N_RBG[CC_id]) && (i3 > 0)) {
-      PHY_vars_eNB_g[Mod_id][CC_id]->
-      check_for_MUMIMO_transmissions + 1;
-    }
-
-    PHY_vars_eNB_g[Mod_id][CC_id]->check_for_total_transmissions =
-      PHY_vars_eNB_g[Mod_id][CC_id]->check_for_total_transmissions +
-      1;
-  }
-
-#endif
-
   for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
     for (i = 0; i < dlsch_ue_select[CC_id].ue_num; i++) {
       if(dlsch_ue_select[CC_id].list[i].ue_priority == SCH_DL_MSG2) {
@@ -1154,7 +1112,6 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
   // int continue_flag = 0;
   int32_t snr, target_snr;
   int32_t tpc = 1;
-  static int32_t tpc_accumulated = 0;
   UE_sched_ctrl_t *ue_sched_ctl;
   int mcs;
   int i;
@@ -1540,7 +1497,7 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
                             subframeP,
                             S_DL_SCHEDULED,
                             rnti);
-          //eNB_UE_stats->dlsch_trials[round]++;
+          UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[round]++;
           UE_info->eNB_UE_stats[CC_id][UE_id].num_retransmission += 1;
           UE_info->eNB_UE_stats[CC_id][UE_id].rbs_used_retx = nb_rb;
           UE_info->eNB_UE_stats[CC_id][UE_id].total_rbs_used_retx += nb_rb;
@@ -1982,6 +1939,7 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
           // store stats
           eNB->eNB_stats[CC_id].dlsch_bytes_tx+=sdu_length_total;
           eNB->eNB_stats[CC_id].dlsch_pdus_tx+=1;
+          UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[0]++;
           UE_info->eNB_UE_stats[CC_id][UE_id].rbs_used = nb_rb;
           UE_info->eNB_UE_stats[CC_id][UE_id].total_rbs_used += nb_rb;
           UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_mcs1=eNB_UE_stats->dlsch_mcs1;
@@ -2015,19 +1973,19 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
               UE_info->UE_template[CC_id][UE_id].pucch_tpc_tx_frame=frameP;
               UE_info->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe=subframeP;
 
-              if (snr > target_snr + 4) {
+              if (snr > target_snr + PUCCH_PCHYST) {
                 tpc = 0; //-1
-                tpc_accumulated--;
-              } else if (snr < target_snr - 4) {
+                ue_sched_ctl->pucch_tpc_accumulated[CC_id]--;
+              } else if (snr < target_snr - PUCCH_PCHYST) {
                 tpc = 2; //+1
-                tpc_accumulated++;
+                ue_sched_ctl->pucch_tpc_accumulated[CC_id]++;
               } else {
                 tpc = 1; //0
               }
 
               LOG_D(MAC,"[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, snr/target snr %d/%d\n",
                     module_idP,frameP, subframeP,harq_pid,tpc,
-                    tpc_accumulated,snr,target_snr);
+                    ue_sched_ctl->pucch_tpc_accumulated[CC_id],snr,target_snr);
             } // Po_PUCCH has been updated
             else {
               tpc = 1; //0
@@ -2245,7 +2203,6 @@ void ulsch_scheduler_pre_ue_select_fairRR(
   uint8_t first_ue_id[MAX_NUM_CCs][20];
   uint8_t ul_inactivity_num[MAX_NUM_CCs];
   uint8_t ul_inactivity_id[MAX_NUM_CCs][20]={{0}};
-  //  LTE_DL_FRAME_PARMS *frame_parms;
   uint8_t ulsch_ue_max_num[MAX_NUM_CCs];
   uint16_t saved_ulsch_dci[MAX_NUM_CCs];
   rnti_t rnti;
@@ -2263,7 +2220,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
     //save ulsch dci number
     saved_ulsch_dci[CC_id] = eNB->HI_DCI0_req[CC_id][subframeP].hi_dci0_request_body.number_of_dci;
     // maximum multiplicity number
-    ulsch_ue_max_num[CC_id] =RC.rrc[module_idP]->configuration.radioresourceconfig[CC_id].ue_multiple_max;
+    ulsch_ue_max_num[CC_id] =eNB->ue_multiple_max;
     cc_id_flag[CC_id] = 0;
     ue_first_num[CC_id] = 0;
     ul_inactivity_num[CC_id] = 0;
@@ -2290,6 +2247,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
     // UL DCI
     HI_DCI0_req   = &eNB->HI_DCI0_req[CC_id][subframeP].hi_dci0_request_body;
 
+
     if ( (ulsch_ue_select[CC_id].ue_num >= ulsch_ue_max_num[CC_id]) || (cc_id_flag[CC_id] == 1) ) {
       cc_id_flag[CC_id] = 1;
       HI_DCI0_req->number_of_dci = saved_ulsch_dci[CC_id];
@@ -2322,6 +2280,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
     //round
     round = UE_info->UE_sched_ctrl[UE_id].round_UL[CC_id][harq_pid];
 
+
     if ( round > 0 ) {
       hi_dci0_pdu   = &HI_DCI0_req->hi_dci0_pdu_list[HI_DCI0_req->number_of_dci+HI_DCI0_req->number_of_hi];
       format_flag = 2;
@@ -2352,6 +2311,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
       UE_info->UE_template[CC_id][UE_id].scheduled_ul_bytes = 0;
     }
 
+
     if ( UE_id > last_ulsch_ue_id[CC_id] && ((ulsch_ue_select[CC_id].ue_num+ue_first_num[CC_id]) < ulsch_ue_max_num[CC_id]) ) {
       if ( bytes_to_schedule > 0 ) {
         first_ue_id[CC_id][ue_first_num[CC_id]]= UE_id;
@@ -2369,9 +2329,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
 
       UE_sched_ctl = &UE_info->UE_sched_ctrl[UE_id];
       rrc_status = mac_eNB_get_rrc_status(module_idP, rnti);
-
-      if ( ((UE_sched_ctl->ul_inactivity_timer>64)&&(UE_sched_ctl->ul_scheduled==0))  ||
-           ((UE_sched_ctl->ul_inactivity_timer>10)&&(UE_sched_ctl->ul_scheduled==0)&&(rrc_status < RRC_CONNECTED)) ||
+      if ( ((UE_sched_ctl->ul_inactivity_timer>10)&&(UE_sched_ctl->ul_scheduled==0)&&(rrc_status < RRC_CONNECTED)) ||
            ((UE_sched_ctl->cqi_req_timer>64)&&((rrc_status >= RRC_CONNECTED))) ) {
         first_ue_id[CC_id][ue_first_num[CC_id]]= UE_id;
         first_ue_total[CC_id] [ue_first_num[CC_id]] = 0;
@@ -2482,6 +2440,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
     }
     rrc_status = mac_eNB_get_rrc_status(module_idP, rnti);
 
+
     if ( (bytes_to_schedule > 0) || (UE_info->UE_template[CC_id][UE_id].ul_SR > 0) ||
          ((UE_sched_ctl->ul_inactivity_timer>64)&&(UE_sched_ctl->ul_scheduled==0))  ||
          ((UE_sched_ctl->ul_inactivity_timer>10)&&(UE_sched_ctl->ul_scheduled==0)&&(rrc_status < RRC_CONNECTED)) ||
@@ -2595,7 +2554,6 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
   eNB_MAC_INST       *eNB = RC.mac[module_idP];
   UE_info_t          *UE_info= &eNB->UE_info;
   UE_TEMPLATE        *UE_template = NULL;
-  LTE_DL_FRAME_PARMS *frame_parms = NULL;
   uint8_t            ue_num_temp;
   uint8_t            total_rbs=0;
   uint8_t            average_rbs;
@@ -2617,18 +2575,17 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
   // MCS and RB assgin
   for ( CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++ ) {
     cc = &RC.mac[module_idP]->common_channels[CC_id];
-    frame_parms = &(RC.eNB[module_idP][CC_id]->frame_parms);
-
+    int N_RB_UL = to_prb(cc->ul_Bandwidth);
     if (cc->tdd_Config) { //TDD
-      if (frame_parms->N_RB_UL == 25) {
+      if (N_RB_UL == 25) {
         num_pucch_rb = 1;
-      } else if (frame_parms->N_RB_UL == 50) {
+      } else if (N_RB_UL == 50) {
         num_pucch_rb = 2;
       } else {
         num_pucch_rb = 3;
       }
     } else {//FDD
-      if (frame_parms->N_RB_UL == 25) {
+      if (N_RB_UL == 25) {
         num_pucch_rb = 1;
       } else {
         num_pucch_rb = 2;
@@ -2653,13 +2610,13 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
         continue;
       }
 
-      if (first_rb[CC_id] >= frame_parms->N_RB_UL-num_pucch_rb ) {
+      if (first_rb[CC_id] >= N_RB_UL-num_pucch_rb ) {
         LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d: dropping, not enough RBs\n",
               module_idP,frameP,subframeP,UE_id,UE_RNTI(CC_id,UE_id),CC_id);
         break;
       }
 
-      total_rbs = frame_parms->N_RB_UL-num_pucch_rb-first_rb[CC_id];
+      total_rbs = N_RB_UL-num_pucch_rb-first_rb[CC_id];
       average_rbs = (int)round((double)total_rbs/(double)ue_num_temp);
 
       if ( average_rbs < 3 ) {
@@ -2727,19 +2684,20 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
           UE_info->UE_sched_ctrl[UE_id].pusch_rx_num_old[CC_id] = UE_info->UE_sched_ctrl[UE_id].pusch_rx_num[CC_id];
           UE_info->UE_sched_ctrl[UE_id].pusch_rx_error_num_old[CC_id] = UE_info->UE_sched_ctrl[UE_id].pusch_rx_error_num[CC_id];
 
-          if(bler < 0.5) {
-            if(UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id] !=0) {
-              UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id]--;
+          if (eNB->use_mcs_offset == 1) {
+            if(bler < eNB->bler_lower) {
+              if(UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id] !=0) {
+                UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id]--;
+              }
             }
-          }
-          if(bler >= 2) {
-            UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id]++;
-            if(UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id] >= 20) {
-              UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id]=20;
+            if(bler >= eNB->bler_upper) {
+              UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id]++;
+              if(UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id] >= 20) {
+                UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id]=20;
+              }
             }
           }
         }
-
         snr = UE_info->UE_sched_ctrl[UE_id].pusch_snr_avg[CC_id];
  
         mcs = 20 - UE_info->UE_sched_ctrl[UE_id].mcs_offset[CC_id];
@@ -2758,15 +2716,20 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
           if ( ulsch_ue_select[CC_id].list[ulsch_ue_num].ul_total_buffer > 0 ) {
             rb_table_index = 2;
             tbs = get_TBS_UL(mcs,rb_table[rb_table_index]);
-            tx_power = (int8_t)(hundred_times_log10_NPRB[rb_table[rb_table_index] - 1] / 100);
+            tx_power= estimate_ue_tx_power(0,tbs*8,rb_table[rb_table_index],0,cc->Ncp,0);
 
-            while ( (tbs < bytes_to_schedule) && (rb_table[rb_table_index]<(frame_parms->N_RB_UL-num_pucch_rb-first_rb[CC_id])) &&
-                    ((UE_template->phr_info - tx_power) > 0) && (rb_table_index < 32 )) {
-              rb_table_index++;
+            while ( (((UE_template->phr_info - tx_power) < 0 ) || (tbs > bytes_to_schedule)) && (mcs > 3) ) {
+              mcs--;
               tbs = get_TBS_UL(mcs,rb_table[rb_table_index]);
-              tx_power = (int8_t)(hundred_times_log10_NPRB[rb_table[rb_table_index] - 1] / 100);
+              tx_power= estimate_ue_tx_power(0,tbs*8,rb_table[rb_table_index],0,cc->Ncp,0);
             }
 
+            while ( (tbs < bytes_to_schedule) && (rb_table[rb_table_index]<(N_RB_UL-num_pucch_rb-first_rb[CC_id])) &&
+                    ((UE_template->phr_info - tx_power) > 0) && (rb_table_index < eNB->max_ul_rb_index )) {
+              rb_table_index++;
+              tbs = get_TBS_UL(mcs,rb_table[rb_table_index]);
+              tx_power= estimate_ue_tx_power(0,tbs*8,rb_table[rb_table_index],0,cc->Ncp,0);
+            }
             if ( rb_table[rb_table_index]<3 ) {
               rb_table_index=2;
             }
@@ -2807,11 +2770,12 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
               UE_info->UE_template[CC_id][UE_id].pre_assigned_mcs_ul = 10;
             } else {
               // assigne RBS( 3 RBs)
+/*
               first_rb[CC_id] = first_rb[CC_id] + 3;
               UE_info->UE_template[CC_id][UE_id].pre_allocated_nb_rb_ul = 3;
               UE_info->UE_template[CC_id][UE_id].pre_allocated_rb_table_index_ul = 2;
-              UE_info->UE_template[CC_id][UE_id].pre_assigned_mcs_ul = 10;
-            }
+              UE_info->UE_template[CC_id][UE_id].pre_assigned_mcs_ul = 10; 
+*/            }
           }
         } else if ( ulsch_ue_select[CC_id].list[ulsch_ue_num].ue_priority  == SCH_UL_INACTIVE ) {
           // assigne RBS( 3 RBs)
@@ -2913,12 +2877,10 @@ schedule_ulsch_fairRR(module_id_t module_idP, frame_t frameP,
 
   ULSCH_UE_SELECT ulsch_ue_select[MAX_NUM_CCs];
   memset(ulsch_ue_select, 0, sizeof(ulsch_ue_select));
-  LTE_DL_FRAME_PARMS *frame_parms ;
 
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
     cc = &mac->common_channels[CC_id];
-    frame_parms= &RC.eNB[module_idP][CC_id]->frame_parms;
-
+    int N_RB_UL=to_prb(cc->ul_Bandwidth);
     // output of scheduling, the UE numbers in RBs, where it is in the code???
     // check if RA (Msg3) is active in this subframeP, if so skip the PRBs used for Msg3
     // Msg3 is using 1 PRB so we need to increase first_rb accordingly
@@ -2928,13 +2890,13 @@ schedule_ulsch_fairRR(module_id_t module_idP, frame_t frameP,
         ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].ue_priority = SCH_UL_MSG3;
 
         if (cc->tdd_Config == NULL) {
-          if(frame_parms->N_RB_UL == 25) {
+          if(N_RB_UL == 25) {
             ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].start_rb = 1;
           } else {
             ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].start_rb = 2;
           }
         } else {
-          switch(frame_parms->N_RB_UL) {
+          switch(N_RB_UL) {
             case 25:
             default:
               ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].start_rb = 1;
@@ -2958,14 +2920,18 @@ schedule_ulsch_fairRR(module_id_t module_idP, frame_t frameP,
     }
 
     //PRACH
-    if (is_prach_subframe(frame_parms,sched_frame,sched_subframe)==1) {
+    if (is_prach_subframe0(cc->tdd_Config!=NULL ? cc->tdd_Config->subframeAssignment : 0,cc->tdd_Config!=NULL ? 1 : 0,
+                           cc->radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex,
+                           sched_frame,sched_subframe)==1) {
       ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].ue_priority = SCH_UL_PRACH;
-      ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].start_rb = get_prach_prb_offset(
-            frame_parms,
-            frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
-            frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset,
-            0,//tdd_mapindex
-            frameP); //Nf --> shouldn't it be sched_frame ???
+      ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].start_rb = 
+           get_prach_prb_offset(cc->tdd_Config!=NULL ? 1 : 0, 
+                                cc->tdd_Config!=NULL ? cc->tdd_Config->subframeAssignment : 0,
+                                to_prb(cc->ul_Bandwidth),
+                                cc->radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex,
+                                cc->radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_FreqOffset,
+                                0,
+                                sched_frame);
       ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].nb_rb = 6;
       ulsch_ue_select[CC_id].list[ulsch_ue_select[CC_id].ue_num].UE_id = -1;
       ulsch_ue_select[CC_id].ue_num++;
@@ -2993,7 +2959,6 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
   uint32_t          cqi_req,cshift,ndi,tpc;
   int32_t           snr;
   int32_t           target_snr=0;
-  static int32_t    tpc_accumulated=0;
   int               CC_id,ulsch_ue_num;
   int               N_RB_UL;
   eNB_MAC_INST      *eNB = RC.mac[module_idP];
@@ -3012,7 +2977,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
   nfapi_hi_dci0_request_pdu_t    *hi_dci0_pdu;
   nfapi_ul_config_request_body_t *ul_req_tmp;
   nfapi_ul_config_ulsch_harq_information *ulsch_harq_information;
-  LOG_D(MAC,"entering ulsch preprocesor\n");
+  LOG_D(MAC,"entering ulsch preprocesor for %d.%d\n",sched_frame,sched_subframeP);
   ulsch_scheduler_pre_processor_fairRR(module_idP,
                                        frameP,
                                        subframeP,
@@ -3185,12 +3150,12 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
         UE_template->pusch_tpc_tx_frame=frameP;
         UE_template->pusch_tpc_tx_subframe=subframeP;
 
-        if (snr > target_snr + 4) {
+        if (snr > target_snr + PUSCH_PCHYST) {
           tpc = 0; //-1
-          tpc_accumulated--;
-        } else if (snr < target_snr - 4) {
+          UE_sched_ctrl->pusch_tpc_accumulated[CC_id]--;
+        } else if (snr < target_snr - PUSCH_PCHYST) {
           tpc = 2; //+1
-          tpc_accumulated++;
+          UE_sched_ctrl->pusch_tpc_accumulated[CC_id]++;
         } else {
           tpc = 1; //0
         }
@@ -3201,7 +3166,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
       if (tpc!=1) {
         LOG_D(MAC,"[eNB %d] ULSCH schedulerRR: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, snr/target snr %d/%d\n",
               module_idP,frameP,subframeP,harq_pid,tpc,
-              tpc_accumulated,snr,target_snr);
+              UE_sched_ctrl->pusch_tpc_accumulated[CC_id],snr,target_snr);
       }
 
       // new transmission
@@ -3214,6 +3179,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
               UE_sched_ctrl->cqi_req_timer);
         ndi = 1-UE_template->oldNDI_UL[harq_pid];
         UE_template->oldNDI_UL[harq_pid]=ndi;
+        UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[0]++;
         UE_info->eNB_UE_stats[CC_id][UE_id].snr = snr;
         UE_info->eNB_UE_stats[CC_id][UE_id].target_snr = target_snr;
         UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=UE_template->pre_assigned_mcs_ul;
@@ -3402,6 +3368,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
           T_INT(round));
         UE_info->eNB_UE_stats[CC_id][UE_id].snr = snr;
         UE_info->eNB_UE_stats[CC_id][UE_id].target_snr = target_snr;
+
         uint8_t mcs_rv = 0;
 
         if(rvidx_tab[round&3]==1) {
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
index 47c27798bfa445e52e3b9536cf4fc68fedc43fe1..c83cc1d9d374fc063c35fb27aaa2a089a0671434 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
@@ -57,7 +57,7 @@
 #include "flexran_agent_mac.h"
 #include <dlfcn.h>
 #include <openair2/LAYER2/MAC/mac.h>
-
+#include "common/utils/lte/prach_utils.h"
 
 #include "T.h"
 
@@ -144,16 +144,18 @@ rx_sdu(const module_id_t enb_mod_idP,
   if (UE_id != -1) {
     UE_scheduling_control = &UE_info->UE_sched_ctrl[UE_id];
     UE_template_ptr = &UE_info->UE_template[CC_idP][UE_id];
-    LOG_D(MAC, "[eNB %d][PUSCH %d] CC_id %d %d.%d Received ULSCH sdu round %d from PHY (rnti %x, UE_id %d) ul_cqi %d\n",
+    LOG_D(MAC, "[eNB %d][PUSCH %d] CC_id %d %d.%d Received ULSCH (%s) sdu round %d from PHY (rnti %x, UE_id %d) ul_cqi %d, timing_advance %d\n",
           enb_mod_idP,
           harq_pid,
           CC_idP,
           frameP,
           subframeP,
+          sduP==NULL ? "in error" : "OK",
           UE_scheduling_control->round_UL[CC_idP][harq_pid],
           current_rnti,
           UE_id,
-          ul_cqi);
+          ul_cqi,
+	  timing_advance);
     AssertFatal(UE_scheduling_control->round_UL[CC_idP][harq_pid] < 8, "round >= 8\n");
 
     if (sduP != NULL) {
@@ -219,7 +221,7 @@ rx_sdu(const module_id_t enb_mod_idP,
       if (UE_scheduling_control->round_UL[CC_idP][harq_pid] == 3) {
         UE_scheduling_control->ul_scheduled &= (~(1 << harq_pid));
         UE_scheduling_control->round_UL[CC_idP][harq_pid] = 0;
-
+        UE_info->eNB_UE_stats[CC_idP][UE_id].ulsch_errors++;
         if (UE_scheduling_control->ul_consecutive_errors++ == 10) {
           UE_scheduling_control->ul_failure_timer = 1;
         }
@@ -236,6 +238,7 @@ rx_sdu(const module_id_t enb_mod_idP,
         }
       } else {
         UE_scheduling_control->round_UL[CC_idP][harq_pid]++;
+        UE_info->eNB_UE_stats[CC_idP][UE_id].ulsch_rounds[UE_scheduling_control->round_UL[CC_idP][harq_pid]]++;
       }
 
       /* CDRX UL HARQ timers */
@@ -287,14 +290,17 @@ rx_sdu(const module_id_t enb_mod_idP,
     AssertFatal(mac->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx > 1,
                 "maxHARQ %d should be greater than 1\n",
                 (int) mac->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx);
-    LOG_D(MAC, "[eNB %d][PUSCH %d] CC_id %d [RAPROC Msg3] Received ULSCH sdu round %d from PHY (rnti %x, RA_id %d) ul_cqi %d\n",
+    LOG_D(MAC, "[eNB %d][PUSCH %d] CC_id %d [RAPROC Msg3] Received ULSCH sdu (%s) round %d from PHY (rnti %x, RA_id %d) ul_cqi %d, timing advance %d\n",
           enb_mod_idP,
           harq_pid,
           CC_idP,
+	  sduP!=NULL ? "OK" : "in error",
           ra->msg3_round,
           current_rnti,
           RA_id,
-          ul_cqi);
+          ul_cqi,
+	  timing_advance);
+
     first_rb = ra->msg3_first_rb;
 
     if (sduP == NULL) { // we've got an error on Msg3
@@ -403,7 +409,8 @@ rx_sdu(const module_id_t enb_mod_idP,
     switch (rx_ces[i]) {  // implement and process PHR + CRNTI + BSR
       case POWER_HEADROOM:
         if (UE_id != -1) {
-          UE_template_ptr->phr_info = (payload_ptr[0] & 0x3f) - PHR_MAPPING_OFFSET + (int8_t)(hundred_times_log10_NPRB[UE_template_ptr->nb_rb_ul[harq_pid] - 1] / 100);
+          /*UE_template_ptr->phr_info = (payload_ptr[0] & 0x3f) - PHR_MAPPING_OFFSET + (int8_t)(hundred_times_log10_NPRB[UE_template_ptr->nb_rb_ul[harq_pid] - 1] / 100);i*/
+	  UE_template_ptr->phr_info = (payload_ptr[0] & 0x3f) - PHR_MAPPING_OFFSET + estimate_ue_tx_power(0,sdu_lenP*8,UE_template_ptr->nb_rb_ul[harq_pid],0,mac->common_channels[CC_idP].Ncp,0);
 
           if (UE_template_ptr->phr_info > 40) {
             UE_template_ptr->phr_info = 40;
@@ -424,7 +431,7 @@ rx_sdu(const module_id_t enb_mod_idP,
       case CRNTI:
         old_rnti = (((uint16_t) payload_ptr[0]) << 8) + payload_ptr[1];
         old_UE_id = find_UE_id(enb_mod_idP, old_rnti);
-        LOG_D(MAC, "[eNB %d] Frame %d, Subframe %d CC_id %d MAC CE_LCID %d (ce %d/%d): CRNTI %x (UE_id %d) in Msg3\n",
+        LOG_I(MAC, "[eNB %d] Frame %d, Subframe %d CC_id %d MAC CE_LCID %d (ce %d/%d): CRNTI %x (UE_id %d) in Msg3\n",
               enb_mod_idP,
               frameP,
               subframeP,
@@ -438,7 +445,7 @@ rx_sdu(const module_id_t enb_mod_idP,
         /* Receiving CRNTI means that the current rnti has to go away */
         if (old_UE_id != -1) {
           if (mac_eNB_get_rrc_status(enb_mod_idP,old_rnti) ==  RRC_HO_EXECUTION) {
-            LOG_I(MAC, "[eNB %d] Frame %d, Subframe %d CC_id %d : (rnti %x UE_id %d) Handover case\n",
+            LOG_D(MAC, "[eNB %d] Frame %d, Subframe %d CC_id %d : (rnti %x UE_id %d) Handover case\n",
                   enb_mod_idP,
                   frameP,
                   subframeP,
@@ -1293,16 +1300,19 @@ schedule_ulsch(module_id_t module_idP,
 
   /* Note: RC.nb_mac_CC[module_idP] should be lower than or equal to NFAPI_CC_MAX */
   for (int CC_id = 0; CC_id < RC.nb_mac_CC[module_idP]; CC_id++, cc++) {
-    LTE_DL_FRAME_PARMS *frame_parms = &RC.eNB[module_idP][CC_id]->frame_parms;
-    if (is_prach_subframe(frame_parms, sched_frame, sched_subframe)) {
-      int start_rb = get_prach_prb_offset(
-          frame_parms,
-          frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
-          frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset,
-          0, // tdd_mapindex
-          sched_frame); // Nf
+    
+    if (is_prach_subframe0(cc->tdd_Config!=NULL ? cc->tdd_Config->subframeAssignment : 0,cc->tdd_Config!=NULL ? 1 : 0,
+                           cc->radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex, 
+                           sched_frame, sched_subframe)) {
+      int start_rb = get_prach_prb_offset(cc->tdd_Config!=NULL ? 1 : 0,
+                                          cc->tdd_Config!=NULL ? cc->tdd_Config->subframeAssignment : 0,
+                                          to_prb(cc->ul_Bandwidth),
+                                          cc->radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex,
+                                          cc->radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_FreqOffset,
+                                          0, // tdd_mapindex
+                                          sched_frame); // Nf
       for (int i = 0; i < 6; i++)
-        cc[CC_id].vrb_map_UL[start_rb + i] = 1;
+        cc->vrb_map_UL[start_rb + i] = 1;
     }
 
     /* HACK: let's remove the PUCCH from available RBs
@@ -1314,24 +1324,24 @@ schedule_ulsch(module_id_t module_idP,
      */
     switch (to_prb(cc[CC_id].ul_Bandwidth)) {
       case 25:
-        cc[CC_id].vrb_map_UL[0] = 1;
-        cc[CC_id].vrb_map_UL[24] = 1;
+        cc->vrb_map_UL[0] = 1;
+        cc->vrb_map_UL[24] = 1;
         break;
 
       case 50:
-        cc[CC_id].vrb_map_UL[0] = 1;
-        cc[CC_id].vrb_map_UL[1] = 1;
-        cc[CC_id].vrb_map_UL[48] = 1;
-        cc[CC_id].vrb_map_UL[49] = 1;
+        cc->vrb_map_UL[0] = 1;
+        cc->vrb_map_UL[1] = 1;
+        cc->vrb_map_UL[48] = 1;
+        cc->vrb_map_UL[49] = 1;
         break;
 
       case 100:
-        cc[CC_id].vrb_map_UL[0] = 1;
-        cc[CC_id].vrb_map_UL[1] = 1;
-        cc[CC_id].vrb_map_UL[2] = 1;
-        cc[CC_id].vrb_map_UL[97] = 1;
-        cc[CC_id].vrb_map_UL[98] = 1;
-        cc[CC_id].vrb_map_UL[99] = 1;
+        cc->vrb_map_UL[0] = 1;
+        cc->vrb_map_UL[1] = 1;
+        cc->vrb_map_UL[2] = 1;
+        cc->vrb_map_UL[97] = 1;
+        cc->vrb_map_UL[98] = 1;
+        cc->vrb_map_UL[99] = 1;
         break;
 
       default:
@@ -1349,6 +1359,8 @@ schedule_ulsch(module_id_t module_idP,
 /*
 * Schedule the DCI0 for ULSCH
 */
+
+
 void
 schedule_ulsch_rnti(module_id_t   module_idP,
                     int           CC_id,
@@ -1356,7 +1368,6 @@ schedule_ulsch_rnti(module_id_t   module_idP,
                     sub_frame_t   subframeP,
                     unsigned char sched_subframeP) {
   /* TODO: does this need to be static? */
-  static int32_t tpc_accumulated = 0;
   /* values from 0 to 7 can be used for mapping the cyclic shift
    * (36.211 , Table 5.5.2.1.1-1) */
   const uint32_t cshift = 0;
@@ -1481,8 +1492,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
     /* Power control */
     /*
      * Compute the expected ULSCH RX snr (for the stats)
-     * This is the normalized RX snr and this should be constant (regardless
-     * of mcs) Is not in dBm, unit from nfapi, converting to dBm
+     * 
      */
     const int32_t snr = UE_sched_ctrl_ptr->pusch_snr[CC_id];
     const int32_t target_snr = mac->puSch10xSnr / 10;
@@ -1501,12 +1511,12 @@ schedule_ulsch_rnti(module_id_t   module_idP,
       UE_template_ptr->pusch_tpc_tx_frame = frameP;
       UE_template_ptr->pusch_tpc_tx_subframe = subframeP;
 
-      if (snr > target_snr + 4) {
+      if (snr > target_snr + PUSCH_PCHYST) {
         tpc = 0; // -1
-        tpc_accumulated--;
-      } else if (snr < target_snr - 4) {
+        UE_sched_ctrl_ptr->pusch_tpc_accumulated[CC_id]--;
+      } else if (snr < target_snr - PUSCH_PCHYST) {
         tpc = 2; // +1
-        tpc_accumulated++;
+        UE_sched_ctrl_ptr->pusch_tpc_accumulated[CC_id]++;
       }
     }
     if (tpc != 1) {
@@ -1518,7 +1528,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
             subframeP,
             harq_pid,
             tpc,
-            tpc_accumulated,
+            UE_sched_ctrl_ptr->pusch_tpc_accumulated[CC_id],
             snr,
             target_snr);
     }
@@ -1572,6 +1582,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
       const uint8_t ndi = 1 - UE_template_ptr->oldNDI_UL[harq_pid]; // NDI: new data indicator
       const uint8_t mcs = UE_template_ptr->pre_assigned_mcs_ul;
       UE_template_ptr->oldNDI_UL[harq_pid] = ndi;
+      UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[0]++;
       UE_info->eNB_UE_stats[CC_id][UE_id].snr = snr;
       UE_info->eNB_UE_stats[CC_id][UE_id].target_snr = target_snr;
       UE_template_ptr->mcs_UL[harq_pid] = mcs;
@@ -1593,8 +1604,6 @@ schedule_ulsch_rnti(module_id_t   module_idP,
 
       UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2 = mcs;
 
-      while (rb_table[rb_table_index] > 45 && rb_table_index > 0)
-        rb_table_index--;
 
       UE_template_ptr->TBS_UL[harq_pid] = get_TBS_UL(mcs, rb_table[rb_table_index]);
       UE_info->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx += rb_table[rb_table_index];
@@ -2080,10 +2089,10 @@ void schedule_ulsch_rnti_emtc(module_id_t   module_idP,
 
             if (snr > target_snr + 4) {
               tpc = 0; //-1
-              UE_sched_ctrl->tpc_accumulated[CC_id]--;
+              UE_sched_ctrl->pusch_tpc_accumulated[CC_id]--;
             } else if (snr < target_snr - 4) {
               tpc = 2; //+1
-              UE_sched_ctrl->tpc_accumulated[CC_id]++;
+              UE_sched_ctrl->pusch_tpc_accumulated[CC_id]++;
             } else {
               tpc = 1; //0
             }
@@ -2098,7 +2107,7 @@ void schedule_ulsch_rnti_emtc(module_id_t   module_idP,
                   subframeP,
                   harq_pid,
                   tpc,
-                  UE_sched_ctrl->tpc_accumulated[CC_id],
+                  UE_sched_ctrl->pusch_tpc_accumulated[CC_id],
                   snr,
                   target_snr);
           }
diff --git a/openair2/LAYER2/MAC/mac.h b/openair2/LAYER2/MAC/mac.h
index ae8522bc83488a128911fb60fb78d8cab613093c..062f613526cd429c09ae5e871285c6ec423dd8b9 100644
--- a/openair2/LAYER2/MAC/mac.h
+++ b/openair2/LAYER2/MAC/mac.h
@@ -83,7 +83,7 @@
 
 #define MAX_MAC_INST 16
 #define BCCH_PAYLOAD_SIZE_MAX 128
-#define CCCH_PAYLOAD_SIZE_MAX 128
+#define CCCH_PAYLOAD_SIZE_MAX 512 
 #define PCCH_PAYLOAD_SIZE_MAX 128
 #define RAR_PAYLOAD_SIZE_MAX 128
 
@@ -143,7 +143,10 @@
 #define MAX_SUPPORTED_BW  4
 /*!\brief CQI values range from 1 to 15 (4 bits) */
 #define CQI_VALUE_RANGE 16
-
+/*!\brief Hysteresis of PUSCH power control loop */
+#define PUSCH_PCHYST 1
+/*!\brief Hysteresis of PUCCH power control loop */
+#define PUCCH_PCHYST 1
 /*!\brief value for indicating BSR Timer is not running */
 #define MAC_UE_BSR_TIMER_NOT_RUNNING   (0xFFFF)
 
@@ -615,6 +618,8 @@ typedef struct {
 
   // here for RX
   //
+
+  uint32_t ulsch_rounds[4];
   uint32_t ulsch_bitrate;
   //
   uint32_t ulsch_bytes_rx;
@@ -684,6 +689,17 @@ typedef struct {
   // Length of SDU Got from LC DL
   uint32_t sdu_length_tx[NB_RB_MAX];
 
+  int lc_bytes_tx[64];
+  int dlsch_rounds[8];
+  int dlsch_errors;
+  int dlsch_total_bytes;
+
+  int lc_bytes_rx[64];
+  int ulsch_rounds[8];
+  int ulsch_errors;
+  int ulsch_total_bytes_scheduled;
+  int ulsch_total_bytes_rx;
+
 
   /// overall
   //
@@ -776,7 +792,6 @@ typedef struct {
   uint32_t num_mac_sdu_rx;
   // Length of SDU Got from LC UL - Size array can be refined
   uint32_t      sdu_length_rx[NB_RB_MAX];
-
 } eNB_UE_STATS;
 /*! \brief eNB template for UE context information  */
 
@@ -982,7 +997,8 @@ typedef struct {
   uint16_t feedback_cnt[NFAPI_CC_MAX];
   uint16_t timing_advance;
   uint16_t timing_advance_r9;
-  uint8_t tpc_accumulated[NFAPI_CC_MAX];
+  int8_t pusch_tpc_accumulated[NFAPI_CC_MAX];
+  int8_t pucch_tpc_accumulated[NFAPI_CC_MAX];
   uint8_t periodic_wideband_cqi[NFAPI_CC_MAX];
   uint8_t periodic_wideband_spatial_diffcqi[NFAPI_CC_MAX];
   uint8_t periodic_wideband_pmi[NFAPI_CC_MAX];
@@ -1342,6 +1358,7 @@ typedef struct {
   uint8_t FeMBMS_flag;
 } COMMON_channels_t;
 /*! \brief top level eNB MAC structure */
+
 typedef struct eNB_MAC_INST_s {
   /// Ethernet parameters for northbound midhaul interface
   eth_params_t eth_params_n;
@@ -1435,6 +1452,17 @@ typedef struct eNB_MAC_INST_s {
 
   int32_t puSch10xSnr;
   int32_t puCch10xSnr;
+
+  int max_ul_rb_index;
+
+  int ue_multiple_max;
+
+  int use_mcs_offset;
+
+  double bler_lower;
+
+  double bler_upper;
+  pthread_t mac_stats_thread;
 } eNB_MAC_INST;
 
 /*
diff --git a/openair2/LAYER2/MAC/mac_extern.h b/openair2/LAYER2/MAC/mac_extern.h
index cda64ec0e9834b5bf2ba09cc6e426ec003f66593..cbca693b2abd8fc9b637cafab2428c29e6784e72 100644
--- a/openair2/LAYER2/MAC/mac_extern.h
+++ b/openair2/LAYER2/MAC/mac_extern.h
@@ -78,5 +78,8 @@ extern eNB_UE_STATS pre_scd_eNB_UE_stats[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
 
 extern mac_rlc_am_muilist_t rlc_am_mui;
 extern SCHEDULER_MODES global_scheduler_mode;
+
+#include "common/ran_context.h"
+extern RAN_CONTEXT_t RC;
 extern rb_id_t mbms_rab_id;
 #endif //DEF_H
diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c
index 59554425ccac2709ee25386df2a6a69ebd300176..a4e924c68b7abc1474cb8e276346b3dffe0a3594 100644
--- a/openair2/LAYER2/MAC/main.c
+++ b/openair2/LAYER2/MAC/main.c
@@ -40,8 +40,84 @@
 #include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
 #include "common/ran_context.h"
 #include "intertask_interface.h"
+#include <pthread.h>
 
 extern RAN_CONTEXT_t RC;
+extern int oai_exit;
+
+void *mac_stats_thread(void *param) {
+  eNB_MAC_INST     *mac      = (eNB_MAC_INST *)param;
+  FILE *fd;
+  UE_info_t        *UE_info  = &(mac->UE_info);
+
+  while (!oai_exit) {
+    sleep(1);
+    fd=fopen("MAC_stats.log","w+");
+    AssertFatal(fd!=NULL,"Cannot open MAC_stats.log\n");
+
+    for (int UE_id = 0; UE_id < MAX_MOBILES_PER_ENB; UE_id++) {
+      if (UE_info->active[UE_id]) {
+        int rnti = UE_RNTI(mac->Mod_id, UE_id);
+        int CC_id = UE_PCCID(mac->Mod_id, UE_id);
+        UE_sched_ctrl_t *UE_scheduling_control = &(UE_info->UE_sched_ctrl[UE_id]);
+
+        double total_bler;
+        if(UE_scheduling_control->pusch_rx_num[CC_id] == 0 && UE_scheduling_control->pusch_rx_error_num[CC_id] == 0) {
+          total_bler = 0;
+        }
+        else {
+          total_bler = (double)UE_scheduling_control->pusch_rx_error_num[CC_id] / (double)(UE_scheduling_control->pusch_rx_error_num[CC_id] + UE_scheduling_control->pusch_rx_num[CC_id]) * 100;
+        }
+        fprintf(fd,"MAC UE rnti %x : %s, PHR %d DLCQI %d PUSCH %d PUCCH %d RLC disc %d UL-stat rcv %lu err %lu bler %lf (%lf/%lf) total_bler %lf mcsoff %d pre_allocated nb_rb %d, mcs %d, bsr %u sched %u tbs %lu cnt %u , DL-stat tbs %lu cnt %u rb %u buf %u 1st %u ret %u ri %d\n",
+              rnti,
+              UE_scheduling_control->ul_out_of_sync == 0 ? "in synch" : "out of sync",
+              UE_info->UE_template[CC_id][UE_id].phr_info,
+              UE_scheduling_control->dl_cqi[CC_id],
+              UE_scheduling_control->pusch_snr/*_avg*/[CC_id],
+              UE_scheduling_control->pucch1_snr[CC_id],
+              UE_scheduling_control->rlc_out_of_resources_cnt,
+              UE_scheduling_control->pusch_rx_num[CC_id],
+              UE_scheduling_control->pusch_rx_error_num[CC_id],
+              UE_scheduling_control->pusch_bler[CC_id],
+              mac->bler_lower,mac->bler_upper,total_bler,
+              UE_scheduling_control->mcs_offset[CC_id],
+              UE_info->UE_template[CC_id][UE_id].pre_allocated_nb_rb_ul,
+              UE_info->UE_template[CC_id][UE_id].pre_assigned_mcs_ul,
+              UE_info->UE_template[CC_id][UE_id].estimated_ul_buffer,
+              UE_info->UE_template[CC_id][UE_id].scheduled_ul_bytes,
+              UE_info->eNB_UE_stats[CC_id][UE_id].total_pdu_bytes_rx,
+              UE_info->eNB_UE_stats[CC_id][UE_id].total_num_pdus_rx,
+              UE_info->eNB_UE_stats[CC_id][UE_id].total_pdu_bytes,
+              UE_info->eNB_UE_stats[CC_id][UE_id].total_num_pdus,
+              UE_info->eNB_UE_stats[CC_id][UE_id].total_rbs_used,
+#if defined(PRE_SCD_THREAD)
+              UE_info->UE_template[CC_id][UE_id].dl_buffer_total,
+#else
+              0,
+#endif
+              UE_scheduling_control->first_cnt[CC_id],
+              UE_scheduling_control->ret_cnt[CC_id],
+              UE_scheduling_control->aperiodic_ri_received[CC_id]
+        );
+        fprintf(fd,"              ULSCH rounds %d/%d/%d/%d, DLSCH rounds %d/%d/%d/%d, ULSCH errors %d, DLSCH errors %d\n",
+              UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[0],
+              UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[1],
+              UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[2],
+              UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[3],
+              UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[0],
+              UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[1],
+              UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[2],
+              UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[3],
+              UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_errors,
+              UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_errors);
+
+
+      }
+    }
+    fclose(fd);
+  }
+  return(NULL);
+}
 
 void init_UE_info(UE_info_t *UE_info)
 {
@@ -128,6 +204,9 @@ void mac_top_init_eNB(void)
   pdcp_layer_init();
 
   rrc_init_global_param();
+
+  for (i=0;i<RC.nb_macrlc_inst; i++) pthread_create(&mac[i]->mac_stats_thread,NULL,mac_stats_thread,(void*)mac[i]);
+
 }
 
 void mac_init_cell_params(int Mod_idP, int CC_idP)
diff --git a/openair2/LAYER2/MAC/pre_processor.c b/openair2/LAYER2/MAC/pre_processor.c
index bf8202f62290c783e5899644417c604788f15c91..bb892c7efe94bd17f354a317fdd14668ca4569d8 100644
--- a/openair2/LAYER2/MAC/pre_processor.c
+++ b/openair2/LAYER2/MAC/pre_processor.c
@@ -730,13 +730,13 @@ void calculate_max_mcs_min_rb(module_id_t mod_id,
   int tbs = get_TBS_UL(*mcs, rb_table[*rb_index]);
 
   // fixme: set use_srs flag
-  *tx_power = estimate_ue_tx_power(tbs * 8, rb_table[*rb_index], 0, Ncp, 0);
+  *tx_power = estimate_ue_tx_power(0,tbs * 8, rb_table[*rb_index], 0, Ncp, 0);
 
   /* find maximum MCS */
   while ((phr - *tx_power < 0 || tbs > bytes) && *mcs > 3) {
     (*mcs)--;
     tbs = get_TBS_UL(*mcs, rb_table[*rb_index]);
-    *tx_power = estimate_ue_tx_power(tbs * 8, rb_table[*rb_index], 0, Ncp, 0);
+    *tx_power = estimate_ue_tx_power(0,tbs * 8, rb_table[*rb_index], 0, Ncp, 0);
   }
 
   /* find minimum necessary RBs */
@@ -746,7 +746,7 @@ void calculate_max_mcs_min_rb(module_id_t mod_id,
          && phr - *tx_power > 0) {
     (*rb_index)++;
     tbs = get_TBS_UL(*mcs, rb_table[*rb_index]);
-    *tx_power = estimate_ue_tx_power(tbs * 8, rb_table[*rb_index], 0, Ncp, 0);
+    *tx_power = estimate_ue_tx_power(0,tbs * 8, rb_table[*rb_index], 0, Ncp, 0);
   }
 
   /* Decrease if we went to far in last iteration */
@@ -801,7 +801,7 @@ int rr_ul_run(module_id_t Mod_id,
   AssertFatal(num_contig_rb <= 2, "cannot handle more than two contiguous RB regions\n");
   UE_info_t *UE_info = &RC.mac[Mod_id]->UE_info;
   const int max_rb = num_contig_rb > 1 ? MAX(rbs[0].length, rbs[1].length) : rbs[0].length;
-
+  eNB_MAC_INST *mac = RC.mac[Mod_id];
   /* for every UE: check whether we have to handle a retransmission (and
    * allocate, if so). If not, compute how much RBs this UE would need */
   int rb_idx_required[MAX_MOBILES_PER_ENB];
@@ -809,7 +809,7 @@ int rr_ul_run(module_id_t Mod_id,
   int num_ue_req = 0;
   for (int UE_id = UE_list->head; UE_id >= 0; UE_id = UE_list->next[UE_id]) {
     UE_TEMPLATE *UE_template = &UE_info->UE_template[CC_id][UE_id];
-    uint8_t harq_pid = subframe2harqpid(&RC.mac[Mod_id]->common_channels[CC_id],
+    uint8_t harq_pid = subframe2harqpid(&mac->common_channels[CC_id],
                                         sched_frame, sched_subframe);
     if (UE_info->UE_sched_ctrl[UE_id].round_UL[CC_id][harq_pid] > 0) {
       /* this UE has a retransmission, allocate it right away */
@@ -845,11 +845,11 @@ int rr_ul_run(module_id_t Mod_id,
         }
       } else {
         LOG_W(MAC,
-              "cannot allocate UL retransmission for UE %d (nb_rb %d)\n",
-              UE_id,
-              nb_rb);
+              "%d.%d cannot allocate UL retransmission for UE %d (nb_rb %d, rbs0.length %d, rbs1.length %d,rbs0.start %d,rbs1.start %d)\n",
+              sched_frame,sched_subframe,UE_id,
+              nb_rb, rbs[0].length,rbs[1].length,rbs[0].start,rbs[1].start);
         UE_template->pre_dci_ul_pdu_idx = -1; // do not need CCE
-        RC.mac[Mod_id]->HI_DCI0_req[CC_id][subframe].hi_dci0_request_body.number_of_dci--;
+        mac->HI_DCI0_req[CC_id][subframe].hi_dci0_request_body.number_of_dci--;
         continue;
       }
       LOG_D(MAC, "%4d.%d UE %d retx %d RBs at start %d\n",
@@ -895,10 +895,9 @@ int rr_ul_run(module_id_t Mod_id,
         &tx_power);
 
     UE_template->pre_assigned_mcs_ul = mcs;
-    /* rb_idx_given >= 22: apparently the PHY cannot support more than 48
-     * RBs in the uplink. Hence, we limit every UE to 48 RBs, which is at
-     * index 22 */
-    rb_idx_required[UE_id] = min(22, rb_table_index);
+    /* rb_idx_given >= MAX index: limit RBs to value in configuration file 
+     * RBs in the uplink.  */
+    rb_idx_required[UE_id] = min(mac->max_ul_rb_index, rb_table_index);
     //UE_template->pre_allocated_nb_rb_ul = rb_table[rb_table_index];
     /* only print log when PHR changed */
     static int phr = 0;
diff --git a/openair2/LAYER2/MAC/rar_tools.c b/openair2/LAYER2/MAC/rar_tools.c
index 23ac209389be0d314a56975b98869a2896ed4d28..d48952318aaf24a13edc0000945f0e8d359e4b3c 100644
--- a/openair2/LAYER2/MAC/rar_tools.c
+++ b/openair2/LAYER2/MAC/rar_tools.c
@@ -67,8 +67,10 @@ fill_rar(const module_id_t module_idP,
   rar[5] = (uint8_t) (ra->rnti & 0xff);
   //ra->timing_offset = 0;
   ra->timing_offset /= 16;  //T_A = N_TA/16, where N_TA should be on a 30.72Msps
-  rar[0] = (uint8_t) (ra->timing_offset >> (2 + 4));  // 7 MSBs of timing advance + divide by 4
-  rar[1] = (uint8_t) (ra->timing_offset << (4 - 2)) & 0xf0; // 4 LSBs of timing advance + divide by 4
+  //rar[0] = (uint8_t) (ra->timing_offset >> (2 + 4));  // 7 MSBs of timing advance + divide by 4
+  //rar[1] = (uint8_t) (ra->timing_offset << (4 - 2)) & 0xf0; // 4 LSBs of timing advance + divide by 4
+  rar[0] = (uint8_t) (ra->timing_offset >> (4));  // 7 MSBs of timing advance + divide by 4
+  rar[1] = (uint8_t) (ra->timing_offset << (4)) & 0xf0; // 4 LSBs of timing advance + divide by 4
   COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_id];
 
   if(N_RB_UL == 25) {
diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
index 4a288ee12fcf6655efd00564f906271cdcaf28a0..6bb7970be66d72ed4a1f67498af3dcdaad6001b4 100644
--- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
+++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h
@@ -54,7 +54,7 @@
 // Definitions for MAC control and data
 #define NR_BCCH_DL_SCH 3 // SI
 #define NR_BCCH_BCH 5    // MIB
-#define CCCH_PAYLOAD_SIZE_MAX 128
+#define CCCH_PAYLOAD_SIZE_MAX 512 
 #define RAR_PAYLOAD_SIZE_MAX  128
 #define MAX_BWP_SIZE          275
 
diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
index 7140279a034f3e2f1935c99516be561f18a8dce5..ef358f40fe2952bbec1ba6643f93684ba804d7b4 100644
--- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
@@ -1729,6 +1729,47 @@ uint8_t compute_nr_root_seq(NR_RACH_ConfigCommon_t *rach_config,
   }
 }
 
+// TS 38.211 Table 7.4.1.1.2-3: PDSCH DMRS positions l' within a slot for single-symbol DMRS and intra-slot frequency hopping disabled.
+// The first 4 colomns are PDSCH mapping type A and the last 4 colomns are PDSCH mapping type B.
+// When l' = l0, it is represented by 1
+// E.g. when symbol duration is 12 in colomn 7, value 1057 ('10000100001') which means l' =  l0, 5, 10.
+
+int32_t table_7_4_1_1_2_3_pdsch_dmrs_positions_l [13][8] = {                             // Duration in symbols
+{-1,          -1,          -1,         -1,          1,          1,         1,         1},       //2              // (DMRS l' position)
+{0,            0,           0,          0,          1,          1,         1,         1},       //3              // (DMRS l' position)
+{0,            0,           0,          0,          1,          1,         1,         1},       //4               // (DMRS l' position)
+{0,            0,           0,          0,          1,          17,        17,       17},       //5               // (DMRS l' position)
+{0,            0,           0,          0,          1,          17,        17,       17},       //6               // (DMRS l' position)
+{0,            0,           0,          0,          1,          17,        17,       17},       //7               // (DMRS l' position)
+{0,          128,         128,        128,          1,          65,        73,       73},       //8               // (DMRS l' position)
+{0,          128,         128,        128,          1,         129,       145,      145},       //9               // (DMRS l' position)
+{0,          512,         576,        576,          1,         129,       145,      145},       //10              // (DMRS l' position)
+{0,          512,         576,        576,          1,         257,       273,      585},       //11              // (DMRS l' position)
+{0,          512,         576,       2336,          1,         513,       545,      585},       //12              // (DMRS l' position)
+{0,         2048,        2176,       2336,          1,         513,       545,      585},       //13              // (DMRS l' position)
+{0,         2048,        2176,       2336,         -1,          -1,       -1,        -1},       //14              // (DMRS l' position)
+};
+
+
+// TS 38.211 Table 7.4.1.1.2-4: PDSCH DMRS positions l' within a slot for double-symbol DMRS and intra-slot frequency hopping disabled.
+// The first 4 colomns are PDSCH mapping type A and the last 4 colomns are PDSCH mapping type B.
+// When l' = l0, it is represented by 1
+
+int32_t table_7_4_1_1_2_4_pdsch_dmrs_positions_l [12][8] = {                             // Duration in symbols
+{-1,          -1,          -1,         -1,         -1,         -1,        -1,         -1},       //<4              // (DMRS l' position)
+{0,            0,          -1,         -1,         -1,         -1,        -1,         -1},       //4               // (DMRS l' position)
+{0,            0,          -1,         -1,          3,          3,        -1,         -1},       //5               // (DMRS l' position)
+{0,            0,          -1,         -1,          3,          3,        -1,         -1},       //6               // (DMRS l' position)
+{0,            0,          -1,         -1,          3,          3,        -1,         -1},       //7               // (DMRS l' position)
+{0,            0,          -1,         -1,          3,         99,        -1,         -1},       //8               // (DMRS l' position)
+{0,            0,          -1,         -1,          3,         99,        -1,         -1},       //9               // (DMRS l' position)
+{0,          768,          -1,         -1,          3,        387,        -1,         -1},       //10              // (DMRS l' position)
+{0,          768,          -1,         -1,          3,        387,        -1,         -1},       //11              // (DMRS l' position)
+{0,          768,          -1,         -1,          3,        771,        -1,         -1},       //12              // (DMRS l' position)
+{0,         3072,          -1,         -1,          3,        771,        -1,         -1},       //13              // (DMRS l' position)
+{0,         3072,          -1,         -1,          -1,        -1,        -1,         -1},       //14              // (DMRS l' position)
+};
+
 // TS 38.211 Table 6.4.1.1.3-3: PUSCH DMRS positions l' within a slot for single-symbol DMRS and intra-slot frequency hopping disabled.
 // The first 4 colomns are PUSCH mapping type A and the last 4 colomns are PUSCH mapping type B.
 // When l' = l0, it is represented by 1
@@ -1736,17 +1777,17 @@ uint8_t compute_nr_root_seq(NR_RACH_ConfigCommon_t *rach_config,
 
 int32_t table_6_4_1_1_3_3_pusch_dmrs_positions_l [12][8] = {                             // Duration in symbols
 {-1,          -1,          -1,         -1,          1,          1,         1,         1},       //<4              // (DMRS l' position)
-{1,            1,           1,          1,          1,          1,         1,         1},       //4               // (DMRS l' position)
-{1,            1,           1,          1,          1,          5,         5,         5},       //5               // (DMRS l' position)
-{1,            1,           1,          1,          1,          5,         5,         5},       //6               // (DMRS l' position)
-{1,            1,           1,          1,          1,          5,         5,         5},       //7               // (DMRS l' position)
-{1,          129,         129,        129,          1,         65,        73,        73},       //8               // (DMRS l' position)
-{1,          129,         129,        129,          1,         65,        73,        73},       //9               // (DMRS l' position)
-{1,          513,         577,        577,          1,        257,       273,       585},       //10              // (DMRS l' position)
-{1,          513,         577,        577,          1,        257,       273,       585},       //11              // (DMRS l' position)
-{1,          513,         577,       2337,          1,       1025,      1057,       585},       //12              // (DMRS l' position)
-{1,         2049,        2177,       2337,          1,       1025,      1057,       585},       //13              // (DMRS l' position)
-{1,         2049,        2177,       2337,          1,       1025,      1057,       585},       //14              // (DMRS l' position)
+{0,            0,           0,          0,          1,          1,         1,         1},       //4               // (DMRS l' position)
+{0,            0,           0,          0,          1,         17,        17,        17},       //5               // (DMRS l' position)
+{0,            0,           0,          0,          1,         17,        17,        17},       //6               // (DMRS l' position)
+{0,            0,           0,          0,          1,         17,        17,        17},       //7               // (DMRS l' position)
+{0,          128,         128,        128,          1,         65,        73,        73},       //8               // (DMRS l' position)
+{0,          128,         128,        128,          1,         65,        73,        73},       //9               // (DMRS l' position)
+{0,          512,         576,        576,          1,        257,       273,       585},       //10              // (DMRS l' position)
+{0,          512,         576,        576,          1,        257,       273,       585},       //11              // (DMRS l' position)
+{0,          512,         576,       2336,          1,       1025,      1057,       585},       //12              // (DMRS l' position)
+{0,         2048,        2176,       2336,          1,       1025,      1057,       585},       //13              // (DMRS l' position)
+{0,         2048,        2176,       2336,          1,       1025,      1057,       585},       //14              // (DMRS l' position)
 };
 
 
@@ -1756,17 +1797,17 @@ int32_t table_6_4_1_1_3_3_pusch_dmrs_positions_l [12][8] = {
 
 int32_t table_6_4_1_1_3_4_pusch_dmrs_positions_l [12][8] = {                             // Duration in symbols
 {-1,          -1,          -1,         -1,         -1,         -1,        -1,         -1},       //<4              // (DMRS l' position)
-{1,            1,          -1,         -1,         -1,         -1,        -1,         -1},       //4               // (DMRS l' position)
-{1,            1,          -1,         -1,          1,          1,        -1,         -1},       //5               // (DMRS l' position)
-{1,            1,          -1,         -1,          1,          1,        -1,         -1},       //6               // (DMRS l' position)
-{1,            1,          -1,         -1,          1,          1,        -1,         -1},       //7               // (DMRS l' position)
-{1,            1,          -1,         -1,          1,         33,        -1,         -1},       //8               // (DMRS l' position)
-{1,            1,          -1,         -1,          1,         33,        -1,         -1},       //9               // (DMRS l' position)
-{1,          257,          -1,         -1,          1,        129,        -1,         -1},       //10              // (DMRS l' position)
-{1,          257,          -1,         -1,          1,        129,        -1,         -1},       //11              // (DMRS l' position)
-{1,          257,          -1,         -1,          1,        513,        -1,         -1},       //12              // (DMRS l' position)
-{1,         1025,          -1,         -1,          1,        513,        -1,         -1},       //13              // (DMRS l' position)
-{1,         1025,          -1,         -1,          1,        513,        -1,         -1},       //14              // (DMRS l' position)
+{0,            0,          -1,         -1,         -1,         -1,        -1,         -1},       //4               // (DMRS l' position)
+{0,            0,          -1,         -1,          3,          3,        -1,         -1},       //5               // (DMRS l' position)
+{0,            0,          -1,         -1,          3,          3,        -1,         -1},       //6               // (DMRS l' position)
+{0,            0,          -1,         -1,          3,          3,        -1,         -1},       //7               // (DMRS l' position)
+{0,            0,          -1,         -1,          3,         99,        -1,         -1},       //8               // (DMRS l' position)
+{0,            0,          -1,         -1,          3,         99,        -1,         -1},       //9               // (DMRS l' position)
+{0,          768,          -1,         -1,          3,        387,        -1,         -1},       //10              // (DMRS l' position)
+{0,          768,          -1,         -1,          3,        387,        -1,         -1},       //11              // (DMRS l' position)
+{0,          768,          -1,         -1,          3,       1539,        -1,         -1},       //12              // (DMRS l' position)
+{0,         3072,          -1,         -1,          3,       1539,        -1,         -1},       //13              // (DMRS l' position)
+{0,         3072,          -1,         -1,          3,       1539,        -1,         -1},       //14              // (DMRS l' position)
 };
 
 // Returns the corresponding row index of the NR table
@@ -2312,8 +2353,8 @@ int get_num_dmrs(uint16_t dmrs_mask ) {
   return(num_dmrs);
 }
 /* returns the total DMRS symbols in a slot*/
-uint8_t get_num_dmrs_symbols(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols,int startSymbol){
-  return get_num_dmrs(fill_dmrs_mask(pdsch_Config,dmrs_TypeA_Position,NrOfSymbols,startSymbol));
+uint8_t get_num_dmrs_symbols(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols, int startSymbol, int mappingtype){
+  return get_num_dmrs(fill_dmrs_mask(pdsch_Config,dmrs_TypeA_Position,NrOfSymbols, startSymbol, mappingtype));
 }
 
 // Table 5.1.2.2.1-1 38.214
@@ -2377,29 +2418,46 @@ uint8_t get_l0_ul(uint8_t mapping_type, uint8_t dmrs_typeA_position) {
 
 }
 
-int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos, pusch_maxLength_t pusch_maxLength) {
+int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos, pusch_maxLength_t pusch_maxLength, uint8_t start_symbol, uint8_t dmrs_typeA_position) {
 
   uint8_t row, colomn;
   int32_t l_prime;
 
+  LOG_D(MAC, "PUSCH: NrofSymbols:%d, startSymbol:%d, mappingtype:%d, dmrs_TypeA_Position:%d\n", duration_in_symbols, start_symbol, mapping_type, dmrs_typeA_position);
+
+  // Section 6.4.1.1.3 in Spec 38.211
+  // For PDSCH Mapping TypeA, ld is duration between first OFDM of the slot and last OFDM symbol of the scheduled PUSCH resources
+  // For TypeB, ld is the duration of the scheduled PUSCH resources
+  uint8_t ld = (mapping_type == typeA) ? (duration_in_symbols + start_symbol) : duration_in_symbols;
+  uint8_t l0 = (dmrs_typeA_position == NR_MIB__dmrs_TypeA_Position_pos2) ? 2 : 3 ;
+
   colomn = additional_pos;
 
   if (mapping_type == typeB)
     colomn += 4;
 
-  if (duration_in_symbols < 4)
+  if (ld < 4)
     row = 0;
   else
-    row = duration_in_symbols - 3;
+    row = ld - 3;
 
-  if (pusch_maxLength == pusch_len1)
+  if (pusch_maxLength == pusch_len1) {
     l_prime = table_6_4_1_1_3_3_pusch_dmrs_positions_l[row][colomn];
-  else
+    l0 = 1 << l0;
+  }
+  else {
     l_prime = table_6_4_1_1_3_4_pusch_dmrs_positions_l[row][colomn];
+    l0 = 1<<l0 | 1<<(l0+1);
+  }
+
+  LOG_D(MAC, "PUSCH - l0:%d, ld:%d,row:%d, column:%d, addpos:%d, maxlen:%d\n", l0, ld, row, colomn, additional_pos, pusch_maxLength);
+  AssertFatal(l_prime>=0,"invalid l_prime < 0\n");
 
-  AssertFatal(l_prime>0,"invalid l_prime < 0\n");
+  l_prime = (mapping_type == typeA) ? (l_prime | l0) : (l_prime << start_symbol);
+  LOG_D(MAC, " PUSCH DMRS MASK in HEX:%x\n", l_prime);
 
   return l_prime;
+
 }
 
 /*******************************************************************
@@ -2952,92 +3010,90 @@ int is_nr_UL_slot(NR_ServingCellConfigCommon_t *scc, slot_t slot, lte_frame_type
   else return(slot_in_period >= slots1+scc->tdd_UL_DL_ConfigurationCommon->pattern2->nrofDownlinkSlots ? 1 : 0);
 }
 
-int16_t fill_dmrs_mask(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols,int startSymbol) {
+int16_t fill_dmrs_mask(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols, int startSymbol, int mappingtype_fromDCI) {
+
+  int l0;int dmrs_AdditionalPosition = 0;int maxLength = 0;
+  NR_DMRS_DownlinkConfig_t *dmrs_config = NULL;
+
+  LOG_D(MAC, "NrofSymbols:%d, startSymbol:%d, mappingtype:%d, dmrs_TypeA_Position:%d\n", NrOfSymbols, startSymbol, mappingtype_fromDCI, dmrs_TypeA_Position);
 
-  int l0;
-  int ld = NrOfSymbols+startSymbol;
   if (dmrs_TypeA_Position == NR_ServingCellConfigCommon__dmrs_TypeA_Position_pos2) l0=2;
   else if (dmrs_TypeA_Position == NR_ServingCellConfigCommon__dmrs_TypeA_Position_pos3) l0=3;
   else AssertFatal(1==0,"Illegal dmrs_TypeA_Position %d\n",(int)dmrs_TypeA_Position);
-  if (pdsch_Config == NULL) { // Initial BWP
-    if (ld <= 7) return(1<<l0);
-    else if (ld <= 9) 	  return(1<<l0 | 1<<7);
-    else if (ld <= 12)   return(1<<l0 | 1<<6 | 1<<9);
-    else if (ld <= 14)   return(1<<l0 | 1<<7 | 1<<11);
+
+  // in case of DCI FORMAT 1_0 or dedicated pdsch config not received additionposition = pos2, len1 should be used
+  // referred to section 5.1.6.2 in 38.214
+  dmrs_AdditionalPosition = 2;
+  maxLength = 1;
+
+  if (pdsch_Config != NULL) {
+    if (mappingtype_fromDCI == typeA) { // Type A
+      if (pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA && pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->present == NR_SetupRelease_DMRS_DownlinkConfig_PR_setup)
+        dmrs_config = (NR_DMRS_DownlinkConfig_t *)pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup;
+    } else if (mappingtype_fromDCI == typeB) {
+      if (pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB && pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->present == NR_SetupRelease_DMRS_DownlinkConfig_PR_setup)
+        dmrs_config = (NR_DMRS_DownlinkConfig_t *)pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup;
+    } else {
+      AssertFatal(1==0,"Incorrect Mappingtype\n");
+    }
+
+    AssertFatal(dmrs_config != NULL," DMRS configs not present in PDSCH DMRS Downlink config\n");
+
+    // default values of maxlength = len2, additionalposition is pos2
+    if (dmrs_config->maxLength != NULL) maxLength = 2;
+    if (dmrs_config->dmrs_AdditionalPosition != NULL) dmrs_AdditionalPosition = *dmrs_config->dmrs_AdditionalPosition;
+  }
+
+  uint8_t ld, row, column;
+  int32_t l_prime = -1;
+
+  // columns 0-3 for TypeA, 4-7 for TypeB
+  column = (mappingtype_fromDCI == typeA) ? dmrs_AdditionalPosition : (dmrs_AdditionalPosition + 4);
+
+  // Section 7.4.1.1.2 in Spec 38.211
+  // For PDSCH Mapping TypeA, ld is duration between first OFDM of the slot and last OFDM symbol of the scheduled PDSCH resources
+  // For TypeB, ld is the duration of the scheduled PDSCH resources
+  ld = (mappingtype_fromDCI == typeA) ? (NrOfSymbols + startSymbol) : NrOfSymbols;
+
+  // Section 7.4.1.1.2 in Spec 38.211
+  //For PDSCH Mapping typeB, if PDSCH duration ld <=4, only single symbol DMRS is supported
+  if (mappingtype_fromDCI == typeB && ld <= 4)
+    maxLength = 1;
+
+  AssertFatal(ld > 2 && ld < 15,"Illegal NrOfSymbols according to Table 5.1.2.1-1 Spec 38.214 %d\n",ld);
+  AssertFatal((NrOfSymbols + startSymbol) < 15,"Illegal S+L according to Table 5.1.2.1-1 Spec 38.214 S:%d L:%d\n",startSymbol, NrOfSymbols);
+
+  if (mappingtype_fromDCI == typeA) {
+
+    // Section 7.4.1.1.2 in Spec 38.211
+    AssertFatal((l0 == 2) || (l0 == 3 && dmrs_AdditionalPosition != 3),"Wrong config, If dmrs_TypeA_Position POS3, ADD POS cannot be POS3 \n");
+
+    // Table 5.1.2.1-1 in Spec 38.214
+    AssertFatal(startSymbol <= l0, "Wrong config, Start symbol %d cannot be later than dmrs_TypeA_Position %d \n", startSymbol, l0);
+
+    // Section 7.4.1.1.2 in Spec 38.211
+    AssertFatal(l0 == 2 || (l0 == 3 && (ld != 3 || ld != 4)), "ld 3 or 4 symbols only possible with dmrs_TypeA_Position POS2 \n");
+
+  }
+
+  if (maxLength == 1) {
+    row = ld - 2;
+    l_prime = table_7_4_1_1_2_3_pdsch_dmrs_positions_l[row][column];
+    l0 = 1 << l0;
   }
   else {
-    if (pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA &&
-	pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->present == NR_SetupRelease_DMRS_DownlinkConfig_PR_setup) {
-      // Relative to start of slot
-      NR_DMRS_DownlinkConfig_t *dmrs_config = (NR_DMRS_DownlinkConfig_t *)pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup;
-      AssertFatal(ld>1 && ld < 15,"Illegal l_d %d\n",ld);
-      int pos2=0;
-      if (dmrs_config->maxLength == NULL) {
-	// this is Table 7.4.1.1.2-3: PDSCH DM-RS positions l for single-symbol DM-RS
-	if (dmrs_config->dmrs_AdditionalPosition == NULL) pos2=1;
-	else if (dmrs_config->dmrs_AdditionalPosition && *dmrs_config->dmrs_AdditionalPosition == NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos0 )
-	  return(1<<l0);
-	
-	
-	switch (ld) {
-	case 2 :
-	case 3 :
-	case 4 :
-	case 5 :
-	case 6 :
-	case 7 :
-    return(1<<l0);
-	  break;
-	case 8 :
-	case 9:
-	  return(1<<l0 | 1<<7);
-	  break;
-	case 10:
-	case 11:
-	  if (dmrs_config->dmrs_AdditionalPosition && *dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos1)
-	    return(1<<l0 | 1<<9);
-	  else
-	    return(1<<l0 | 1<<6 | 1<<9);
-	  break;
-	case 12:
-	  if (dmrs_config->dmrs_AdditionalPosition && *dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos1)
-	    return(1<<l0 | 1<<9);
-	  else if (pos2==1)
-	    return(1<<l0 | 1<<6 | 1<<9);
-	  else if (dmrs_config->dmrs_AdditionalPosition && *dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos3)
-	    return(1<<l0 | 1<<5 | 1<<8 | 1<<11);
-	  break;
-	case 13:
-	case 14:
-	  if (dmrs_config->dmrs_AdditionalPosition && *dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos1)
-	    return(1<<l0 | 1<<11);
-	  else if (pos2==1)
-	    return(1<<l0 | 1<<7 | 1<<11);
-	  else if (dmrs_config->dmrs_AdditionalPosition && *dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos3)
-	    return(1<<l0 | 1<<5 | 1<<8 | 1<<11);
-	  break;
-	}
-      }
-      else {
-	// Table 7.4.1.1.2-4: PDSCH DM-RS positions l for double-symbol DM-RS.
-	AssertFatal(ld>3,"Illegal l_d %d for len2 DMRS\n",ld);
-	if (ld < 10) return(1<<l0);
-	if (ld < 13 && *dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos0) return(1<<l0);
-	if (ld < 13 && *dmrs_config->dmrs_AdditionalPosition!=NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos0) return(1<<l0 | 1<<8);
-	if (*dmrs_config->dmrs_AdditionalPosition!=NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos0) return(1<<l0);
-	if (*dmrs_config->dmrs_AdditionalPosition!=NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos1) return(1<<l0 | 1<<10);
-        if (*dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos0) return(1<<l0);
-	if (*dmrs_config->dmrs_AdditionalPosition==NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos1) return(1<<l0 | 1<<10);
-      }
-    }
-    else if (pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB &&
-	     pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->present == NR_SetupRelease_DMRS_DownlinkConfig_PR_setup) {
-      // Relative to start of PDSCH resource
-      AssertFatal(1==0,"TypeB DMRS not supported yet\n");
-    }
+    row = (ld < 4) ? 0 : (ld - 3);
+    l_prime = table_7_4_1_1_2_4_pdsch_dmrs_positions_l[row][column];
+    l0 = 1<<l0 | 1<<(l0+1);
   }
-  AssertFatal(1==0,"Shouldn't get here\n");
-  return(-1);
+
+  LOG_D(MAC, "l0:%d, ld:%d,row:%d, column:%d, addpos:%d, maxlen:%d\n", l0, ld, row, column, dmrs_AdditionalPosition, maxLength);
+  AssertFatal(l_prime>=0,"ERROR in configuration.Check Time Domain allocation of this Grant. l_prime < 1. row:%d, column:%d\n", row, column);
+
+  l_prime = (mappingtype_fromDCI == typeA) ? (l_prime | l0) : (l_prime << startSymbol);
+  LOG_D(MAC, " PDSCH DMRS MASK in HEX:%x\n", l_prime);
+
+  return l_prime;
 }
 
 uint8_t get_pusch_mcs_table(long *mcs_Table,
diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
index f766f7bcc7e210ef25cf65a729b80e0bc457b23d..9c24eea77203b5742a2d5ce1418d1c15acdfd860 100644
--- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
+++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
@@ -47,7 +47,7 @@ uint64_t from_nrarfcn(int nr_bandP, uint8_t scs_index, uint32_t dl_nrarfcn);
 
 uint32_t to_nrarfcn(int nr_bandP, uint64_t dl_CarrierFreq, uint8_t scs_index, uint32_t bw);
 
-int16_t fill_dmrs_mask(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols,int startSymbol);
+int16_t fill_dmrs_mask(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols,int startSymbol,int mappingtype_fromDCI);
 
 int is_nr_DL_slot(NR_ServingCellConfigCommon_t *scc,slot_t slotP);
 
@@ -121,7 +121,7 @@ uint16_t get_NCS(uint8_t index, uint16_t format, uint8_t restricted_set_config);
 
 int get_num_dmrs(uint16_t dmrs_mask );
 uint8_t get_l0_ul(uint8_t mapping_type, uint8_t dmrs_typeA_position);
-int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos, pusch_maxLength_t pusch_maxLength);
+int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos, pusch_maxLength_t pusch_maxLength, uint8_t start_symbolt, uint8_t dmrs_typeA_position);
 
 uint8_t get_L_ptrs(uint8_t mcs1, uint8_t mcs2, uint8_t mcs3, uint8_t I_mcs, uint8_t mcs_table);
 uint8_t get_K_ptrs(uint16_t nrb0, uint16_t nrb1, uint16_t N_RB);
@@ -153,7 +153,7 @@ bool set_ul_ptrs_values(NR_PTRS_UplinkConfig_t *ul_ptrs_config,
                         uint8_t *reOffset, uint8_t *maxNumPorts, uint8_t *ulPower,
                         uint8_t NrOfSymbols);
 
-uint8_t get_num_dmrs_symbols(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols,int startSymbol);
+uint8_t get_num_dmrs_symbols(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,int NrOfSymbols,int startSymbol,int mappingtype);
 
 /* \brief Set the transform precoding according to 6.1.3 of 3GPP TS 38.214 version 16.3.0 Release 16
 @param    *pusch_config,   pointer to pusch config
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
index 080a09ad51de75c8520a33b862efbcbb9b3dbffd..7f4d536e3f435b35178671e1d0796f62d6db9201 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
@@ -48,6 +48,8 @@
 #include "NR_MAC_COMMON/nr_mac.h"
 #include "LAYER2/NR_MAC_UE/mac_proto.h"
 
+#include <executables/softmodem-common.h>
+
 void nr_get_RA_window(NR_UE_MAC_INST_t *mac);
 
 // Random Access procedure initialization as per 5.1.1 and initialization of variables specific
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
index 03f81096382b42f425db11d5fe9080cd22ec638c..adbf7a5774bc6fd382fac3675670c7a55df3366b 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
@@ -640,12 +640,26 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
       LOG_W(MAC, "[%d.%d] Invalid time_domain_assignment. Possibly due to false DCI. Ignoring DCI!\n", frame, slot);
       return -1;
     }
+
+    NR_PDSCH_TimeDomainResourceAllocationList_t *pdsch_TimeDomainAllocationList = NULL;
+    if (mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->pdsch_TimeDomainAllocationList)
+      pdsch_TimeDomainAllocationList = mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->pdsch_TimeDomainAllocationList->choice.setup;
+    else if (mac->DLbwp[0]->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList)
+      pdsch_TimeDomainAllocationList = mac->DLbwp[0]->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
+
+    int mappingtype = pdsch_TimeDomainAllocationList->list.array[dci->time_domain_assignment.val]->mappingType;
+
     /* dmrs symbol positions*/
-    dlsch_config_pdu_1_0->dlDmrsSymbPos = fill_dmrs_mask(pdsch_config,
+    dlsch_config_pdu_1_0->dlDmrsSymbPos = fill_dmrs_mask(NULL,
 							 mac->scc->dmrs_TypeA_Position,
                dlsch_config_pdu_1_0->number_symbols,
-               dlsch_config_pdu_1_0->start_symbol);
-    dlsch_config_pdu_1_0->dmrsConfigType = (pdsch_config) ? (mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type == NULL ? 0 : 1) : 0;
+               dlsch_config_pdu_1_0->start_symbol,
+               mappingtype);
+
+    // For DCI 1_0, dmrs type is type1. referred to section 5.1.6.2 of 3GPP TS 38.214
+    dlsch_config_pdu_1_0->dmrsConfigType = 0;
+    LOG_D(MAC, "DCI 1_0 start_sym:%d NR Symb:%d, DMRS_symb_pos:%x\n", dlsch_config_pdu_1_0->start_symbol, dlsch_config_pdu_1_0->number_symbols, dlsch_config_pdu_1_0->dlDmrsSymbPos);
+
     /* number of DM-RS CDM groups without data according to subclause 5.1.6.2 of 3GPP TS 38.214 version 15.9.0 Release 15 */
     if (dlsch_config_pdu_1_0->number_symbols == 2)
       dlsch_config_pdu_1_0->n_dmrs_cdm_groups = 1;
@@ -783,10 +797,6 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
     dl_config->dl_config_list[dl_config->number_pdus].pdu_type = FAPI_NR_DL_CONFIG_TYPE_DLSCH;
     dl_config->dl_config_list[dl_config->number_pdus].dlsch_config_pdu.rnti = rnti;
 
-    // FIXME: fix number of additional dmrs
-    if(pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition == NULL)
-      pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition=calloc(1,sizeof(*pdsch_config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition));
-
     fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config_pdu_1_1 = &dl_config->dl_config_list[dl_config->number_pdus].dlsch_config_pdu.dlsch_config_rel15;
 
     dlsch_config_pdu_1_1->BWPSize = NRRIV2BW(mac->DLbwp[0]->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
@@ -807,11 +817,21 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
       LOG_W(MAC, "[%d.%d] Invalid time_domain_assignment. Possibly due to false DCI. Ignoring DCI!\n", frame, slot);
       return -1;
     }
+
+    NR_PDSCH_TimeDomainResourceAllocationList_t *pdsch_TimeDomainAllocationList = NULL;
+    if (mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->pdsch_TimeDomainAllocationList)
+      pdsch_TimeDomainAllocationList = mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->pdsch_TimeDomainAllocationList->choice.setup;
+    else if (mac->DLbwp[0]->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList)
+      pdsch_TimeDomainAllocationList = mac->DLbwp[0]->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
+
+    int mappingtype = pdsch_TimeDomainAllocationList->list.array[dci->time_domain_assignment.val]->mappingType;
+
     /* dmrs symbol positions*/
     dlsch_config_pdu_1_1->dlDmrsSymbPos = fill_dmrs_mask(pdsch_config,
 							 mac->scc->dmrs_TypeA_Position,
 							 dlsch_config_pdu_1_1->number_symbols,
-               dlsch_config_pdu_1_1->start_symbol);
+               dlsch_config_pdu_1_1->start_symbol,
+               mappingtype);
     dlsch_config_pdu_1_1->dmrsConfigType = mac->DLbwp[dl_bwp_id-1]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type == NULL ? 0 : 1;
     /* TODO: fix number of DM-RS CDM groups without data according to subclause 5.1.6.2 of 3GPP TS 38.214,
              using tables 7.3.1.2.2-1, 7.3.1.2.2-2, 7.3.1.2.2-3, 7.3.1.2.2-4 of 3GPP TS 38.212 */
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
index 2afbb7de158c175904cd830d011d3ee5f396e256..4932119a83d545c8c312d1984c6a40d791540788 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
@@ -51,6 +51,8 @@
 #include "asn1_conversions.h"
 #include "SIMULATION/TOOLS/sim.h" // for taus
 
+#include <executables/softmodem-common.h>
+
 static prach_association_pattern_t prach_assoc_pattern;
 static ssb_list_info_t ssb_list;
 
@@ -490,7 +492,7 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
   int NrOfSymbols;
   uint8_t nb_dmrs_re_per_rb;
 
-  uint16_t        l_prime_mask = 1;
+  uint16_t        l_prime_mask = 0;
   uint16_t number_dmrs_symbols = 0;
   int                N_PRB_oh  = 0;
 
@@ -503,6 +505,9 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
   pusch_config_pdu->nrOfLayers       = 1;
   pusch_config_pdu->rnti             = rnti;
 
+  pusch_dmrs_AdditionalPosition_t add_pos = pusch_dmrs_pos2;
+  pusch_maxLength_t dmrslength = pusch_len1;
+
   if (rar_grant) {
 
     // Note: for Msg3 or MsgA PUSCH transmission the N_PRB_oh is always set to 0
@@ -511,6 +516,8 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
     NR_BWP_UplinkDedicated_t *ibwp = mac->scg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP;
     NR_PUSCH_Config_t *pusch_Config = ibwp->pusch_Config->choice.setup;
     int startSymbolAndLength = ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList->list.array[rar_grant->Msg3_t_alloc]->startSymbolAndLength;
+    int mappingtype = ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList->list.array[rar_grant->Msg3_t_alloc]->mappingType;
+
 
     // active BWP start
     int abwp_start = NRRIV2PRBOFFSET(ubwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
@@ -548,6 +555,9 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
     pusch_config_pdu->start_symbol_index = StartSymbolIndex;
     pusch_config_pdu->nr_of_symbols = NrOfSymbols;
 
+    l_prime_mask = get_l_prime(NrOfSymbols, mappingtype, add_pos, dmrslength, StartSymbolIndex, scc->dmrs_TypeA_Position);
+    LOG_D(MAC, "MSG3 start_sym:%d NR Symb:%d mappingtype:%d , DMRS_MASK:%x\n", pusch_config_pdu->start_symbol_index, pusch_config_pdu->nr_of_symbols, mappingtype, l_prime_mask);
+
     #ifdef DEBUG_MSG3
     LOG_D(MAC, "In %s BWP assignment (BWP (start %d, size %d) \n", __FUNCTION__, pusch_config_pdu->bwp_start, pusch_config_pdu->bwp_size);
     #endif
@@ -627,18 +637,26 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
 
     }
 
+    NR_PUSCH_TimeDomainResourceAllocationList_t *pusch_TimeDomainAllocationList = NULL;
+    if (pusch_Config->pusch_TimeDomainAllocationList) {
+      pusch_TimeDomainAllocationList = pusch_Config->pusch_TimeDomainAllocationList->choice.setup;
+    }
+    else if (mac->ULbwp[0]->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList) {
+      pusch_TimeDomainAllocationList = mac->ULbwp[0]->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
+    }
+
+    int mappingtype = pusch_TimeDomainAllocationList->list.array[dci->time_domain_assignment.val]->mappingType;
+
+    NR_DMRS_UplinkConfig_t *NR_DMRS_ulconfig = NULL;
+    NR_DMRS_ulconfig = (mappingtype == NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeA)
+                ? pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup : pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
+
     /* TRANSFORM PRECODING ------------------------------------------------------------------------------------------*/
 
     if (pusch_config_pdu->transform_precoding == transform_precoder_enabled) {
 
       pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2;
 
-      NR_DMRS_UplinkConfig_t *NR_DMRS_ulconfig = NULL;
-      if(pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA != NULL)
-        NR_DMRS_ulconfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup;
-      else
-        NR_DMRS_ulconfig = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup;
-
       uint32_t n_RS_Id = 0;
       if (NR_DMRS_ulconfig->transformPrecodingEnabled->nPUSCH_Identity != NULL)
         n_RS_Id = *NR_DMRS_ulconfig->transformPrecodingEnabled->nPUSCH_Identity;
@@ -707,8 +725,13 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
       pusch_config_pdu->absolute_delta_PUSCH = 4;
     }
 
+    if (NR_DMRS_ulconfig != NULL) {
+      add_pos = (NR_DMRS_ulconfig->dmrs_AdditionalPosition == NULL) ? 2 : *NR_DMRS_ulconfig->dmrs_AdditionalPosition;
+      dmrslength = NR_DMRS_ulconfig->maxLength == NULL ? pusch_len1 : pusch_len2;
+    }
+
     /* DMRS */
-    l_prime_mask = get_l_prime(pusch_config_pdu->nr_of_symbols, typeB, pusch_dmrs_pos0, pusch_len1);
+    l_prime_mask = get_l_prime(pusch_config_pdu->nr_of_symbols, mappingtype, add_pos, dmrslength, pusch_config_pdu->start_symbol_index, scc->dmrs_TypeA_Position);
     if (pusch_config_pdu->transform_precoding == transform_precoder_disabled)
       pusch_config_pdu->num_dmrs_cdm_grps_no_data = 1;
 
@@ -746,7 +769,7 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
     pusch_config_pdu->nr_of_symbols,
     rnti_types[rnti_type]);
 
-  pusch_config_pdu->ul_dmrs_symb_pos = l_prime_mask << pusch_config_pdu->start_symbol_index;;
+  pusch_config_pdu->ul_dmrs_symb_pos = l_prime_mask;
   pusch_config_pdu->target_code_rate = nr_get_code_rate_ul(pusch_config_pdu->mcs_index, pusch_config_pdu->mcs_table);
   pusch_config_pdu->qam_mod_order = nr_get_Qm_ul(pusch_config_pdu->mcs_index, pusch_config_pdu->mcs_table);
 
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
index cdf7eb24ffd08dd2d9467335b6ca43a2ef2819e2..a4c80262e89c3cb0656b26a1c53ad42218a5bc01 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
@@ -41,6 +41,7 @@
 #include "UTIL/OPT/opt.h"
 #include "SIMULATION/TOOLS/sim.h" // for taus
 
+#include <executables/softmodem-common.h>
 extern RAN_CONTEXT_t RC;
 extern const uint8_t nr_slots_per_frame[5];
 extern uint16_t sl_ahead;
@@ -805,6 +806,7 @@ void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, sub_frame_t
   int startSymbolAndLength = ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->startSymbolAndLength;
   int start_symbol_index,nr_of_symbols;
   SLIV2SL(startSymbolAndLength, &start_symbol_index, &nr_of_symbols);
+  int mappingtype = ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->mappingType;
 
   pusch_pdu->pdu_bit_map = PUSCH_PDU_BITMAP_PUSCH_DATA;
   pusch_pdu->rnti = ra->rnti;
@@ -830,7 +832,10 @@ void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, sub_frame_t
     pusch_pdu->transform_precoding = 0;
   pusch_pdu->data_scrambling_id = *scc->physCellId;
   pusch_pdu->nrOfLayers = 1;
-  pusch_pdu->ul_dmrs_symb_pos = 1<<start_symbol_index; // ok for now but use fill dmrs mask later
+
+  pusch_pdu->ul_dmrs_symb_pos = get_l_prime(nr_of_symbols,mappingtype,pusch_dmrs_pos2,pusch_len1,start_symbol_index, scc->dmrs_TypeA_Position);
+  LOG_D(MAC, "MSG3 start_sym:%d NR Symb:%d mappingtype:%d , ul_dmrs_symb_pos:%x\n", start_symbol_index, nr_of_symbols, mappingtype, pusch_pdu->ul_dmrs_symb_pos);
+
   pusch_pdu->dmrs_config_type = 0;
   pusch_pdu->ul_dmrs_scrambling_id = *scc->physCellId; //If provided and the PUSCH is not a msg3 PUSCH, otherwise, L2 should set this to physical cell id.
   pusch_pdu->scid = 0; //DMRS sequence initialization [TS38.211, sec 6.4.1.1.1]. Should match what is sent in DCI 0_1, otherwise set to 0.
@@ -945,6 +950,10 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
     SLIV2SL(startSymbolAndLength, &startSymbolIndex, &nrOfSymbols);
     AssertFatal(startSymbolIndex >= 0, "StartSymbolIndex is negative\n");
 
+    int mappingtype = ra->secondaryCellGroup->spCellConfig->spCellConfigDedicated->
+        downlinkBWP_ToAddModList->list.array[ra->bwp_id-1]->bwp_Common->pdsch_ConfigCommon->choice.setup->
+        pdsch_TimeDomainAllocationList->list.array[time_domain_assignment]->mappingType;
+
     uint8_t numDmrsCdmGrpsNoData = 2;
     if (nrOfSymbols == 2) {
       numDmrsCdmGrpsNoData = 1;
@@ -1030,7 +1039,8 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
     pdsch_pdu_rel15->dlDmrsSymbPos = fill_dmrs_mask(NULL,
                                                     nr_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position,
                                                     nrOfSymbols,
-                                                    startSymbolIndex);
+                                                    startSymbolIndex,
+                                                    mappingtype);
 
     int x_Overhead = 0;
     uint8_t tb_scaling = 0;
@@ -1187,10 +1197,15 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
     SLIV2SL(startSymbolAndLength, &startSymbolIndex, &nrOfSymbols);
     AssertFatal(startSymbolIndex >= 0, "StartSymbolIndex is negative\n");
 
+    int mappingtype = ra->secondaryCellGroup->spCellConfig->spCellConfigDedicated->
+        downlinkBWP_ToAddModList->list.array[ra->bwp_id-1]->bwp_Common->pdsch_ConfigCommon->choice.setup->
+        pdsch_TimeDomainAllocationList->list.array[time_domain_assignment]->mappingType;
+
     uint16_t dlDmrsSymbPos = fill_dmrs_mask(NULL,
                                             nr_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position,
                                             nrOfSymbols,
-                                            startSymbolIndex);
+                                            startSymbolIndex,
+                                            mappingtype);
 
     uint16_t N_DMRS_SLOT = get_num_dmrs(dlDmrsSymbPos);
 
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
index 2b94c07e1e59aa28dfc33c13bb2711e72ea55030..f93ad92a1391940116b5f8e92fe41fca0ed96e68 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c
@@ -357,6 +357,7 @@ void schedule_control_sib1(module_id_t module_id,
 
   int startSymbolIndex = 0;
   int nrOfSymbols = 0;
+
   if(gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position == 0) {
     startSymbolIndex = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos2[gNB_mac->sched_ctrlCommon->pdsch_semi_static.time_domain_allocation][1];
     nrOfSymbols = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos2[gNB_mac->sched_ctrlCommon->pdsch_semi_static.time_domain_allocation][2];
@@ -365,6 +366,9 @@ void schedule_control_sib1(module_id_t module_id,
     nrOfSymbols = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos3[gNB_mac->sched_ctrlCommon->pdsch_semi_static.time_domain_allocation][2];
   }
 
+  // TODO: There are exceptions to this in table 5.1.2.1.1-4,5 (Default time domain allocation tables B, C)
+  int mappingtype = (startSymbolIndex <= 3)? typeA: typeB;
+
   if (nrOfSymbols == 2) {
     gNB_mac->sched_ctrlCommon->pdsch_semi_static.numDmrsCdmGrpsNoData = 1;
   } else {
@@ -373,7 +377,7 @@ void schedule_control_sib1(module_id_t module_id,
 
   // Calculate number of PRB_DMRS
   uint8_t N_PRB_DMRS = gNB_mac->sched_ctrlCommon->pdsch_semi_static.numDmrsCdmGrpsNoData * 6;
-  uint16_t dlDmrsSymbPos = fill_dmrs_mask(NULL, gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position, nrOfSymbols, startSymbolIndex);
+  uint16_t dlDmrsSymbPos = fill_dmrs_mask(NULL, gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position, nrOfSymbols, startSymbolIndex, mappingtype);
   uint16_t dmrs_length = get_num_dmrs(dlDmrsSymbPos);
 
   int rbSize = 0;
@@ -394,6 +398,7 @@ void schedule_control_sib1(module_id_t module_id,
   LOG_D(MAC,"nrOfSymbols = %i\n", nrOfSymbols);
   LOG_D(MAC, "rbSize = %i\n", gNB_mac->sched_ctrlCommon->sched_pdsch.rbSize);
   LOG_D(MAC,"TBS = %i\n", TBS);
+  LOG_D(MAC,"mappingtype = %d\n", mappingtype);
 
   // Mark the corresponding RBs as used
   for (int rb = 0; rb < gNB_mac->sched_ctrlCommon->sched_pdsch.rbSize; rb++) {
@@ -406,7 +411,8 @@ void nr_fill_nfapi_dl_sib1_pdu(int Mod_idP,
                                NR_Type0_PDCCH_CSS_config_t *type0_PDCCH_CSS_config,
                                uint32_t TBS,
                                int StartSymbolIndex,
-                               int NrOfSymbols) {
+                               int NrOfSymbols,
+                               uint16_t dlDmrsSymbPos) {
 
   gNB_MAC_INST *gNB_mac = RC.nrmac[Mod_idP];
   NR_COMMON_channels_t *cc = gNB_mac->common_channels;
@@ -478,9 +484,7 @@ void nr_fill_nfapi_dl_sib1_pdu(int Mod_idP,
   pdsch_pdu_rel15->mcsTable[0] = gNB_mac->sched_ctrlCommon->pdsch_semi_static.mcsTableIdx;
   pdsch_pdu_rel15->StartSymbolIndex = StartSymbolIndex;
   pdsch_pdu_rel15->NrOfSymbols = NrOfSymbols;
-
-  pdsch_pdu_rel15->dlDmrsSymbPos = fill_dmrs_mask(NULL, scc->dmrs_TypeA_Position, pdsch_pdu_rel15->NrOfSymbols, pdsch_pdu_rel15->StartSymbolIndex);
-
+  pdsch_pdu_rel15->dlDmrsSymbPos = dlDmrsSymbPos;
   LOG_D(MAC,"dlDmrsSymbPos = 0x%x\n", pdsch_pdu_rel15->dlDmrsSymbPos);
 
   /* Fill PDCCH DL DCI PDU */
@@ -605,9 +609,12 @@ void schedule_nr_sib1(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
         nrOfSymbols = table_5_1_2_1_1_2_time_dom_res_alloc_A_dmrs_typeA_pos3[gNB_mac->sched_ctrlCommon->pdsch_semi_static.time_domain_allocation][2];
       }
 
+      // TODO: There are exceptions to this in table 5.1.2.1.1-4,5 (Default time domain allocation tables B, C)
+      int mappingtype = (startSymbolIndex <= 3) ? typeA : typeB;
+
       // Calculate number of PRB_DMRS
       uint8_t N_PRB_DMRS = gNB_mac->sched_ctrlCommon->pdsch_semi_static.numDmrsCdmGrpsNoData * 6;
-      uint16_t dlDmrsSymbPos = fill_dmrs_mask(NULL, gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position, nrOfSymbols, startSymbolIndex);
+      uint16_t dlDmrsSymbPos = fill_dmrs_mask(NULL, gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position, nrOfSymbols, startSymbolIndex, mappingtype);
       uint16_t dmrs_length = get_num_dmrs(dlDmrsSymbPos);
 
       const uint32_t TBS = nr_compute_tbs(nr_get_Qm_dl(gNB_mac->sched_ctrlCommon->sched_pdsch.mcs, gNB_mac->sched_ctrlCommon->pdsch_semi_static.mcsTableIdx),
@@ -615,7 +622,7 @@ void schedule_nr_sib1(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
                                           gNB_mac->sched_ctrlCommon->sched_pdsch.rbSize, nrOfSymbols, N_PRB_DMRS * dmrs_length,0 ,0 ,1 ) >> 3;
 
       nfapi_nr_dl_tti_request_body_t *dl_req = &gNB_mac->DL_req[CC_id].dl_tti_request_body;
-      nr_fill_nfapi_dl_sib1_pdu(module_idP, dl_req, type0_PDCCH_CSS_config, TBS, startSymbolIndex, nrOfSymbols);
+      nr_fill_nfapi_dl_sib1_pdu(module_idP, dl_req, type0_PDCCH_CSS_config, TBS, startSymbolIndex, nrOfSymbols, dlDmrsSymbPos);
 
       const int ntx_req = gNB_mac->TX_req[CC_id].Number_of_PDUs;
       nfapi_nr_pdu_t *tx_req = &gNB_mac->TX_req[CC_id].pdu_list[ntx_req];
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
index 21875789a97276ca796587c00a0c477548f12d70..616de10b619ab33db167601de8cbbcb5bd220d7f 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
@@ -146,15 +146,18 @@ void nr_schedule_css_dlsch_phytest(module_id_t   module_idP,
     int startSymbolAndLength=0;
     int StartSymbolIndex=-1,NrOfSymbols=14;
     int StartSymbolIndex_tmp,NrOfSymbols_tmp;
+    int mappingtype_tmp, mappingtype;
 
     for (int i=0;
 	 i<scc->downlinkConfigCommon->initialDownlinkBWP->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.count;
 	 i++) {
       startSymbolAndLength = scc->downlinkConfigCommon->initialDownlinkBWP->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.array[i]->startSymbolAndLength;
       SLIV2SL(startSymbolAndLength,&StartSymbolIndex_tmp,&NrOfSymbols_tmp);
+      mappingtype_tmp = scc->downlinkConfigCommon->initialDownlinkBWP->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.array[i]->mappingType;
       if (NrOfSymbols_tmp < NrOfSymbols) {
 	NrOfSymbols = NrOfSymbols_tmp;
         StartSymbolIndex = StartSymbolIndex_tmp;
+        mappingtype = mappingtype_tmp;
 	//	k0 = *scc->downlinkConfigCommon->initialDownlinkBWP->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList->list.array[i]->k0;
 	//	time_domain_assignment = i;
       }
@@ -165,7 +168,8 @@ void nr_schedule_css_dlsch_phytest(module_id_t   module_idP,
     pdsch_pdu_rel15->dlDmrsSymbPos = fill_dmrs_mask(NULL,
 						    scc->dmrs_TypeA_Position,
 						    NrOfSymbols,
-                StartSymbolIndex);
+                StartSymbolIndex,
+                mappingtype);
 
     /*
     AssertFatal(k0==0,"k0 is not zero for Initial DL BWP TimeDomain Alloc\n");
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
index 31ae1cf330acb8ee27c65651662088d245edd1a5..b3d2ecb0b2f7e0289a34f29792c8d730d92323e9 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
@@ -268,6 +268,7 @@ void nr_set_pdsch_semi_static(const NR_ServingCellConfigCommon_t *scc,
   const struct NR_PDSCH_TimeDomainResourceAllocationList *tdaList =
       bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
   AssertFatal(tda < tdaList->list.count, "time_domain_allocation %d>=%d\n", tda, tdaList->list.count);
+  const int mapping_type = tdaList->list.array[tda]->mappingType;
   const int startSymbolAndLength = tdaList->list.array[tda]->startSymbolAndLength;
   SLIV2SL(startSymbolAndLength, &ps->startSymbolIndex, &ps->nrOfSymbols);
 
@@ -291,9 +292,9 @@ void nr_set_pdsch_semi_static(const NR_ServingCellConfigCommon_t *scc,
   // if no data in dmrs cdm group is 2 both odd and even REs have no data
   ps->N_PRB_DMRS = num_dmrs_cdm_grps_no_data * (ps->dmrsConfigType == NFAPI_NR_DMRS_TYPE1 ? 6 : 4);
   ps->N_DMRS_SLOT =
-      get_num_dmrs_symbols(bwp->bwp_Dedicated->pdsch_Config->choice.setup, scc->dmrs_TypeA_Position, ps->nrOfSymbols, ps->startSymbolIndex);
+      get_num_dmrs_symbols(bwp->bwp_Dedicated->pdsch_Config->choice.setup, scc->dmrs_TypeA_Position, ps->nrOfSymbols, ps->startSymbolIndex, mapping_type);
   ps->dl_dmrs_symb_pos =
-      fill_dmrs_mask(bwp->bwp_Dedicated->pdsch_Config->choice.setup, scc->dmrs_TypeA_Position, ps->nrOfSymbols, ps->startSymbolIndex);
+      fill_dmrs_mask(bwp->bwp_Dedicated->pdsch_Config->choice.setup, scc->dmrs_TypeA_Position, ps->nrOfSymbols, ps->startSymbolIndex, mapping_type);
 }
 
 void nr_set_pusch_semi_static(const NR_ServingCellConfigCommon_t *scc,
@@ -354,11 +355,12 @@ void nr_set_pusch_semi_static(const NR_ServingCellConfigCommon_t *scc,
                  : *ps->NR_DMRS_UplinkConfig->dmrs_AdditionalPosition);
   const pusch_maxLength_t pusch_maxLength =
       ps->NR_DMRS_UplinkConfig->maxLength == NULL ? 1 : 2;
-  const uint16_t l_prime_mask = get_l_prime(ps->nrOfSymbols,
+  ps->ul_dmrs_symb_pos = get_l_prime(ps->nrOfSymbols,
                                             ps->mapping_type,
                                             additional_pos,
-                                            pusch_maxLength);
-  ps->ul_dmrs_symb_pos = l_prime_mask << ps->startSymbolIndex;
+                                            pusch_maxLength,
+                                            ps->startSymbolIndex,
+                                            scc->dmrs_TypeA_Position);
   uint8_t num_dmrs_symb = 0;
   for(int i = ps->startSymbolIndex; i < ps->startSymbolIndex + ps->nrOfSymbols; i++)
     num_dmrs_symb += (ps->ul_dmrs_symb_pos >> i) & 1;
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
index e516217ff13747b8d95625ded8fcdc325985ed3a..51d3cfc8f3bfc72f015609f53050b34118a71ef5 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
@@ -57,7 +57,7 @@
 #include "openair2/RRC/NAS/nas_config.h"
 #include "intertask_interface.h"
 #include "openair3/S1AP/s1ap_eNB.h"
-
+#include <pthread.h>
 
 #  include "gtpv1u_eNB_task.h"
 #  include "gtpv1u.h"
@@ -136,6 +136,43 @@ notifiedFIFO_t         pdcp_sdu_list;
 pdcp_enb_t pdcp_enb[MAX_NUM_CCs];
 
 
+extern volatile int oai_exit;
+
+pthread_t pdcp_stats_thread_desc;
+
+void *pdcp_stats_thread(void *param) {
+
+   FILE *fd;
+   int old_byte_cnt[MAX_MOBILES_PER_ENB][NB_RB_MAX],old_byte_cnt_rx[MAX_MOBILES_PER_ENB][NB_RB_MAX];
+   for (int i=0;i<MAX_MOBILES_PER_ENB;i++)
+     for (int j=0;j<NB_RB_MAX;j++) {
+	old_byte_cnt[i][j]=0;
+	old_byte_cnt_rx[i][j]=0;
+     }
+   while (!oai_exit) {
+     sleep(1);
+
+     fd=fopen("PDCP_stats.log","w+");
+     AssertFatal(fd!=NULL,"Cannot open MAC_stats.log\n");
+     int drb_id=3;
+     for (int UE_id = 0; UE_id < MAX_MOBILES_PER_ENB; UE_id++) {
+        if (pdcp_enb[0].rnti[UE_id]>0) {
+           fprintf(fd,"PDCP: CRNTI %x, DRB %d: tx_bytes %d, DL Throughput %e\n",
+                   pdcp_enb[0].rnti[UE_id],drb_id,
+                   Pdcp_stats_tx_bytes[0][UE_id][drb_id],
+                   (double)((Pdcp_stats_tx_bytes[0][UE_id][drb_id]-old_byte_cnt[UE_id][drb_id])<<3));
+           fprintf(fd,"                              rx_bytes %d, UL Throughput %e\n",             
+                   Pdcp_stats_rx_bytes[0][UE_id][drb_id],
+                   (double)((Pdcp_stats_rx_bytes[0][UE_id][drb_id]-old_byte_cnt_rx[UE_id][drb_id])<<3));
+           old_byte_cnt[UE_id][drb_id]=Pdcp_stats_tx_bytes[0][UE_id][drb_id];
+           old_byte_cnt_rx[UE_id][drb_id]=Pdcp_stats_rx_bytes[0][UE_id][drb_id];
+        }
+     }
+     fclose(fd);
+   }
+   return(NULL);
+}
+
 uint64_t get_pdcp_optmask(void) {
   return pdcp_params.optmask;
 }
@@ -516,7 +553,7 @@ boolean_t pdcp_data_req(
       break;
   }
 
-  //LOG_I(PDCP,"ueid %d lcid %d tx seq num %d\n", pdcp_uid, rb_idP+rb_offset, current_sn);
+  LOG_D(PDCP,"ueid %d lcid %d tx seq num %d\n", pdcp_uid, (int)(rb_idP+rb_offset), current_sn);
   Pdcp_stats_tx[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]++;
   Pdcp_stats_tx_tmp_w[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]++;
   Pdcp_stats_tx_bytes[ctxt_pP->module_id][pdcp_uid][rb_idP+rb_offset]+=sdu_buffer_sizeP;
@@ -2345,6 +2382,8 @@ uint64_t pdcp_module_init( uint64_t pdcp_optmask ) {
              LOG_E(PDCP, "ENB pdcp will not use tun interface\n");
    }
 
+  pthread_create(&pdcp_stats_thread_desc,NULL,pdcp_stats_thread,NULL);
+
   return pdcp_params.optmask ;
 }
 
diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent_common.c b/openair2/LAYER2/PROTO_AGENT/proto_agent_common.c
index cb5f1af28d6385a8ff2f3d2cca7108b1a430093a..e0adfefa038f78cc305020d0bc738ae9bc8f3ba1 100644
--- a/openair2/LAYER2/PROTO_AGENT/proto_agent_common.c
+++ b/openair2/LAYER2/PROTO_AGENT/proto_agent_common.c
@@ -502,6 +502,13 @@ error:
   return -1;
 }
 
+boolean_t pdcp_data_ind(
+  const protocol_ctxt_t *const  ctxt_pP,
+  const srb_flag_t srb_flagP,
+  const MBMS_flag_t MBMS_flagP,
+  const rb_id_t rb_id,
+  const sdu_size_t sdu_buffer_size,
+  mem_block_t *const sdu_buffer);
 
 int proto_agent_pdcp_data_ind_process(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg) {
   boolean_t result = 0;
diff --git a/openair2/PHY_INTERFACE/IF_Module.c b/openair2/PHY_INTERFACE/IF_Module.c
index 38a742bf74d9889667beff112d808db9dc8c7c71..ed3c9a5b7d2f7e84d59fc797e7730f0c1fa3c714 100644
--- a/openair2/PHY_INTERFACE/IF_Module.c
+++ b/openair2/PHY_INTERFACE/IF_Module.c
@@ -19,6 +19,8 @@ extern int oai_nfapi_rx_ind(nfapi_rx_indication_t *ind);
 extern uint16_t sf_ahead;
 extern UL_RCC_IND_t  UL_RCC_INFO;
 
+extern RAN_CONTEXT_t RC;
+
 uint16_t frame_cnt=0;
 void handle_rach(UL_IND_t *UL_info) {
   int i;
@@ -685,7 +687,7 @@ static void dump_dl(Sched_Rsp_t *d) {
 /* debug utility functions end                                              */
 /****************************************************************************/
 
-void UL_indication(UL_IND_t *UL_info, L1_rxtx_proc_t *proc) {
+void UL_indication(UL_IND_t *UL_info, void *proc) {
   AssertFatal(UL_info!=NULL,"UL_INFO is null\n");
 #ifdef DUMP_FAPI
   dump_ul(UL_info);
diff --git a/openair2/PHY_INTERFACE/IF_Module.h b/openair2/PHY_INTERFACE/IF_Module.h
index 1470cbc0060117ee9af62273bf964684a4be3bb5..096979c4fd195595ac9e6076d3d06d686cfa5745 100644
--- a/openair2/PHY_INTERFACE/IF_Module.h
+++ b/openair2/PHY_INTERFACE/IF_Module.h
@@ -37,7 +37,6 @@
 #include <sched.h>
 //#include "openair1/PHY/LTE_TRANSPORT/transport_eNB.h"
 #include "nfapi_interface.h"
-#include "platform_constants.h"
 #include "platform_types.h"
 #include <common/utils/threadPool/thread-pool.h>
 
@@ -135,64 +134,13 @@ typedef struct {
     uint8_t Mod_id;
     int CC_id;
     nfapi_config_request_t *cfg;
-}PHY_Config_t;
+} PHY_Config_t;
 #include <targets/ARCH/COMMON/common_lib.h>
-/// Context data structure for RX/TX portion of subframe processing
-typedef struct {
-  /// Component Carrier index
-  uint8_t              CC_id;
-  /// timestamp transmitted to HW
-  openair0_timestamp timestamp_tx;
-  openair0_timestamp timestamp_rx;
-  /// subframe to act upon for transmission
-  int subframe_tx;
-  /// subframe to act upon for reception
-  int subframe_rx;
-  /// frame to act upon for transmission
-  int frame_tx;
-  /// frame to act upon for reception
-  int frame_rx;
-  int frame_prach;
-  int subframe_prach;
-  int frame_prach_br;
-  int subframe_prach_br;
-  /// \brief Instance count for RXn-TXnp4 processing thread.
-  /// \internal This variable is protected by \ref mutex_rxtx.
-  int instance_cnt;
-  /// pthread structure for RXn-TXnp4 processing thread
-  pthread_t pthread;
-  /// pthread attributes for RXn-TXnp4 processing thread
-  pthread_attr_t attr;
-  /// condition variable for tx processing thread
-  pthread_cond_t cond;
-  /// mutex for RXn-TXnp4 processing thread
-  pthread_mutex_t mutex;
-  /// scheduling parameters for RXn-TXnp4 thread
-  struct sched_param sched_param_rxtx;
-
-  /// \internal This variable is protected by \ref mutex_RUs.
-  int instance_cnt_RUs;
-  /// condition variable for tx processing thread
-  pthread_cond_t cond_RUs;
-  /// mutex for RXn-TXnp4 processing thread
-  pthread_mutex_t mutex_RUs;
-  tpool_t *threadPool;
-  int nbEncode;
-  int nbDecode;
-  notifiedFIFO_t *respEncode;
-  notifiedFIFO_t *respDecode;
-    pthread_mutex_t mutex_emulateRF;
-  int instance_cnt_emulateRF;
-  pthread_t pthread_emulateRF;
-  pthread_attr_t attr_emulateRF;
-  pthread_cond_t cond_emulateRF;
-  int first_rx;
-} L1_rxtx_proc_t;
 
 typedef struct IF_Module_s{
 //define the function pointer
-  void (*UL_indication)(UL_IND_t *UL_INFO, L1_rxtx_proc_t *proc);
-  void (*schedule_response)(Sched_Rsp_t *Sched_INFO, L1_rxtx_proc_t *proc);
+  void (*UL_indication)(UL_IND_t *UL_INFO, void *proc);
+  void (*schedule_response)(Sched_Rsp_t *Sched_INFO, void *proc);
   void (*PHY_config_req)(PHY_Config_t* config_INFO);
 
   void (*PHY_config_update_sib2_req)(PHY_Config_t* config_INFO);
@@ -209,7 +157,7 @@ void IF_Module_kill(int Mod_id);
 
 /*Interface for uplink, transmitting the Preamble(list), ULSCH SDU, NAK, Tick (trigger scheduler)
  */
-void UL_indication(UL_IND_t *UL_INFO, L1_rxtx_proc_t *proc);
+void UL_indication(UL_IND_t *UL_INFO, void *proc);
 
 /*Interface for Downlink, transmitting the DLSCH SDU, DCI SDU*/
 void Schedule_Response(Sched_Rsp_t *Sched_INFO);
diff --git a/openair2/RRC/LTE/MESSAGES/asn1_msg.c b/openair2/RRC/LTE/MESSAGES/asn1_msg.c
index 61bce26b2c1cc2d006ad67bcba98b06630f3ef16..ce26aeef871a192f171d994e7449fdad95b63a72 100644
--- a/openair2/RRC/LTE/MESSAGES/asn1_msg.c
+++ b/openair2/RRC/LTE/MESSAGES/asn1_msg.c
@@ -2728,7 +2728,7 @@ do_RRCConnectionSetup(
   //  assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax,
   //SchedulingRequestConfig__setup__dsr_TransMax_n4);
   //  assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = SchedulingRequestConfig__setup__dsr_TransMax_n4;
-  physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = LTE_SchedulingRequestConfig__setup__dsr_TransMax_n4;
+  physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = LTE_SchedulingRequestConfig__setup__dsr_TransMax_n64;
   rrcConnectionSetup->rrc_TransactionIdentifier = Transaction_id;
   rrcConnectionSetup->criticalExtensions.present = LTE_RRCConnectionSetup__criticalExtensions_PR_c1;
   rrcConnectionSetup->criticalExtensions.choice.c1.present = LTE_RRCConnectionSetup__criticalExtensions__c1_PR_rrcConnectionSetup_r8 ;
@@ -3220,56 +3220,58 @@ uint8_t do_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
   dl_dcch_msg.message.choice.c1.choice.ueCapabilityEnquiry.criticalExtensions.choice.c1.choice.ueCapabilityEnquiry_r8.ue_CapabilityRequest.list.count=0;
   ASN_SEQUENCE_ADD(&dl_dcch_msg.message.choice.c1.choice.ueCapabilityEnquiry.criticalExtensions.choice.c1.choice.ueCapabilityEnquiry_r8.ue_CapabilityRequest.list,
                    &rat);
-
-  /* request NR configuration */
   LTE_UECapabilityEnquiry_r8_IEs_t *r8 = &dl_dcch_msg.message.choice.c1.choice.ueCapabilityEnquiry.criticalExtensions.choice.c1.choice.ueCapabilityEnquiry_r8;
   LTE_UECapabilityEnquiry_v8a0_IEs_t r8_a0;
   LTE_UECapabilityEnquiry_v1180_IEs_t r11_80;
   LTE_UECapabilityEnquiry_v1310_IEs_t r13_10;
   LTE_UECapabilityEnquiry_v1430_IEs_t r14_30;
   LTE_UECapabilityEnquiry_v1510_IEs_t r15_10;
+  OCTET_STRING_t req_freq;
 
-  memset(&r8_a0, 0, sizeof(r8_a0));
-  memset(&r11_80, 0, sizeof(r11_80));
-  memset(&r13_10, 0, sizeof(r13_10));
-  memset(&r14_30, 0, sizeof(r14_30));
-  memset(&r15_10, 0, sizeof(r15_10));
+  if (nr_band>0) {
 
-  r8->nonCriticalExtension = &r8_a0;
-  r8_a0.nonCriticalExtension = &r11_80;
-  r11_80.nonCriticalExtension = &r13_10;
-  r13_10.nonCriticalExtension = &r14_30;
-  r14_30.nonCriticalExtension = &r15_10;
+    /* request NR configuration */
 
-  /* TODO: no hardcoded values here */
+    memset(&r8_a0, 0, sizeof(r8_a0));
+    memset(&r11_80, 0, sizeof(r11_80));
+    memset(&r13_10, 0, sizeof(r13_10));
+    memset(&r14_30, 0, sizeof(r14_30));
+    memset(&r15_10, 0, sizeof(r15_10));
 
-  nsa_band_list = (NR_FreqBandList_t *)calloc(1, sizeof(NR_FreqBandList_t));
+    r8->nonCriticalExtension = &r8_a0;
+    r8_a0.nonCriticalExtension = &r11_80;
+    r11_80.nonCriticalExtension = &r13_10;
+    r13_10.nonCriticalExtension = &r14_30;
+    r14_30.nonCriticalExtension = &r15_10;
 
-  nsa_band = (NR_FreqBandInformation_t *) calloc(1,sizeof(NR_FreqBandInformation_t));
-  nsa_band->present = NR_FreqBandInformation_PR_bandInformationEUTRA;
-  nsa_band->choice.bandInformationEUTRA = (NR_FreqBandInformationEUTRA_t *) calloc(1, sizeof(NR_FreqBandInformationEUTRA_t));
-  nsa_band->choice.bandInformationEUTRA->bandEUTRA = eutra_band;
-  ASN_SEQUENCE_ADD(&nsa_band_list->list, nsa_band);
+    /* TODO: no hardcoded values here */
 
-  nsa_band = (NR_FreqBandInformation_t *) calloc(1,sizeof(NR_FreqBandInformation_t));
-  nsa_band->present = NR_FreqBandInformation_PR_bandInformationNR;
-  nsa_band->choice.bandInformationNR = (NR_FreqBandInformationNR_t *) calloc(1, sizeof(NR_FreqBandInformationNR_t));
-  if(nr_band > 0)
+    nsa_band_list = (NR_FreqBandList_t *)calloc(1, sizeof(NR_FreqBandList_t));
+
+    nsa_band = (NR_FreqBandInformation_t *) calloc(1,sizeof(NR_FreqBandInformation_t));
+    nsa_band->present = NR_FreqBandInformation_PR_bandInformationEUTRA;
+    nsa_band->choice.bandInformationEUTRA = (NR_FreqBandInformationEUTRA_t *) calloc(1, sizeof(NR_FreqBandInformationEUTRA_t));
+    nsa_band->choice.bandInformationEUTRA->bandEUTRA = eutra_band;
+    ASN_SEQUENCE_ADD(&nsa_band_list->list, nsa_band);
+
+    nsa_band = (NR_FreqBandInformation_t *) calloc(1,sizeof(NR_FreqBandInformation_t));
+    nsa_band->present = NR_FreqBandInformation_PR_bandInformationNR;
+    nsa_band->choice.bandInformationNR = (NR_FreqBandInformationNR_t *) calloc(1, sizeof(NR_FreqBandInformationNR_t));
+  //if(nr_band > 0)
     nsa_band->choice.bandInformationNR->bandNR = nr_band;
-  else
-    nsa_band->choice.bandInformationNR->bandNR = 78;
-  ASN_SEQUENCE_ADD(&nsa_band_list->list, nsa_band);
+  //else
+  //  nsa_band->choice.bandInformationNR->bandNR = 78;
+    ASN_SEQUENCE_ADD(&nsa_band_list->list, nsa_band);
 
-  OCTET_STRING_t req_freq;
   //unsigned char req_freq_buf[5] = { 0x00, 0x20, 0x1a, 0x02, 0x68 };  // bands 7 & nr78
-  unsigned char req_freq_buf[1024];
-  enc_rval = uper_encode_to_buffer(&asn_DEF_NR_FreqBandList,
-                              NULL,
-                              (void *)nsa_band_list,
-                              req_freq_buf,
-                              1024);
+    unsigned char req_freq_buf[1024];
+    enc_rval = uper_encode_to_buffer(&asn_DEF_NR_FreqBandList,
+                                NULL,
+                                (void *)nsa_band_list,
+                                req_freq_buf,
+                                1024);
 
-  xer_fprint(stdout, &asn_DEF_NR_FreqBandList, (void *)nsa_band_list);
+    xer_fprint(stdout, &asn_DEF_NR_FreqBandList, (void *)nsa_band_list);
 
 
 
@@ -3280,14 +3282,16 @@ uint8_t do_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
 //0x01, 0x60, 0x18, 0x05, 0x80, 0xc0, 0x04, 0x04, 0xc1, 0x2c, 0x10, 0x08, 0x20, 0x30, 0x40, 0xe0, 0x82, 0x40, 0x28, 0x80, 0x9a
 //  };
 
-  req_freq.buf = req_freq_buf;
-  req_freq.size = (enc_rval.encoded+7)/8;
+    req_freq.buf = req_freq_buf;
+    req_freq.size = (enc_rval.encoded+7)/8;
 //  req_freq.size = 21;
 
-  r15_10.requestedFreqBandsNR_MRDC_r15 = &req_freq;
-  if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
-    xer_fprint(stdout, &asn_DEF_LTE_DL_DCCH_Message, (void *)&dl_dcch_msg);
+    r15_10.requestedFreqBandsNR_MRDC_r15 = &req_freq;
+    // Add request for eutra-nr 
   }
+//  if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+    xer_fprint(stdout, &asn_DEF_LTE_DL_DCCH_Message, (void *)&dl_dcch_msg);
+//  }
 
   enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_DL_DCCH_Message,
                                    NULL,
diff --git a/openair2/RRC/LTE/defs_NB_IoT.h b/openair2/RRC/LTE/defs_NB_IoT.h
index 2a34971c231f32b851a29951a36acd4efe4f2d38..3907d2321d89aa6f2ee66ccfdb2c0211c5f9cbe8 100644
--- a/openair2/RRC/LTE/defs_NB_IoT.h
+++ b/openair2/RRC/LTE/defs_NB_IoT.h
@@ -211,13 +211,13 @@ typedef struct RB_INFO_TABLE_ENTRY_NB_IoT_s {
   RB_INFO_NB_IoT Rb_info;
   uint8_t Active;
   uint32_t Next_check_frame;
-  uint8_t Status;
+  uint8_t status;
 } RB_INFO_TABLE_ENTRY_NB_IoT;
 
 typedef struct SRB_INFO_TABLE_ENTRY_NB_IoT_s {
   SRB_INFO_NB_IoT Srb_info;
   uint8_t Active;
-  uint8_t Status;
+  uint8_t status;
   uint32_t Next_check_frame;
 } SRB_INFO_TABLE_ENTRY_NB_IoT;
 
@@ -269,7 +269,7 @@ typedef struct eNB_RRC_UE_NB_IoT_s {
   e_LTE_CipheringAlgorithm_r12     ciphering_algorithm; //Specs. TS 36.331 V14.1.0 pag 432 Change position of chipering enumerative w.r.t previous version
   e_LTE_SecurityAlgorithmConfig__integrityProtAlgorithm integrity_algorithm;
 
-  uint8_t                            Status;
+  uint8_t                            status;
   rnti_t                             rnti;
   uint64_t                           random_ue_identity;
 
diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c
index 9a565be560d214d725e6bfc59e048b1dee75cfda..52c3495948267eb231288b0dcb20c2d319e7b677 100644
--- a/openair2/RRC/LTE/rrc_eNB.c
+++ b/openair2/RRC/LTE/rrc_eNB.c
@@ -1056,7 +1056,7 @@ void release_UE_in_freeList(module_id_t mod_id) {
         if (id>=0) clean_eNb_dlsch(eNB_PHY->dlsch[id][0]);
 
         // clean UCI entries for rnti
-        for (i=0; i<NUMBER_OF_UCI_VARS_MAX; i++) {
+        for (i=0; i<NUMBER_OF_UCI_MAX; i++) {
           if(eNB_PHY->uci_vars[i].rnti == rnti) {
             LOG_I(MAC, "clean eNb uci_vars[%d] UE %x \n",i, rnti);
             memset(&eNB_PHY->uci_vars[i],0,sizeof(LTE_eNB_UCI));
@@ -1090,7 +1090,7 @@ void release_UE_in_freeList(module_id_t mod_id) {
                 clean_eNb_ulsch(ulsch);
               }
 
-              for (i=0; i<NUMBER_OF_UCI_VARS_MAX; i++) {
+              for (i=0; i<NUMBER_OF_UCI_MAX; i++) {
                 if(eNB_PHY->uci_vars[i].rnti == rnti) {
                   LOG_I(MAC, "clean eNb uci_vars[%d] UE %x \n",i, rnti);
                   memset(&eNB_PHY->uci_vars[i],0,sizeof(LTE_eNB_UCI));
@@ -3442,6 +3442,7 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t
   ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A5);
 
   if (ue_context_pP->ue_context.does_nr) {
+    LOG_I(RRC,"Configuring measurement for NR cell\n");
     ReportConfig_NR->reportConfigId = 7;
     ReportConfig_NR->reportConfig.present = LTE_ReportConfigToAddMod__reportConfig_PR_reportConfigInterRAT;
     ReportConfig_NR->reportConfig.choice.reportConfigInterRAT.triggerType.present = LTE_ReportConfigInterRAT__triggerType_PR_event;
@@ -4568,7 +4569,6 @@ rrc_eNB_process_MeasurementReport(
 
       case 7:
         LOG_D(RRC, "NR event frame %d subframe %d\n", ctxt_pP->frame, ctxt_pP->subframe);
-        printf("NR event frame %d subframe %d\n", ctxt_pP->frame, ctxt_pP->subframe);
         break;
 
       default:
@@ -4593,6 +4593,9 @@ rrc_eNB_process_MeasurementReport(
       ue_context_pP->ue_context.gnb_x2_assoc_id = -1;  // set when receiving X2AP_ENDC_SGNB_ADDITION_REQ_ACK
 
       if(is_en_dc_supported(ue_context_pP->ue_context.UE_Capability)) {
+
+        AssertFatal(measResults2->measResultNeighCells!=NULL,"no measResultNeighCells, shouldn't happen!\n");
+        AssertFatal(measResults2->measResultNeighCells->present==LTE_MeasResults__measResultNeighCells_PR_measResultNeighCellListNR_r15,"field is not LTE_MeasResults__measResultNeighCells_PR_measResultNeighCellListNR_r15");
         /** to add gNB as Secondary node CG-ConfigInfo to be added as per 36.423 r15 **/
         if(encode_CG_ConfigInfo(enc_buf,sizeof(enc_buf),ue_context_pP,&enc_size) == RRC_OK)
           LOG_I(RRC,"CG-ConfigInfo encoded successfully\n");
@@ -4611,6 +4614,7 @@ rrc_eNB_process_MeasurementReport(
         X2AP_ENDC_SGNB_ADDITION_REQ(msg).rrc_buffer_size = enc_size;
 
         X2AP_ENDC_SGNB_ADDITION_REQ(msg).target_physCellId
+          //= measResults2->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->pci_r15;
           = measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]->physCellId;
 
         //For the moment we have a single E-RAB which will be the one to be added to the gNB
@@ -4633,6 +4637,32 @@ rrc_eNB_process_MeasurementReport(
         return;
       }
     }
+
+    if (!ue_context_pP->ue_context.measResults->measResultNeighCells) {
+      ue_context_pP->ue_context.measResults->measResultNeighCells = calloc(1,sizeof(*ue_context_pP->ue_context.measResults->measResultNeighCells));
+      ue_context_pP->ue_context.measResults->measResultNeighCells->present = LTE_MeasResults__measResultNeighCells_PR_measResultNeighCellListNR_r15;
+      ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array = calloc(1, sizeof(*ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array));
+      ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0] = calloc(1, sizeof(*ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]));
+      ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.count = 1;
+    }
+    struct LTE_MeasResultCellNR_r15 *ueCtxtMeasResultCellNR_r15 = ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0];
+    const struct LTE_MeasResultCellNR_r15 *measNeighCellNR0 = measResults2->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0];
+    ueCtxtMeasResultCellNR_r15->pci_r15 = measNeighCellNR0->pci_r15;
+    if (!ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrpResult_r15)
+      ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrpResult_r15 = calloc(1, sizeof(*ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrpResult_r15));
+    if (!ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrqResult_r15)
+      ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrqResult_r15 = calloc(1, sizeof(*ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrqResult_r15));
+    *ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrpResult_r15 = *measNeighCellNR0->measResultCell_r15.rsrpResult_r15;
+    *ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrqResult_r15 = *measNeighCellNR0->measResultCell_r15.rsrqResult_r15;
+    if (measNeighCellNR0->measResultRS_IndexList_r15) {
+       if (!ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15) {
+          ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15 = calloc(1,sizeof(*ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15));
+          ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array = calloc(1, sizeof(ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array));
+          ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array[0] = calloc(1, sizeof(*ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array));
+          ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.count = 1;
+       }
+      ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array[0]->ssb_Index_r15 = measNeighCellNR0->measResultRS_IndexList_r15->list.array[0]->ssb_Index_r15;
+    }
   }
 
   if (measResults2->measResultNeighCells == NULL)
@@ -5710,7 +5740,7 @@ rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ct
   //SchedulingRequestConfig__setup__dsr_TransMax_n4);
   //  assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = SchedulingRequestConfig__setup__dsr_TransMax_n4;
   physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax =
-    LTE_SchedulingRequestConfig__setup__dsr_TransMax_n4;
+    LTE_SchedulingRequestConfig__setup__dsr_TransMax_n64;
   LOG_D(RRC,
         "handover_config [FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ  (SRB1 UE %x) --->][MAC_eNB][MOD %02d][]\n",
         ctxt_pP->frame, ctxt_pP->module_id, ue_context_pP->ue_context.rnti, ctxt_pP->module_id);
@@ -7581,7 +7611,205 @@ rrc_eNB_decode_ccch(
   return rval;
 }
 
+#define NCE nonCriticalExtension
+
+static void 
+get_ue_Category(
+  LTE_UE_EUTRA_Capability_t *c,
+  long *catDL,
+  long *catUL
+)
+{
+  if (c != NULL) { // v8.6
+     *catDL=c->ue_Category; *catUL=c->ue_Category;
+     struct LTE_UE_EUTRA_Capability_v920_IEs *c92=c->NCE;
+     if (c92 != NULL) { // v9.2
+        struct LTE_UE_EUTRA_Capability_v940_IEs *c94=c92->NCE;
+        if (c94 != NULL) { // v9.4
+           struct LTE_UE_EUTRA_Capability_v1020_IEs *c102=c94->NCE;
+           if (c102 != NULL) { // v10.2
+              if (c102->ue_Category_v1020) {*catDL=*c102->ue_Category_v1020;*catUL=*c102->ue_Category_v1020;}
+              struct LTE_UE_EUTRA_Capability_v1060_IEs *c106=c102->NCE;
+                 if (c106 != NULL) { // v10.6
+                    struct LTE_UE_EUTRA_Capability_v1090_IEs *c109=c106->NCE;
+                    if (c109 != NULL) { // v10.9
+                       struct LTE_UE_EUTRA_Capability_v1130_IEs *c113=c109->NCE;
+                       if (c113 != NULL) { // v11.3
+                          struct LTE_UE_EUTRA_Capability_v1170_IEs *c117=c113->NCE;
+                          if (c117 != NULL) { // v11.7
+                             if (c117->ue_Category_v1170) {*catDL=*c117->ue_Category_v1170;
+                             struct LTE_UE_EUTRA_Capability_v1180_IEs *c118=c117->NCE;
+                             if (c118 != NULL) { // v11.8
+                                struct LTE_UE_EUTRA_Capability_v11a0_IEs *c11a=c118->NCE;
+                                if (c11a != NULL) { // v11.a
+                                   if (c11a->ue_Category_v11a0) {*catDL=*c11a->ue_Category_v11a0;*catUL=*c11a->ue_Category_v11a0;}
+                                   struct LTE_UE_EUTRA_Capability_v1250_IEs *c125=c11a->NCE;
+                                   if (c125 != NULL) { // v12.5
+                                      if (c125->ue_CategoryDL_r12) *catDL=*c125->ue_CategoryDL_r12;
+                                      if (c125->ue_CategoryUL_r12) *catUL=*c125->ue_CategoryUL_r12;
+                                      struct LTE_UE_EUTRA_Capability_v1260_IEs *c126=c125->NCE;
+                                      if (c126 != NULL) { // v12.6
+                                         if (c126->ue_CategoryDL_v1260) *catDL=*c126->ue_CategoryDL_v1260; 
+                                         struct LTE_UE_EUTRA_Capability_v1270_IEs *c127=c126->NCE;
+                                         if (c127 != NULL) { // v12.7
+                                            struct LTE_UE_EUTRA_Capability_v1280_IEs *c128=c127->NCE;
+                                            if (c128 != NULL) { // v12.8
+                                               struct LTE_UE_EUTRA_Capability_v1310_IEs *c131=c128->NCE;
+                                               if (c131 != NULL) { // v13.1
+                                                  if (c131->ue_CategoryDL_v1310 && *c131->ue_CategoryDL_v1310 == 0) *catDL=17;
+                                                  if (c131->ue_CategoryDL_v1310 && *c131->ue_CategoryDL_v1310 == 1) *catDL=-1;
+                                                  if (c131->ue_CategoryUL_v1310 && *c131->ue_CategoryUL_v1310 == 0) *catUL=14;
+                                                  if (c131->ue_CategoryUL_v1310 && *c131->ue_CategoryUL_v1310 == 1) *catUL=-1;
+                                                  struct LTE_UE_EUTRA_Capability_v1320_IEs *c132=c131->NCE;
+                                                  if (c132 != NULL) { //v13.2
+                                                     struct LTE_UE_EUTRA_Capability_v1330_IEs *c133=c132->NCE;
+                                                     if (c133 != NULL) { // v13.3
+                                                        if (c133->ue_CategoryDL_v1330) *catDL=*c133->ue_CategoryDL_v1330;
+                                                        struct LTE_UE_EUTRA_Capability_v1340_IEs *c134=c133->NCE;
+                                                        if (c134 != NULL) { // v13.4
+                                                           if (c134->ue_CategoryUL_v1340) *catUL=*c134->ue_CategoryUL_v1340;
+                                                           struct LTE_UE_EUTRA_Capability_v1350_IEs *c135=c134->NCE;
+                                                           if (c135 != NULL) { // v13.5
+                                                              if (c135->ue_CategoryDL_v1350) *catDL=99; // Cat 1Bis
+                                                              if (c135->ue_CategoryUL_v1350) *catUL=99; // Cat 1Bis
+                                                              struct LTE_UE_EUTRA_Capability_v1360_IEs *c136=c135->NCE;
+                                                              if (c136 != NULL) { // v13.6
+                                                                 struct LTE_UE_EUTRA_Capability_v1430_IEs *c143=c136->NCE;
+                                                                 if (c143 != NULL) { // v14.3
+                                                                    if (c143->ue_CategoryDL_v1430 && *c143->ue_CategoryDL_v1430 == LTE_UE_EUTRA_Capability_v1430_IEs__ue_CategoryDL_v1430_m2) *catDL=-2;
+                                                                    if (c143->ue_CategoryUL_v1430 && *c143->ue_CategoryUL_v1430 == LTE_UE_EUTRA_Capability_v1430_IEs__ue_CategoryDL_v1430_m2) *catUL=-2;
+                                                                    if (c143->ue_CategoryUL_v1430) *catUL=16+*c143->ue_CategoryUL_v1430;
+                                                                    if (c143->ue_CategoryUL_v1430b)*catUL=21;
+                                                                    struct LTE_UE_EUTRA_Capability_v1440_IEs *c144=c143->NCE;
+                                                                    if (c144 != NULL) { // v14.4
+                                                                       struct LTE_UE_EUTRA_Capability_v1450_IEs *c145=c144->NCE;
+                                                                       if (c145 != NULL) { // v14.5
+                                                                          if (c145->ue_CategoryDL_v1450) *catDL=*c145->ue_CategoryDL_v1450;
+                                                                          struct LTE_UE_EUTRA_Capability_v1460_IEs *c146=c145->NCE;
+                                                                          if (c146 != NULL) { // v14.6
+                                                                             if (c146->ue_CategoryDL_v1460) *catDL=*c146->ue_CategoryDL_v1460;
+                                                                             struct LTE_UE_EUTRA_Capability_v1510_IEs *c151=c146->NCE;
+                                                                             if (c151 != NULL) { // v15.1
+                                                                                struct LTE_UE_EUTRA_Capability_v1520_IEs *c152=c151->NCE;
+                                                                                if (c152 != NULL) { // v15.20
+                                                                                   struct LTE_UE_EUTRA_Capability_v1530_IEs *c153=c152->NCE;
+                                                                                   if (c153 != NULL) { // v15.30
+                                                                                      if (c153->ue_CategoryDL_v1530) *catDL=*c153->ue_CategoryDL_v1530;
+                                                                                      if (c153->ue_CategoryUL_v1530) *catUL=*c153->ue_CategoryUL_v1530;
+                                                                                   }
+                                                                                }
+                                                                             }
+                                                                          }
+                                                                       }
+                                                                    }
+                                                                 }
+                                                              }
+                                                           }
+                                                        }
+                                                     }
+                                                  }
+                                               }
+                                            }
+                                         }
+                                      }
+                                   }
+                                }
+                             }
+                          }
+                       }
+                    }
+                 }
+              }
+           }
+        }
+     }
+  }
+}
+
+static int
+is_ul_64QAM_supported(
+  LTE_UE_EUTRA_Capability_t *c
+)
+//-----------------------------------------------------------------------------
+{
+  return c != NULL  // R8
+         && c->NCE != NULL // R92
+         && c->NCE->NCE != NULL // R94
+         && c->NCE->NCE->NCE != NULL // R102
+         && c->NCE->NCE->NCE->NCE != NULL // R106
+         && c->NCE->NCE->NCE->NCE->NCE != NULL // R109
+         && c->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R113
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R117 
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R118
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R11a
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R125
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250 != NULL
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250 != NULL
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array != NULL
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array[0]->ul_64QAM_r12 != NULL
+         && *c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array[0]->ul_64QAM_r12==LTE_SupportedBandEUTRA_v1250__ul_64QAM_r12_supported;
+}
+
+static int
+is_dl_256QAM_supported(
+  LTE_UE_EUTRA_Capability_t *c
+)
 //-----------------------------------------------------------------------------
+{
+  return c != NULL  // R8
+         && c->NCE != NULL // R92
+         && c->NCE->NCE != NULL // R94
+         && c->NCE->NCE->NCE != NULL // R102
+         && c->NCE->NCE->NCE->NCE != NULL // R106
+         && c->NCE->NCE->NCE->NCE->NCE != NULL // R109
+         && c->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R113
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R117 
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R118
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R11a
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R125
+	 && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250 != NULL
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250 != NULL
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array != NULL
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array[0]->dl_256QAM_r12 != NULL
+         && *c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array[0]->dl_256QAM_r12==LTE_SupportedBandEUTRA_v1250__dl_256QAM_r12_supported;
+
+}
+static int
+is_ul_256QAM_supported(
+  LTE_UE_EUTRA_Capability_t *c
+) 
+//-----------------------------------------------------------------------------
+{
+  return c != NULL  // R8
+         && c->NCE != NULL // R92
+         && c->NCE->NCE != NULL // R94
+         && c->NCE->NCE->NCE != NULL // R102
+         && c->NCE->NCE->NCE->NCE != NULL // R106
+         && c->NCE->NCE->NCE->NCE->NCE != NULL // R109
+         && c->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R113
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R117 
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R118
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R11a
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R125
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R126
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // 127
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // 128
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //131 
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //132
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //133
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //134
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //135
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //136
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //143
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430 != NULL
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430 != NULL
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array != NULL 
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array[0]->bandParameterList_v1430 != NULL
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array[0]->bandParameterList_v1430->list.array != NULL
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array[0]->bandParameterList_v1430->list.array[0]->ul_256QAM_r14!=NULL
+         && *c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array[0]->bandParameterList_v1430->list.array[0]->ul_256QAM_r14==LTE_BandParameters_v1430__ul_256QAM_r14_supported;
+}
+
 static int
 is_en_dc_supported(
   LTE_UE_EUTRA_Capability_t *c
@@ -7591,32 +7819,31 @@ is_en_dc_supported(
   /* to be refined - check that the bands supported by the UE include
    * the band of the gNB
    */
-#define NCE nonCriticalExtension
-  return c != NULL
-         && c->NCE != NULL
-         && c->NCE->NCE != NULL
-         && c->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
-         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
+  return c != NULL  // R8
+         && c->NCE != NULL // R92
+         && c->NCE->NCE != NULL // R94
+         && c->NCE->NCE->NCE != NULL // R102
+         && c->NCE->NCE->NCE->NCE != NULL // R106
+         && c->NCE->NCE->NCE->NCE->NCE != NULL // R109
+         && c->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R113
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R117 
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R118
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R11a
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R125
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R126
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // 127
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // 128
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //131 
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //132
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //133
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //134
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //135
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //136
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //143
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //144
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //145 
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //146
+         && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //151
          && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->irat_ParametersNR_r15 != NULL
          && c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->irat_ParametersNR_r15->en_DC_r15 != NULL
          && *c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->irat_ParametersNR_r15->en_DC_r15 ==
@@ -7624,6 +7851,45 @@ is_en_dc_supported(
 #undef NCE
 }
 
+int to_nr_rsrpq(long rsrpq_result,int nr_band) {
+
+    switch(nr_band) {
+      case 1:  // A
+      case 70:
+      case 74:
+      case 34:
+      case 38:
+      case 39:
+      case 40:
+      case 50:
+      case 51:
+       return((rsrpq_result*10)-1180);
+      case 66:  // B
+       return((rsrpq_result*10)-1175);
+      case 77:  // C
+      case 78:
+      case 79: 
+       return((rsrpq_result*10)-1170);
+      case 28:  // D
+       return((rsrpq_result*10)-1165);
+      case 2:
+      case 5:
+      case 7:
+      case 41:  // E
+       return((rsrpq_result*10)-1160);
+      case 3:   // G
+      case 8:
+      case 12:
+      case 20:
+      case 71:
+       return((rsrpq_result*10)-1150);
+      case 25:  // H
+       return((rsrpq_result*10)-1145);
+      default:
+       AssertFatal(1==0,"Illegal NR band %d\n",nr_band);
+    }
+}
+
 //-----------------------------------------------------------------------------
 int
 rrc_eNB_decode_dcch(
@@ -8193,7 +8459,7 @@ rrc_eNB_decode_dcch(
               ASN_STRUCT_FREE(asn_DEF_NR_UE_NR_Capability,ue_context_p->ue_context.UE_Capability_nr);
               ue_context_p->ue_context.UE_Capability_nr = 0;
             }
-
+            LOG_I(RRC,"Received NR_UE_Capabilities\n");
             dec_rval = uper_decode(NULL,
                                    &asn_DEF_NR_UE_NR_Capability,
                                    (void **)&ue_context_p->ue_context.UE_Capability_nr,
@@ -8218,6 +8484,8 @@ rrc_eNB_decode_dcch(
 
           if (ul_dcch_msg->message.choice.c1.choice.ueCapabilityInformation.criticalExtensions.choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList.list.array[i]->rat_Type ==
               LTE_RAT_Type_eutra_nr) {
+            LOG_I(RRC,"Received UE_Capabilities_MRDC\n");
+
             if(ue_context_p->ue_context.UE_Capability_MRDC) {
               ASN_STRUCT_FREE(asn_DEF_NR_UE_MRDC_Capability,ue_context_p->ue_context.UE_Capability_MRDC);
               ue_context_p->ue_context.UE_Capability_MRDC = 0;
@@ -8574,14 +8842,13 @@ void handle_f1_setup_req(f1ap_setup_req_t *f1_setup_req) {
         F1AP_SETUP_RESP (msg_p).nr_cellid[cu_cell_ind]                     = rrc->nr_cellid;
         F1AP_SETUP_RESP (msg_p).nrpci[cu_cell_ind]                         = f1_setup_req->nr_pci[i];
         int num_SI= 0;
-
         if (rrc->carrier[0].SIB23) {
-          F1AP_SETUP_RESP (msg_p).SI_container[cu_cell_ind][num_SI]        = rrc->carrier[0].SIB23;
-          F1AP_SETUP_RESP (msg_p).SI_container_length[cu_cell_ind][num_SI] = rrc->carrier[0].sizeof_SIB23;
-          //printf("SI %d size %d: ", 0, F1AP_SETUP_RESP(msg_p).SI_container_length[j][num_SI]);
-          //for (int n = 0; n < F1AP_SETUP_RESP(msg_p).SI_container_length[j][num_SI]; n++)
-          //  printf("%02x ", F1AP_SETUP_RESP(msg_p).SI_container[0][num_SI][n]);
-          //printf("\n");
+          F1AP_SETUP_RESP (msg_p).SI_container[cu_cell_ind][2+num_SI]        = rrc->carrier[0].SIB23;
+          F1AP_SETUP_RESP (msg_p).SI_container_length[cu_cell_ind][2+num_SI] = rrc->carrier[0].sizeof_SIB23;
+          printf("SI %d size %d: ", 0, F1AP_SETUP_RESP(msg_p).SI_container_length[j][2+num_SI]);
+          for (int n = 0; n < F1AP_SETUP_RESP(msg_p).SI_container_length[j][2+num_SI]; n++)
+            printf("%02x ", F1AP_SETUP_RESP(msg_p).SI_container[0][2+num_SI][n]);
+          printf("\n");
           num_SI++;
         }
 
@@ -8780,10 +9047,6 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
   struct rrc_eNB_ue_context_s *ue_to_be_removed[NUMBER_OF_UE_MAX];
   int removed_ue_count = 0;
   int cur_ue;
-#ifdef LOCALIZATION
-  double estimated_distance = 0;
-  protocol_ctxt_t                     ctxt;
-#endif
   MessageDef *msg;
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_RX_TX, VCD_FUNCTION_IN);
 
@@ -8795,22 +9058,53 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
   }
 
   // check for UL failure or for UE to be released
+  FILE *fd=NULL;
+  if ((ctxt_pP->frame&127) == 0 && ctxt_pP->subframe ==0) 
+    fd=fopen("RRC_stats.log","w+");
+
   RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(RC.rrc[ctxt_pP->module_id]->rrc_ue_head)) {
     ctxt_pP->rnti = ue_context_p->ue_id_rnti;
 
-    if ((ctxt_pP->frame == 0) && (ctxt_pP->subframe == 0)) {
-      if (ue_context_p->ue_context.Initialue_identity_s_TMSI.presence == TRUE) {
-        LOG_I(RRC, "UE rnti %x: S-TMSI %x failure timer %d/8\n",
-              ue_context_p->ue_context.rnti,
-              ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi,
-              ue_context_p->ue_context.ul_failure_timer);
-      } else {
-        LOG_I(RRC, "UE rnti %x failure timer %d/8\n",
-              ue_context_p->ue_context.rnti,
-              ue_context_p->ue_context.ul_failure_timer);
+    if ((ctxt_pP->frame&127) == 0 && ctxt_pP->subframe ==0) {
+      if (fd) {
+        if (ue_context_p->ue_context.Initialue_identity_s_TMSI.presence == TRUE) {
+          fprintf(fd,"RRC UE rnti %x: S-TMSI %x failure timer %d/8\n",
+                ue_context_p->ue_context.rnti,
+                ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi,
+                ue_context_p->ue_context.ul_failure_timer);
+        } else {
+          fprintf(fd,"RRC UE rnti %x failure timer %d/8\n",
+                ue_context_p->ue_context.rnti,
+                ue_context_p->ue_context.ul_failure_timer);
+        }
+
+        if (ue_context_p->ue_context.UE_Capability) {
+          long catDL,catUL;
+          get_ue_Category(ue_context_p->ue_context.UE_Capability,&catDL,&catUL);
+          fprintf(fd,"RRC UE cap: CatDL %ld, CatUL %ld, 64QAM UL %s, 256 QAM DL %s, 256 QAM UL %s, ENDC %s,\n",
+                catDL,catUL,
+		is_ul_64QAM_supported(ue_context_p->ue_context.UE_Capability) == 1 ? "yes" : "no",
+		is_dl_256QAM_supported(ue_context_p->ue_context.UE_Capability) == 1 ? "yes" : "no",
+                is_ul_256QAM_supported(ue_context_p->ue_context.UE_Capability) == 1 ? "yes" : "no",
+                is_en_dc_supported(ue_context_p->ue_context.UE_Capability) == 1 ? "yes" : "no");
+        }
+        if (ue_context_p->ue_context.measResults) {
+           fprintf(fd, "RRC PCell RSRP %ld, RSRQ %ld\n", ue_context_p->ue_context.measResults->measResultPCell.rsrpResult-140,
+                                                         ue_context_p->ue_context.measResults->measResultPCell.rsrqResult/2 - 20);
+          if (ue_context_p->ue_context.measResults->measResultNeighCells && 
+              ue_context_p->ue_context.measResults->measResultNeighCells->present == LTE_MeasResults__measResultNeighCells_PR_measResultNeighCellListNR_r15) { 
+
+            fprintf(fd,"NR_pci %ld\n",ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->pci_r15);
+            if(ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultCell_r15.rsrpResult_r15)
+              fprintf(fd,"NR_rsrp %f dB\n",to_nr_rsrpq(*ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultCell_r15.rsrpResult_r15,RC.rrc[ctxt_pP->module_id]->nr_gnb_freq_band[0][0])/10.0);
+            if (ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultCell_r15.rsrqResult_r15) 
+              fprintf(fd,"NR_rsrq %f dB\n",to_nr_rsrpq(*ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultCell_r15.rsrqResult_r15,RC.rrc[ctxt_pP->module_id]->nr_gnb_freq_band[0][0])/10.0);
+            if (ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultRS_IndexList_r15) 
+              fprintf(fd,"NR_ssb_index %ld\n",ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultRS_IndexList_r15->list.array[0]->ssb_Index_r15);
+           }
+        }
       }
     }
-
     if (ue_context_p->ue_context.ul_failure_timer > 0) {
       ue_context_p->ue_context.ul_failure_timer++;
 
@@ -9002,31 +9296,9 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
     }
   }
 
-#ifdef RRC_LOCALIZATION
-  /* for the localization, only primary CC_id might be relevant*/
-  gettimeofday(&ts, NULL);
-  current_timestamp_ms = ts.tv_sec * 1000 + ts.tv_usec / 1000;
-  ref_timestamp_ms = RC.rrc[ctxt_pP->module_id]->reference_timestamp_ms;
-  RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(RC.rrc[ctxt_pP->module_id]->rrc_ue_head)) {
-    ctxt = *ctxt_pP;
-    ctxt.rnti = ue_context_p->ue_context.rnti;
-    estimated_distance = rrc_get_estimated_ue_distance(&ctxt, CC_id, RC.rrc[ctxt_pP->module_id]->loc_type);
-
-    if ((current_timestamp_ms - ref_timestamp_ms > RC.rrc[ctxt_pP->module_id]->aggregation_period_ms) &&
-        estimated_distance != -1) {
-      LOG_D(LOCALIZE, "RRC [UE/id %d -> eNB/id %d] timestamp %d frame %d estimated r = %f\n",
-            ctxt.rnti,
-            ctxt_pP->module_id,
-            current_timestamp_ms,
-            ctxt_pP->frame,
-            estimated_distance);
-      LOG_D(LOCALIZE, "RRC status %d\n",
-            ue_context_p->ue_context.Status);
-      push_front(&RC.rrc[ctxt_pP->module_id]->loc_list, estimated_distance);
-      RC.rrc[ctxt_pP->module_id]->reference_timestamp_ms = current_timestamp_ms;
-    } // end if
-  } // end RB_FOREACH
-#endif
+  if (fd!=NULL) fclose(fd);
+
+
   (void)ts; /* remove gcc warning "unused variable" */
   (void)ref_timestamp_ms; /* remove gcc warning "unused variable" */
   (void)current_timestamp_ms; /* remove gcc warning "unused variable" */
diff --git a/openair2/RRC/NR/nr_rrc_defs.h b/openair2/RRC/NR/nr_rrc_defs.h
index e0b04a6976429665521d8941d7ecf09b26079533..7fd9e5d53a5bfe07f4d71d7ef71cbc8039f86937 100644
--- a/openair2/RRC/NR/nr_rrc_defs.h
+++ b/openair2/RRC/NR/nr_rrc_defs.h
@@ -238,13 +238,13 @@ typedef struct RB_INFO_TABLE_ENTRY_NR_s {
   NR_RB_INFO                                          Rb_info;
   uint8_t                                             Active;
   uint32_t                                            Next_check_frame;
-  uint8_t                                             Status;
+  uint8_t                                             status;
 } NR_RB_INFO_TABLE_ENTRY;
 
 typedef struct SRB_INFO_TABLE_ENTRY_NR_s {
   NR_SRB_INFO                                         Srb_info;
   uint8_t                                             Active;
-  uint8_t                                             Status;
+  uint8_t                                             status;
   uint32_t                                            Next_check_frame;
 } NR_SRB_INFO_TABLE_ENTRY;
 
@@ -315,7 +315,7 @@ typedef struct gNB_RRC_UE_s {
   NR_CipheringAlgorithm_t            ciphering_algorithm;
   e_NR_IntegrityProtAlgorithm        integrity_algorithm;
 
-  uint8_t                            Status;
+  uint8_t                            status;
   rnti_t                             rnti;
   uint64_t                           random_ue_identity;
 
diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c
index dca6587d45f57c237ad703701990f0850c3c7e52..bbaff81698ef30e6c631e5929a62b515d13604b3 100755
--- a/openair2/RRC/NR/rrc_gNB.c
+++ b/openair2/RRC/NR/rrc_gNB.c
@@ -562,7 +562,7 @@ rrc_gNB_process_RRCSetupComplete(
   LOG_I(NR_RRC, PROTOCOL_NR_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel UL-DCCH, " "processing NR_RRCSetupComplete from UE (SRB1 Active)\n",
       PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
   ue_context_pP->ue_context.Srb1.Active = 1;
-  ue_context_pP->ue_context.Status = NR_RRC_CONNECTED;
+  ue_context_pP->ue_context.status = NR_RRC_CONNECTED;
 
   if (AMF_MODE_ENABLED) {
     rrc_gNB_send_NGAP_NAS_FIRST_REQ(ctxt_pP, ue_context_pP, rrcSetupComplete);
@@ -1111,7 +1111,7 @@ rrc_gNB_process_RRCConnectionReestablishmentComplete(
 
   uint8_t next_xid = rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id);
   int ret = 0;
-  ue_context_pP->ue_context.Status = NR_RRC_CONNECTED;
+  ue_context_pP->ue_context.status = NR_RRC_CONNECTED;
   ue_context_pP->ue_context.ue_rrc_inactivity_timer = 1; // set rrc inactivity when UE goes into RRC_CONNECTED
   ue_context_pP->ue_context.reestablishment_xid = next_xid;
   SRB_configList2 = &ue_context_pP->ue_context.SRB_configList2[xid];
@@ -1602,7 +1602,7 @@ int nr_rrc_gNB_decode_ccch(protocol_ctxt_t    *const ctxt_pP,
           }
 #endif
           //c-plane not end
-          if((ue_context_p->ue_context.Status != NR_RRC_RECONFIGURED) && (ue_context_p->ue_context.reestablishment_cause == NR_ReestablishmentCause_spare1)) {
+          if((ue_context_p->ue_context.status != NR_RRC_RECONFIGURED) && (ue_context_p->ue_context.reestablishment_cause == NR_ReestablishmentCause_spare1)) {
             LOG_E(NR_RRC,
                   PROTOCOL_NR_RRC_CTXT_UE_FMT" NR_RRCReestablishmentRequest (UE %x c-plane is not end), RRC establishment failed \n",
                   PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),c_rnti);
@@ -1614,9 +1614,9 @@ int nr_rrc_gNB_decode_ccch(protocol_ctxt_t    *const ctxt_pP,
             LOG_E(NR_RRC,
                   PROTOCOL_NR_RRC_CTXT_UE_FMT" RRRCReconfigurationComplete(Previous) don't receive, delete the Previous UE,\nprevious Status %d, new Status NR_RRC_RECONFIGURED\n",
                   PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
-                  ue_context_p->ue_context.Status
+                  ue_context_p->ue_context.status
                   );
-            ue_context_p->ue_context.Status = NR_RRC_RECONFIGURED;
+            ue_context_p->ue_context.status = NR_RRC_RECONFIGURED;
             protocol_ctxt_t  ctxt_old_p;
             PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt_old_p,
                                           ctxt_pP->instance,
diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c
index c6778729ec47d1daf78fa467f1e6dc3935068679..5bb44205c466b0287b3a8178e0362c0452fae3e8 100644
--- a/openair2/RRC/NR/rrc_gNB_NGAP.c
+++ b/openair2/RRC/NR/rrc_gNB_NGAP.c
@@ -569,7 +569,7 @@ rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(
       }
 
     // in case, send the S1SP initial context response if it is not sent with the attach complete message
-    if (ue_context_p->ue_context.Status == NR_RRC_RECONFIGURED) {
+    if (ue_context_p->ue_context.status == NR_RRC_RECONFIGURED) {
         LOG_I(NR_RRC, "Sending rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP, cause %ld\n", ue_context_p->ue_context.reestablishment_cause);
         rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(&ctxt,ue_context_p);
     }
diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c
index def7ca64049ef0b010d51f439274c7d334b59e93..191933a80baecd080d86dfddb8e7349bd42fa363 100644
--- a/openair2/RRC/NR_UE/rrc_UE.c
+++ b/openair2/RRC/NR_UE/rrc_UE.c
@@ -1759,7 +1759,7 @@ nr_rrc_ue_establish_srb1(
 {
   // add descriptor from RRC PDU
   NR_UE_rrc_inst[ue_mod_idP].Srb1[gNB_index].Active = 1;
-  NR_UE_rrc_inst[ue_mod_idP].Srb1[gNB_index].Status = RADIO_CONFIG_OK;//RADIO CFG
+  NR_UE_rrc_inst[ue_mod_idP].Srb1[gNB_index].status = RADIO_CONFIG_OK;//RADIO CFG
   NR_UE_rrc_inst[ue_mod_idP].Srb1[gNB_index].Srb_info.Srb_id = 1;
   LOG_I(NR_RRC, "[UE %d], CONFIG_SRB1 %d corresponding to gNB_index %d\n", ue_mod_idP, DCCH, gNB_index);
   return(0);
@@ -1777,7 +1777,7 @@ nr_rrc_ue_establish_srb2(
 {
   // add descriptor from RRC PDU
   NR_UE_rrc_inst[ue_mod_idP].Srb2[gNB_index].Active = 1;
-  NR_UE_rrc_inst[ue_mod_idP].Srb2[gNB_index].Status = RADIO_CONFIG_OK;//RADIO CFG
+  NR_UE_rrc_inst[ue_mod_idP].Srb2[gNB_index].status = RADIO_CONFIG_OK;//RADIO CFG
   NR_UE_rrc_inst[ue_mod_idP].Srb2[gNB_index].Srb_info.Srb_id = 2;
   LOG_I(NR_RRC, "[UE %d], CONFIG_SRB2 %d corresponding to gNB_index %d\n", ue_mod_idP, DCCH1, gNB_index);
   return(0);
diff --git a/openair2/UTIL/OTG/otg_defs.h b/openair2/UTIL/OTG/otg_defs.h
index 6c9944014fd99f08e01e53f2ef4e4330446bf8e3..af0260587fef51d04cf4ba4fb63cc5af6e23ee67 100644
--- a/openair2/UTIL/OTG/otg_defs.h
+++ b/openair2/UTIL/OTG/otg_defs.h
@@ -34,13 +34,8 @@
 # define __OTG_DEFS_H__
 
 /* \brief To define the NUMBER_OF_eNB_MAX and MAX_MOBILES_PER_ENB */
-#if STANDALONE==1
-	#include "openairinterface5g_limits.h"
-#else
-	// impl_defs_top.h includes openairinterface5g_limits.h
-	#include "PHY/impl_defs_top.h"
-#endif
-
+#include "openairinterface5g_limits.h"
+#include <openair2/COMMON/platform_constants.h>
 #include "otg_config.h"
 
 /**
diff --git a/openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.h b/openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.h
index c173d3b729319e275ac0e9779b7899ebd5a072c0..4bed349327326a15393fbf25ebbb57ccc398d689 100644
--- a/openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.h
+++ b/openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.h
@@ -26,7 +26,7 @@
 #include "ProtocolDiscriminator.h"
 #include "SecurityHeaderType.h"
 #include "MessageType.h"
-#include "PagingIdentity.h"
+#include "NasPagingIdentity.h"
 #include "Cli.h"
 #include "SsCode.h"
 #include "LcsIndicator.h"
diff --git a/openair3/NAS/COMMON/IES/NasPagingIdentity.h b/openair3/NAS/COMMON/IES/NasPagingIdentity.h
new file mode 100644
index 0000000000000000000000000000000000000000..3e03128006781eef714dd5835963d0ac9f312278
--- /dev/null
+++ b/openair3/NAS/COMMON/IES/NasPagingIdentity.h
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include "OctetString.h"
+
+#ifndef NASPAGING_IDENTITY_H_
+#define NASPAGING_IDENTITY_H_
+
+#define PAGING_IDENTITY_MINIMUM_LENGTH 2
+#define PAGING_IDENTITY_MAXIMUM_LENGTH 2
+
+typedef uint8_t PagingIdentity;
+
+int encode_paging_identity(PagingIdentity *pagingidentity, uint8_t iei, uint8_t *buffer, uint32_t len);
+
+void dump_paging_identity_xml(PagingIdentity *pagingidentity, uint8_t iei);
+
+int decode_paging_identity(PagingIdentity *pagingidentity, uint8_t iei, uint8_t *buffer, uint32_t len);
+
+#endif /* PAGING IDENTITY_H_ */
+
diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c
index 3a69d4c991f1de68e057875691d718f1433e5d9f..2758d01de3f11ae06217a1a7d705194d42e96520 100644
--- a/targets/ARCH/COMMON/common_lib.c
+++ b/targets/ARCH/COMMON/common_lib.c
@@ -40,7 +40,8 @@
 #include "assertions.h"
 #include "common/utils/load_module_shlib.h"
 #include "common/utils/LOG/log.h"
-#include "targets/RT/USER/lte-softmodem.h"
+//#include "targets/RT/USER/lte-softmodem.h"
+#include "executables/softmodem-common.h"
 
 char *get_devname(int devtype) {
 char *devnames[MAX_RF_DEV_TYPE]=DEVTYPE_NAMES;
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
index 2dfb4a7bf1321c253105a0e0971bd9cdfa60b6d3..ee0dce48f0976346210f659230e017f99059cb05 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
@@ -45,7 +45,6 @@
 
 #include "common_lib.h"
 #include "ethernet_lib.h"
-#include "common/ran_context.h"
 
 //#define DEBUG 1
 
@@ -414,7 +413,7 @@ int trx_eth_read_udp(openair0_device *device, openair0_timestamp *timestamp, voi
   char *temp_rx0 = ((char *)&temp_rx[1])-APP_HEADER_SIZE_BYTES;  
 #endif
 #elif defined(__arm__) || defined(__aarch64__)
-  int nsamps2 = (payload_size>>4)+1
+  int nsamps2 = (payload_size>>4)+1;
   int16x8_t temp_rx[nsamps2];
   char *temp_rx0 = ((char *)&temp_rx[1])-APP_HEADER_SIZE_BYTES;  
 #else
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
index 42ef899072b3b9fc4af6aeb48fe9ef876bc77cc6..83a6207eec8869d7082dc6a83a3f1aee803b2404 100644
--- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
@@ -464,6 +464,7 @@ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_BEAM_SWITCHI
       write_package[end].buff[i]    = buff[i];
     write_thread->count_write++;
     write_thread->end = (write_thread->end + 1)% MAX_WRITE_THREAD_PACKAGE;
+    LOG_D(HW,"Signaling TX TS %llu\n",(unsigned long long)timestamp);
     pthread_cond_signal(&write_thread->cond_write);
     pthread_mutex_unlock(&write_thread->mutex_write);
     return 0;
@@ -624,24 +625,48 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
 #if defined(__x86_64) || defined(__i386__)
 #ifdef __AVX2__
   nsamps2 = (nsamps+7)>>3;
-  __m256i buff_tmp[2][nsamps2];
+  __m256i buff_tmp[4][nsamps2];
 #else
   nsamps2 = (nsamps+3)>>2;
-  __m128i buff_tmp[2][nsamps2];
+  __m128i buff_tmp[4][nsamps2];
 #endif
 #elif defined(__arm__)
   nsamps2 = (nsamps+3)>>2;
-  int16x8_t buff_tmp[2][nsamps2];
+  int16x8_t buff_tmp[4][nsamps2];
 #endif
 
-    if (cc>1) {
+  int rxshift;
+  switch (device->type) {
+     case USRP_B200_DEV:
+        rxshift=4;
+        break;
+     case USRP_X300_DEV:
+     case USRP_N300_DEV:
+        rxshift=2;
+        break;
+     default:
+	AssertFatal(1==0,"Shouldn't be here\n");
+  }	
+  if (cc>1) {
       // receive multiple channels (e.g. RF A and RF B)
       std::vector<void *> buff_ptrs;
 
-      for (int i=0; i<cc; i++) buff_ptrs.push_back(buff_tmp[i]);
+     samples_received=0;
 
-      samples_received = s->rx_stream->recv(buff_ptrs, nsamps, s->rx_md);
-    } else {
+      while (samples_received != nsamps) {
+        for (int i=0; i<cc; i++) buff_ptrs.push_back(buff_tmp[i]+samples_received);
+        samples_received += s->rx_stream->recv(buff_ptrs,nsamps-samples_received, s->rx_md);
+
+
+         if  ((s->wait_for_first_pps == 0) && (s->rx_md.error_code!=uhd::rx_metadata_t::ERROR_CODE_NONE))
+          break;
+
+        if ((s->wait_for_first_pps == 1) && (samples_received != nsamps)) {
+          printf("sleep...\n"); //usleep(100);
+        }
+      }
+      if (samples_received == nsamps) s->wait_for_first_pps=0;
+   } else {
       // receive a single channel (e.g. from connector RF A)
       samples_received=0;
 
@@ -667,17 +692,17 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
         // FK: in some cases the buffer might not be 32 byte aligned, so we cannot use avx2
 
         if ((((uintptr_t) buff[i])&0x1F)==0) {
-          ((__m256i *)buff[i])[j] = _mm256_srai_epi16(buff_tmp[i][j],4);
+          ((__m256i *)buff[i])[j] = _mm256_srai_epi16(buff_tmp[i][j],rxshift);
         } else {
-          ((__m128i *)buff[i])[2*j] = _mm_srai_epi16(((__m128i *)buff_tmp[i])[2*j],4);
-          ((__m128i *)buff[i])[2*j+1] = _mm_srai_epi16(((__m128i *)buff_tmp[i])[2*j+1],4);
+          ((__m128i *)buff[i])[2*j] = _mm_srai_epi16(((__m128i *)buff_tmp[i])[2*j],rxshift);
+          ((__m128i *)buff[i])[2*j+1] = _mm_srai_epi16(((__m128i *)buff_tmp[i])[2*j+1],rxshift);
         }
 
 #else
-        ((__m128i *)buff[i])[j] = _mm_srai_epi16(buff_tmp[i][j],4);
+        ((__m128i *)buff[i])[j] = _mm_srai_epi16(buff_tmp[i][j],rxshift);
 #endif
 #elif defined(__arm__)
-        ((int16x8_t *)buff[i])[j] = vshrq_n_s16(buff_tmp[i][j],4);
+        ((int16x8_t *)buff[i])[j] = vshrq_n_s16(buff_tmp[i][j],rxshift);
 #endif
       }
     }
@@ -1284,10 +1309,12 @@ extern "C" {
 
   LOG_I(HW,"rx_max_num_samps %zu\n",
         s->usrp->get_rx_stream(stream_args_rx)->get_max_num_samps());
-
-  for (int i = 0; i<openair0_cfg[0].rx_num_channels; i++)
+  
+  for (int i = 0; i<openair0_cfg[0].rx_num_channels; i++) {
+    LOG_I(HW,"setting rx channel %d\n",i);
     stream_args_rx.channels.push_back(i);
-
+  }
+  
   s->rx_stream = s->usrp->get_rx_stream(stream_args_rx);
   uhd::stream_args_t stream_args_tx("sc16", "sc16");
 
diff --git a/targets/ARCH/rfsimulator/simulator.c b/targets/ARCH/rfsimulator/simulator.c
index f80f77f39c3a9d1c52baf7572b7263f7c91a88ff..3bd4285cffc12f59d8190ccad89d7abf6d26bdc3 100644
--- a/targets/ARCH/rfsimulator/simulator.c
+++ b/targets/ARCH/rfsimulator/simulator.c
@@ -61,10 +61,7 @@
 #define MAX_SIMULATION_CONNECTED_NODES 5
 #define GENERATE_CHANNEL 10 //each frame in DL
 
-// Fixme: datamodel, external variables in .h files, ...
-#include <common/ran_context.h>
 
-extern RAN_CONTEXT_t RC;
 //
 
 #define RFSIMU_SECTION    "rfsimulator"
diff --git a/targets/COMMON/openairinterface5g_limits.h b/targets/COMMON/openairinterface5g_limits.h
index ad98a6091bfa53037203408691957148c1df41ec..de1502112bf76d1adae68f725ea70a620e4d433d 100644
--- a/targets/COMMON/openairinterface5g_limits.h
+++ b/targets/COMMON/openairinterface5g_limits.h
@@ -6,23 +6,39 @@
 #        define NUMBER_OF_gNB_MAX 1
 #        define NUMBER_OF_RU_MAX 2
 #        define NUMBER_OF_NR_RU_MAX 2
+#        define NUMBER_OF_UCI_MAX 16
+#        define NUMBER_OF_ULSCH_MAX 8
+#        define NUMBER_OF_DLSCH_MAX 8 
+#        define NUMBER_OF_SRS_MAX 16
+#        define NUMBER_OF_NR_ULSCH_MAX 8
+#        define NUMBER_OF_NR_DLSCH_MAX 8
+#        define NUMBER_OF_NR_UCI_MAX 16
+#        define nUMBER_OF_NR_SRS_MAX 16
+#        define NUMBER_OF_SCH_STATS_MAX 16
+
+#        define NUMBER_OF_NR_SCH_STATS_MAX 16
+
+#        define NUMBER_OF_NR_PUCCH_MAX 16
+#        define NUMBER_OF_NR_SR_MAX 16
+#        define NUMBER_OF_NR_PDCCH_MAX 16
+
+#define MAX_MANAGED_ENB_PER_MOBILE  2
+#define MAX_MANAGED_GNB_PER_MOBILE  2
+
 #        ifndef PHYSIM
 #            ifndef UE_EXPANSION
 #                    define NUMBER_OF_UE_MAX 4
 #                    define NUMBER_OF_NR_UE_MAX 4
-#                    define NUMBER_OF_UCI_VARS_MAX 14
 #                    define NUMBER_OF_CONNECTED_eNB_MAX 1
 #                    define NUMBER_OF_CONNECTED_gNB_MAX 1
 #            else
 #                    define NUMBER_OF_UE_MAX 256
-#                    define NUMBER_OF_UCI_VARS_MAX 256
 #                    define NUMBER_OF_CONNECTED_eNB_MAX 1
 #                    define NUMBER_OF_CONNECTED_gNB_MAX 1
 #            endif
 #        else
 #                    define NUMBER_OF_UE_MAX 4
 #                    define NUMBER_OF_NR_UE_MAX 4
-#                    define NUMBER_OF_UCI_VARS_MAX 56
 #                    define NUMBER_OF_CONNECTED_eNB_MAX 1
 #                    define NUMBER_OF_CONNECTED_gNB_MAX 1
 #        endif
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf
index e7824186bbf639f38e14be579e22ae7df0d1e7fe..29e226d293ae41727f02fbf5e3d65e34a5ce99da 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf
@@ -33,7 +33,7 @@ gNBs =
 
 #  downlinkConfigCommon
     #frequencyInfoDL
-      # this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
+      # this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP), points to Subcarrier 0 of RB#10 of SSB block
       absoluteFrequencySSB                                          = 641032;
       dl_frequencyBand                                                 = 78;
       # this is 3600 MHz
@@ -46,13 +46,13 @@ gNBs =
         dl_carrierBandwidth                                            = 106;
      #initialDownlinkBWP
       #genericParameters
-        # this is RBstart=41,L=24 (275*(L-1))+RBstart
-        initialDLBWPlocationAndBandwidth                                        = 6368;
+        # this is RBstart=33 (Start RB of SSB block),L=24 (275*(L-1))+RBstart
+        initialDLBWPlocationAndBandwidth                                        = 6358; #6368;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
         initialDLBWPsubcarrierSpacing                                           = 1;
       #pdcch-ConfigCommon
-        initialDLBWPcontrolResourceSetZero                                      = 12;
+        initialDLBWPcontrolResourceSetZero                                      = 0; #12;
         initialDLBWPsearchSpaceZero                                             = 0;
       #pdsch-ConfigCommon
         #pdschTimeDomainAllocationList (up to 16 entries)
@@ -76,7 +76,7 @@ gNBs =
       pMax                                                          = 20;
      #initialUplinkBWP
       #genericParameters
-        initialULBWPlocationAndBandwidth                                        = 6368;
+        initialULBWPlocationAndBandwidth                                        = 6358;#6368;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
         initialULBWPsubcarrierSpacing                                           = 1;
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
index 62c73523d62e9d0dbca21b46825014f21f74e133..791b50748f0e46f76e40e7fe7ff185b7c990735f 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
@@ -33,7 +33,7 @@ gNBs =
 
 #  downlinkConfigCommon
     #frequencyInfoDL
-      # this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
+      # this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP). points to Subcarrier 0 of RB#10 of SSB block
       absoluteFrequencySSB                                          = 641032;
       dl_frequencyBand                                                 = 78;
       # this is 3600 MHz
@@ -46,13 +46,13 @@ gNBs =
         dl_carrierBandwidth                                            = 106;
      #initialDownlinkBWP
       #genericParameters
-        # this is RBstart=0,L=50 (275*(L-1))+RBstart
-        initialDLBWPlocationAndBandwidth                                        = 6368;
+        # this is RBstart=33 (Start RB of SSB block),L=24 (275*(L-1))+RBstart
+        initialDLBWPlocationAndBandwidth                                        = 6358; #6368;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
         initialDLBWPsubcarrierSpacing                                           = 1;
       #pdcch-ConfigCommon
-        initialDLBWPcontrolResourceSetZero                                      = 12;
+        initialDLBWPcontrolResourceSetZero                                      = 0;
         initialDLBWPsearchSpaceZero                                             = 0;
       #pdsch-ConfigCommon
         #pdschTimeDomainAllocationList (up to 16 entries)
@@ -77,7 +77,7 @@ gNBs =
       pMax                                                          = 20;
      #initialUplinkBWP
       #genericParameters
-        initialULBWPlocationAndBandwidth                                        = 6368;
+        initialULBWPlocationAndBandwidth                                        = 6358; #6368;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
         initialULBWPsubcarrierSpacing                                           = 1;
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpn300.conf
index 57be93b34bd36431816e0546f6f56e310930349f..9f3292c8a1a9b68e111ee4191a5f450ef467154a 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpn300.conf
@@ -33,7 +33,7 @@ gNBs =
 
 #  downlinkConfigCommon
     #frequencyInfoDL
-      # this is 3600 MHz + 84 PRBs@30kHz SCS (same as initial BWP)
+      # this is 3600 MHz + 84 PRBs@30kHz SCS (same as initial BWP). Points to Subcarrier 0 of RB#10 of SSB block
       absoluteFrequencySSB                                          = 642016;#642364;
       dl_frequencyBand                                                 = 78;
       # this is 3600 MHz
@@ -46,13 +46,13 @@ gNBs =
         dl_carrierBandwidth                                            = 217;
      #initialDownlinkBWP
       #genericParameters
-        # this is RBstart=84,L=50 (275*(L-1))+RBstart
-        initialDLBWPlocationAndBandwidth                                        = 13559;
+        # this is RBstart=74 (Start RB of SSB block),L=50 (275*(L-1))+RBstart
+        initialDLBWPlocationAndBandwidth                                        = 13549;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
         initialDLBWPsubcarrierSpacing                                           = 1;
       #pdcch-ConfigCommon
-        initialDLBWPcontrolResourceSetZero                                      = 12;
+        initialDLBWPcontrolResourceSetZero                                      = 0;
         initialDLBWPsearchSpaceZero                                             = 0;
       #pdsch-ConfigCommon
         #pdschTimeDomainAllocationList (up to 16 entries)
@@ -76,7 +76,7 @@ gNBs =
       pMax                                                          = 20;
      #initialUplinkBWP
       #genericParameters
-        initialULBWPlocationAndBandwidth                                        = 13559;
+        initialULBWPlocationAndBandwidth                                        = 13549;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
         initialULBWPsubcarrierSpacing                                           = 1;
@@ -233,6 +233,7 @@ L1s = (
     	{
 	num_cc = 1;
 	tr_n_preference = "local_mac";
+        pusch_proc_threads = 8;
         }  
 );
 
@@ -275,7 +276,7 @@ log_config :
        global_log_verbosity                  ="medium";
        hw_log_level                          ="info";
        hw_log_verbosity                      ="medium";
-       phy_log_level                         ="debug";
+       phy_log_level                         ="info";
        phy_log_verbosity                     ="medium";
        mac_log_level                         ="info";
        mac_log_verbosity                     ="high";
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpx300.conf
index 536d1a99595c3a87b958d1ad8510a3d3dcf6f355..99ae7d21e34b1afabb49eeff13b8a5698ba74b5d 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpx300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpx300.conf
@@ -46,13 +46,13 @@ gNBs =
         dl_carrierBandwidth                                            = 217;
      #initialDownlinkBWP
       #genericParameters
-        # this is RBstart=84,L=50 (275*(L-1))+RBstart
-        initialDLBWPlocationAndBandwidth                                        = 13559;
+        # this is RBstart=74,L=50 (275*(L-1))+RBstart
+        initialDLBWPlocationAndBandwidth                                        = 13549;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
         initialDLBWPsubcarrierSpacing                                           = 1;
       #pdcch-ConfigCommon
-        initialDLBWPcontrolResourceSetZero                                      = 12;
+        initialDLBWPcontrolResourceSetZero                                      = 0;
         initialDLBWPsearchSpaceZero                                             = 0;
       #pdsch-ConfigCommon
         #pdschTimeDomainAllocationList (up to 16 entries)
@@ -76,7 +76,7 @@ gNBs =
       pMax                                                          = 20;
      #initialUplinkBWP
       #genericParameters
-        initialULBWPlocationAndBandwidth                                        = 13559;
+        initialULBWPlocationAndBandwidth                                        = 13549;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
         initialULBWPsubcarrierSpacing                                           = 1;
@@ -217,6 +217,7 @@ L1s = (
     	{
 	num_cc = 1;
 	tr_n_preference = "local_mac";
+        pusch_proc_threads = 8;
         }  
 );
 
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.273PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.273PRB.usrpn300.conf
index b7858886587be53887634ddb2969e73fedfe4b11..d3e1310845dd0e5f937c949880ee297b2cde3dee 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.273PRB.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.273PRB.usrpn300.conf
@@ -46,13 +46,13 @@ gNBs =
         dl_carrierBandwidth                                            = 273;
      #initialDownlinkBWP
       #genericParameters
-        # this is RBstart=84,L=50 (275*(L-1))+RBstart
-        initialDLBWPlocationAndBandwidth                                        = 13559;
+        # this is RBstart=74,L=50 (275*(L-1))+RBstart
+        initialDLBWPlocationAndBandwidth                                        = 13549;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
         initialDLBWPsubcarrierSpacing                                           = 1;
       #pdcch-ConfigCommon
-        initialDLBWPcontrolResourceSetZero                                      = 12;
+        initialDLBWPcontrolResourceSetZero                                      = 0;
         initialDLBWPsearchSpaceZero                                             = 0;
       #pdsch-ConfigCommon
         #pdschTimeDomainAllocationList (up to 16 entries)
@@ -76,7 +76,7 @@ gNBs =
       pMax                                                          = 20;
      #initialUplinkBWP
       #genericParameters
-        initialULBWPlocationAndBandwidth                                        = 13559;
+        initialULBWPlocationAndBandwidth                                        = 13549;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
         initialULBWPsubcarrierSpacing                                           = 1;
@@ -217,6 +217,7 @@ L1s = (
     	{
 	num_cc = 1;
 	tr_n_preference = "local_mac";
+        pusch_proc_threads = 8;
         }  
 );
 
diff --git a/targets/RT/USER/eNB_usrp.gtkw b/targets/RT/USER/eNB_usrp.gtkw
index 074e3b1324a7082b57390d368aa123b341ecfc7d..8f3aeaac6261bb652ce2788be01e3e1457b4fb21 100644
--- a/targets/RT/USER/eNB_usrp.gtkw
+++ b/targets/RT/USER/eNB_usrp.gtkw
@@ -1,13 +1,13 @@
 [*]
 [*] GTKWave Analyzer v3.3.66 (w)1999-2015 BSI
-[*] Sun May 19 21:39:57 2019
+[*] Tue Jan 26 21:45:57 2021
 [*]
-[dumpfile] "/tmp/openair_dump_eNB.vcd"
-[dumpfile_mtime] "Sun May 19 21:30:25 2019"
-[dumpfile_size] 11590554
-[savefile] "/home/sphex/raymond/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw"
-[timestart] 7629910000
-[size] 1840 795
+[dumpfile] "/home/eurecom/raymond/gtkw/openair_dump_eNB.vcd"
+[dumpfile_mtime] "Tue Jan 26 21:26:33 2021"
+[dumpfile_size] 180869253
+[savefile] "/home/eurecom/raymond/openairinterface5g_2/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw"
+[timestart] 11468800000
+[size] 1693 785
 [pos] -1 -1
 *-21.832302 7639830000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
 [sst_width] 386
@@ -16,17 +16,22 @@
 [sst_vpaned_height] 303
 @28
 functions.trx_read
+@29
+functions.trx_write_thread
+@28
 functions.trx_write
 @24
 variables.trx_ts[63:0]
 variables.trx_tst[63:0]
+variables.trx_write_flags[63:0]
 @28
 functions.eNB_thread_rxtx0
+@420
+variables.l1_proc_tx_ic[63:0]
+variables.l1_proc_ic[63:0]
 @24
 variables.frame_number_RX0_RU[63:0]
-@25
 variables.tti_number_RX0_RU[63:0]
-@24
 variables.frame_number_TX0_RU[63:0]
 variables.tti_number_TX0_RU[63:0]
 @28
diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c
index 531670580912cdbc2f7699245c5dda7c4d4e3c52..31c142c8daecd25ac9eeb5d6e28913f35d8fdc2b 100644
--- a/targets/RT/USER/lte-enb.c
+++ b/targets/RT/USER/lte-enb.c
@@ -70,6 +70,7 @@
 
 #include "PHY/LTE_TRANSPORT/if4_tools.h"
 #include "PHY/LTE_TRANSPORT/if5_tools.h"
+#include "PHY/LTE_ESTIMATION/lte_estimation.h"
 
 #include "PHY/phy_extern.h"
 
@@ -96,6 +97,9 @@
 
 #include "T.h"
 
+#include "common/ran_context.h"
+extern RAN_CONTEXT_t RC;
+
 //#define DEBUG_THREADS 1
 
 //#define USRP_DEBUG 1
@@ -261,7 +265,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,
   eNB->UL_INFO.subframe  = proc->subframe_rx;
   eNB->UL_INFO.module_id = eNB->Mod_id;
   eNB->UL_INFO.CC_id     = eNB->CC_id;
-  eNB->if_inst->UL_indication(&eNB->UL_INFO, proc);
+  eNB->if_inst->UL_indication(&eNB->UL_INFO, (void*)proc);
   AssertFatal((ret= pthread_mutex_unlock(&eNB->UL_INFO_mutex))==0,"error unlocking UL_INFO_mutex, return %d\n",ret);
   /* this conflict resolution may be totally wrong, to be tested */
   /* CONFLICT RESOLUTION: BEGIN */
@@ -323,7 +327,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,
 static void *L1_thread_tx(void *param) {
   L1_proc_t *eNB_proc  = (L1_proc_t *)param;
   L1_rxtx_proc_t *proc = &eNB_proc->L1_proc_tx;
-  PHY_VARS_eNB *eNB = RC.eNB[0][proc->CC_id];
+  PHY_VARS_eNB *eNB = eNB_proc->eNB;
   char thread_name[100];
   sprintf(thread_name,"TXnp4_%d\n",&eNB->proc.L1_proc == proc ? 0 : 1);
   thread_top_init(thread_name,1,470000,500000,500000);
@@ -331,6 +335,7 @@ static void *L1_thread_tx(void *param) {
 
   //wait_sync("tx_thread");
 
+  proc->respEncode = eNB->proc.L1_proc.respEncode;
   while (!oai_exit) {
     LOG_D(PHY,"Waiting for TX (IC %d)\n",proc->instance_cnt);
 
@@ -351,21 +356,19 @@ static void *L1_thread_tx(void *param) {
     LOG_D(PHY,"L1 TX processing %d.%d\n",proc->frame_tx,proc->subframe_tx);
     phy_procedures_eNB_TX(eNB, proc, 1);
     AssertFatal((ret= pthread_mutex_lock( &proc->mutex ))==0,"error locking L1_proc_tx mutex, return %d\n",ret);
-    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_L1_PROC_TX_IC,proc->instance_cnt);
     int subframe_tx = proc->subframe_tx;
     int frame_tx    = proc->frame_tx;
     uint64_t timestamp_tx = proc->timestamp_tx;
     proc->instance_cnt = -1;
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_L1_PROC_TX_IC,proc->instance_cnt);
     LOG_D(PHY,"L1 TX signaling done for %d.%d\n",proc->frame_tx,proc->subframe_tx);
     // the thread can now be woken up
     LOG_D(PHY,"L1_thread_tx: signaling completion in %d.%d\n",proc->frame_tx,proc->subframe_tx);
 
-    if (pthread_cond_signal(&proc->cond) != 0) {
-      LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB TXnp4 thread\n");
-      exit_fun( "ERROR pthread_cond_signal" );
-    }
-
+    AssertFatal((ret=pthread_cond_signal(&proc->cond))== 0, "ERROR pthread_cond_signal for eNB TXnp4 thread ret %d\n",ret);
     AssertFatal((ret= pthread_mutex_unlock( &proc->mutex ))==0,"error unlocking L1_proc_tx mutex, return %d\n",ret);
+
+
     wakeup_txfh(eNB,proc,frame_tx,subframe_tx,timestamp_tx);
   }
 
@@ -391,6 +394,8 @@ static void *L1_thread( void *param ) {
   }
 
   PHY_VARS_eNB *eNB = RC.eNB[0][proc->CC_id];
+
+
   char thread_name[100];
   cpu_set_t cpuset;
   CPU_ZERO(&cpuset);
@@ -402,7 +407,7 @@ static void *L1_thread( void *param ) {
   LOG_I(PHY,"thread rxtx created id=%ld\n", syscall(__NR_gettid));
 
   while (!oai_exit) {
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RXTX0+(proc->subframe_rx&1), 0 );
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RXTX0, 0 );
     T(T_ENB_MASTER_TICK, T_INT(0), T_INT(proc->frame_rx), T_INT(proc->subframe_rx));
     LOG_D(PHY,"L1RX waiting for RU RX\n");
 
@@ -410,7 +415,7 @@ static void *L1_thread( void *param ) {
 
     LOG_D(PHY,"L1RX starting in %d.%d\n",proc->frame_rx,proc->subframe_rx);
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_CPUID_ENB_THREAD_RXTX,sched_getcpu());
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RXTX0+(proc->subframe_rx&1), 1 );
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RXTX0, 1 );
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_ENB,proc->subframe_tx);
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_ENB,proc->subframe_rx);
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_ENB,proc->frame_tx);
@@ -424,6 +429,8 @@ static void *L1_thread( void *param ) {
 
     LOG_D(PHY,"L1 RX %d.%d done\n",proc->frame_rx,proc->subframe_rx);
 
+    if (release_thread(&proc->mutex,&proc->instance_cnt,thread_name)<0) break;
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_L1_PROC_IC, proc->instance_cnt);
     if (NFAPI_MODE!=NFAPI_MODE_VNF) {
       if(get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT)     wakeup_tx(eNB,proc->frame_rx,proc->subframe_rx,proc->frame_tx,proc->subframe_tx,proc->timestamp_tx);
       else if(get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT) {
@@ -432,9 +439,7 @@ static void *L1_thread( void *param ) {
       }
     }
 
-    if (release_thread(&proc->mutex,&proc->instance_cnt,thread_name)<0) break;
   } // while !oai_exit
-
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RXTX0+(proc->subframe_rx&1), 0 );
   LOG_D(PHY, " *** Exiting eNB thread RXn_TXnp4\n");
   eNB_thread_rxtx_status = 0;
@@ -530,6 +535,7 @@ int wakeup_txfh(PHY_VARS_eNB *eNB,
     AssertFatal(pthread_cond_signal(&ru_proc->cond_eNBs) == 0,
                 "[eNB] ERROR pthread_cond_signal for eNB TXnp4 thread\n");
     AssertFatal((ret=pthread_mutex_unlock(&ru_proc->mutex_eNBs))==0,"mutex_unlock returned %d\n",ret);
+
   }
 
   return(0);
@@ -542,19 +548,19 @@ int wakeup_tx(PHY_VARS_eNB *eNB,
               int frame_tx,
               int subframe_tx,
               uint64_t timestamp_tx) {
-  L1_rxtx_proc_t *L1_proc = &eNB->proc.L1_proc;
   L1_rxtx_proc_t *L1_proc_tx = &eNB->proc.L1_proc_tx;
   int ret;
   LOG_D(PHY,"ENTERED wakeup_tx (IC %d)\n",L1_proc_tx->instance_cnt);
+  // check if subframe is a has TX else return
+  if (subframe_select(&eNB->frame_parms,subframe_tx) == SF_UL) return 0;  
   AssertFatal((ret = pthread_mutex_lock(&L1_proc_tx->mutex))==0,"mutex_lock returns %d\n",ret);
-  LOG_D(PHY,"L1 RX %d.%d Waiting to wake up L1 TX %d.%d (IC L1TX %d)\n",L1_proc->frame_rx,L1_proc->subframe_rx,L1_proc->frame_tx,L1_proc->subframe_tx,L1_proc_tx->instance_cnt);
+  LOG_D(PHY,"L1 RX %d.%d Waiting to wake up L1 TX %d.%d (IC L1TX %d)\n",frame_rx,subframe_rx,frame_tx,subframe_tx,L1_proc_tx->instance_cnt);
 
   while(L1_proc_tx->instance_cnt == 0) {
     pthread_cond_wait(&L1_proc_tx->cond,&L1_proc_tx->mutex);
   }
 
   LOG_D(PHY,"L1 RX Got signal that TX %d.%d is done\n",L1_proc_tx->frame_tx,L1_proc_tx->subframe_tx);
-  VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_L1_PROC_TX_IC,L1_proc_tx->instance_cnt);
   L1_proc_tx->instance_cnt = 0;
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_L1_PROC_TX_IC,L1_proc_tx->instance_cnt);
   L1_proc_tx->subframe_rx   = subframe_rx;
@@ -563,9 +569,11 @@ int wakeup_tx(PHY_VARS_eNB *eNB,
   L1_proc_tx->frame_tx      = frame_tx;
   L1_proc_tx->timestamp_tx  = timestamp_tx;
   // the thread can now be woken up
-  LOG_D(PHY,"L1 RX Waking up L1 TX %d.%d\n",L1_proc->frame_tx,L1_proc->subframe_tx);
+  LOG_D(PHY,"L1 RX Waking up L1 TX %d.%d\n",frame_tx,subframe_tx);
+
   AssertFatal(pthread_cond_signal(&L1_proc_tx->cond) == 0, "ERROR pthread_cond_signal for eNB L1 thread tx\n");
   AssertFatal((ret=pthread_mutex_unlock(&L1_proc_tx->mutex))==0,"mutex_unlock returns %d\n",ret);
+
   return(0);
 }
 
@@ -585,10 +593,16 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,
   if (L1_proc->instance_cnt == 0) { // L1_thread is busy so abort the subframe
     AssertFatal((ret=pthread_mutex_unlock( &L1_proc->mutex))==0,"mutex_unlock return %d\n",ret);
     LOG_W(PHY,"L1_thread isn't ready in %d.%d, aborting RX processing\n",ru_proc->frame_rx,ru_proc->tti_rx);
+/*    AssertFatal(1==0,"L1_thread isn't ready in %d.%d (L1RX %d.%d), aborting RX, exiting\n",
+      ru_proc->frame_rx,ru_proc->tti_rx,L1_proc->frame_rx,L1_proc->subframe_rx);
+*/
     return(0);
+   
   }
 
   ++L1_proc->instance_cnt;
+  VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_L1_PROC_IC, L1_proc->instance_cnt);
+
   // We have just received and processed the common part of a subframe, say n.
   // TS_rx is the last received timestamp (start of 1st slot), TS_tx is the desired
   // transmitted timestamp of the next TX slot (first).
@@ -606,14 +620,12 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_WAKEUP_RXTX_TX_RU+ru->idx, L1_proc->frame_tx);
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_WAKEUP_RXTX_TX_RU+ru->idx, L1_proc->subframe_tx);
 
-  // the thread can now be woken up
-  if (pthread_cond_signal(&L1_proc->cond) != 0) {
-    LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB RXn-TXnp4 thread\n");
-    exit_fun( "ERROR pthread_cond_signal" );
-    return(-1);
-  }
 
+  // the thread can now be woken up
+  AssertFatal((ret=pthread_cond_signal(&L1_proc->cond))== 0, "ERROR pthread_cond_signal for eNB RXn-TXnp4 thread, ret %d\n",ret);
   AssertFatal((ret=pthread_mutex_unlock( &L1_proc->mutex))==0,"mutex_unlock return %d\n",ret);
+
+
   return(0);
 }
 
@@ -837,6 +849,21 @@ static void *process_stats_thread(void *param) {
   return(NULL);
 }
 
+void *L1_stats_thread(void *param) {
+  PHY_VARS_eNB     *eNB      = (PHY_VARS_eNB *)param;
+  wait_sync("L1_stats_thread");
+  FILE *fd;
+  while (!oai_exit) {
+    sleep(1);
+    fd=fopen("L1_stats.log","w");
+    AssertFatal(fd!=NULL,"Cannot open L1_stats.log\n");
+    dump_I0_stats(fd,eNB);
+    dump_ulsch_stats(fd,eNB,eNB->proc.L1_proc_tx.frame_tx);
+    dump_uci_stats(fd,eNB,eNB->proc.L1_proc_tx.frame_tx);
+    fclose(fd);
+  }
+  return(NULL);
+}
 
 void init_eNB_proc(int inst) {
   /*int i=0;*/
@@ -858,6 +885,7 @@ void init_eNB_proc(int inst) {
     L1_proc_tx->instance_cnt       = -1;
     L1_proc->instance_cnt_RUs      = 0;
     L1_proc_tx->instance_cnt_RUs   = 0;
+    proc->eNB                      = eNB;
     proc->instance_cnt_prach       = -1;
     proc->instance_cnt_asynch_rxtx = -1;
     proc->instance_cnt_synch       = -1;
@@ -930,6 +958,7 @@ void init_eNB_proc(int inst) {
     AssertFatal(proc->instance_cnt_prach == -1,"instance_cnt_prach = %d\n",proc->instance_cnt_prach);
 
     if (opp_enabled == 1) pthread_create(&proc->process_stats_thread,NULL,process_stats_thread,(void *)eNB);
+    pthread_create(&proc->L1_stats_thread,NULL,L1_stats_thread,(void*)eNB);
   }
 
   //for multiple CCs: setup master and slaves
@@ -1060,60 +1089,47 @@ void print_opp_meas(void) {
 
 
 void free_transport(PHY_VARS_eNB *eNB) {
-  for (int i=0; i<NUMBER_OF_UE_MAX; i++) {
-    LOG_D(PHY, "Freeing Transport Channel Buffers for DLSCH, UE %d\n",i);
+  for (int i=0; i<NUMBER_OF_DLSCH_MAX; i++) {
+    LOG_D(PHY, "Freeing Transport Channel Buffers for DLSCH %d\n",i);
 
     for (int j=0; j<2; j++) free_eNB_dlsch(eNB->dlsch[i][j]);
-
-    LOG_D(PHY, "Freeing Transport Channel Buffer for ULSCH, UE %d\n",i);
-    free_eNB_ulsch(eNB->ulsch[1+i]);
   }
-
-  free_eNB_ulsch(eNB->ulsch[0]);
+  for (int i=0;i<NUMBER_OF_ULSCH_MAX;i++) {
+    LOG_D(PHY, "Freeing Transport Channel Buffer for ULSCH %d\n",i);
+    free_eNB_ulsch(eNB->ulsch[i]);
+  }
 }
 
 
 void init_transport(PHY_VARS_eNB *eNB) {
-  int i;
-  int j;
   LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms;
   LOG_I(PHY, "Initialise transport\n");
 
   if (NFAPI_MODE!=NFAPI_MODE_VNF) {
-    for (i=0; i<NUMBER_OF_UE_MAX; i++) {
-      LOG_D(PHY,"Allocating Transport Channel Buffers for DLSCH, UE %d\n",i);
+    for (int i=0;i<NUMBER_OF_DLSCH_MAX; i++) {
+      LOG_I(PHY,"Allocating Transport Channel Buffers for DLSCH %d/%d/%d\n",i,NUMBER_OF_DLSCH_MAX,(i-NUMBER_OF_DLSCH_MAX)<0);
 
-      for (j=0; j<2; j++) {
+      for (int j=0; j<2; j++) {
         eNB->dlsch[i][j] = new_eNB_dlsch(1,8,NSOFT,fp->N_RB_DL,0,fp);
-
+        LOG_I(PHY,"eNB->dlsch[%d][%d] %p\n",i,j,eNB->dlsch[i][j]);
         if (!eNB->dlsch[i][j]) {
-          LOG_E(PHY,"Can't get eNB dlsch structures for UE %d \n", i);
+          LOG_E(PHY,"Can't get eNB dlsch structures for DLSCH %d \n", i);
           exit(-1);
         } else {
           eNB->dlsch[i][j]->rnti=0;
           LOG_D(PHY,"dlsch[%d][%d] => %p rnti:%d\n",i,j,eNB->dlsch[i][j], eNB->dlsch[i][j]->rnti);
         }
       }
+    }
+    for (int i=0;i<NUMBER_OF_ULSCH_MAX; i++) {
 
-      LOG_D(PHY,"Allocating Transport Channel Buffer for ULSCH, UE %d\n",i);
-      eNB->ulsch[1+i] = new_eNB_ulsch(MAX_TURBO_ITERATIONS,fp->N_RB_UL, 0);
+      LOG_I(PHY,"Allocating Transport Channel Buffer for ULSCH %d/%d\n",i,NUMBER_OF_ULSCH_MAX);
+      eNB->ulsch[i] = new_eNB_ulsch(MAX_TURBO_ITERATIONS,fp->N_RB_UL, 0);
 
-      if (!eNB->ulsch[1+i]) {
+      if (!eNB->ulsch[i]) {
         LOG_E(PHY,"Can't get eNB ulsch structures\n");
         exit(-1);
       }
-
-      // this is the transmission mode for the signalling channels
-      // this will be overwritten with the real transmission mode by the RRC once the UE is connected
-      eNB->transmission_mode[i] = fp->nb_antenna_ports_eNB==1 ? 1 : 2;
-    }
-
-    // ULSCH for RA
-    eNB->ulsch[0] = new_eNB_ulsch(MAX_TURBO_ITERATIONS, fp->N_RB_UL, 0);
-
-    if (!eNB->ulsch[0]) {
-      LOG_E(PHY,"Can't get eNB ulsch structures\n");
-      exit(-1);
     }
 
     eNB->dlsch_SI  = new_eNB_dlsch(1,8,NSOFT,fp->N_RB_DL, 0, fp);
@@ -1126,7 +1142,7 @@ void init_transport(PHY_VARS_eNB *eNB) {
 
   eNB->rx_total_gain_dB=130;
 
-  for(i=0; i<NUMBER_OF_UE_MAX; i++)
+  for(int i=0; i<NUMBER_OF_UE_MAX; i++)
     eNB->mu_mimo_mode[i].dl_pow_off = 2;
 
   eNB->check_for_total_transmissions = 0;
@@ -1134,11 +1150,13 @@ void init_transport(PHY_VARS_eNB *eNB) {
   eNB->FULL_MUMIMO_transmissions = 0;
   eNB->check_for_SUMIMO_transmissions = 0;
   fp->pucch_config_common.deltaPUCCH_Shift = 1;
+  if (eNB->use_DTX == 0) fill_subframe_mask(eNB);
+  
 }
 
 
 void init_eNB_afterRU(void) {
-  int inst,CC_id,ru_id,i,aa;
+  int inst,CC_id,i;
   PHY_VARS_eNB *eNB;
   LOG_I(PHY,"%s() RC.nb_inst:%d\n", __FUNCTION__, RC.nb_inst);
 
@@ -1148,13 +1166,14 @@ void init_eNB_afterRU(void) {
     for (CC_id=0; CC_id<RC.nb_CC[inst]; CC_id++) {
       LOG_I(PHY,"RC.nb_CC[inst:%d][CC_id:%d]:%p\n", inst, CC_id, RC.eNB[inst][CC_id]);
       eNB                                  =  RC.eNB[inst][CC_id];
-      phy_init_lte_eNB(eNB,0,0);
-
-      // map antennas and PRACH signals to eNB RX
-      if (0) AssertFatal(eNB->num_RU>0,"Number of RU attached to eNB %d is zero\n",eNB->Mod_id);
-
+     // map antennas and PRACH signals to eNB RX
       LOG_I(PHY,"Mapping RX ports from %d RUs to eNB %d\n",eNB->num_RU,eNB->Mod_id);
       eNB->frame_parms.nb_antennas_rx       = 0;
+      LOG_I(PHY,"eNB->num_RU:%d\n", eNB->num_RU);     
+      if (NFAPI_MODE==NFAPI_MODE_PNF) AssertFatal(eNB->num_RU>0,"Number of RU attached to eNB %d is      zero\n",eNB->Mod_id);
+      for (int ru_id=0; ru_id<eNB->num_RU; ru_id++) 
+         eNB->frame_parms.nb_antennas_rx    += eNB->RU_list[ru_id]->nb_rx;
+      phy_init_lte_eNB(eNB,0,0);
       LOG_I(PHY,"Overwriting eNB->prach_vars.rxsigF[0]:%p\n", eNB->prach_vars.rxsigF[0]);
       eNB->prach_vars.rxsigF[0] = (int16_t **)malloc16(64*sizeof(int16_t *));
 
@@ -1163,10 +1182,8 @@ void init_eNB_afterRU(void) {
         eNB->prach_vars_br.rxsigF[ce_level] = (int16_t **)malloc16(64*sizeof(int16_t *));
       }
 
-      LOG_I(PHY,"eNB->num_RU:%d\n", eNB->num_RU);
 
-      for (ru_id=0,aa=0; ru_id<eNB->num_RU; ru_id++) {
-        eNB->frame_parms.nb_antennas_rx    += eNB->RU_list[ru_id]->nb_rx;
+      for (int ru_id=0,aa=0; ru_id<eNB->num_RU; ru_id++) {
 
         AssertFatal(eNB->RU_list[ru_id]->common.rxdataF!=NULL,
                     "RU %d : common.rxdataF is NULL\n",
@@ -1214,7 +1231,7 @@ void init_eNB_afterRU(void) {
     init_eNB_proc(inst);
   }
 
-  for (ru_id=0; ru_id<RC.nb_RU; ru_id++) {
+  for (int ru_id=0; ru_id<RC.nb_RU; ru_id++) {
     AssertFatal(RC.ru[ru_id]!=NULL,"ru_id %d is null\n",ru_id);
     RC.ru[ru_id]->wakeup_rxtx         = wakeup_rxtx;
     RC.ru[ru_id]->wakeup_prach_eNB    = wakeup_prach_eNB;
diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c
index 4682c5989e92a0b0a986e1175f0896be81016ece..86d3a88781d7086aca5f7164a697c5693e343ae4 100644
--- a/targets/RT/USER/lte-ru.c
+++ b/targets/RT/USER/lte-ru.c
@@ -51,7 +51,6 @@
 #include "assertions.h"
 #include "msc.h"
 #include "PHY/defs_common.h"
-#include "PHY/phy_extern.h"
 #include "PHY/types.h"
 #include "PHY/INIT/phy_init.h"
 #include "PHY/LTE_ESTIMATION/lte_estimation.h"
@@ -59,23 +58,11 @@
 #include "PHY/LTE_TRANSPORT/if4_tools.h"
 #include "PHY/LTE_TRANSPORT/if5_tools.h"
 #include "PHY/LTE_TRANSPORT/transport_proto.h"
-#include "PHY_INTERFACE/phy_interface.h"
-#include "LAYER2/MAC/mac.h"
-#include "LAYER2/MAC/mac_extern.h"
-#include "LAYER2/MAC/mac_proto.h"
-#include "RRC/LTE/rrc_extern.h"
-#include "SCHED/sched_eNB.h"
-#include "UTIL/OPT/opt.h"
-#include "UTIL/OTG/otg_tx.h"
-#include "UTIL/OTG/otg_externs.h"
-#include "UTIL/MATH/oml.h"
+#include "SCHED/sched_common.h"
 #include "common/utils/LOG/log.h"
 #include "common/utils/LOG/vcd_signal_dumper.h"
-#include "nfapi/oai_integration/vendor_ext.h"
-#include "enb_config.h"
 #include "targets/ARCH/COMMON/common_lib.h"
 #include "targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h"
-#include "targets/RT/USER/lte-softmodem.h"
 //#include "PHY/TOOLS/time_meas.h"
 
 /* these variables have to be defined before including ENB_APP/enb_paramdef.h */
@@ -86,29 +73,25 @@ static int DEFBFW[] = {0x00007fff};
 #include "ENB_APP/enb_paramdef.h"
 #include "common/config/config_userapi.h"
 
-#ifndef OPENAIR2
-  #include "UTIL/OTG/otg_extern.h"
-#endif
-
-#include "s1ap_eNB.h"
 #include "SIMULATION/ETH_TRANSPORT/proto.h"
 
 #include "T.h"
 
-#include "pdcp.h"
+#include "executables/softmodem-common.h"
 
 #define MBMS_EXPERIMENTAL
 
 extern volatile int oai_exit;
-extern int emulate_rf;
-extern int numerology;
 extern clock_source_t clock_source;
 #include "executables/thread-common.h"
 //extern PARALLEL_CONF_t get_thread_parallel_conf(void);
 //extern WORKER_CONF_t   get_thread_worker_conf(void);
 extern void phy_init_RU(RU_t *);
 
-void stop_RU(int nb_ru);
+void prach_procedures(PHY_VARS_eNB *eNB,int br_flag);
+
+void stop_RU(RU_t **rup,int nb_ru);
+
 void do_ru_synch(RU_t *ru);
 
 void configure_ru(int idx,
@@ -124,13 +107,24 @@ void wait_eNBs(void);
 
 const char ru_states[6][9] = {"RU_IDLE","RU_CONFIG","RU_READY","RU_RUN","RU_ERROR","RU_SYNC"};
 
+extern const char NB_functions[7][20];
+extern const char NB_timing[2][20];
+
 extern uint16_t sf_ahead;
 
+extern const char ru_if_types[MAX_RU_IF_TYPES][20];
+
+
 #if defined(PRE_SCD_THREAD)
+#include "common/ran_context.h"
+#include "nfapi/oai_integration/vendor_ext.h"
+#include "openair2/LAYER2/MAC/mac_extern.h"
   extern uint8_t dlsch_ue_select_tbl_in_use;
   void init_ru_vnf(void);
+  extern RAN_CONTEXT_t RC;
 #endif
 
+RU_t **RCconfig_RU(int nb_RU,int nb_L1_inst,PHY_VARS_eNB ***eNB,uint64_t *ru_mask,pthread_mutex_t *ru_mutex,pthread_cond_t *ru_cond);
 
 /*************************************************************/
 /* Functions to attach and configure RRU                     */
@@ -141,7 +135,7 @@ extern uint16_t sf_ahead;
 
 // southbound IF5 fronthaul for 16-bit OAI format
 static inline void fh_if5_south_out(RU_t *ru,int frame, int subframe, uint64_t timestamp) {
-  if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
+  if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
 
   ru->south_out_cnt++;
 
@@ -149,14 +143,12 @@ static inline void fh_if5_south_out(RU_t *ru,int frame, int subframe, uint64_t t
 }
 
 
-
-
 // southbound IF4p5 fronthaul
 static inline void fh_if4p5_south_out(RU_t *ru,
                                       int frame,
                                       int subframe,
                                       uint64_t timestamp) {
-  if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
+  if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
 
   LOG_D(PHY,"ENTERED fh_if4p5_south_out   Sending IF4p5 for frame %d subframe %d ru %d\n",ru->proc.frame_tx,ru->proc.tti_tx,ru->idx);
 
@@ -166,7 +158,7 @@ static inline void fh_if4p5_south_out(RU_t *ru,
     LOG_D(PHY,"south_out_cnt %d\n",ru->south_out_cnt);
   }
 
-  /*if (ru == RC.ru[0] || ru == RC.ru[1]) {
+  /*if (ru->idx == 0 || ru->idx == ru) {
       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU+ru->idx, ru->proc.frame_tx );
       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU+ru->idx, ru->proc.subframe_tx );
     }*/
@@ -227,31 +219,30 @@ void fh_if4p5_south_in(RU_t *ru,
     symbol_mask_full = (1<<fp->symbols_per_tti)-1;
 
   LOG_D(PHY,"fh_if4p5_south_in: RU %d, frame %d, subframe %d, ru %d, mask %x\n",ru->idx,*frame,*subframe,ru->idx,proc->symbol_mask[*subframe]);
-  AssertFatal(proc->symbol_mask[*subframe]==0 || proc->symbol_mask[*subframe]==symbol_mask_full,"rx_fh_if4p5: proc->symbol_mask[%d] = %x\n",*subframe,proc->symbol_mask[*subframe]);
+  //AssertFatal(proc->symbol_mask[*subframe]==0 || proc->symbol_mask[*subframe]>=symbol_mask_full,"rx_fh_if4p5: proc->symbol_mask[%d] = %x\n",*subframe,proc->symbol_mask[*subframe]); // >= because PULTICK for S-subframe could have been received during normal subframe
 
-  if (proc->symbol_mask[*subframe]==0) { // this is normal case, if not true then we received a PULTICK before the previous subframe was finished
+  if (proc->symbol_mask[*subframe]<symbol_mask_full) { // this is normal case, if not true then we received a PULTICK before the previous subframe was finished
     do {
       recv_IF4p5(ru, &f, &sf, &packet_type, &symbol_number);
-      LOG_D(PHY,"fh_if4p5_south_in: RU %d, frame %d, subframe %d, f %d, sf %d\n",ru->idx,*frame,*subframe,f,sf);
+      LOG_D(PHY,"fh_if4p5_south_in (%s/%d): RU %d, frame %d, subframe %d, f %d, sf %d, symbol %d\n",packet_type == IF4p5_PULFFT ? "PULFFT" : "PULTICK",packet_type,ru->idx,*frame,*subframe,f,sf,symbol_number);
 
       if (oai_exit == 1 || ru->cmd== STOP_RU) break;
 
       if (packet_type == IF4p5_PULFFT) proc->symbol_mask[sf] = proc->symbol_mask[sf] | (1<<symbol_number);
       else if (packet_type == IF4p5_PULTICK) {
-        proc->symbol_mask[sf] = symbol_mask_full;
+        proc->symbol_mask[sf] = 0xffff;
         pultick_received++;
-
         /*
                  if ((proc->first_rx==0) && (f!=*frame)) LOG_E(PHY,"rx_fh_if4p5: PULTICK received frame %d != expected %d (RU %d) \n",f,*frame, ru->idx);
                  else if ((proc->first_rx==0) && (sf!=*subframe)) LOG_E(PHY,"rx_fh_if4p5: PULTICK received subframe %d != expected %d (first_rx %d)\n",sf,*subframe,proc->first_rx);
                  else break; */
-        if (f==*frame || sf==*subframe) break;
+        //if (f==*frame || sf==*subframe) break;
       } else if (packet_type == IF4p5_PRACH) {
         // nothing in RU for RAU
       }
 
-      LOG_D(PHY,"rx_fh_if4p5 for RU %d: subframe %d, sf %d, symbol mask %x\n",ru->idx,*subframe,sf,proc->symbol_mask[sf]);
-    } while(proc->symbol_mask[sf] != symbol_mask_full);
+      LOG_D(PHY,"rx_fh_if4p5 for RU %d: subframe %d, sf %d, symbol %d, symbol mask %x\n",ru->idx,*subframe,sf,symbol_number,proc->symbol_mask[sf]);
+    } while(proc->symbol_mask[*subframe] < symbol_mask_full);
   } else {
     f = *frame;
     sf = *subframe;
@@ -263,7 +254,7 @@ void fh_if4p5_south_in(RU_t *ru,
   proc->timestamp_rx = ((proc->frame_rx * 10)  + proc->tti_rx ) * fp->samples_per_tti ;
 
   //  proc->timestamp_tx = proc->timestamp_rx +  (4*fp->samples_per_tti);
-  if (get_nprocs()<=4) {
+  if (get_thread_parallel_conf() == PARALLEL_SINGLE_THREAD) {
     proc->tti_tx   = (sf+sf_ahead)%10;
     proc->frame_tx = (sf>(9-sf_ahead)) ? (f+1)&1023 : f;
   }
@@ -291,7 +282,7 @@ void fh_if4p5_south_in(RU_t *ru,
     *subframe = proc->tti_rx;
   }
 
-  /*if (ru == RC.ru[0] || ru == RC.ru[1]) {
+  /*if (ru->idx == 0 || ru->idx == 1) {
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU+ru->idx, f );
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_RU+ru->idx, sf );
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU, f );
@@ -399,7 +390,7 @@ void fh_if4p5_north_in(RU_t *ru,
   ru->north_in_cnt++;
 
   // dump VCD output for first RU in list
-  if (ru == RC.ru[0]) {
+  if (ru->idx == 0) {
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, *frame );
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TTI_NUMBER_TX0_RU, *subframe );
   }
@@ -491,7 +482,7 @@ void fh_if4p5_north_asynch_in(RU_t *ru,
   LOG_D(PHY,"RU %d/%d TST %llu, frame %d, subframe %d\n",ru->idx,0,(long long unsigned int)proc->timestamp_tx,frame_tx,tti_tx);
 
   // dump VCD output for first RU in list
-  if (ru == RC.ru[0]) {
+  if (ru->idx == 0) {
     /*VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, frame_tx );
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TTI_NUMBER_TX0_RU, tti_tx );*/
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_NORTH_ASYNCH_IN, frame_tx);
@@ -557,8 +548,8 @@ volatile late_control_e late_control=STATE_BURST_NORMAL;
 static void *emulatedRF_thread(void *param) {
   RU_proc_t *proc = (RU_proc_t *) param;
   int microsec = 500; // length of time to sleep, in miliseconds
+  int numerology = 0 ;
   struct timespec req = {0};
-  int numerology = get_softmodem_params()->numerology;
   req.tv_sec = 0;
   req.tv_nsec = (numerology>0)? ((microsec * 1000L)/numerology):(microsec * 1000L)*2;
   cpu_set_t cpuset;
@@ -609,7 +600,7 @@ void rx_rf(RU_t *ru,
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 1 );
   old_ts = proc->timestamp_rx;
 
-  if(get_softmodem_params()->emulate_rf) {
+  if(ru->emulate_rf) {
     wait_on_condition(&proc->mutex_emulateRF,&proc->cond_emulateRF,&proc->instance_cnt_emulateRF,"emulatedRF_thread");
     release_thread(&proc->mutex_emulateRF,&proc->instance_cnt_emulateRF,"emulatedRF_thread");
     rxs = fp->samples_per_tti;
@@ -662,7 +653,7 @@ void rx_rf(RU_t *ru,
   proc->tti_rx  = (proc->timestamp_rx / fp->samples_per_tti)%10;
   // synchronize first reception to frame 0 subframe 0
 
-  if (ru->fh_north_asynch_in == NULL) {
+  if (get_thread_parallel_conf() == PARALLEL_SINGLE_THREAD && ru->fh_north_asynch_in == NULL) {
 #ifdef PHY_TX_THREAD
     proc->timestamp_phy_tx = proc->timestamp_rx+((sf_ahead-1)*fp->samples_per_tti);
     proc->subframe_phy_tx  = (proc->tti_rx+(sf_ahead-1))%10;
@@ -690,16 +681,12 @@ void rx_rf(RU_t *ru,
           proc->frame_rx,
           proc->tti_rx);
 
-    // dump VCD output for first RU in list
-    if (ru == RC.ru[0]) {
-      VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU, proc->frame_rx );
-      VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TTI_NUMBER_RX0_RU, proc->tti_rx );
+  }
 
-      if (ru->fh_north_asynch_in == NULL) {
-        VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, proc->frame_tx );
-        VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TTI_NUMBER_TX0_RU, proc->tti_tx );
-      }
-    }
+  // dump VCD output for first RU in list
+  if (ru->idx == 0) {
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU, proc->frame_rx );
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TTI_NUMBER_RX0_RU, proc->tti_rx );
   }
 
   if (proc->first_rx == 0) {
@@ -790,6 +777,7 @@ void tx_rf(RU_t *ru,
 
     /* add fail safe for late command */
     if(late_control!=STATE_BURST_NORMAL) { //stop burst
+      LOG_E(PHY,"%d.%d late_control : %d\n",frame,subframe,late_control);
       switch (late_control) {
         case STATE_BURST_TERMINATE:
           flags=10; // end of burst and no time spec
@@ -818,12 +806,13 @@ void tx_rf(RU_t *ru,
           break;
       }
     }
-
-    /* add fail safe for late command end */
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, frame);
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TTI_NUMBER_TX0_RU, subframe);
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, (timestamp-ru->openair0_cfg.tx_sample_advance)&0xffffffff );
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 );
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_WRITE_FLAGS,flags);
+ 
+    /* add fail safe for late command end */
+   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 );
     // prepare tx buffer pointers
     txs = ru->rfdevice.trx_write_func(&ru->rfdevice,
                                       timestamp+ru->ts_offset-ru->openair0_cfg.tx_sample_advance-sf_extension,
@@ -841,7 +830,7 @@ void tx_rf(RU_t *ru,
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 );
 
     //    AssertFatal(txs ==  siglen+sf_extension,"TX : Timeout (sent %d/%d)\n",txs, siglen);
-    if( (txs !=  siglen+sf_extension) && (late_control==STATE_BURST_NORMAL) ) { /* add fail safe for late command */
+    if( usrp_tx_thread == 0 && (txs !=  siglen+sf_extension) && (late_control==STATE_BURST_NORMAL) ) { /* add fail safe for late command */
       late_control=STATE_BURST_TERMINATE;
       LOG_E(PHY,"TX : Timeout (sent %d/%d) state =%d\n",txs, siglen,late_control);
     }
@@ -954,7 +943,7 @@ void *ru_thread_prach( void *param ) {
   thread_top_init("ru_thread_prach",1,500000,1000000,20000000);
   //wait_sync("ru_thread_prach");
 
-  while (RC.ru_mask>0 && ru->function!=eNodeB_3GPP) {
+  while (*ru->ru_mask>0 && ru->function!=eNodeB_3GPP) {
     usleep(1e6);
     LOG_D(PHY,"%s() RACH waiting for RU to be configured\n", __FUNCTION__);
   }
@@ -1167,7 +1156,7 @@ void wakeup_L1s(RU_t *ru) {
     if (ru == eNB->RU_list[i] && eNB->RU_list[i]->wait_cnt == 0) {
       //AssertFatal((proc->RU_mask&(1<<i)) == 0, "eNB %d frame %d, subframe %d : previous information from RU %d (num_RU %d,mask %x) has not been served yet!\n", eNB->Mod_id,ru->proc.frame_rx,ru->proc.tti_rx,ru->idx,eNB->num_RU,proc->RU_mask);
       proc->RU_mask[ru->proc.tti_rx] |= (1<<i);
-    } else if (/*eNB->RU_list[i]->state == RU_SYNC ||*/(eNB->RU_list[i]->is_slave==1 && eNB->RU_list[i]->wait_cnt>0 && ru!=eNB->RU_list[i] && ru->is_slave==0) ) {
+    } else if (eNB->RU_list[i]->state == RU_SYNC ||(eNB->RU_list[i]->is_slave==1 && eNB->RU_list[i]->wait_cnt>0 && ru!=eNB->RU_list[i] /*&& ru->is_slave==0*/) ) {
       proc->RU_mask[ru->proc.tti_rx] |= (1<<i);
     }
 
@@ -1307,7 +1296,7 @@ void fill_rf_config(RU_t *ru,
   int numerology = get_softmodem_params()->numerology;
 
   if(fp->N_RB_DL == 100) {
-    if(numerology == 0) {
+    if(ru->numerology == 0) {
       if (fp->threequarter_fs) {
         cfg->sample_rate=23.04e6;
         cfg->samples_per_frame = 230400;
@@ -1319,12 +1308,12 @@ void fill_rf_config(RU_t *ru,
         cfg->tx_bw = 10e6;
         cfg->rx_bw = 10e6;
       }
-    } else if(numerology == 1) {
+    } else if(ru->numerology == 1) {
       cfg->sample_rate=61.44e6;
       cfg->samples_per_frame = 307200;
       cfg->tx_bw = 20e6;
       cfg->rx_bw = 20e6;
-    } else if(numerology == 2) {
+    } else if(ru->numerology == 2) {
       cfg->sample_rate=122.88e6;
       cfg->samples_per_frame = 307200;
       cfg->tx_bw = 40e6;
@@ -1523,36 +1512,43 @@ static void *ru_thread_tx( void *param ) {
     LOG_D(PHY,"ru_thread_tx (ru %d): Waiting for TX processing\n",ru->idx);
     // wait until eNBs are finished subframe RX n and TX n+4
     wait_on_condition(&proc->mutex_eNBs,&proc->cond_eNBs,&proc->instance_cnt_eNBs,"ru_thread_tx");
-    LOG_D(PHY,"ru_thread_tx: TX in %d.%d\n",ru->proc.frame_tx,ru->proc.tti_tx);
+    ret = pthread_mutex_lock(&proc->mutex_eNBs);
+    AssertFatal(ret == 0,"mutex_lock return %d\n",ret);
+    int frame_tx=proc->frame_tx;
+    int tti_tx  =proc->tti_tx;
+    uint64_t timestamp_tx = proc->timestamp_tx;
+    ret = pthread_mutex_unlock(&proc->mutex_eNBs);
+    AssertFatal(ret == 0,"mutex_lock returns %d\n",ret);
+
 
     if (oai_exit) break;
 
     // do TX front-end processing if needed (precoding and/or IDFTs)
-    if (ru->feptx_prec) ru->feptx_prec(ru,proc->frame_tx,proc->tti_tx);
+    if (ru->feptx_prec) ru->feptx_prec(ru,frame_tx,tti_tx);
 
     // do OFDM if needed
-    if ((ru->fh_north_asynch_in == NULL) && (ru->feptx_ofdm)) ru->feptx_ofdm(ru,proc->frame_tx,proc->tti_tx);
+    if ((ru->fh_north_asynch_in == NULL) && (ru->feptx_ofdm)) ru->feptx_ofdm(ru,frame_tx,tti_tx);
 
-    if(!(get_softmodem_params()->emulate_rf)) { //if(!emulate_rf){
+    if(!(ru->emulate_rf)) { //if(!emulate_rf){
       // do outgoing fronthaul (south) if needed
-      if ((ru->fh_north_asynch_in == NULL) && (ru->fh_south_out)) ru->fh_south_out(ru,proc->frame_tx,proc->tti_tx,proc->timestamp_tx);
+      if ((ru->fh_north_asynch_in == NULL) && (ru->fh_south_out)) ru->fh_south_out(ru,frame_tx,tti_tx,timestamp_tx);
 
       if (ru->fh_north_out) ru->fh_north_out(ru);
     } else {
       for (int i=0; i<ru->nb_tx; i++) {
-        if(proc->frame_tx == 2) {
-          sprintf(filename,"txdataF%d_frame%d_sf%d.m",i,proc->frame_tx,proc->tti_tx);
+        if(frame_tx == 2) {
+          sprintf(filename,"txdataF%d_frame%d_sf%d.m",i,frame_tx,tti_tx);
           LOG_M(filename,"txdataF_frame",ru->common.txdataF_BF[i],fp->symbols_per_tti*fp->ofdm_symbol_size, 1, 1);
         }
 
-        if(proc->frame_tx == 2 && proc->tti_tx==0) {
-          sprintf(filename,"txdata%d_frame%d.m",i,proc->frame_tx);
+        if(frame_tx == 2 && tti_tx==0) {
+          sprintf(filename,"txdata%d_frame%d.m",i,frame_tx);
           LOG_M(filename,"txdata_frame",ru->common.txdata[i],fp->samples_per_tti*10, 1, 1);
         }
       }
     }
 
-    LOG_D(PHY,"ru_thread_tx: releasing RU TX in %d.%d\n", proc->frame_tx, proc->tti_tx);
+    LOG_D(PHY,"ru_thread_tx: releasing RU TX in %d.%d\n", frame_tx, tti_tx);
     release_thread(&proc->mutex_eNBs,&proc->instance_cnt_eNBs,"ru_thread_tx");
 
     for(int i = 0; i<ru->num_eNB; i++) {
@@ -1568,7 +1564,7 @@ static void *ru_thread_tx( void *param ) {
                   eNB->Mod_id,eNB_proc->frame_rx,eNB_proc->subframe_rx,ru->idx,eNB->num_RU,eNB_proc->RU_mask_tx);
 
           eNB_proc->RU_mask_tx |= (1<<j);
-        } else if (/*eNB->RU_list[j]->state==RU_SYNC ||*/ (eNB->RU_list[j]->is_slave==1 && eNB->RU_list[j]->wait_cnt>0 && ru!=eNB->RU_list[j] && ru->is_slave==0)) {
+        } else if (eNB->RU_list[j]->state==RU_SYNC ||(eNB->RU_list[j]->is_slave==1 && eNB->RU_list[j]->wait_cnt>0 && ru!=eNB->RU_list[j])) {
           eNB_proc->RU_mask_tx |= (1<<j);
         }
 
@@ -1584,7 +1580,7 @@ static void *ru_thread_tx( void *param ) {
         AssertFatal((ret=pthread_mutex_unlock(&eNB_proc->mutex_RU_tx))==0,"mutex_unlock returns %d\n",ret);
         AssertFatal((ret=pthread_mutex_lock( &L1_proc->mutex_RUs))==0,"mutex_lock returns %d\n",ret);
         L1_proc->instance_cnt_RUs = 0;
-        LOG_D(PHY,"ru_thread_tx: Signaling RU TX done in %d.%d\n", proc->frame_tx, proc->tti_tx);
+        LOG_D(PHY,"ru_thread_tx: Signaling RU TX done in %d.%d\n", frame_tx, tti_tx);
         // the thread can now be woken up
         LOG_D(PHY,"ru_thread_tx: clearing mask and Waking up L1 thread\n");
 
@@ -1637,10 +1633,10 @@ static void *ru_thread( void *param ) {
     }
 
     LOG_I(PHY, "Signaling main thread that RU %d is ready\n",ru->idx);
-    AssertFatal((ret=pthread_mutex_lock(&RC.ru_mutex))==0,"mutex_lock returns %d\n",ret);
-    RC.ru_mask &= ~(1<<ru->idx);
-    pthread_cond_signal(&RC.ru_cond);
-    AssertFatal((ret=pthread_mutex_unlock(&RC.ru_mutex))==0,"mutex_unlock returns %d\n",ret);
+    AssertFatal((ret=pthread_mutex_lock(ru->ru_mutex))==0,"mutex_lock returns %d\n",ret);
+    *ru->ru_mask &= ~(1<<ru->idx);
+    pthread_cond_signal(ru->ru_cond);
+    AssertFatal((ret=pthread_mutex_unlock(ru->ru_mutex))==0,"mutex_unlock returns %d\n",ret);
     ru->state = RU_RUN;
   } else if (ru->has_ctrl_prt == 0) {
     // There is no control port: start everything here
@@ -1660,10 +1656,10 @@ static void *ru_thread( void *param ) {
 	      exit(-1);
     }
 
-    AssertFatal((ret=pthread_mutex_lock(&RC.ru_mutex))==0,"mutex_lock returns %d\n",ret);
-    RC.ru_mask &= ~(1<<ru->idx);
-    pthread_cond_signal(&RC.ru_cond);
-    AssertFatal((ret=pthread_mutex_unlock(&RC.ru_mutex))==0,"mutex_unlock returns %d\n",ret);
+    AssertFatal((ret=pthread_mutex_lock(ru->ru_mutex))==0,"mutex_lock returns %d\n",ret);
+    *ru->ru_mask &= ~(1<<ru->idx);
+    pthread_cond_signal(ru->ru_cond);
+    AssertFatal((ret=pthread_mutex_unlock(ru->ru_mutex))==0,"mutex_unlock returns %d\n",ret);
     ru->state = RU_RUN;
   }
 
@@ -1672,6 +1668,17 @@ static void *ru_thread( void *param ) {
   pthread_cond_signal(&proc->cond_FH1);
   AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_FH1))==0,"mutex_unlock returns %d\n",ret);
 
+  if(usrp_tx_thread == 1){
+     if (ru->start_write_thread){
+        if(ru->start_write_thread(ru) != 0){
+            LOG_E(HW,"Could not start tx write thread\n");
+        }
+        else{
+            LOG_I(PHY,"tx write thread ready\n");
+        }
+     }
+  }
+
   while (!oai_exit) {
     if (ru->if_south != LOCAL_RF && ru->is_slave==1) {
       ru->wait_cnt = 100;
@@ -1682,10 +1689,12 @@ static void *ru_thread( void *param ) {
 
     // wait to be woken up
     if (ru->function!=eNodeB_3GPP && ru->has_ctrl_prt == 1) {
+      LOG_D(PHY,"RU %d: Waiting for control thread to say go\n",ru->idx);
       if (wait_on_condition(&ru->proc.mutex_ru,&ru->proc.cond_ru_thread,&ru->proc.instance_cnt_ru,"ru_thread")<0) break;
-    } else wait_sync("ru_thread");
+    } else wait_sync("ru_thread"); 
+    LOG_D(PHY,"RU %d: Got start from control thread\n",ru->idx);
 
-    if(!(get_softmodem_params()->emulate_rf)) {
+    if(!(ru->emulate_rf)) {
       if (ru->is_slave == 0) AssertFatal(ru->state == RU_RUN,"ru-%d state = %s != RU_RUN\n",ru->idx,ru_states[ru->state]);
       else if (ru->is_slave == 1) AssertFatal(ru->state == RU_SYNC || ru->state == RU_RUN ||
                                                 ru->state == RU_CHECK_SYNC,"ru %d state = %s != RU_SYNC or RU_RUN or RU_CHECK_SYNC\n",ru->idx,ru_states[ru->state]);
@@ -1711,7 +1720,7 @@ static void *ru_thread( void *param ) {
     // if this is a slave RRU, try to synchronize on the DL frequency
     if ((ru->is_slave == 1) && (ru->if_south == LOCAL_RF)) do_ru_synch(ru);
 
-    LOG_D(PHY,"Starting steady-state operation\n");
+    if (ru->state == RU_RUN || ru->state == RU_CHECK_SYNC) LOG_I(PHY,"RU %d Starting steady-state operation\n",ru->idx);
 
     // This is a forever while loop, it loops over subframes which are scheduled by incoming samples from HW devices
     while (ru->state == RU_RUN || ru->state == RU_CHECK_SYNC) {
@@ -1772,14 +1781,14 @@ static void *ru_thread( void *param ) {
         ru->wait_cnt--;
         LOG_D(PHY,"RU thread %d, frame %d, subframe %d, wait_cnt %d \n",ru->idx, frame, subframe, ru->wait_cnt);
 
-        if (ru->if_south!=LOCAL_RF && ru->wait_cnt <=20 && subframe == 5 && frame != RC.ru[0]->proc.frame_rx && resynch_done == 0) {
+        if (ru->if_south!=LOCAL_RF && ru->wait_cnt <=20 && subframe == 5 && frame != ru->ru0->proc.frame_rx && resynch_done == 0) {
           // Send RRU_frame adjust
           RRU_CONFIG_msg_t rru_config_msg;
           rru_config_msg.type = RRU_frame_resynch;
           rru_config_msg.len  = sizeof(RRU_CONFIG_msg_t); // TODO: set to correct msg len
-          ((uint16_t *)&rru_config_msg.msg[0])[0] = RC.ru[0]->proc.frame_rx;
+          ((uint16_t *)&rru_config_msg.msg[0])[0] = ru->ru0->proc.frame_rx;
           ru->cmd=WAIT_RESYNCH;
-          LOG_I(PHY,"Sending Frame Resynch %d to RRU %d\n", RC.ru[0]->proc.frame_rx,ru->idx);
+          LOG_I(PHY,"Sending Frame Resynch %d to RRU %d\n", ru->ru0->proc.frame_rx,ru->idx);
           AssertFatal((ru->ifdevice.trx_ctlsend_func(&ru->ifdevice,&rru_config_msg,rru_config_msg.len)!=-1),"Failed to send msg to RAU\n");
           resynch_done=1;
         }
@@ -1837,9 +1846,9 @@ static void *ru_thread( void *param ) {
 
 #ifdef MBMS_EXPERIMENTAL
 	//Workaround ... this must be properly handled
-	if(ru->if_south==LOCAL_RF && ru->function==eNodeB_3GPP && RC.eNB[0][0]!=NULL){
-		if(ru->frame_parms->num_MBSFN_config!=RC.eNB[0][0]->frame_parms.num_MBSFN_config){
-			ru->frame_parms = &RC.eNB[0][0]->frame_parms;//->frame_parms;
+	if(ru->if_south==LOCAL_RF && ru->function==eNodeB_3GPP && ru->eNB_list[0]!=NULL){
+		if(ru->frame_parms->num_MBSFN_config!=ru->eNB_list[0]->frame_parms.num_MBSFN_config){
+			ru->frame_parms = &ru->eNB_list[0]->frame_parms;//->frame_parms;
 			LOG_W(PHY,"RU MBSFN SF PARAMS Updated\n");
 		}
 	}
@@ -1854,7 +1863,7 @@ static void *ru_thread( void *param ) {
           // do OFDM if needed
           if ((ru->fh_north_asynch_in == NULL) && (ru->feptx_ofdm)) ru->feptx_ofdm(ru, proc->frame_tx, proc->tti_tx);
 
-          if(!(get_softmodem_params()->emulate_rf)) { //if(!emulate_rf){
+          if(!(ru->emulate_rf)) { //if(!emulate_rf){
             // do outgoing fronthaul (south) if needed
             if ((ru->fh_north_asynch_in == NULL) && (ru->fh_south_out)) ru->fh_south_out(ru, proc->frame_tx, proc->tti_tx, proc->timestamp_tx);
 
@@ -1888,12 +1897,12 @@ static void *ru_thread( void *param ) {
 
 #endif
       } // else wait_cnt == 0
-    } // ru->state = RU_RUN
+    } // ru->state = RU_RUN || RU_CHECK_SYNC
   } // while !oai_exit
 
   LOG_I(PHY, "Exiting ru_thread \n");
 
-  if (!(get_softmodem_params()->emulate_rf)) {
+  if (!(ru->emulate_rf)) {
     if (ru->stop_rf != NULL) {
       if (ru->stop_rf(ru) != 0)
         LOG_E(HW,"Could not stop the RF device\n");
@@ -1908,7 +1917,7 @@ static void *ru_thread( void *param ) {
 // This thread run the initial synchronization like a UE
 void *ru_thread_synch(void *arg) {
   RU_t *ru = (RU_t *)arg;
-  LTE_DL_FRAME_PARMS *fp = ru->frame_parms;
+  LTE_DL_FRAME_PARMS *fp;
   int64_t peak_val, avg;
   static int ru_thread_synch_status = 0;
   int cnt=0;
@@ -1917,6 +1926,8 @@ void *ru_thread_synch(void *arg) {
   // initialize variables for PSS detection
   ru_sync_time_init(ru); //lte_sync_time_init(ru->frame_parms);
 
+  fp = ru->frame_parms;
+  int last_rxoff=0;
   while (!oai_exit) {
     // wait to be woken up
     if (wait_on_condition(&ru->proc.mutex_synch,&ru->proc.cond_synch,&ru->proc.instance_cnt_synch,"ru_thread_synch")<0) break;
@@ -1930,17 +1941,18 @@ void *ru_thread_synch(void *arg) {
                                    &avg);
       LOG_I(PHY,"RU synch cnt %d: %d, val %llu (%d dB,%d dB)\n",cnt,ru->rx_offset,(unsigned long long)peak_val,dB_fixed64(peak_val),dB_fixed64(avg));
       cnt++;
-
-      //if (/*ru->rx_offset >= 0*/dB_fixed(peak_val)>=85 && cnt>10) {
-      if (ru->rx_offset >= 0 && avg>0 && dB_fixed(peak_val/avg)>=15 && cnt>10) {
+      int abs_diff= ru->rx_offset - last_rxoff;
+      if (abs_diff<0) abs_diff=-abs_diff;
+      if (ru->rx_offset >= 0 && abs_diff<6 && avg>0 && dB_fixed(peak_val/avg)>=15 && cnt>10) {
         LOG_I(PHY,"Estimated peak_val %d dB, avg %d => timing offset %llu\n",dB_fixed(peak_val),dB_fixed(avg),(unsigned long long int)ru->rx_offset);
         ru->in_synch = 1;
-        /*
+       /* 
                 LOG_M("ru_sync_rx.m","rurx",&ru->common.rxdata[0][0],LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,1);
                 LOG_M("ru_sync_corr.m","sync_corr",ru->dmrs_corr,LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,6);
                 LOG_M("ru_dmrs.m","rudmrs",&ru->dmrssync[0],fp->ofdm_symbol_size,1,1);
-          */
-        //exit(-1);
+          
+        exit(-1);
+       */
       } // sync_pos > 0
       else { //AssertFatal(cnt<1000,"Cannot find synch reference\n");
         if (cnt>200) {
@@ -1950,6 +1962,7 @@ void *ru_thread_synch(void *arg) {
           exit(-1);
         }
       }
+      last_rxoff=ru->rx_offset;
     } // ru->in_synch==0
 
     if (release_thread(&ru->proc.mutex_synch,&ru->proc.instance_cnt_synch,"ru_synch_thread") < 0) break;
@@ -2113,7 +2126,7 @@ static void *rf_tx( void *param ) {
       // do OFDM if needed
       if ((ru->fh_north_asynch_in == NULL) && (ru->feptx_ofdm)) ru->feptx_ofdm(ru,proc->frame_tx,proc->tti_tx);
 
-      if(!emulate_rf) {
+      if(!ru->emulate_rf) {
         // do outgoing fronthaul (south) if needed
         if ((ru->fh_north_asynch_in == NULL) && (ru->fh_south_out)) ru->fh_south_out(ru,proc->frame_tx,proc->tti_tx,proc->timestamp_tx);
 
@@ -2185,6 +2198,9 @@ void reset_proc(RU_t *ru) {
   for (i=0; i<10; i++) proc->symbol_mask[i]=0;
 }
 
+int start_write_thread(RU_t *ru) {
+    return(ru->rfdevice.trx_write_init(&ru->rfdevice));
+}
 
 void init_RU_proc(RU_t *ru) {
   int i=0;
@@ -2282,7 +2298,7 @@ void init_RU_proc(RU_t *ru) {
   pthread_create( &proc->pthread_rf_tx, NULL, rf_tx, (void *)ru );
 #endif
 
-  if (get_softmodem_params()->emulate_rf)
+  if (ru->emulate_rf)
     pthread_create( &proc->pthread_emulateRF, attr_emulateRF, emulatedRF_thread, (void *)proc );
 
   if (get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT || get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT)
@@ -2317,10 +2333,10 @@ void init_RU_proc(RU_t *ru) {
   if (ru->function == eNodeB_3GPP) {
     usleep(10000);
     LOG_I(PHY, "Signaling main thread that RU %d (is_slave %d,send_dmrs %d) is ready in state %s\n",ru->idx,ru->is_slave,ru->generate_dmrs_sync,ru_states[ru->state]);
-    AssertFatal((ret=pthread_mutex_lock(&RC.ru_mutex))==0,"mutex_lock returns %d\n",ret);
-    RC.ru_mask &= ~(1<<ru->idx);
-    pthread_cond_signal(&RC.ru_cond);
-    AssertFatal((ret=pthread_mutex_unlock(&RC.ru_mutex))==0,"mutex_unlock returns %d\n",ret);
+    AssertFatal((ret=pthread_mutex_lock(ru->ru_mutex))==0,"mutex_lock returns %d\n",ret);
+    *ru->ru_mask &= ~(1<<ru->idx);
+    pthread_cond_signal(ru->ru_cond);
+    AssertFatal((ret=pthread_mutex_unlock(ru->ru_mutex))==0,"mutex_unlock returns %d\n",ret);
   }
   */
 }
@@ -2448,22 +2464,22 @@ void kill_RU_proc(RU_t *ru) {
 }
 
 
-void init_precoding_weights(PHY_VARS_eNB *eNB) {
-  int layer,ru_id,aa,re,ue,tb;
+void init_precoding_weights(RU_t **rup,int nb_RU,PHY_VARS_eNB *eNB) {
+  int layer,ru_id,aa,re,tb;
   LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms;
   RU_t *ru;
   LTE_eNB_DLSCH_t *dlsch;
 
   // init precoding weigths
-  for (ue=0; ue<NUMBER_OF_UE_MAX; ue++) {
+  for (int dlsch_id=0; dlsch_id<NUMBER_OF_DLSCH_MAX; dlsch_id++) {
     for (tb=0; tb<2; tb++) {
-      dlsch = eNB->dlsch[ue][tb];
+      dlsch = eNB->dlsch[dlsch_id][tb];
 
       for (layer=0; layer<4; layer++) {
         int nb_tx=0;
 
-        for (ru_id=0; ru_id<RC.nb_RU; ru_id++) {
-          ru = RC.ru[ru_id];
+        for (ru_id=0; ru_id<nb_RU; ru_id++) {
+          ru = rup[ru_id];
           nb_tx+=ru->nb_tx;
         }
 
@@ -2547,6 +2563,7 @@ void set_function_spec_param(RU_t *ru) {
         ru->fh_north_out         = NULL;                    // no outgoing fronthaul to north
         ru->start_if             = NULL;                    // no if interface
         ru->rfdevice.host_type   = RAU_HOST;
+        ru->start_write_thread     = start_write_thread;
       }
 
       ru->fh_south_in            = rx_rf;                               // local synchronous RF RX
@@ -2641,60 +2658,61 @@ void set_function_spec_param(RU_t *ru) {
 
 }
 
-//extern void RCconfig_RU(void);
+void init_RU0(RU_t *ru,int ru_id,char *rf_config_file, int send_dmrssync) {
+
+  ru->rf_config_file = rf_config_file;
+  ru->idx            = ru_id;
+  ru->ts_offset      = 0;
+  
+  if (ru->is_slave == 1) {
+    ru->in_synch = 0;
+    ru->generate_dmrs_sync = 0;
+  } else {
+    ru->in_synch = 1;
+    ru->generate_dmrs_sync = send_dmrssync;
+  }
+  
+  ru->cmd = EMPTY;
+  ru->south_out_cnt = 0;
+  // use eNB_list[0] as a reference for RU frame parameters
+  // NOTE: multiple CC_id are not handled here yet!
+  
+  //ru->generate_dmrs_sync = (ru->is_slave == 0) ? 1 : 0;
+  if ((ru->is_slave == 0) && (ru->ota_sync_enable == 1))
+    ru->generate_dmrs_sync = 1;
+  else
+    ru->generate_dmrs_sync = 0;
+  
+  ru->wakeup_L1_sleeptime = 2000;
+  ru->wakeup_L1_sleep_cnt_max  = 3;
+  
 
+}
 
-void init_RU(char *rf_config_file, int send_dmrssync) {
+// This part if on eNB side 
+void init_RU(RU_t **rup,int nb_RU,PHY_VARS_eNB ***eNBp,int nb_L1,int *nb_CC,char *rf_config_file, int send_dmrssync) {
   int ru_id, i, CC_id;
   RU_t *ru;
   PHY_VARS_eNB *eNB0     = (PHY_VARS_eNB *)NULL;
   LTE_DL_FRAME_PARMS *fp = (LTE_DL_FRAME_PARMS *)NULL;
   // create status mask
-  RC.ru_mask= (1 << RC.nb_RU) - 1;
-  pthread_mutex_init(&RC.ru_mutex,NULL);
-  pthread_cond_init(&RC.ru_cond,NULL);
-
-  if (RC.nb_CC != 0)
-    for (i=0; i<RC.nb_L1_inst; i++)
-      for (CC_id=0; CC_id<RC.nb_CC[i]; CC_id++) RC.eNB[i][CC_id]->num_RU=0;
-
-  LOG_D(PHY,"Process RUs RC.nb_RU:%d\n",RC.nb_RU);
-
-  for (ru_id=0; ru_id<RC.nb_RU; ru_id++) {
-    LOG_D(PHY,"Process RC.ru[%d]\n",ru_id);
-    ru                 = RC.ru[ru_id];
-    ru->rf_config_file = rf_config_file;
-    ru->idx            = ru_id;
-    ru->ts_offset      = 0;
-
-    if (ru->is_slave == 1) {
-      ru->in_synch = 0;
-      ru->generate_dmrs_sync = 0;
-    } else {
-      ru->in_synch = 1;
-      ru->generate_dmrs_sync = send_dmrssync;
-    }
-
-    ru->cmd = EMPTY;
-    ru->south_out_cnt = 0;
-    // use eNB_list[0] as a reference for RU frame parameters
-    // NOTE: multiple CC_id are not handled here yet!
-
-    //ru->generate_dmrs_sync = (ru->is_slave == 0) ? 1 : 0;
-    if ((ru->is_slave == 0) && (ru->ota_sync_enable == 1))
-      ru->generate_dmrs_sync = 1;
-    else
-      ru->generate_dmrs_sync = 0;
+  if (nb_CC != NULL)
+    for (i=0; i<nb_L1; i++)
+      for (CC_id=0; CC_id<nb_CC[i]; CC_id++) eNBp[i][CC_id]->num_RU=0;
 
-    ru->wakeup_L1_sleeptime = 2000;
-    ru->wakeup_L1_sleep_cnt_max  = 3;
+  LOG_D(PHY,"Process RUs RC.nb_RU:%d\n",nb_RU);
 
+  for (ru_id=0; ru_id<nb_RU; ru_id++) {
+    LOG_D(PHY,"Process ru[%d]\n",ru_id);
+    ru                 = rup[ru_id];
+    init_RU0(ru,ru_id,rf_config_file,send_dmrssync);
+    ru->ru0 = rup[0];
     if (ru->num_eNB > 0) {
-      LOG_D(PHY, "%s() RC.ru[%d].num_eNB:%d ru->eNB_list[0]:%p RC.eNB[0][0]:%p rf_config_file:%s\n", __FUNCTION__, ru_id, ru->num_eNB, ru->eNB_list[0], RC.eNB[0][0], ru->rf_config_file);
-
+      LOG_D(PHY, "%s() ru[%d].num_eNB:%d ru->eNB_list[0]:%p eNB[0][0]:%p rf_config_file:%s\n", __FUNCTION__, ru_id, ru->num_eNB, ru->eNB_list[0], eNBp[0][0], ru->rf_config_file);
+      
       if (ru->eNB_list[0] == 0) {
-        LOG_E(PHY,"%s() DJP - ru->eNB_list ru->num_eNB are not initialized - so do it manually\n", __FUNCTION__);
-        ru->eNB_list[0] = RC.eNB[0][0];
+	LOG_E(PHY,"%s() DJP - ru->eNB_list ru->num_eNB are not initialized - so do it manually\n", __FUNCTION__);
+	ru->eNB_list[0] = eNBp[0][0];
         ru->num_eNB=1;
         //
         // DJP - feptx_prec() / feptx_ofdm() parses the eNB_list (based on num_eNB) and copies the txdata_F to txdata in RU
@@ -2703,7 +2721,7 @@ void init_RU(char *rf_config_file, int send_dmrssync) {
         LOG_E(PHY,"DJP - delete code above this %s:%d\n", __FILE__, __LINE__);
       }
     }
-
+    
     eNB0 = ru->eNB_list[0];
     fp   = ru->frame_parms;
     LOG_D(PHY, "RU FUnction:%d ru->if_south:%d\n", ru->function, ru->if_south);
@@ -2777,10 +2795,10 @@ void stop_ru(RU_t *ru) {
 }
 
 
-void stop_RU(int nb_ru) {
+void stop_RU(RU_t **rup,int nb_ru) {
   for (int inst = 0; inst < nb_ru; inst++) {
     LOG_I(PHY, "Stopping RU %d processing threads\n", inst);
-    kill_RU_proc(RC.ru[inst]);
+    kill_RU_proc(rup[inst]);
   }
 }
 
@@ -2801,7 +2819,7 @@ void init_ru_vnf(void) {
   pthread_cond_init(&RC.ru_cond,NULL);
   // read in configuration file)
   LOG_I(PHY,"configuring RU from file\n");
-  RCconfig_RU();
+  RC.ru = RCconfig_RU(RC.nb_RU,RC.nb_L1_inst,RC.eNB,&RC.ru_mask,&RC.ru_mutex,&RC.ru_cond);
   LOG_I(PHY,"number of L1 instances %d, number of RU %d, number of CPU cores %d\n",RC.nb_L1_inst,RC.nb_RU,get_nprocs());
 
   if (RC.nb_CC != 0)
@@ -2877,183 +2895,185 @@ void init_ru_vnf(void) {
 
 /* --------------------------------------------------------*/
 /* from here function to use configuration module          */
-void RCconfig_RU(void) {
+RU_t **RCconfig_RU(int nb_RU,int nb_L1_inst,PHY_VARS_eNB ***eNB,uint64_t *ru_mask,pthread_mutex_t *ru_mutex,pthread_cond_t *ru_cond) {
   int i = 0;
   paramdef_t RUParams[] = RUPARAMS_DESC;
   paramlist_def_t RUParamList = {CONFIG_STRING_RU_LIST,NULL,0};
   config_getlist( &RUParamList,RUParams,sizeof(RUParams)/sizeof(paramdef_t), NULL);
-
+  RU_t **ru=NULL;
   if ( RUParamList.numelt > 0) {
-    RC.ru = (RU_t **)malloc(RC.nb_RU*sizeof(RU_t *));
-
-    for (int j = 0; j < RC.nb_RU; j++) {
-      RC.ru[j]                                    = (RU_t *)malloc(sizeof(RU_t));
-      memset((void *)RC.ru[j],0,sizeof(RU_t));
-      RC.ru[j]->idx                                 = j;
-      LOG_I(PHY,"Creating RC.ru[%d]:%p\n", j, RC.ru[j]);
-      RC.ru[j]->if_timing                           = synch_to_ext_device;
-
-      if (RC.nb_L1_inst >0)
-        RC.ru[j]->num_eNB                           = RUParamList.paramarray[j][RU_ENB_LIST_IDX].numelt;
+    ru = (RU_t **)malloc(nb_RU*sizeof(RU_t *));
+
+    for (int j = 0; j < nb_RU; j++) {
+      ru[j]                                    = (RU_t *)malloc(sizeof(RU_t));
+      memset((void *)ru[j],0,sizeof(RU_t));
+      ru[j]->idx                                 = j;
+      LOG_I(PHY,"Creating ru[%d]:%p\n", j, ru[j]);
+      ru[j]->if_timing                           = synch_to_ext_device;
+
+      ru[j]->ru_mask = ru_mask;
+      ru[j]->ru_mutex = ru_mutex;
+      ru[j]->ru_cond = ru_cond;
+      if (nb_L1_inst >0)
+        ru[j]->num_eNB                           = RUParamList.paramarray[j][RU_ENB_LIST_IDX].numelt;
       else
-        RC.ru[j]->num_eNB                           = 0;
+        ru[j]->num_eNB                           = 0;
 
-      for (i=0; i<RC.ru[j]->num_eNB; i++) RC.ru[j]->eNB_list[i] = RC.eNB[RUParamList.paramarray[j][RU_ENB_LIST_IDX].iptr[i]][0];
+      for (i=0; i<ru[j]->num_eNB; i++) ru[j]->eNB_list[i] = eNB[RUParamList.paramarray[j][RU_ENB_LIST_IDX].iptr[i]][0];
 
-      RC.ru[j]->has_ctrl_prt                        = 0;
+      ru[j]->has_ctrl_prt                        = 0;
 
       if (config_isparamset(RUParamList.paramarray[j], RU_SDR_ADDRS)) {
-        RC.ru[j]->openair0_cfg.sdr_addrs = strdup(*(RUParamList.paramarray[j][RU_SDR_ADDRS].strptr));
+        ru[j]->openair0_cfg.sdr_addrs = strdup(*(RUParamList.paramarray[j][RU_SDR_ADDRS].strptr));
       }
 
       if (config_isparamset(RUParamList.paramarray[j], RU_SDR_CLK_SRC)) {
         if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "internal") == 0) {
-          RC.ru[j]->openair0_cfg.clock_source = internal;
+          ru[j]->openair0_cfg.clock_source = internal;
           LOG_D(PHY, "RU clock source set as internal\n");
         } else if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "external") == 0) {
-          RC.ru[j]->openair0_cfg.clock_source = external;
+          ru[j]->openair0_cfg.clock_source = external;
           LOG_D(PHY, "RU clock source set as external\n");
         } else if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "gpsdo") == 0) {
-          RC.ru[j]->openair0_cfg.clock_source = gpsdo;
+          ru[j]->openair0_cfg.clock_source = gpsdo;
           LOG_D(PHY, "RU clock source set as gpsdo\n");
         } else {
           LOG_E(PHY, "Erroneous RU clock source in the provided configuration file: '%s'\n", *(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr));
         }
       }
       else {
-	RC.ru[j]->openair0_cfg.clock_source = unset;
+	ru[j]->openair0_cfg.clock_source = unset;
       }
 
       if (config_isparamset(RUParamList.paramarray[j], RU_SDR_TME_SRC)) {
         if (strcmp(*(RUParamList.paramarray[j][RU_SDR_TME_SRC].strptr), "internal") == 0) {
-          RC.ru[j]->openair0_cfg.time_source = internal;
+          ru[j]->openair0_cfg.time_source = internal;
           LOG_D(PHY, "RU time source set as internal\n");
         } else if (strcmp(*(RUParamList.paramarray[j][RU_SDR_TME_SRC].strptr), "external") == 0) {
-          RC.ru[j]->openair0_cfg.time_source = external;
+          ru[j]->openair0_cfg.time_source = external;
           LOG_D(PHY, "RU time source set as external\n");
         } else if (strcmp(*(RUParamList.paramarray[j][RU_SDR_TME_SRC].strptr), "gpsdo") == 0) {
-          RC.ru[j]->openair0_cfg.time_source = gpsdo;
+          ru[j]->openair0_cfg.time_source = gpsdo;
           LOG_D(PHY, "RU time source set as gpsdo\n");
         } else {
           LOG_E(PHY, "Erroneous RU time source in the provided configuration file: '%s'\n", *(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr));
         }
       }
       else {
-	RC.ru[j]->openair0_cfg.time_source = unset;
+	ru[j]->openair0_cfg.time_source = unset;
       }      
 
+      LOG_I(PHY,"RU %d is_slave=%s\n",j,*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr));
+
+      if (strcmp(*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr), "yes") == 0) ru[j]->is_slave=1;
+      else ru[j]->is_slave=0;
+
+      LOG_I(PHY,"RU %d ota_sync_enabled=%s\n",j,*(RUParamList.paramarray[j][RU_OTA_SYNC_ENABLE_IDX].strptr));
+
+      if (strcmp(*(RUParamList.paramarray[j][RU_OTA_SYNC_ENABLE_IDX].strptr), "yes") == 0) ru[j]->ota_sync_enable=1;
+      else ru[j]->ota_sync_enable=0;
+
       if (strcmp(*(RUParamList.paramarray[j][RU_LOCAL_RF_IDX].strptr), "yes") == 0) {
         if ( !(config_isparamset(RUParamList.paramarray[j],RU_LOCAL_IF_NAME_IDX)) ) {
-          RC.ru[j]->if_south                        = LOCAL_RF;
-          RC.ru[j]->function                        = eNodeB_3GPP;
-          RC.ru[j]->state                           = RU_RUN;
-          LOG_I(PHY,"Setting function for RU %d to eNodeB_3GPP\n",j);
+          ru[j]->if_south                        = LOCAL_RF;
+          ru[j]->function                        = eNodeB_3GPP;
+          ru[j]->state                           = RU_RUN;
+          printf("Setting function for RU %d to eNodeB_3GPP\n",j);
         } else {
-          RC.ru[j]->eth_params.local_if_name            = strdup(*(RUParamList.paramarray[j][RU_LOCAL_IF_NAME_IDX].strptr));
-          RC.ru[j]->eth_params.my_addr                  = strdup(*(RUParamList.paramarray[j][RU_LOCAL_ADDRESS_IDX].strptr));
-          RC.ru[j]->eth_params.remote_addr              = strdup(*(RUParamList.paramarray[j][RU_REMOTE_ADDRESS_IDX].strptr));
-          RC.ru[j]->eth_params.my_portd                 = *(RUParamList.paramarray[j][RU_LOCAL_PORTD_IDX].uptr);
-          RC.ru[j]->eth_params.remote_portd             = *(RUParamList.paramarray[j][RU_REMOTE_PORTD_IDX].uptr);
+          ru[j]->eth_params.local_if_name            = strdup(*(RUParamList.paramarray[j][RU_LOCAL_IF_NAME_IDX].strptr));
+          ru[j]->eth_params.my_addr                  = strdup(*(RUParamList.paramarray[j][RU_LOCAL_ADDRESS_IDX].strptr));
+          ru[j]->eth_params.remote_addr              = strdup(*(RUParamList.paramarray[j][RU_REMOTE_ADDRESS_IDX].strptr));
+          ru[j]->eth_params.my_portd                 = *(RUParamList.paramarray[j][RU_LOCAL_PORTD_IDX].uptr);
+          ru[j]->eth_params.remote_portd             = *(RUParamList.paramarray[j][RU_REMOTE_PORTD_IDX].uptr);
 
           // Check if control port set
           if  (!(config_isparamset(RUParamList.paramarray[j],RU_REMOTE_PORTC_IDX)) ) {
             LOG_I(PHY,"Removing control port for RU %d\n",j);
-            RC.ru[j]->has_ctrl_prt            = 0;
+            ru[j]->has_ctrl_prt            = 0;
           } else {
-            RC.ru[j]->eth_params.my_portc                 = *(RUParamList.paramarray[j][RU_LOCAL_PORTC_IDX].uptr);
-            RC.ru[j]->eth_params.remote_portc             = *(RUParamList.paramarray[j][RU_REMOTE_PORTC_IDX].uptr);
-            LOG_I(PHY," Control port %u \n",RC.ru[j]->eth_params.my_portc);
+            ru[j]->eth_params.my_portc                 = *(RUParamList.paramarray[j][RU_LOCAL_PORTC_IDX].uptr);
+            ru[j]->eth_params.remote_portc             = *(RUParamList.paramarray[j][RU_REMOTE_PORTC_IDX].uptr);
+            LOG_I(PHY," Control port %u \n",ru[j]->eth_params.my_portc);
           }
 
           if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp") == 0) {
-            RC.ru[j]->if_south                        = LOCAL_RF;
-            RC.ru[j]->function                        = NGFI_RRU_IF5;
-            RC.ru[j]->eth_params.transp_preference    = ETH_UDP_MODE;
+            ru[j]->if_south                        = LOCAL_RF;
+            ru[j]->function                        = NGFI_RRU_IF5;
+            ru[j]->eth_params.transp_preference    = ETH_UDP_MODE;
             LOG_I(PHY,"Setting function for RU %d to NGFI_RRU_IF5 (udp)\n",j);
           } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw") == 0) {
-            RC.ru[j]->if_south                        = LOCAL_RF;
-            RC.ru[j]->function                        = NGFI_RRU_IF5;
-            RC.ru[j]->eth_params.transp_preference    = ETH_RAW_MODE;
+            ru[j]->if_south                        = LOCAL_RF;
+            ru[j]->function                        = NGFI_RRU_IF5;
+            ru[j]->eth_params.transp_preference    = ETH_RAW_MODE;
             LOG_I(PHY,"Setting function for RU %d to NGFI_RRU_IF5 (raw)\n",j);
           } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp_if4p5") == 0) {
-            RC.ru[j]->if_south                        = LOCAL_RF;
-            RC.ru[j]->function                        = NGFI_RRU_IF4p5;
-            RC.ru[j]->eth_params.transp_preference    = ETH_UDP_IF4p5_MODE;
-            RC.ru[j]->has_ctrl_prt                   =1;
+            ru[j]->if_south                        = LOCAL_RF;
+            ru[j]->function                        = NGFI_RRU_IF4p5;
+            ru[j]->eth_params.transp_preference    = ETH_UDP_IF4p5_MODE;
+            ru[j]->has_ctrl_prt                   =1;
             LOG_I(PHY,"Setting function for RU %d to NGFI_RRU_IF4p5 (udp)\n",j);
           } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw_if4p5") == 0) {
-            RC.ru[j]->if_south                        = LOCAL_RF;
-            RC.ru[j]->function                        = NGFI_RRU_IF4p5;
-            RC.ru[j]->eth_params.transp_preference    = ETH_RAW_IF4p5_MODE;
-            RC.ru[j]->has_ctrl_prt                   =1;
+            ru[j]->if_south                        = LOCAL_RF;
+            ru[j]->function                        = NGFI_RRU_IF4p5;
+            ru[j]->eth_params.transp_preference    = ETH_RAW_IF4p5_MODE;
+            ru[j]->has_ctrl_prt                   =1;
             LOG_I(PHY,"Setting function for RU %d to NGFI_RRU_IF4p5 (raw)\n",j);
           }
-
-          LOG_I(PHY,"RU %d is_slave=%s\n",j,*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr));
-
-          if (strcmp(*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr), "yes") == 0) RC.ru[j]->is_slave=1;
-          else RC.ru[j]->is_slave=0;
-
-          LOG_I(PHY,"RU %d ota_sync_enabled=%s\n",j,*(RUParamList.paramarray[j][RU_OTA_SYNC_ENABLE_IDX].strptr));
-
-          if (strcmp(*(RUParamList.paramarray[j][RU_OTA_SYNC_ENABLE_IDX].strptr), "yes") == 0) RC.ru[j]->ota_sync_enable=1;
-          else RC.ru[j]->ota_sync_enable=0;
         }
 
-        RC.ru[j]->max_pdschReferenceSignalPower     = *(RUParamList.paramarray[j][RU_MAX_RS_EPRE_IDX].uptr);;
-        RC.ru[j]->max_rxgain                        = *(RUParamList.paramarray[j][RU_MAX_RXGAIN_IDX].uptr);
-        RC.ru[j]->num_bands                         = RUParamList.paramarray[j][RU_BAND_LIST_IDX].numelt;
+        ru[j]->max_pdschReferenceSignalPower     = *(RUParamList.paramarray[j][RU_MAX_RS_EPRE_IDX].uptr);;
+        ru[j]->max_rxgain                        = *(RUParamList.paramarray[j][RU_MAX_RXGAIN_IDX].uptr);
+        ru[j]->num_bands                         = RUParamList.paramarray[j][RU_BAND_LIST_IDX].numelt;
         /* sf_extension is in unit of samples for 30.72MHz here, has to be scaled later */
-        RC.ru[j]->sf_extension                      = *(RUParamList.paramarray[j][RU_SF_EXTENSION_IDX].uptr);
+        ru[j]->sf_extension                      = *(RUParamList.paramarray[j][RU_SF_EXTENSION_IDX].uptr);
 
-        for (i=0; i<RC.ru[j]->num_bands; i++) RC.ru[j]->band[i] = RUParamList.paramarray[j][RU_BAND_LIST_IDX].iptr[i];
+        for (i=0; i<ru[j]->num_bands; i++) ru[j]->band[i] = RUParamList.paramarray[j][RU_BAND_LIST_IDX].iptr[i];
       } //strcmp(local_rf, "yes") == 0
-else {
+      else {
         LOG_I(PHY,"RU %d: Transport %s\n",j,*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr));
-        RC.ru[j]->eth_params.local_if_name      = strdup(*(RUParamList.paramarray[j][RU_LOCAL_IF_NAME_IDX].strptr));
-        RC.ru[j]->eth_params.my_addr            = strdup(*(RUParamList.paramarray[j][RU_LOCAL_ADDRESS_IDX].strptr));
-        RC.ru[j]->eth_params.remote_addr        = strdup(*(RUParamList.paramarray[j][RU_REMOTE_ADDRESS_IDX].strptr));
-        RC.ru[j]->eth_params.my_portc           = *(RUParamList.paramarray[j][RU_LOCAL_PORTC_IDX].uptr);
-        RC.ru[j]->eth_params.remote_portc       = *(RUParamList.paramarray[j][RU_REMOTE_PORTC_IDX].uptr);
-        RC.ru[j]->eth_params.my_portd           = *(RUParamList.paramarray[j][RU_LOCAL_PORTD_IDX].uptr);
-        RC.ru[j]->eth_params.remote_portd       = *(RUParamList.paramarray[j][RU_REMOTE_PORTD_IDX].uptr);
+        ru[j]->eth_params.local_if_name      = strdup(*(RUParamList.paramarray[j][RU_LOCAL_IF_NAME_IDX].strptr));
+        ru[j]->eth_params.my_addr            = strdup(*(RUParamList.paramarray[j][RU_LOCAL_ADDRESS_IDX].strptr));
+        ru[j]->eth_params.remote_addr        = strdup(*(RUParamList.paramarray[j][RU_REMOTE_ADDRESS_IDX].strptr));
+        ru[j]->eth_params.my_portc           = *(RUParamList.paramarray[j][RU_LOCAL_PORTC_IDX].uptr);
+        ru[j]->eth_params.remote_portc       = *(RUParamList.paramarray[j][RU_REMOTE_PORTC_IDX].uptr);
+        ru[j]->eth_params.my_portd           = *(RUParamList.paramarray[j][RU_LOCAL_PORTD_IDX].uptr);
+        ru[j]->eth_params.remote_portd       = *(RUParamList.paramarray[j][RU_REMOTE_PORTD_IDX].uptr);
       
         if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp") == 0) {
-	  RC.ru[j]->if_south                     = REMOTE_IF5;
-	  RC.ru[j]->function                     = NGFI_RAU_IF5;
-	  RC.ru[j]->eth_params.transp_preference = ETH_UDP_MODE;
+	  ru[j]->if_south                     = REMOTE_IF5;
+	  ru[j]->function                     = NGFI_RAU_IF5;
+	  ru[j]->eth_params.transp_preference = ETH_UDP_MODE;
         } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp_ecpri_if5") == 0) {
-	  RC.ru[j]->if_south                     = REMOTE_IF5;
-	  RC.ru[j]->function                     = NGFI_RAU_IF5;
-	  RC.ru[j]->eth_params.transp_preference = ETH_UDP_IF5_ECPRI_MODE;
+	  ru[j]->if_south                     = REMOTE_IF5;
+	  ru[j]->function                     = NGFI_RAU_IF5;
+	  ru[j]->eth_params.transp_preference = ETH_UDP_IF5_ECPRI_MODE;
         } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw") == 0) {
-	  RC.ru[j]->if_south                     = REMOTE_IF5;
-	  RC.ru[j]->function                     = NGFI_RAU_IF5;
-	  RC.ru[j]->eth_params.transp_preference = ETH_RAW_MODE;
+	  ru[j]->if_south                     = REMOTE_IF5;
+	  ru[j]->function                     = NGFI_RAU_IF5;
+	  ru[j]->eth_params.transp_preference = ETH_RAW_MODE;
         } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp_if4p5") == 0) {
-	  RC.ru[j]->if_south                     = REMOTE_IF4p5;
-	  RC.ru[j]->function                     = NGFI_RAU_IF4p5;
-  	  RC.ru[j]->eth_params.transp_preference = ETH_UDP_IF4p5_MODE;
-	  RC.ru[j]->has_ctrl_prt                 = 1;
+	  ru[j]->if_south                     = REMOTE_IF4p5;
+	  ru[j]->function                     = NGFI_RAU_IF4p5;
+  	  ru[j]->eth_params.transp_preference = ETH_UDP_IF4p5_MODE;
+	  ru[j]->has_ctrl_prt                 = 1;
         } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw_if4p5") == 0) {
-	  RC.ru[j]->if_south                     = REMOTE_IF4p5;
-	  RC.ru[j]->function                     = NGFI_RAU_IF4p5;
-	  RC.ru[j]->eth_params.transp_preference = ETH_RAW_IF4p5_MODE;
-	  RC.ru[j]->has_ctrl_prt                 = 1;
+	  ru[j]->if_south                     = REMOTE_IF4p5;
+	  ru[j]->function                     = NGFI_RAU_IF4p5;
+	  ru[j]->eth_params.transp_preference = ETH_RAW_IF4p5_MODE;
+	  ru[j]->has_ctrl_prt                 = 1;
 	
-          if (strcmp(*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr), "yes") == 0) RC.ru[j]->is_slave=1;
-          else RC.ru[j]->is_slave=0;
+          if (strcmp(*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr), "yes") == 0) ru[j]->is_slave=1;
+          else ru[j]->is_slave=0;
         }
       }  /* strcmp(local_rf, "yes") != 0 */
       
-      RC.ru[j]->nb_tx                             = *(RUParamList.paramarray[j][RU_NB_TX_IDX].uptr);
-      RC.ru[j]->nb_rx                             = *(RUParamList.paramarray[j][RU_NB_RX_IDX].uptr);
-      RC.ru[j]->att_tx                            = *(RUParamList.paramarray[j][RU_ATT_TX_IDX].uptr);
-      RC.ru[j]->att_rx                            = *(RUParamList.paramarray[j][RU_ATT_RX_IDX].uptr);
+      ru[j]->nb_tx                             = *(RUParamList.paramarray[j][RU_NB_TX_IDX].uptr);
+      ru[j]->nb_rx                             = *(RUParamList.paramarray[j][RU_NB_RX_IDX].uptr);
+      ru[j]->att_tx                            = *(RUParamList.paramarray[j][RU_ATT_TX_IDX].uptr);
+      ru[j]->att_rx                            = *(RUParamList.paramarray[j][RU_ATT_RX_IDX].uptr);
+      *ru_mask= (*ru_mask)|(1<<j);
     }// j=0..num_rus
-  } else {
-    RC.nb_RU = 0;
-  } // setting != NULL
-
-  return;
+  } 
+    
+  return ru;
 }
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index b558c14380fcaa4a9f95ec6d4490e34f3932c372..c21c04ba054c593e5bcb14aa86f82764953490d3 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -166,12 +166,16 @@ void sendFs6Ulharq(enum pckType type, int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *
   AssertFatal(false, "Must not be called in this context\n");
 }
 
+RU_t **RCconfig_RU(int nb_RU,int nb_L1_inst,PHY_VARS_eNB ***eNB,uint64_t *ru_mask,pthread_mutex_t *ru_mutex,pthread_cond_t *ru_cond);
+
 extern void reset_opp_meas(void);
 extern void print_opp_meas(void);
 
 
 extern void init_eNB_afterRU(void);
 
+RU_t **RCconfig_RU(int nb_RU,int nb_L1_inst,PHY_VARS_eNB ***eNB,uint64_t *ru_mask,pthread_mutex_t *ru_mutex,pthread_cond_t *ru_cond);
+
 int transmission_mode=1;
 int emulate_rf = 0;
 int numerology = 0;
@@ -428,7 +432,6 @@ int stop_L1L2(module_id_t enb_id) {
  * Restart the lte-softmodem after it has been soft-stopped with stop_L1L2()
  */
 int restart_L1L2(module_id_t enb_id) {
-  RU_t *ru = RC.ru[enb_id];
   int cc_id;
   MessageDef *msg_p = NULL;
   LOG_W(ENB_APP, "restarting lte-softmodem\n");
@@ -439,10 +442,12 @@ int restart_L1L2(module_id_t enb_id) {
 
   for (cc_id = 0; cc_id < RC.nb_L1_CC[enb_id]; cc_id++) {
     RC.eNB[enb_id][cc_id]->configured = 0;
+    for (int ru_id=0;ru_id<RC.eNB[enb_id][cc_id]->num_RU;ru_id++) {
+      int ru_idx = RC.eNB[enb_id][cc_id]->RU_list[ru_id]->idx;
+      RC.ru_mask |= (1 << ru_idx);
+      set_function_spec_param(RC.ru[ru_idx]);
+    }
   }
-
-  RC.ru_mask |= (1 << ru->idx);
-  set_function_spec_param(RC.ru[enb_id]);
   /* reset the list of connected UEs in the MAC, since in this process with
    * loose all UEs (have to reconnect) */
   init_UE_info(&RC.mac[enb_id]->UE_info);
@@ -463,9 +468,15 @@ int restart_L1L2(module_id_t enb_id) {
   /* TODO XForms might need to be restarted, but it is currently (09/02/18)
    * broken, so we cannot test it */
   wait_eNBs();
-  init_RU_proc(ru);
-  ru->rf_map.card = 0;
-  ru->rf_map.chain = 0; /* CC_id + chain_offset;*/
+  for (int cc_id=0;cc_id<RC.nb_L1_CC[enb_id]; cc_id++) {
+    for (int ru_id=0;ru_id<RC.eNB[enb_id][cc_id]->num_RU;ru_id++) {
+      int ru_idx = RC.eNB[enb_id][cc_id]->RU_list[ru_id]->idx;
+
+      init_RU_proc(RC.ru[ru_idx]);
+      RC.ru[ru_idx]->rf_map.card = 0;
+      RC.ru[ru_idx]->rf_map.chain = 0; /* CC_id + chain_offset;*/
+    }
+  }
   wait_RUs();
   init_eNB_afterRU();
   printf("Sending sync to all threads\n");
@@ -578,7 +589,7 @@ int main ( int argc, char **argv )
   /* We need to read RU configuration before FlexRAN starts so it knows what
    * splits to report. Actual RU start comes later. */
   if (RC.nb_RU > 0 && NFAPI_MODE != NFAPI_MODE_VNF) {
-    RCconfig_RU();
+    RC.ru = RCconfig_RU(RC.nb_RU,RC.nb_L1_inst,RC.eNB,&RC.ru_mask,&RC.ru_mutex,&RC.ru_cond);
     LOG_I(PHY,
           "number of L1 instances %d, number of RU %d, number of CPU cores %d\n",
           RC.nb_L1_inst, RC.nb_RU, get_nprocs());
@@ -655,6 +666,7 @@ int main ( int argc, char **argv )
     for (int x=0; x < RC.nb_L1_inst; x++) 
       for (int CC_id=0; CC_id<RC.nb_L1_CC[x]; CC_id++) {
         L1_rxtx_proc_t *L1proc= &RC.eNB[x][CC_id]->proc.L1_proc;
+        L1_rxtx_proc_t *L1proctx= &RC.eNB[x][CC_id]->proc.L1_proc_tx;
 	L1proc->threadPool=(tpool_t*)malloc(sizeof(tpool_t));
         L1proc->respEncode=(notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
         L1proc->respDecode=(notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
@@ -662,9 +674,11 @@ int main ( int argc, char **argv )
          initTpool(get_softmodem_params()->threadPoolConfig, L1proc->threadPool, true);
         else
          initTpool("n", L1proc->threadPool, true);
-      initNotifiedFIFO(L1proc->respEncode);
-      initNotifiedFIFO(L1proc->respDecode);
-      RC.eNB[x][CC_id]->proc.L1_proc_tx.threadPool = L1proc->threadPool;
+        initNotifiedFIFO(L1proc->respEncode);
+        initNotifiedFIFO(L1proc->respDecode);
+        L1proctx->threadPool=L1proc->threadPool;
+        L1proctx->respEncode=L1proc->respEncode;
+        L1proctx->nbEncode=L1proc->nbEncode;
     }
 
 
@@ -679,7 +693,7 @@ int main ( int argc, char **argv )
   // some initialization is necessary and init_ru_vnf do this.
   if (RC.nb_RU >0 && NFAPI_MODE!=NFAPI_MODE_VNF) {
     printf("Initializing RU threads\n");
-    init_RU(get_softmodem_params()->rf_config_file,get_softmodem_params()->send_dmrs_sync);
+    init_RU(RC.ru,RC.nb_RU,RC.eNB,RC.nb_L1_inst,RC.nb_L1_CC,get_softmodem_params()->rf_config_file,get_softmodem_params()->send_dmrs_sync);
     
     for (ru_id=0; ru_id<RC.nb_RU; ru_id++) {
       RC.ru[ru_id]->rf_map.card=0;
diff --git a/targets/RT/USER/lte-softmodem.h b/targets/RT/USER/lte-softmodem.h
index 1c537dabe39d5cdb4f79f5469f2bd550321563f3..a1b261f26361722dbbd96fc44fd93102d1a2b3ab 100644
--- a/targets/RT/USER/lte-softmodem.h
+++ b/targets/RT/USER/lte-softmodem.h
@@ -97,7 +97,6 @@
 /*-------------------------------------------------------------------------------------------------------------------------------------------------------*/
 
 #define CMDLINE_UEPARAMS_DESC {  \
-    {"siml1",             CONFIG_HLP_SIML1,       PARAMFLAG_BOOL,  iptr:&simL1flag,                    defintval:0,          TYPE_INT,      0},   \
     {"U",                 CONFIG_HLP_NUMUE,       0,               u16ptr:&NB_UE_INST,                 defuintval:1,         TYPE_UINT16,   0},   \
     {"ue-rxgain",         CONFIG_HLP_UERXG,       0,               dblptr:&(rx_gain[0][0]),            defdblval:130,        TYPE_DOUBLE,   0},   \
     {"ue-rxgain-off",     CONFIG_HLP_UERXGOFF,    0,               dblptr:&rx_gain_off,                defdblval:0,          TYPE_DOUBLE,   0},   \
@@ -171,7 +170,7 @@ extern void init_RU_proc(RU_t *ru);
 extern void stop_RU(int nb_ru);
 extern void kill_RU_proc(RU_t *ru);
 extern void set_function_spec_param(RU_t *ru);
-extern void init_RU(char *, int send_dmrssync);
+extern void init_RU(RU_t **rup,int nb_RU,PHY_VARS_eNB ***eNBp,int nb_L1,int *nb_CC,char *rf_config_file, int send_dmrssync);
 
 // In lte-ue.c
 extern int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg);
@@ -199,7 +198,6 @@ extern void init_te_thread(PHY_VARS_eNB *);
 extern void kill_td_thread(PHY_VARS_eNB *);
 extern void kill_te_thread(PHY_VARS_eNB *);
 
-extern void RCConfig_sim(void);
 extern void init_ocm(void);
 extern void init_ue_devices(PHY_VARS_UE *);
 
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index 82140ea5aa1492b9cff8a8b5257910d5161e3334..cc084d18c5c29173745245d92a65afc4b20224ac 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -283,13 +283,7 @@ void init_UE(int nb_inst,
 
     LOG_I(PHY,"Allocating UE context %d\n",inst);
 
-    if ( !IS_SOFTMODEM_SIML1 ) PHY_vars_UE_g[inst][0] = init_ue_vars(fp0,inst,0);
-    else {
-      // needed for memcopy below. these are not used in the RU, but needed for UE
-      RC.ru[0]->frame_parms->nb_antennas_rx = fp0->nb_antennas_rx;
-      RC.ru[0]->frame_parms->nb_antennas_tx = fp0->nb_antennas_tx;
-      PHY_vars_UE_g[inst][0]  = init_ue_vars(RC.ru[0]->frame_parms,inst,0);
-    }
+    PHY_vars_UE_g[inst][0] = init_ue_vars(fp0,inst,0);
 
     // turn off timing control loop in UE
     PHY_vars_UE_g[inst][0]->no_timing_correction = timing_correction;
@@ -371,17 +365,13 @@ void init_UE(int nb_inst,
        */
       UE->N_TA_offset = 0;
 
-    if (IS_SOFTMODEM_SIML1 ) init_ue_devices(UE);
-
     LOG_I(PHY,"Intializing UE Threads for instance %d (%p,%p)...\n",inst,PHY_vars_UE_g[inst],PHY_vars_UE_g[inst][0]);
     init_UE_threads(inst);
 
-    if (!IS_SOFTMODEM_SIML1 ) {
-      ret = openair0_device_load(&(UE->rfdevice), &openair0_cfg[0]);
+    ret = openair0_device_load(&(UE->rfdevice), &openair0_cfg[0]);
 
-      if (ret !=0) {
-        exit_fun("Error loading device library");
-      }
+    if (ret !=0) {
+      exit_fun("Error loading device library");
     }
 
     UE->rfdevice.host_type = RAU_HOST;
diff --git a/targets/RT/USER/lte-uesoftmodem.c b/targets/RT/USER/lte-uesoftmodem.c
index 3714b0dc6fba53910b107cf2d78ce05b55ae47a8..1079f89c3fd52c83dc008f97d40ac76e9cf7f874 100644
--- a/targets/RT/USER/lte-uesoftmodem.c
+++ b/targets/RT/USER/lte-uesoftmodem.c
@@ -193,6 +193,9 @@ int oaisim_flag=0;
  */
 uint8_t abstraction_flag=0;
 
+// needed for pdcp.c
+RAN_CONTEXT_t RC;
+
 /* forward declarations */
 void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]);
 
@@ -286,7 +289,6 @@ static void get_options(void) {
   int dumpframe=0;
   int timingadv=0;
   uint8_t nfapi_mode = NFAPI_MONOLITHIC;
-  int simL1flag =0;
 
   set_default_frame_parms(frame_parms);
   CONFIG_SETRTFLAG(CONFIG_NOEXITONHELP);
@@ -300,8 +302,6 @@ static void get_options(void) {
   config_process_cmdline( cmdline_ueparams,sizeof(cmdline_ueparams)/sizeof(paramdef_t),NULL);
   nfapi_setmode(nfapi_mode);
 
-  if (simL1flag)
-    set_softmodem_optmask(SOFTMODEM_SIML1_BIT);
 
   if (loopfile != NULL) {
     printf("Input file for hardware emulation: %s",loopfile);
@@ -574,11 +574,6 @@ int main( int argc, char **argv ) {
   EPC_MODE_ENABLED = !IS_SOFTMODEM_NOS1;
   printf("Running with %d UE instances\n",NB_UE_INST);
 
-  if (NB_UE_INST > 1 && (!IS_SOFTMODEM_SIML1)  && NFAPI_MODE!=NFAPI_UE_STUB_PNF) {
-    printf("Running with more than 1 UE instance and simL1 is not active, this will result in undefined behaviour for now, exiting.\n");
-    abort();
-  }
-
   // Checking option of nums_ue_thread.
   if(NB_THREAD_INST < 1) {
     printf("Running with 0 UE rxtx thread, exiting.\n");
@@ -649,9 +644,6 @@ int main( int argc, char **argv ) {
     }
   } else init_openair0(frame_parms[0],(int)rx_gain[0][0]);
 
-  if (IS_SOFTMODEM_SIML1 ) {
-    RCConfig_sim();
-  }
 
   cpuf=get_cpu_freq_GHz();
   
@@ -753,10 +745,6 @@ int main( int argc, char **argv ) {
 
   //p_exmimo_config->framing.tdd_config = TXRXSWITCH_TESTRX;
 
-  if (IS_SOFTMODEM_SIML1 )  {
-    init_ocm();
-    PHY_vars_UE_g[0][0]->no_timing_correction = 1;
-  }
 
   if(IS_SOFTMODEM_DOSCOPE)
     load_softscope("ue",NULL);
diff --git a/targets/RT/USER/ru_control.c b/targets/RT/USER/ru_control.c
index 7ac6a8913ef3be0d7eea86a16993aa0126a55617..95b5ce6155bec826e009b221ad2881359349e496 100644
--- a/targets/RT/USER/ru_control.c
+++ b/targets/RT/USER/ru_control.c
@@ -61,30 +61,17 @@
 #include "PHY/LTE_TRANSPORT/if4_tools.h"
 #include "PHY/LTE_TRANSPORT/if5_tools.h"
 
-#include "PHY/phy_extern.h"
-#include "LAYER2/MAC/mac_extern.h"
 #include "PHY/LTE_TRANSPORT/transport_proto.h"
 #include "SCHED/sched_eNB.h"
 #include "PHY/LTE_ESTIMATION/lte_estimation.h"
 #include "PHY/INIT/phy_init.h"
 
-#include "LAYER2/MAC/mac.h"
-#include "LAYER2/MAC/mac_extern.h"
-#include "LAYER2/MAC/mac_proto.h"
-#include "RRC/LTE/rrc_extern.h"
-#include "PHY_INTERFACE/phy_interface.h"
-
 #include "common/utils/LOG/log.h"
-#include "UTIL/OTG/otg_tx.h"
-#include "UTIL/OTG/otg_externs.h"
-#include "UTIL/MATH/oml.h"
-#include "UTIL/OPT/opt.h"
-#include "enb_config.h"
 
 
 int attach_rru(RU_t *ru);
-void configure_ru(int idx, void *arg);
-void configure_rru(int idx, void *arg);
+void configure_ru(RU_t *ru, void *arg);
+void configure_rru(RU_t *ru, void *arg);
 void fill_rf_config(RU_t *ru, char *rf_config_file);
 void* ru_thread_control( void* param );
 
@@ -164,7 +151,7 @@ int send_capab(RU_t *ru)
     cap->FH_fmt                                   = MBP_IF5;
     break;
   default:
-    AssertFatal(1==0,"RU_function is unknown %d\n",RC.ru[0]->function);
+    AssertFatal(1==0,"RU_function is unknown %d\n",ru->function);
     break;
   }
   cap->num_bands                                  = ru->num_bands;
@@ -224,7 +211,7 @@ int attach_rru(RU_t *ru)
       LOG_E(PHY,"Received incorrect message %d from RRU %d\n",rru_config_msg.type,ru->idx); 
     }
   }
-  configure_ru(ru->idx,
+  configure_ru(ru,
 	       (RRU_capabilities_t *)&rru_config_msg.msg[0]);
 		    
   rru_config_msg.type = RRU_config;
@@ -296,7 +283,7 @@ int connect_rau(RU_t *ru)
     cap->FH_fmt                                   = MBP_IF5;
     break;
   default:
-    AssertFatal(1==0,"RU_function is unknown %d\n",RC.ru[0]->function);
+    AssertFatal(1==0,"RU_function is unknown %d\n",ru->function);
     break;
   }
   cap->num_bands                                  = ru->num_bands;
@@ -335,7 +322,7 @@ int connect_rau(RU_t *ru)
 	    ((RRU_config_t *)&rru_config_msg.msg[0])->prach_FreqOffset[0],
 	    ((RRU_config_t *)&rru_config_msg.msg[0])->prach_ConfigIndex[0]);
       
-      configure_rru(ru->idx,
+      configure_rru(ru,
 		    (void*)&rru_config_msg.msg[0]);
       configuration_received = 1;
     }
@@ -388,21 +375,20 @@ int check_capabilities(RU_t *ru,
   return(-1);
 }
 
-void configure_ru(int idx,
+void configure_ru(RU_t *ru,
                   void *arg)
 {
-  RU_t               *ru           = RC.ru[idx];
   RRU_config_t       *config       = (RRU_config_t *)arg;
   RRU_capabilities_t *capabilities = (RRU_capabilities_t*)arg;
   int ret;
 
-  LOG_I(PHY, "Received capabilities from RRU %d\n",idx);
+  LOG_I(PHY, "Received capabilities from RRU %d\n",ru->idx);
 
 
   if (capabilities->FH_fmt < MAX_FH_FMTs) LOG_I(PHY, "RU FH options %s\n",rru_format_options[capabilities->FH_fmt]);
 
   AssertFatal((ret=check_capabilities(ru,capabilities)) == 0,
-	      "Cannot configure RRU %d, check_capabilities returned %d\n", idx,ret);
+	      "Cannot configure RRU %d, check_capabilities returned %d\n", ru->idx,ret);
   // take antenna capabilities of RRU
   ru->nb_tx                      = capabilities->nb_tx[0];
   ru->nb_rx                      = capabilities->nb_rx[0];
@@ -440,11 +426,10 @@ void configure_ru(int idx,
   phy_init_RU(ru);
 }
 
-void configure_rru(int idx,
+void configure_rru(RU_t *ru,
                    void *arg)
 {
   RRU_config_t *config = (RRU_config_t *)arg;
-  RU_t         *ru     = RC.ru[idx];
 
   ru->frame_parms->eutra_band                                               = config->band_list[0];
   ru->frame_parms->dl_CarrierFreq                                           = config->tx_freq[0];
@@ -486,7 +471,6 @@ void configure_rru(int idx,
 static int send_update_rru(RU_t * ru, LTE_DL_FRAME_PARMS * fp){
   //ssize_t      msg_len/*,len*/;
   int i;
-  //LTE_DL_FRAME_PARMS *fp = &RC.eNB[0][0]->frame_parms;
   RRU_CONFIG_msg_t rru_config_msg;
   memset((void *)&rru_config_msg,0,sizeof(rru_config_msg));
   rru_config_msg.type = RRU_config_update;
@@ -535,7 +519,7 @@ void* ru_thread_control( void* param )
 	send_tick(ru);
 
       if (ru->state == RU_RUN && ru->if_south != LOCAL_RF){
-	LTE_DL_FRAME_PARMS *fp = &RC.eNB[0][0]->frame_parms;	
+	LTE_DL_FRAME_PARMS *fp = &ru->eNB_list[0]->frame_parms;	
 	LOG_D(PHY,"Check MBSFN SF changes\n");
 	if(fp->num_MBSFN_config != ru_sf_update){
 		ru_sf_update = fp->num_MBSFN_config;
@@ -579,7 +563,7 @@ void* ru_thread_control( void* param )
 		      ((RRU_capabilities_t*)&rru_config_msg.msg[0])->nb_tx[0],
 		      ((RRU_capabilities_t*)&rru_config_msg.msg[0])->nb_rx[0]);
 
-		configure_ru(ru->idx,(RRU_capabilities_t *)&rru_config_msg.msg[0]);
+		configure_ru(ru,(RRU_capabilities_t *)&rru_config_msg.msg[0]);
 
 		// send config
 		if (send_config(ru,rru_config_msg) == 0) ru->state = RU_CONFIG;
@@ -603,7 +587,7 @@ void* ru_thread_control( void* param )
 		      ((RRU_config_t *)&rru_config_msg.msg[0])->prach_ConfigIndex[0]);
 	      
 		ru->frame_parms = calloc(1, sizeof(*ru->frame_parms));
-		configure_rru(ru->idx, (void*)&rru_config_msg.msg[0]);
+		configure_rru(ru, (void*)&rru_config_msg.msg[0]);
 
  					  
 		fill_rf_config(ru,ru->rf_config_file);
@@ -652,10 +636,10 @@ void* ru_thread_control( void* param )
 					
 
 		LOG_I(PHY, "Signaling main thread that RU %d (is_slave %d) is ready in state %s\n",ru->idx,ru->is_slave,ru_states[ru->state]);
-		pthread_mutex_lock(&RC.ru_mutex);
-		RC.ru_mask &= ~(1<<ru->idx);
-		pthread_cond_signal(&RC.ru_cond);
-		pthread_mutex_unlock(&RC.ru_mutex);
+		pthread_mutex_lock(ru->ru_mutex);
+		*ru->ru_mask &= ~(1<<ru->idx);
+		pthread_cond_signal(ru->ru_cond);
+		pthread_mutex_unlock(ru->ru_mutex);
 					  
 		wait_sync("ru_thread_control");
 
@@ -710,10 +694,10 @@ void* ru_thread_control( void* param )
 		if (ru->state == RU_READY){
 
 		  LOG_I(PHY, "Signaling main thread that RU %d is ready\n",ru->idx);
-		  pthread_mutex_lock(&RC.ru_mutex);
-		  RC.ru_mask &= ~(1<<ru->idx);
-		  pthread_cond_signal(&RC.ru_cond);
-		  pthread_mutex_unlock(&RC.ru_mutex);
+		  pthread_mutex_lock(ru->ru_mutex);
+		  *ru->ru_mask &= ~(1<<ru->idx);
+		  pthread_cond_signal(ru->ru_cond);
+		  pthread_mutex_unlock(ru->ru_mutex);
 						  
 		  wait_sync("ru_thread_control");
 						
@@ -736,7 +720,7 @@ void* ru_thread_control( void* param )
 	      break;
 
 	    case RRU_sync_ok: //RAU
-	      if (ru->if_south == LOCAL_RF) LOG_E(PHY,"Received RRU_config_ok msg...Ignoring\n");
+	      if (ru->if_south == LOCAL_RF) LOG_E(PHY,"Received RRU_sync_ok msg...Ignoring\n");
 	      else{
 		if (ru->is_slave == 1){
                   printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Received RRU_sync_ok from RRU %d\n",ru->idx);