diff --git a/ci-scripts/Jenkinsfile-GitLab-Container b/ci-scripts/Jenkinsfile-GitLab-Container
index 9ff0371ae550c09389e79989ce35077fcaf6b9c3..f5852bace54c2773d4fbe3eda0bb7be2f9cff3f0 100644
--- a/ci-scripts/Jenkinsfile-GitLab-Container
+++ b/ci-scripts/Jenkinsfile-GitLab-Container
@@ -198,17 +198,37 @@ pipeline {
             }
           }
         }
-        stage ("RF Simulators") {
+        stage ("4G RF Simulators") {
           when { expression {doMandatoryTests} }
           steps {
             script {
-              triggerSlaveJob ('RAN-RF-Sim-Test', 'Test-RF-Sim-Container')
+              triggerSlaveJob ('RAN-RF-Sim-Test-4G', 'Test-RF-Sim-Container-4G')
             }
           }
           post {
             always {
               script {
-                finalizeSlaveJob('RAN-RF-Sim-Test')
+                finalizeSlaveJob('RAN-RF-Sim-Test-4G')
+              }
+            }
+            failure {
+              script {
+                currentBuild.result = 'FAILURE'
+              }
+            }
+          }
+        }
+        stage ("5G RF Simulators") {
+          when { expression {doMandatoryTests} }
+          steps {
+            script {
+              triggerSlaveJob ('RAN-RF-Sim-Test-5G', 'Test-RF-Sim-Container-4G')
+            }
+          }
+          post {
+            always {
+              script {
+                finalizeSlaveJob('RAN-RF-Sim-Test-5G')
               }
             }
             failure {
diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab
index df816c12a750908e4979fca89fb9dd7bfe3ec632..3042ada815afe4ad4a60c7efb4a096ee432f3187 100644
--- a/ci-scripts/Jenkinsfile-gitlab
+++ b/ci-scripts/Jenkinsfile-gitlab
@@ -529,74 +529,6 @@ pipeline {
                         }
                     }
                 }
-                stage ("Test MONOLITHIC - FDD - Band 13 - B210") {
-                    when {
-                        expression {doFullTestsuite}
-                    }
-                    steps {
-                        script {
-                            sh "sleep 60"
-                            triggerSlaveJob ('eNB-CI-MONO-FDD-Band13-B210', 'Test-Mono-FDD-Band13-LTE-M')
-                        }
-                    }
-                    post {
-                        always {
-                            script {
-                                finalizeSlaveJob('eNB-CI-MONO-FDD-Band13-B210')
-                            }
-                        }
-                        failure {
-                            script {
-                                currentBuild.result = 'FAILURE'
-                            }
-                        }
-                    }
-                }
-                stage ("Test X2 Handover - FDD - Band 13 - B210") {
-                    when {
-                        expression {doFullTestsuite}
-                    }
-                    steps {
-                        script {
-                            sh "sleep 60"
-                            triggerSlaveJob ('eNB-CI-MONO-FDD-Band13-X2HO-B210', 'Test-Mono-FDD-Band13-X2-HO')
-                        }
-                    }
-                    post {
-                        always {
-                            script {
-                                finalizeSlaveJob('eNB-CI-MONO-FDD-Band13-X2HO-B210')
-                            }
-                        }
-                        failure {
-                            script {
-                                currentBuild.result = 'FAILURE'
-                            }
-                        }
-                    }
-                }
-                stage ("Test IF4p5 - TDD - Band 38 - B210 - MultiRRU") {
-                    when {
-                        expression {doFullTestsuite}
-                    }
-                    steps {
-                        script {
-                            triggerSlaveJob ('eNB-CI-IF4p5-TDD-Band38-MultiRRU-B210', 'Test-IF4p5-TDD-Band38-Multi-RRU')
-                        }
-                    }
-                    post {
-                        always {
-                            script {
-                                finalizeSlaveJob('eNB-CI-IF4p5-TDD-Band38-MultiRRU-B210')
-                            }
-                        }
-                        failure {
-                            script {
-                                currentBuild.result = 'FAILURE'
-                            }
-                        }
-                    }
-                }
                 stage ("Test OAI UE - FDD - Band 20 - B200") {
                     when {
                         expression {doFullTestsuite}
@@ -643,28 +575,6 @@ pipeline {
                         }
                     }
                 }
-                stage ("Test OAI OCP-eNB - FDD - Band 7 - B210") {
-                    when {
-                        expression {doFullTestsuite}
-                    }
-                    steps {
-                        script {
-                            triggerSlaveJob ('OCPeNB-FDD-Band7-B210', 'Test-OCP-FDD-Band7')
-                        }
-                    }
-                    post {
-                        always {
-                            script {
-                                finalizeSlaveJob('OCPeNB-FDD-Band7-B210')
-                            }
-                        }
-                        failure {
-                            script {
-                                currentBuild.result = 'FAILURE'
-                            }
-                        }
-                    }
-                }
             }
             post {
                 always {
diff --git a/ci-scripts/Jenkinsfile-tmp-multi-enb-nsa b/ci-scripts/Jenkinsfile-tmp-multi-enb-nsa
index a3939d832d698bfb6c4f3c708468720bb74c7604..6e987a5e38547155cd37ff4d52d27e40dc2f0a60 100644
--- a/ci-scripts/Jenkinsfile-tmp-multi-enb-nsa
+++ b/ci-scripts/Jenkinsfile-tmp-multi-enb-nsa
@@ -390,7 +390,7 @@ pipeline {
           steps {
             script {
               dir ('ci-scripts/ran_dashboard') {
-                sh "python3 Hdashboard.py testevent ${params.eNB_MR} ${JOB_NAME} ${env.BUILD_URL} ${env.BUILD_ID} ${StatusForDb} "   
+                sh "python3 Hdashboard.py testevent ${params.eNB_MR} "
               }
             }
           }
diff --git a/ci-scripts/Jenkinsfile-trig-nsa b/ci-scripts/Jenkinsfile-trig-nsa
index 7b4238d678b189c472a0b308a6cdb77064759788..772b34231aba9fdb97803ec7f016e4a3b388e5a9 100644
--- a/ci-scripts/Jenkinsfile-trig-nsa
+++ b/ci-scripts/Jenkinsfile-trig-nsa
@@ -27,6 +27,8 @@ def pythonExecutor = params.pythonExecutor
 
 def TARGET_BRANCH = "develop"
 def ALLOW_MERGE = true
+def GitPostArgs = ''
+def jobStatus
 
 pipeline {
     agent {
@@ -47,63 +49,89 @@ pipeline {
                         COMMIT_ID=sh returnStdout: true, script:  """curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests/${MR}" | jq ".sha" || true """
                         COMMIT_ID=COMMIT_ID.trim()
                         echo "Testing NSA on : ${MR} ${SRC_BRANCH} ${COMMIT_ID}"
-                        //calling NSA B200
-                        build job: "RAN-NSA-B200-Module-LTEBOX", wait : true, propagate : false, parameters: [
-                            string(name: 'eNB_MR', value: String.valueOf(MR)),                          
+                        commit = COMMIT_ID.replace("\"","")
+                        GitPostArgs = MR + ' ' + commit + ' '
+                        echo GitPostArgs
+
+                        //calling LTE 2x2
+                        jobName = "RAN-LTE-2x2-Module-OAIEPC"
+                        jobStatus =  build job: jobName, wait : true, propagate : false, parameters: [
+                            string(name: 'eNB_MR', value: String.valueOf(MR)),
                             string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
                             string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
                             string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
                             booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
                         ]
-                        //calling NSA 2x2
-                        build job: "RAN-NSA-2x2-Module-OAIEPC", wait : true, propagate : false, parameters: [
+                        jobResult = jobStatus.getResult()
+                        build_url = jobStatus.getAbsoluteUrl()
+                        build_id = jobStatus.getNumber().toString()
+                        GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
+                        echo GitPostArgs
+
+                        //calling NSA B200
+                        jobName = "RAN-NSA-B200-Module-LTEBOX"
+                        jobStatus =  build job: jobName, wait : true, propagate : false, parameters: [
                             string(name: 'eNB_MR', value: String.valueOf(MR)),
                             string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
                             string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
                             string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
                             booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
                         ]
-                        //calling LTE 2x2
-                        build job: "RAN-LTE-2x2-Module-OAIEPC", wait : true, propagate : false, parameters: [
+                        jobResult = jobStatus.getResult()
+                        build_url = jobStatus.getAbsoluteUrl()
+                        build_id = jobStatus.getNumber().toString()
+                        GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
+                        echo GitPostArgs
+
+                        //calling NSA 2x2
+                        jobName = "RAN-NSA-2x2-Module-OAIEPC"
+                        jobStatus =  build job: jobName, wait : true, propagate : false, parameters: [
                             string(name: 'eNB_MR', value: String.valueOf(MR)),
                             string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
                             string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
                             string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
                             booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
                         ]
+                        jobResult = jobStatus.getResult()
+                        build_url = jobStatus.getAbsoluteUrl()
+                        build_id = jobStatus.getNumber().toString()
+                        GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
+                        echo GitPostArgs
+
                         //calling SA 
-                        build job: "RAN-SA-Module-CN5G", wait : true, propagate : false, parameters: [
+                        jobName = "RAN-SA-Module-CN5G"
+                        jobStatus =  build job: jobName, wait : true, propagate : false, parameters: [
                             string(name: 'eNB_MR', value: String.valueOf(MR)),
                             string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
                             string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
                             string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
                             booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
                         ]
-                        //calling OAIUE B200
-                        //build job: "RAN-SA-OAIUE-B200-CN5G", wait : true, propagate : false, parameters: [
-                        //    string(name: 'eNB_MR', value: String.valueOf(MR)),
-                        //    string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
-                        //    string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
-                        //    string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
-                        //    booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
-                        //]
-                        //calling OAIUE N310
-                        //build job: "RAN-SA-OAIUE-N310-CN5G", wait : true, propagate : false, parameters: [
-                        //    string(name: 'eNB_MR', value: String.valueOf(MR)),
-                        //    string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
-                        //    string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
-                        //    string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
-                        //    booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
-                        //]
+                        jobResult = jobStatus.getResult()
+                        build_url = jobStatus.getAbsoluteUrl()
+                        build_id = jobStatus.getNumber().toString()
+                        GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
+                        echo GitPostArgs
+
                         //calling OAIUE N310-X300
-                        build job: "RAN-SA-OAIUE-N310-X300-CN5G", wait : true, propagate : false, parameters: [
+                        jobName = "RAN-SA-OAIUE-N310-X300-CN5G"
+                        jobStatus =  build job: jobName, wait : true, propagate : false, parameters: [
                             string(name: 'eNB_MR', value: String.valueOf(MR)),
                             string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
                             string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
                             string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
                             booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
                         ]
+                        jobResult = jobStatus.getResult()
+                        build_url = jobStatus.getAbsoluteUrl()
+                        build_id = jobStatus.getNumber().toString()
+                        GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
+                        echo GitPostArgs
 
+                        //git report the test results in 1 block, at the end of the test sequence of one MR
+                        dir ('ci-scripts/ran_dashboard') {
+                            sh "python3 Hdashboard.py gitpost ${GitPostArgs}"
+                        }                        
                     }
                 }                                  
             }   
diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py
index db51f2647c9da88c281d35fa0c45864a1d9aaccb..e60651393513bab12e18fafe7b9174f89dbecd29 100644
--- a/ci-scripts/cls_containerize.py
+++ b/ci-scripts/cls_containerize.py
@@ -221,7 +221,7 @@ class Containerize():
 		if (self.ranAllowMerge):
 			imageTag = 'ci-temp'
 			if self.ranTargetBranch == 'develop':
-				mySSH.command('git diff HEAD..origin/develop -- docker/Dockerfile.base' + self.dockerfileprefix + ' | grep --colour=never -i INDEX', '\$', 5)
+				mySSH.command('git diff HEAD..origin/develop -- cmake_targets/build_oai cmake_targets/tools/build_helper docker/Dockerfile.base' + self.dockerfileprefix + ' | grep --colour=never -i INDEX', '\$', 5)
 				result = re.search('index', mySSH.getBefore())
 				if result is not None:
 					forceBaseImageBuild = True
@@ -341,7 +341,7 @@ class Containerize():
 		# Remove all intermediate build images
 		if self.ranAllowMerge and forceBaseImageBuild:
 			mySSH.command(self.cli + ' image rm ' + baseImage + ':' + baseTag + ' || true', '\$', 30)
-		mySSH.command(self.cli + ' image rm ran-build:' + imageTag + ' || true','\$', 5)
+		mySSH.command(self.cli + ' image rm ran-build:' + imageTag + ' || true','\$', 30)
 		# Cleaning any created tmp volume
 		mySSH.command(self.cli + ' volume prune --force || true','\$', 15)
 		mySSH.close()
@@ -506,6 +506,7 @@ class Containerize():
 #			mySSH.command('sed -i -e "s/FLEXRAN_ENABLED:.*$/FLEXRAN_ENABLED: \'no\'/" ci-docker-compose.yml', '\$', 2)
 #			mySSH.command('sed -i -e "s/CI_FLEXRAN_CTL_IP_ADDR/127.0.0.1/" ci-docker-compose.yml', '\$', 2)
 		# Currently support only one
+		mySSH.command('echo ' + lPassWord + ' | sudo -S b2xx_fx3_utils --reset-device', '\$', 15)
 		mySSH.command('docker-compose --file ci-docker-compose.yml config --services | sed -e "s@^@service=@" 2>&1', '\$', 10)
 		result = re.search('service=(?P<svc_name>[a-zA-Z0-9\_]+)', mySSH.getBefore())
 		if result is not None:
@@ -586,11 +587,20 @@ class Containerize():
 		mySSH.command('cd ' + lSourcePath + '/' + self.yamlPath[self.eNB_instance], '\$', 5)
 		# Currently support only one
 		mySSH.command('docker-compose --file ci-docker-compose.yml config', '\$', 5)
+		containerName = ''
+		containerToKill = False
 		result = re.search('container_name: (?P<container_name>[a-zA-Z0-9\-\_]+)', mySSH.getBefore())
 		if self.eNB_logFile[self.eNB_instance] == '':
 			self.eNB_logFile[self.eNB_instance] = 'enb_' + HTML.testCase_id + '.log'
 		if result is not None:
 			containerName = result.group('container_name')
+			containerToKill = True
+		if containerToKill:
+			mySSH.command('docker inspect ' + containerName, '\$', 30)
+			result = re.search('Error: No such object: ' + containerName, mySSH.getBefore())
+			if result is not None:
+				containerToKill = False
+		if containerToKill:
 			mySSH.command('docker kill --signal INT ' + containerName, '\$', 30)
 			time.sleep(5)
 			mySSH.command('docker logs ' + containerName + ' > ' + lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '\$', 30)
@@ -603,20 +613,26 @@ class Containerize():
 		mySSH.close()
 
 		# Analyzing log file!
-		copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '.')
+		if containerToKill:
+			copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '.')
+		else:
+			copyin_res = 0
 		nodeB_prefix = 'e'
 		if (copyin_res == -1):
 			HTML.htmleNBFailureMsg='Could not copy ' + nodeB_prefix + 'NB logfile to analyze it!'
 			HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
 		else:
-			logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + self.eNB_logFile[self.eNB_instance])
-			logStatus = RAN.AnalyzeLogFile_eNB(self.eNB_logFile[self.eNB_instance], HTML)
+			if containerToKill:
+				logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + self.eNB_logFile[self.eNB_instance])
+				logStatus = RAN.AnalyzeLogFile_eNB(self.eNB_logFile[self.eNB_instance], HTML)
+			else:
+				logStatus = 0
 			if (logStatus < 0):
 				HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
 			else:
 				HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
 			# all the xNB run logs shall be on the server 0 for logCollecting
-			if self.eNB_serverId[self.eNB_instance] != '0':
+			if containerToKill and self.eNB_serverId[self.eNB_instance] != '0':
 				mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './' + self.eNB_logFile[self.eNB_instance], self.eNBSourceCodePath + '/cmake_targets/')
 		logging.info('\u001B[1m Undeploying OAI Object Pass\u001B[0m')
 
@@ -689,7 +705,7 @@ class Containerize():
 	def CaptureOnDockerNetworks(self):
 		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml config | grep com.docker.network.bridge.name | sed -e "s@^.*name: @@"'
 		networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
-		cmd = 'sudo nohup tshark -f "not tcp and not arp and not port 53 and not host archive.ubuntu.com and not host security.ubuntu.com"'
+		cmd = 'sudo nohup tshark -f "not tcp and not arp and not port 53 and not host archive.ubuntu.com and not host security.ubuntu.com and not port 2152"'
 		for name in networkNames.split('\n'):
 			res = re.search('rfsim', name)
 			if res is not None:
@@ -700,7 +716,7 @@ class Containerize():
 		logging.debug(cmd)
 		networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
 
-	def UndeployGenObject(self, HTML):
+	def UndeployGenObject(self, HTML, RAN, UE):
 		self.exitStatus = 0
 		ymlPath = self.yamlPath[0].split('/')
 		logPath = '../cmake_targets/log/' + ymlPath[1]
@@ -730,8 +746,56 @@ class Containerize():
 				cmd = 'cd ' + self.yamlPath[0] + ' && docker logs ' + cName + ' > ' + cName + '.log 2>&1'
 				logging.debug(cmd)
 				deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
+		fullStatus = True
 		if anyLogs:
-			cmd = 'mkdir -p '+ logPath + ' && mv ' + self.yamlPath[0] + '/*.log ' + logPath
+			cmd = 'mkdir -p '+ logPath + ' && cp ' + self.yamlPath[0] + '/*.log ' + logPath
+			logging.debug(cmd)
+			deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+
+			# Analyzing log file(s)!
+			listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du']
+			for container in listOfPossibleRanContainers:
+				filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log'
+				cmd = 'ls ' + filename
+				containerStatus = True
+				try:
+					lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+					filename = str(lsStatus).strip()
+				except:
+					containerStatus = False
+				if not containerStatus:
+					continue
+
+				logging.debug('\u001B[1m Analyzing xNB logfile ' + filename + ' \u001B[0m')
+				logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML)
+				if (logStatus < 0):
+					fullStatus = False
+					HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
+				else:
+					HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
+
+			listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*']
+			for container in listOfPossibleUeContainers:
+				filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log'
+				cmd = 'ls ' + filename
+				containerStatus = True
+				try:
+					lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+					filename = str(lsStatus).strip()
+				except:
+					containerStatus = False
+				if not containerStatus:
+					continue
+
+				logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m')
+				logStatus = UE.AnalyzeLogFile_UE(filename, HTML, RAN)
+				if (logStatus < 0):
+					fullStatus = False
+					HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus)
+				else:
+					HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
+
+			cmd = 'rm ' + self.yamlPath[0] + '/*.log'
 			logging.debug(cmd)
 			deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
 			if self.tsharkStarted:
@@ -746,7 +810,9 @@ class Containerize():
 				cmd = 'sudo rm /tmp/capture_' + ymlPath[1] + '.pcap'
 				logging.debug(cmd)
 				copyStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
+				self.tsharkStarted = False
 
+		logging.debug('\u001B[1m Undeploying \u001B[0m')
 		cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml down'
 		logging.debug(cmd)
 		try:
@@ -763,10 +829,14 @@ class Containerize():
 		logging.debug(cmd)
 		deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
 
-		HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK)
-		logging.info('\u001B[1m Undeploying OAI Object(s) PASS\u001B[0m')
+		if fullStatus:
+			HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK)
+			logging.info('\u001B[1m Undeploying OAI Object(s) PASS\u001B[0m')
+		else:
+			HTML.CreateHtmlTestRow('n/a', 'KO', CONST.ALL_PROCESSES_OK)
+			logging.info('\u001B[1m Undeploying OAI Object(s) FAIL\u001B[0m')
 
-	def PingFromContainer(self, HTML):
+	def PingFromContainer(self, HTML, RAN, UE):
 		self.exitStatus = 0
 		ymlPath = self.yamlPath[0].split('/')
 		logPath = '../cmake_targets/log/' + ymlPath[1]
@@ -780,17 +850,17 @@ class Containerize():
 
 		result = re.search(', (?P<packetloss>[0-9\.]+)% packet loss, time [0-9\.]+ms', deployStatus)
 		if result is None:
-			self.PingExit(HTML, False, 'Packet Loss Not Found')
+			self.PingExit(HTML, RAN, UE, False, 'Packet Loss Not Found')
 			return
 
 		packetloss = result.group('packetloss')
 		if float(packetloss) == 100:
-			self.PingExit(HTML, False, 'Packet Loss is 100%')
+			self.PingExit(HTML, RAN, UE, False, 'Packet Loss is 100%')
 			return
 
 		result = re.search('rtt min\/avg\/max\/mdev = (?P<rtt_min>[0-9\.]+)\/(?P<rtt_avg>[0-9\.]+)\/(?P<rtt_max>[0-9\.]+)\/[0-9\.]+ ms', deployStatus)
 		if result is None:
-			self.PingExit(HTML, False, 'Ping RTT_Min RTT_Avg RTT_Max Not Found!')
+			self.PingExit(HTML, RAN, UE, False, 'Ping RTT_Min RTT_Avg RTT_Max Not Found!')
 			return
 
 		rtt_min = result.group('rtt_min')
@@ -812,7 +882,7 @@ class Containerize():
 			packetLossOK = False
 		elif float(packetloss) > 0:
 			message += '\nPacket Loss is not 0%'
-		self.PingExit(HTML, packetLossOK, message)
+		self.PingExit(HTML, RAN, UE, packetLossOK, message)
 
 		if packetLossOK:
 			logging.debug('\u001B[1;37;44m ping result \u001B[0m')
@@ -822,7 +892,7 @@ class Containerize():
 			logging.debug('\u001B[1;34m    ' + max_msg + '\u001B[0m')
 			logging.info('\u001B[1m Ping Test PASS\u001B[0m')
 
-	def PingExit(self, HTML, status, message):
+	def PingExit(self, HTML, RAN, UE, status, message):
 		html_queue = SimpleQueue()
 		html_cell = '<pre style="background-color:white">UE\n' + message + '</pre>'
 		html_queue.put(html_cell)
@@ -837,10 +907,10 @@ class Containerize():
 			logging.debug('----------------------------------------')
 			HTML.testCase_id = 'AUTO-UNDEPLOY'
 			HTML.desc = 'Automatic Un-Deployment'
-			self.UndeployGenObject(HTML)
+			self.UndeployGenObject(HTML, RAN, UE)
 			self.exitStatus = 1
 
-	def IperfFromContainer(self, HTML):
+	def IperfFromContainer(self, HTML, RAN):
 		self.exitStatus = 0
 
 		ymlPath = self.yamlPath[0].split('/')
diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py
index 9d2c75363d0e33d629024425e0f6201552126a1c..05bac18900cc67d6b528f02f916052b36cec7480 100644
--- a/ci-scripts/cls_oaicitest.py
+++ b/ci-scripts/cls_oaicitest.py
@@ -2045,6 +2045,35 @@ class OaiCiTest():
 		else:
 			return -2
 
+
+	def Iperf_analyzeV2BIDIR(self, lock, UE_IPAddress, device_id, statusQueue,server_filename,client_filename):
+		#server file is unused for the moment
+		if (not os.path.isfile(client_filename)):
+			self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Bidir TCP : Could not analyze from client log')
+			return
+		report=[]
+		report_msg='Client Report:\n'
+		with open(client_filename, 'r') as f_client:
+			for line in f_client.readlines():
+				result = re.search(rf'^\[\s+\d+\](?P<direction>\[.+\]).*\s+(?P<bitrate>[0-9\.]+ [KMG]bits\/sec).*\s+(?P<role>\bsender|receiver\b)', str(line))
+				if result is not None:
+					report.append(str(line))
+					report_msg+=result.group('role') + ' ' + result.group('direction')+ '\t = ' +result.group('bitrate')+'\n'
+
+		if len(report)>0:
+			lock.acquire()
+			statusQueue.put(0)
+			statusQueue.put(device_id)
+			statusQueue.put(UE_IPAddress)
+			statusQueue.put(report_msg)
+			logging.debug('\u001B[1;37;45m TCP Bidir Iperf Result (' + UE_IPAddress + ') \u001B[0m')
+			logging.debug('\u001B[1;35m    ' + report_msg + '\u001B[0m')
+			lock.release()
+		else:
+			self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Bidir TCP : Could not analyze from client log')
+
+
+
 	def Iperf_analyzeV2Server(self, lock, UE_IPAddress, device_id, statusQueue, iperf_real_options, filename,type):
 		if (not os.path.isfile(filename)):
 			self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Could not analyze from server log')
@@ -2342,14 +2371,19 @@ class OaiCiTest():
 			result = re.search('TRF_IP_ADDR = (?P<trf_ip_addr>[0-9\.]+)', SSH.getBefore())
 			if result is not None:
 				trf_gen_IP = result.group('trf_ip_addr')
+			#kill iperf processes on EPC side
+			SSH.command('docker exec -it prod-trf-gen /bin/bash -c "killall --signal SIGKILL iperf"', '\$', 5)
+			SSH.command('docker exec -it prod-trf-gen /bin/bash -c "killall --signal SIGKILL iperf3"', '\$', 5)
 			SSH.close()
 			#kill iperf processes on UE side before (in case there are still some remaining)
 			SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
 			cmd = 'killall --signal=SIGKILL iperf'
 			SSH.command(cmd,'\$',5)
+			cmd = 'killall --signal=SIGKILL iperf3'
+			SSH.command(cmd,'\$',5)
 			SSH.close()
 
-			iperf_time = self.Iperf_ComputeTime()	
+			iperf_time = self.Iperf_ComputeTime()
 			if self.iperf_direction=="DL":
 				logging.debug("Iperf for Module in DL mode detected")
 				#server side UE
@@ -2363,7 +2397,7 @@ class OaiCiTest():
 				#client side EPC
 				SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
 				client_filename = 'iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
-				SSH.command('docker exec -it prod-trf-gen /bin/bash -c "killall --signal SIGKILL iperf"', '\$', 5)
+
 				iperf_cmd = 'bin/iperf -c ' + UE_IPAddress + ' ' + self.iperf_args + ' 2>&1 > ' + client_filename
 				cmd = 'docker exec -it prod-trf-gen /bin/bash -c \"' + iperf_cmd + '\"' 
 				SSH.command(cmd,'\$',int(iperf_time)*5.0)
@@ -2382,7 +2416,7 @@ class OaiCiTest():
 				#server side EPC
 				SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
 				server_filename = 'iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
-				SSH.command('docker exec -it prod-trf-gen /bin/bash -c "killall --signal SIGKILL iperf"', '\$', 5)
+
 				iperf_cmd = 'echo $USER; nohup bin/iperf -s -u 2>&1 > ' + server_filename
 				cmd = 'docker exec -d prod-trf-gen /bin/bash -c \"' + iperf_cmd + '\"' 
 				SSH.command(cmd,'\$',5)
@@ -2407,6 +2441,38 @@ class OaiCiTest():
 				SSH.copyin(EPC.IPAddress, EPC.UserName, EPC.Password, server_filename, '.')
 				#send for analysis
 				self.Iperf_analyzeV2Server(lock, UE_IPAddress, device_id, statusQueue, self.iperf_args,server_filename,1)
+
+			elif self.iperf_direction=="BIDIR":
+				logging.debug("Iperf for Module in BIDIR mode detected")
+				#server side EPC
+				SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
+				server_filename = 'iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
+
+				iperf_cmd = 'echo $USER; nohup /usr/local/bin/iperf3 -s 2>&1 > ' + server_filename
+				cmd = 'docker exec -d prod-trf-gen /bin/bash -c \"' + iperf_cmd + '\"' 
+				SSH.command(cmd,'\$',5)
+				SSH.close()
+
+				#client side UE
+				SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
+				client_filename = 'iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
+				cmd = 'rm '+ client_filename
+				SSH.command(cmd,'\$',5)
+				SSH.command('iperf3 -B ' + UE_IPAddress + ' -c ' +  trf_gen_IP + ' '  + self.iperf_args + ' 2>&1 > ' + client_filename, '\$', int(iperf_time)*5.0)
+				SSH.close()
+
+				#once client is done, retrieve the server file from container to EPC Host
+				SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
+				SSH.command('docker cp prod-trf-gen:/iperf-2.0.13/' + server_filename + ' ' + EPC.SourceCodePath, '\$', 5)
+				SSH.copyin(EPC.IPAddress, EPC.UserName, EPC.Password, EPC.SourceCodePath + '/' + server_filename, '.')
+				SSH.close()
+
+				#copy the 2 resulting files locally 
+				SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, client_filename, '.')
+				SSH.copyin(EPC.IPAddress, EPC.UserName, EPC.Password, server_filename, '.')
+				#send for analysis
+				self.Iperf_analyzeV2BIDIR(lock, UE_IPAddress, device_id, statusQueue, server_filename, client_filename)
+
 			else :
 				logging.debug("Incorrect or missing IPERF direction in XML")
 
@@ -2472,6 +2538,30 @@ class OaiCiTest():
 				#send for analysis
 				filename='iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
 				self.Iperf_analyzeV2Server(lock, UE_IPAddress, device_id, statusQueue, self.iperf_args,filename,1)
+			elif self.iperf_direction=="BIDIR":
+				logging.debug("Iperf for Module in BIDIR mode detected")
+				#server side EPC
+				SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
+				server_filename = 'iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
+				cmd = 'rm ' + server_filename
+				SSH.command(cmd,'\$',5)
+				cmd = 'echo $USER; nohup iperf3 -s 2>&1 > '+server_filename+' &'
+				SSH.command(cmd,'\$',5)
+				SSH.close()
+
+				#client side UE
+				SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
+				client_filename = 'iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
+				cmd = 'rm ' + client_filename
+				SSH.command(cmd,'\$',5)
+				SSH.command('iperf3 -c 192.172.0.1 ' + self.iperf_args + ' 2>&1 > '+client_filename, '\$', int(iperf_time)*5.0)
+				SSH.close()
+
+				#copy the 2 resulting files locally
+				SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, client_filename, '.')
+				SSH.copyin(EPC.IPAddress, EPC.UserName, EPC.Password, server_filename, '.')
+				#send for analysis
+				self.Iperf_analyzeV2BIDIR(lock, UE_IPAddress, device_id, statusQueue, server_filename, client_filename)
 			else :
 				logging.debug("Incorrect or missing IPERF direction in XML")
 
diff --git a/ci-scripts/cls_physim.py b/ci-scripts/cls_physim.py
index e825b2f7bd694b3abdeb3d7c7c69024ebf65ada5..33792f6ca4cb2c57f6179c1460ef43f3d2b0d183 100644
--- a/ci-scripts/cls_physim.py
+++ b/ci-scripts/cls_physim.py
@@ -183,7 +183,7 @@ class PhySim:
 		mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
 		mySSH.command('cd '+self.__workSpacePath,'\$',5)
 		#run and redirect the results to a log file
-		mySSH.command(self.__workSpacePath+'phy_simulators/build/ldpctest ' + self.runargs + ' >> '+self.__runLogFile, '\$', 30)
+		mySSH.command(self.__workSpacePath+'ran_build/build/ldpctest ' + self.runargs + ' >> '+self.__runLogFile, '\$', 30)
 		mySSH.close()
 		#return updated HTML to main
 		lHTML = html.HTMLManagement()
diff --git a/ci-scripts/cls_static_code_analysis.py b/ci-scripts/cls_static_code_analysis.py
index 1680f3e560340c8cbe9a7946e77f04269b3ef9ff..c899a9aabd678d8a0e107197a2e6f49e070ceb34 100644
--- a/ci-scripts/cls_static_code_analysis.py
+++ b/ci-scripts/cls_static_code_analysis.py
@@ -121,7 +121,7 @@ class StaticCodeAnalysis():
 		mySSH.command('docker build --tag oai-cppcheck:xenial --file ci-scripts/docker/Dockerfile.cppcheck.xenial . > cmake_targets/log/cppcheck-xenial.txt 2>&1', '\$', 600)
 		mySSH.command('sed -e "s@xenial@bionic@" ci-scripts/docker/Dockerfile.cppcheck.xenial > ci-scripts/docker/Dockerfile.cppcheck.bionic', '\$', 6)
 		mySSH.command('docker build --tag oai-cppcheck:bionic --file ci-scripts/docker/Dockerfile.cppcheck.bionic . > cmake_targets/log/cppcheck-bionic.txt 2>&1', '\$', 600)
-		mySSH.command('docker image rm oai-cppcheck:bionic oai-cppcheck:xenial || true', '\$', 60)
+		mySSH.command('docker image rm oai-cppcheck:bionic oai-cppcheck:xenial || true', '\$', 30)
 
 		# Analyzing the logs
 		mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
diff --git a/ci-scripts/conf_files/benetel-5g.conf b/ci-scripts/conf_files/benetel-5g.conf
index 79b2f7f87773ff610984ed451ea61cbcdb5214d2..dc86567c1fe70b6ecc18965dc466cd5c1b0ef986 100644
--- a/ci-scripts/conf_files/benetel-5g.conf
+++ b/ci-scripts/conf_files/benetel-5g.conf
@@ -215,11 +215,11 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-	pusch_proc_threads = 8;
-        }  
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+}
 );
 
 RUs = (
diff --git a/ci-scripts/conf_files/enb.band38.lte_2x2_tm2.100PRB.usrpn310.conf b/ci-scripts/conf_files/enb.band38.lte_2x2_tm2.100PRB.usrpn310.conf
new file mode 100644
index 0000000000000000000000000000000000000000..f116c3708d4dd07544b6effbf8f1f6ca941dbc57
--- /dev/null
+++ b/ci-scripts/conf_files/enb.band38.lte_2x2_tm2.100PRB.usrpn310.conf
@@ -0,0 +1,281 @@
+Active_eNBs = ( "eNB-Eurecom-B38");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe02;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB-Eurecom-B38";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code = 1;
+    plmn_list = ( { mcc = 208; mnc = 97; mnc_length = 2; } );
+
+    tr_s_preference     = "local_mac"
+
+    ////////// Physical parameters:
+
+    component_carriers = (
+      {
+      node_function             = "3GPP_eNODEB";
+      node_timing               = "synch_to_ext_device";
+      node_synch_ref            = 0;
+      frame_type					      = "TDD";
+      tdd_config 					      = 1;
+      tdd_config_s            			      = 0;
+      prefix_type             			      = "NORMAL";
+      eutra_band              			      = 38;
+      downlink_frequency      			      = 2605000000L;
+      nr_scg_ssb_freq                                 = 624608;
+      uplink_frequency_offset 			      = 0;
+      Nid_cell					      = 0;
+      N_RB_DL                 			      = 100;
+      Nid_cell_mbsfn          			      = 0;
+      nb_antenna_ports                                = 2;
+      nb_antennas_tx          			      = 2;
+      nb_antennas_rx          			      = 2;
+      tx_gain                                            = 90;
+      rx_gain                                            = 125;
+      pbch_repetition                                 = "FALSE";
+      prach_root              			      = 0;
+      prach_config_index      			      = 0;
+      prach_high_speed        			      = "DISABLE";
+      prach_zero_correlation  			      = 1;
+      prach_freq_offset       			      = 2;
+      pucch_delta_shift       			      = 1;
+      pucch_nRB_CQI           			      = 0;
+      pucch_nCS_AN            			      = 0;
+      pucch_n1_AN             			      = 0;
+      pdsch_referenceSignalPower 			      = -29;
+      pdsch_p_b                  			      = 0;
+      pusch_n_SB                 			      = 1;
+      pusch_enable64QAM          			      = "DISABLE";
+      pusch_hoppingMode                                  = "interSubFrame";
+      pusch_hoppingOffset                                = 0;
+      pusch_groupHoppingEnabled  			      = "ENABLE";
+      pusch_groupAssignment      			      = 0;
+      pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+      pusch_nDMRS1                                       = 1;
+      phich_duration                                     = "NORMAL";
+      phich_resource                                     = "ONESIXTH";
+      srs_enable                                         = "DISABLE";
+      /*  srs_BandwidthConfig                                =;
+      srs_SubframeConfig                                 =;
+      srs_ackNackST                                      =;
+      srs_MaxUpPts                                       =;*/
+
+      pusch_p0_Nominal                                   = -96;
+      pusch_alpha                                        = "AL1";
+      pucch_p0_Nominal                                   = -104;
+      msg3_delta_Preamble                                = 6;
+      pucch_deltaF_Format1                               = "deltaF2";
+      pucch_deltaF_Format1b                              = "deltaF3";
+      pucch_deltaF_Format2                               = "deltaF0";
+      pucch_deltaF_Format2a                              = "deltaF0";
+      pucch_deltaF_Format2b		    	      = "deltaF0";
+
+      rach_numberOfRA_Preambles                          = 64;
+      rach_preamblesGroupAConfig                         = "DISABLE";
+      /*
+      rach_sizeOfRA_PreamblesGroupA                      = ;
+      rach_messageSizeGroupA                             = ;
+      rach_messagePowerOffsetGroupB                      = ;
+      */
+      rach_powerRampingStep                              = 4;
+      rach_preambleInitialReceivedTargetPower            = -108;
+      rach_preambleTransMax                              = 10;
+      rach_raResponseWindowSize                          = 10;
+      rach_macContentionResolutionTimer                  = 48;
+      rach_maxHARQ_Msg3Tx                                = 4;
+
+      pcch_default_PagingCycle                           = 128;
+      pcch_nB                                            = "oneT";
+      bcch_modificationPeriodCoeff			      = 2;
+      ue_TimersAndConstants_t300			      = 1000;
+      ue_TimersAndConstants_t301			      = 1000;
+      ue_TimersAndConstants_t310			      = 1000;
+      ue_TimersAndConstants_t311			      = 10000;
+      ue_TimersAndConstants_n310			      = 20;
+      ue_TimersAndConstants_n311			      = 1;
+      ue_TransmissionMode                                    = 2;
+
+      //Parameters for SIB18
+      rxPool_sc_CP_Len                                       = "normal";
+      rxPool_sc_Period                                       = "sf40";
+      rxPool_data_CP_Len                                     = "normal";
+      rxPool_ResourceConfig_prb_Num                          = 20;
+      rxPool_ResourceConfig_prb_Start                        = 5;
+      rxPool_ResourceConfig_prb_End                          = 44;
+      rxPool_ResourceConfig_offsetIndicator_present          = "prSmall";
+      rxPool_ResourceConfig_offsetIndicator_choice           = 0;
+      rxPool_ResourceConfig_subframeBitmap_present           = "prBs40";
+      rxPool_ResourceConfig_subframeBitmap_choice_bs_buf              = "00000000000000000000";
+      rxPool_ResourceConfig_subframeBitmap_choice_bs_size             = 5;
+      rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused      = 0;
+/*    rxPool_dataHoppingConfig_hoppingParameter                       = 0;
+      rxPool_dataHoppingConfig_numSubbands                            = "ns1";
+      rxPool_dataHoppingConfig_rbOffset                               = 0;
+      rxPool_commTxResourceUC-ReqAllowed                              = "TRUE";
+*/
+      // Parameters for SIB19
+      discRxPool_cp_Len                                               = "normal"
+      discRxPool_discPeriod                                           = "rf32"
+      discRxPool_numRetx                                              = 1;
+      discRxPool_numRepetition                                        = 2;
+      discRxPool_ResourceConfig_prb_Num                               = 5;
+      discRxPool_ResourceConfig_prb_Start                             = 3;
+      discRxPool_ResourceConfig_prb_End                               = 21;
+      discRxPool_ResourceConfig_offsetIndicator_present               = "prSmall";
+      discRxPool_ResourceConfig_offsetIndicator_choice                = 0;
+      discRxPool_ResourceConfig_subframeBitmap_present                = "prBs40";
+      discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf          = "f0ffffffff";
+      discRxPool_ResourceConfig_subframeBitmap_choice_bs_size         = 5;
+      discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused  = 0;
+
+      }
+    );
+
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+
+    ////////// MME parameters:
+    mme_ip_address      = ( { ipv4       = "CI_MME_IP_ADDR";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    enable_measurement_reports = "no";
+
+    ///X2
+    enable_x2 = "yes";
+    t_reloc_prep      = 1000;      /* unit: millisecond */
+    tx2_reloc_overall = 2000;      /* unit: millisecond */
+    t_dc_prep         = 1000;      /* unit: millisecond */
+    t_dc_overall      = 2000;      /* unit: millisecond */
+
+    NETWORK_INTERFACES :
+    {
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eno1";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "CI_ENB_IP_ADDR";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eno1";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "CI_ENB_IP_ADDR";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+        ENB_IPV4_ADDRESS_FOR_X2C                 = "CI_ENB_IP_ADDR";
+        ENB_PORT_FOR_X2C                         = 36422; # Spec 36422
+    };
+  }
+);
+
+MACRLCs = (
+	{
+	num_cc = 1;
+	tr_s_preference = "local_L1";
+	tr_n_preference = "local_RRC";
+	phy_test_mode = 0;
+        scheduler_mode = "fairRR";
+        bler_target_upper = 20.0;
+        bler_target_lower = 10.0;
+        max_ul_rb_index   = 27;
+        puSch10xSnr     =  200;
+        puCch10xSnr     =  150;
+        }  
+);
+
+L1s = (
+    	{
+	num_cc = 1;
+	tr_n_preference = "local_mac";
+        prach_dtx_threshold = 200;
+        pucch1_dtx_threshold = 5
+        pucch1ab_dtx_threshold =0;
+        }  
+);
+
+RUs = (
+    {		  
+       local_rf       = "yes"
+         nb_tx          = 2
+         nb_rx          = 2
+         att_tx         = 0
+         att_rx         = 0;
+         bands          = [38];
+         max_pdschReferenceSignalPower = -27;
+         max_rxgain                    = 75;
+         eNB_instances  = [0];
+         sdr_addrs      = "mgmt_addr=192.168.18.241,addr=192.168.20.2,second_addr=192.168.10.2";
+
+    }
+);  
+
+THREAD_STRUCT = (
+  {
+    #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
+    parallel_config    = "PARALLEL_SINGLE_THREAD";
+    #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
+    worker_config      = "WORKER_ENABLE";
+  }
+);
+
+NETWORK_CONTROLLER :
+{
+    FLEXRAN_ENABLED        = "no";
+    FLEXRAN_INTERFACE_NAME = "lo";
+    FLEXRAN_IPV4_ADDRESS   = "127.0.0.1";
+    FLEXRAN_PORT           = 2210;
+    FLEXRAN_CACHE          = "/mnt/oai_agent_cache";
+    FLEXRAN_AWAIT_RECONF   = "no";
+};
+
+     log_config :
+     {
+       global_log_level                      ="info";
+       global_log_verbosity                  ="medium";
+       hw_log_level                          ="info";
+       hw_log_verbosity                      ="medium";
+       phy_log_level                         ="info";
+       phy_log_verbosity                     ="medium";
+       mac_log_level                         ="info";
+       mac_log_verbosity                     ="high";
+       rlc_log_level                         ="info";
+       rlc_log_verbosity                     ="medium";
+       pdcp_log_level                        ="info";
+       pdcp_log_verbosity                    ="medium";
+       rrc_log_level                         ="info";
+       rrc_log_verbosity                     ="medium";
+    };
+
diff --git a/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf
index 01add06e3a57c6c34c1d54be6882c2757345b9f5..682fb376cfd95e6a741bbd3d95fee731a55b7dbe 100644
--- a/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf
+++ b/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf
@@ -36,7 +36,7 @@ gNBs =
     pdsch_AntennaPorts                                        = 1;
     pusch_AntennaPorts                                        = 1;
     ul_prbblacklist                                           = "51,52,53,54"
-    min_rxtxtime_pdsch = 6;
+    min_rxtxtime = 6;
      pdcch_ConfigSIB1 = (
       {
         controlResourceSetZero = 12;
@@ -241,13 +241,13 @@ MACRLCs = (
 );
 
 L1s = (
-      {
-      num_cc = 1;
-      tr_n_preference = "local_mac";
-      pusch_proc_threads = 8;
-      prach_dtx_threshold = 120;
-      pucch0_dtx_threshold = 150;
-      }
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+  prach_dtx_threshold = 120;
+  pucch0_dtx_threshold = 150;
+}
 );
 
 RUs = (
diff --git a/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf
index ab0cf5f469b2fb1c5d12476f576eb5504660fda3..c0d4c6d4c95aa128ab45389e2f55fe021ff4ef30 100644
--- a/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf
+++ b/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf
@@ -36,7 +36,7 @@ gNBs =
     pdsch_AntennaPorts                                        = 1;
     pusch_AntennaPorts                                        = 1;
     ul_prbblacklist                                           = "51,52,53,54"
-    min_rxtxtime_pdsch = 6;
+    min_rxtxtime = 6;
 
      pdcch_ConfigSIB1 = (
       {
@@ -242,13 +242,13 @@ MACRLCs = (
 );
 
 L1s = (
-      {
-      num_cc = 1;
-      tr_n_preference = "local_mac";
-      pusch_proc_threads = 8;
-      prach_dtx_threshold = 120;
-      pucch0_dtx_threshold = 150;
-      }
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+  prach_dtx_threshold = 120;
+  pucch0_dtx_threshold = 150;
+}
 );
 
 RUs = (
diff --git a/ci-scripts/conf_files/gNB_SA_DU.conf b/ci-scripts/conf_files/gNB_SA_DU.conf
index b03758a006a83bc6a7fc0a91d91156505df44ff5..adcbcd45d0ce1fd0a75420a2d60ea8c7f92ac785 100644
--- a/ci-scripts/conf_files/gNB_SA_DU.conf
+++ b/ci-scripts/conf_files/gNB_SA_DU.conf
@@ -227,14 +227,14 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-	pusch_proc_threads = 8;
-	prach_dtx_threshold = 120;
-    pucch0_dtx_threshold = 150;
-    ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-        }  
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+  prach_dtx_threshold = 120;
+  pucch0_dtx_threshold = 150;
+  ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
+}
 );
 
 RUs = (
diff --git a/ci-scripts/conf_files/gNB_SA_n78_106PRB.2x2_usrpn310.conf b/ci-scripts/conf_files/gNB_SA_n78_106PRB.2x2_usrpn310.conf
index 77693d5f72053e957aba548f35327a1d250d4724..e3bdde8469350298c09e416bc32316a0990176cb 100644
--- a/ci-scripts/conf_files/gNB_SA_n78_106PRB.2x2_usrpn310.conf
+++ b/ci-scripts/conf_files/gNB_SA_n78_106PRB.2x2_usrpn310.conf
@@ -229,13 +229,13 @@ MACRLCs = (
 );
 
 L1s = (
-      {
-      num_cc = 1;
-      tr_n_preference = "local_mac";
-      pusch_proc_threads = 2;
-      prach_dtx_threshold = 120;
-      pucch0_dtx_threshold = 150;
-      }  
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+  prach_dtx_threshold = 120;
+  pucch0_dtx_threshold = 150;
+}
 );
 
 RUs = (
diff --git a/ci-scripts/conf_files/gNB_SA_n78_133PRB.2x2_usrpn310.conf b/ci-scripts/conf_files/gNB_SA_n78_133PRB.2x2_usrpn310.conf
index c9b369eaff94b87e2f43613cc67ca491e6c99e57..3955b1542ecf28e6f708754fab817900ad49b784 100644
--- a/ci-scripts/conf_files/gNB_SA_n78_133PRB.2x2_usrpn310.conf
+++ b/ci-scripts/conf_files/gNB_SA_n78_133PRB.2x2_usrpn310.conf
@@ -226,12 +226,12 @@ MACRLCs = (
 );
 
 L1s = (
-      {
-      num_cc = 1;
-      tr_n_preference = "local_mac";
-      pusch_proc_threads = 2;
-      prach_dtx_threshold = 120;
-        }  
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+  prach_dtx_threshold = 120;
+}
 );
 
 RUs = (
diff --git a/ci-scripts/conf_files/gnb.band261.tm1.32PRB.usrpn300.conf b/ci-scripts/conf_files/gnb.band261.tm1.32PRB.usrpn300.conf
index 4338c00b36f167e0a6258d74c5896cddc14564fc..dd9c210c0ddc61e105a0c87a9a4659cb961bebfb 100644
--- a/ci-scripts/conf_files/gnb.band261.tm1.32PRB.usrpn300.conf
+++ b/ci-scripts/conf_files/gnb.band261.tm1.32PRB.usrpn300.conf
@@ -211,12 +211,12 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
+{
   num_cc = 1;
   tr_n_preference = "local_mac";
-  pusch_proc_threads = 8;
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-        }  
+}
 );
 
 RUs = (
diff --git a/ci-scripts/conf_files/gnb.band66.tm1.106PRB.usrpn300.conf b/ci-scripts/conf_files/gnb.band66.tm1.106PRB.usrpn300.conf
index 1c2133bebed3a21f9c82e68154082f4b8aae0592..2400136f9f93645addf19345da24d54556fa12c1 100644
--- a/ci-scripts/conf_files/gnb.band66.tm1.106PRB.usrpn300.conf
+++ b/ci-scripts/conf_files/gnb.band66.tm1.106PRB.usrpn300.conf
@@ -195,12 +195,12 @@ MACRLCs = (
 );
 
 L1s = (
-  {
+{
   num_cc = 1;
   tr_n_preference = "local_mac";
-  pusch_proc_threads = 8;
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-  }
+}
 );
 
 RUs = (
diff --git a/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf
index b0a757c9d068262f70402e9385d713d6f394654e..adb79ceb8db7513bd2b5c86506be98431c70e0d1 100644
--- a/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf
+++ b/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf
@@ -210,12 +210,12 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-	pusch_proc_threads = 8;
-        prach_dtx_threshold = 120;
-        }  
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+  prach_dtx_threshold = 120;
+}
 );
 
 RUs = (
diff --git a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf
index 394d5d8a0d4e5fbe891eea8c3530de40b91f5646..b71bd3acd9e932a023a31882689f0238c46457e5 100644
--- a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf
+++ b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf
@@ -227,18 +227,17 @@ MACRLCs = (
     tr_n_preference  = "local_RRC";
 #    pusch_TargetSNRx10 = 200;
 #    pucch_TargetSNRx10 = 150;
-     ulsch_max_frame_inactivity = 1;
+     ulsch_max_frame_inactivity = 0;
   }
 );
 
 L1s = (
-      {
-      num_cc = 1;
-      tr_n_preference = "local_mac";
-      pusch_proc_threads = 4;
-      prach_dtx_threshold = 120;
-#      pucch0_dtx_threshold = 150;
-      }
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  prach_dtx_threshold = 120;
+#  pucch0_dtx_threshold = 150;
+}
 );
 
 RUs = (
diff --git a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf
index 804cd96a27465f88da80f8b5a98edbcabf5c8d99..32a40fe9516eb60ac3651f4c8428995673fed0c6 100644
--- a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf
+++ b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf
@@ -237,13 +237,12 @@ MACRLCs = (
 );
 
 L1s = (
-      {
-      num_cc = 1;
-      tr_n_preference = "local_mac";
-      pusch_proc_threads = 4;
-      prach_dtx_threshold = 120;
-#      pucch0_dtx_threshold = 150;
-      }
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  prach_dtx_threshold = 120;
+#  pucch0_dtx_threshold = 150;
+}
 );
 
 RUs = (
diff --git a/ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf
index 70892930c9677579b5d43090481b5dff0bdb83fb..f28c3167b6b6c7fb2b1feeb1ff4375b92163a3ff 100644
--- a/ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf
+++ b/ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf
@@ -82,11 +82,11 @@ gNBs =
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
         dl_subcarrierSpacing                                           = 1;
-        dl_carrierBandwidth                                            = 106;
+        dl_carrierBandwidth                                            = 162;
      #initialDownlinkBWP
       #genericParameters
         # this is RBstart=0,L=106 (275*(L-1))+RBstart
-        initialDLBWPlocationAndBandwidth                                        = 28875;
+        initialDLBWPlocationAndBandwidth                                        = 31889;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
         initialDLBWPsubcarrierSpacing                                           = 1;
@@ -104,11 +104,11 @@ gNBs =
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
       ul_subcarrierSpacing                                           = 1;
-      ul_carrierBandwidth                                            = 106;
+      ul_carrierBandwidth                                            = 162;
       pMax                                                          = 20;
      #initialUplinkBWP
       #genericParameters
-        initialULBWPlocationAndBandwidth                                        = 28875;
+        initialULBWPlocationAndBandwidth                                        = 31889;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
         initialULBWPsubcarrierSpacing                                           = 1;
@@ -236,13 +236,12 @@ MACRLCs = (
 );
 
 L1s = (
-      {
-      num_cc = 1;
-      tr_n_preference = "local_mac";
-      pusch_proc_threads = 4;
-      prach_dtx_threshold = 120;
-#      pucch0_dtx_threshold = 150;
-      }
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  prach_dtx_threshold = 120;
+#  pucch0_dtx_threshold = 150;
+}
 );
 
 RUs = (
diff --git a/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf b/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
index 6ade355053abbb0b83ff32d7d4f1b620833fcecc..9cc8f554e812d517316e977f0ee93a97066511f9 100644
--- a/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
+++ b/ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf
@@ -194,11 +194,11 @@ MACRLCs = (
 );
 
 L1s = (
-	{
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-	pusch_proc_threads = 8;
-	}
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+}
 );
 
 RUs = (
diff --git a/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf b/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf
index b7a04b1f360113a60a3120b408d511077b0cd9da..249b7e45270bdf61e6ff1b909e1e3806effdd08a 100644
--- a/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf
@@ -210,12 +210,12 @@ MACRLCs = (
 );
 
 L1s = (
-  {
-    num_cc = 1;
-    tr_n_preference = "local_mac";
-    pusch_proc_threads = 6;
-    ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-  }  
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 6;
+  ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
+}
 );
 
 RUs = (
diff --git a/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpn310.conf
index 3aa869623460a3e4c4a0d6588d4ebe2fd2e81685..f232106d561bb233a9c7be736f7800af1cadd574 100644
--- a/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpn310.conf
+++ b/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpn310.conf
@@ -211,11 +211,11 @@ MACRLCs = (
 );
 
 L1s = (
-      {
+{
   num_cc = 1;
   tr_n_preference = "local_mac";
-  pusch_proc_threads = 6;
-        }  
+  thread_pool_size = 6;
+}
 );
 
 RUs = (
diff --git a/ci-scripts/constants.py b/ci-scripts/constants.py
index bb110bc0e87b149cc999222bfa2d0567b0b305c4..3c056759283a973543e16d61f6a57d984dd2ac8c 100644
--- a/ci-scripts/constants.py
+++ b/ci-scripts/constants.py
@@ -44,6 +44,7 @@ ENB_PROCESS_ASSERTION = -12
 ENB_PROCESS_REALTIME_ISSUE = -13
 ENB_PROCESS_NOLOGFILE_TO_ANALYZE = -14
 ENB_PROCESS_SLAVE_RRU_NOT_SYNCED = -15
+ENB_REAL_TIME_PROCESSING_ISSUE = -16
 HSS_PROCESS_FAILED = -2
 HSS_PROCESS_OK = +2
 MME_PROCESS_FAILED = -3
diff --git a/ci-scripts/datalog_rt_stats.2x2.yaml b/ci-scripts/datalog_rt_stats.2x2.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..9e2b66862d6ab4cd53137c67695fe82fd4771a78
--- /dev/null
+++ b/ci-scripts/datalog_rt_stats.2x2.yaml
@@ -0,0 +1,35 @@
+#this is a configuration file
+#used to build real time processing statistics 
+#for 5G NR phy test (gNB terminate)
+Title : Processing Time (us)
+ColNames :
+  - Metric
+  - Average
+  - Max
+  - Average vs Reference Deviation (Reference Value ; Acceptability Threshold)
+Ref : 
+  feprx : 120.0
+  feptx_prec : 8.0
+  feptx_ofdm : 50.0
+  feptx_total : 75.0
+  L1 Tx processing thread 0 : 300.0
+  L1 Tx processing thread 1 : 300.0
+  DLSCH encoding : 230.0
+  L1 Rx processing : 175.0
+  PUSCH inner-receiver : 100.0
+  PUSCH decoding : 180.0 
+  DL & UL scheduling timing stats : 37.0
+  UL Indication : 38.0
+Threshold :
+  feprx : 1.25
+  feptx_prec : 1.25
+  feptx_ofdm : 1.25
+  feptx_total : 1.25
+  L1 Tx processing thread 0 : 1.25
+  L1 Tx processing thread 1 : 1.25
+  DLSCH encoding : 1.25
+  L1 Rx processing : 1.25
+  PUSCH inner-receiver : 1.25
+  PUSCH decoding : 1.25
+  DL & UL scheduling timing stats : 1.25
+  UL Indication : 1.25
diff --git a/ci-scripts/datalog_rt_stats.yaml b/ci-scripts/datalog_rt_stats.default.yaml
similarity index 100%
rename from ci-scripts/datalog_rt_stats.yaml
rename to ci-scripts/datalog_rt_stats.default.yaml
diff --git a/ci-scripts/epc.py b/ci-scripts/epc.py
index a7d923ca906ab1948a81e69a2accbeedda65d0c0..9ed9f06d8e9701e96b64a3343a6f5dde5ccbdd73 100644
--- a/ci-scripts/epc.py
+++ b/ci-scripts/epc.py
@@ -133,7 +133,7 @@ class EPCManagement():
 		mySSH.open(self.IPAddress, self.UserName, self.Password)
 		if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
 			logging.debug('Using the OAI EPC Release 14 MME in Docker')
-			mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-mme /bin/bash -c "nohup tshark -i eth0 -i lo:s10 -w /tmp/mme_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
+			mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-mme /bin/bash -c "nohup tshark -i eth0 -i lo:s10 -f "not port 2152" -w /tmp/mme_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
 			time.sleep(5)
 			mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-mme /bin/bash -c "nohup ./bin/oai_mme -c ./etc/' + self.mmeConfFile + ' > mme_check_run.log 2>&1"', '\$', 5)
 		elif re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
@@ -198,8 +198,8 @@ class EPCManagement():
 		mySSH.open(self.IPAddress, self.UserName, self.Password)
 		if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
 			logging.debug('Using the OAI EPC Release 14 SPGW-CUPS in Docker')
-			mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwc /bin/bash -c "nohup tshark -i eth0 -i lo:p5c -i lo:s5c -w /tmp/spgwc_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
-			mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwu-tiny /bin/bash -c "nohup tshark -i eth0 -w /tmp/spgwu_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
+			mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwc /bin/bash -c "nohup tshark -i eth0 -i lo:p5c -i lo:s5c -f "not port 2152" -w /tmp/spgwc_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
+			mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwu-tiny /bin/bash -c "nohup tshark -i eth0 -f "not port 2152" -w /tmp/spgwu_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
 			time.sleep(5)
 			mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwc /bin/bash -c "nohup ./bin/oai_spgwc -o -c ./etc/spgw_c.conf > spgwc_check_run.log 2>&1"', '\$', 5)
 			time.sleep(5)
@@ -532,6 +532,7 @@ class EPCManagement():
 			logging.debug('Terminating OAI CN5G')
 			mySSH.command('cd /opt/oai-cn5g-fed/docker-compose', '\$', 5)
 			mySSH.command('./core-network.sh stop nrf spgwu', '\$', 60)
+			mySSH.command('docker volume prune --force || true', '\$', 60)
 			time.sleep(2)
 			mySSH.command('tshark -r /tmp/oai-cn5g.pcap | egrep --colour=never "Tracking area update" ','\$', 30)
 			result = re.search('Tracking area update request', mySSH.getBefore())
@@ -760,6 +761,7 @@ class EPCManagement():
 			nbContainers += 1
 
 		mySSH.command('docker-compose down', '\$', 60)
+		mySSH.command('docker volume prune --force || true', '\$', 60)
 		mySSH.command('docker inspect --format=\'{{.State.Health.Status}}\' ' + listOfContainers, '\$', 10)
 		noMoreContainerNb = mySSH.getBefore().count('No such object')
 		mySSH.command('docker inspect --format=\'{{.Name}}\' prod-oai-public-net prod-oai-private-net', '\$', 10)
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index 3a5a69573d8b6e5e49212910817ff2e61847d842..43772fb655f3b65bce5a8abd2b115d7e64077272 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -155,6 +155,11 @@ def GetParametersFromXML(action):
 	elif action == 'Initialize_eNB':
 		RAN.eNB_Trace=test.findtext('eNB_Trace')
 		RAN.eNB_Stats=test.findtext('eNB_Stats')
+		datalog_rt_stats_file=test.findtext('rt_stats_cfg')
+		if datalog_rt_stats_file is None:
+			RAN.datalog_rt_stats_file='datalog_rt_stats.default.yaml'
+		else:
+			RAN.datalog_rt_stats_file=datalog_rt_stats_file
 		RAN.Initialize_eNB_args=test.findtext('Initialize_eNB_args')
 		eNB_instance=test.findtext('eNB_instance')
 		USRPIPAddress=test.findtext('USRP_IPAddress')
@@ -308,7 +313,7 @@ def GetParametersFromXML(action):
 			CiTestObj.ue_id = ""
 		else:
 			CiTestObj.ue_id = ue_id
-		CiTestObj.iperf_direction = test.findtext('direction')#used for modules only	
+		CiTestObj.iperf_direction = test.findtext('direction')#used for modules only
 		CiTestObj.iperf_packetloss_threshold = test.findtext('iperf_packetloss_threshold')
 		iperf_bitrate_threshold = test.findtext('iperf_bitrate_threshold')
 		if (iperf_bitrate_threshold is None):
@@ -909,15 +914,15 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
 					if CONTAINERS.exitStatus==1:
 						RAN.prematureExit = True
 				elif action == 'UndeployGenObject':
-					CONTAINERS.UndeployGenObject(HTML)
+					CONTAINERS.UndeployGenObject(HTML, RAN, CiTestObj)
 					if CONTAINERS.exitStatus==1:
 						RAN.prematureExit = True
 				elif action == 'PingFromContainer':
-					CONTAINERS.PingFromContainer(HTML)
+					CONTAINERS.PingFromContainer(HTML, RAN, CiTestObj)
 					if CONTAINERS.exitStatus==1:
 						RAN.prematureExit = True
 				elif action == 'IperfFromContainer':
-					CONTAINERS.IperfFromContainer(HTML)
+					CONTAINERS.IperfFromContainer(HTML, RAN)
 					if CONTAINERS.exitStatus==1:
 						RAN.prematureExit = True
 				else:
diff --git a/ci-scripts/ran.py b/ci-scripts/ran.py
index 4caa876719bb674d0354e0c26dada705060f0a82..da20998297faa91d02a3be634ff3fc3f05790dba 100644
--- a/ci-scripts/ran.py
+++ b/ci-scripts/ran.py
@@ -92,6 +92,7 @@ class RANManagement():
 		self.epcPcapFile = ''
 		self.runtime_stats= ''
 		self.datalog_rt_stats={}
+		self.datalog_rt_stats_file='datalog_rt_stats.default.yaml'
 		self.eNB_Trace = '' #if 'yes', Tshark will be launched at initialization
 		self.eNB_Stats = '' #if 'yes', Statistics Monitor will be launched at initialization		
 		self.USRPIPAddress = ''
@@ -159,6 +160,7 @@ class RANManagement():
 		# Raphael: here add a check if git clone or git fetch went smoothly
 		mySSH.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
 		mySSH.command('git config user.name "OAI Jenkins"', '\$', 5)
+		mySSH.command('git advice.detachedHead false', '\$', 5)
 		# Checking the BUILD INFO file
 		if not self.backgroundBuild:
 			mySSH.command('ls *.txt', '\$', 5)
@@ -203,6 +205,7 @@ class RANManagement():
 			else:
 				logging.debug('Merging with the target branch: ' + self.ranTargetBranch)
 				mySSH.command('git merge --ff origin/' + self.ranTargetBranch + ' -m "Temporary merge for CI"', '\$', 5)
+		logging.debug(mySSH.getBefore()) # print what git said when merging/checking out
 		mySSH.command('source oaienv', '\$', 5)
 		mySSH.command('cd cmake_targets', '\$', 5)
 		mySSH.command('mkdir -p log', '\$', 5)
@@ -212,6 +215,7 @@ class RANManagement():
 			mySSH.command('echo "./build_oai ' + self.Build_eNB_args + '" > ./my-lte-softmodem-build.sh', '\$', 5)
 			mySSH.command('chmod 775 ./my-lte-softmodem-build.sh', '\$', 5)
 			mySSH.command('echo ' + lPassWord + ' | sudo -S ls', '\$', 5)
+			logging.debug(mySSH.getBefore()) # print current directory contents for verification
 			mySSH.command('echo $USER; nohup sudo -E ./my-lte-softmodem-build.sh' + ' > ' + lSourcePath + '/cmake_targets/compile_oai_enb.log ' + ' 2>&1 &', lUserName, 5)
 			mySSH.close()
 			HTML.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
@@ -371,10 +375,11 @@ class RANManagement():
 			result = re.search('interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done', mySSH.getBefore())
 			if result is not None:
 				eth_interface = result.group('eth_interface')
-				logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + '\u001B[0m')
+				fltr = 'port 38412 or port 36412 or port 36422' # NGAP, S1AP, X2AP
+				logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
 				pcapfile = pcapfile_prefix + self.testCase_id + '_log.pcap'
 				mySSH.command('echo ' + lPassWord + ' | sudo -S rm -f /tmp/' + pcapfile , '\$', 5)
-				mySSH.command('echo $USER; nohup sudo -E tshark  -i ' + eth_interface + ' -w /tmp/' + pcapfile + ' > /dev/null 2>&1 &','\$', 5)
+				mySSH.command('echo $USER; nohup sudo -E tshark  -i ' + eth_interface + ' -f "' + fltr + '" -w /tmp/' + pcapfile + ' > /dev/null 2>&1 &','\$', 5)
 			mySSH.close()
 			
 
@@ -390,10 +395,11 @@ class RANManagement():
 			result = re.search('interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done', mySSH.getBefore())
 			if result is not None:
 				eth_interface = result.group('eth_interface')
-				logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + '\u001B[0m')
+				fltr = 'port 38412 or port 36412 or port 36422' # NGAP, S1AP, X2AP
+				logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
 				self.epcPcapFile = 'enb_' + self.testCase_id + '_s1log.pcap'
 				mySSH.command('echo ' + localEpcPassword + ' | sudo -S rm -f /tmp/' + self.epcPcapFile , '\$', 5)
-				mySSH.command('echo $USER; nohup sudo tshark -f "host ' + lIpAddr +'" -i ' + eth_interface + ' -w /tmp/' + self.epcPcapFile + ' > /tmp/tshark.log 2>&1 &', localEpcUserName, 5)
+				mySSH.command('echo $USER; nohup sudo tshark -f "host ' + lIpAddr +'" -i ' + eth_interface + ' -f "' + fltr + '" -w /tmp/' + self.epcPcapFile + ' > /tmp/tshark.log 2>&1 &', localEpcUserName, 5)
 			mySSH.close()
 		mySSH.open(lIpAddr, lUserName, lPassWord)
 		mySSH.command('cd ' + lSourcePath, '\$', 5)
@@ -487,9 +493,9 @@ class RANManagement():
 		conf_file='../ci-scripts/stats_monitor_conf.yaml'
 		if self.eNB_Stats=='yes':
 			if (self.air_interface[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == 'ocp-enb'):
-				mySSH.command('echo $USER; nohup python3 ' + monitor_file + ' ' + conf_file + ' enb 2>&1 > enb_stats_monitor_execution.log &', '\$', 5)
+				mySSH.command('echo $USER; nohup python3 ' + monitor_file + ' ' + conf_file + ' ' + self.testCase_id + ' enb 2>&1 > enb_stats_monitor_execution.log &', '\$', 5)
 			else:
-				mySSH.command('echo $USER; nohup python3 ' + monitor_file + ' ' + conf_file + ' gnb 2>&1 > gnb_stats_monitor_execution.log &', '\$', 5)
+				mySSH.command('echo $USER; nohup python3 ' + monitor_file + ' ' + conf_file + ' ' + self.testCase_id + ' gnb 2>&1 > gnb_stats_monitor_execution.log &', '\$', 5)
 
 
 
@@ -717,6 +723,9 @@ class RANManagement():
 				logStatus = self.AnalyzeLogFile_eNB(fileToAnalyze, HTML)
 				if (logStatus < 0):
 					HTML.CreateHtmlTestRow('N/A', 'KO', logStatus)
+					#display rt stats for gNB only
+					if len(self.datalog_rt_stats)!=0 and nodeB_prefix == 'g':
+						HTML.CreateHtmlDataLogTable(self.datalog_rt_stats)
 					self.prematureExit = True
 					self.eNBmbmsEnables[int(self.eNB_instance)] = False
 					return
@@ -738,7 +747,10 @@ class RANManagement():
 		mySSH.command('echo ' + self.eNBPassword + ' | sudo -S mv /tmp/enb_*.pcap .','\$',20)
 		mySSH.command('echo ' + self.eNBPassword + ' | sudo -S mv /tmp/gnb_*.pcap .','\$',20)
 		mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm -f enb.log.zip', '\$', 5)
-		mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip enb*.log core* enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png ping*.log.png log/*/*.log log/*/*.pcap', '\$', 60)
+		mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip enb*.log enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png ping*.log.png log/*/*.log log/*/*.pcap', '\$', 60)
+		result = re.search('core.\d+', mySSH.getBefore())
+		if result is not None:
+			mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip core* ran_build/build/{lte,nr}-softmodem', '\$', 60) # add core and executable to zip
 		mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm enb*.log core* enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png ping*.log.png log/*/*.log log/*/*.pcap', '\$', 15)
 		mySSH.close()
 
@@ -802,6 +814,7 @@ class RANManagement():
 		#NSA specific log markers
 		nsa_markers ={'SgNBReleaseRequestAcknowledge': [],'FAILURE': [], 'scgFailureInformationNR-r15': [], 'SgNBReleaseRequest': []}
 		nodeB_prefix_found = False
+		RealTimeProcessingIssue = False
 	
 		line_cnt=0 #log file line counter
 		for line in enb_log_file.readlines():
@@ -1003,7 +1016,7 @@ class RANManagement():
 		#the following part takes the *_stats.log files as source (not the stdout log file)
 
 		#the datalog config file has to be loaded
-		datalog_rt_stats_file='datalog_rt_stats.yaml'
+		datalog_rt_stats_file=self.datalog_rt_stats_file
 		if (os.path.isfile(datalog_rt_stats_file)):
 			yaml_file=datalog_rt_stats_file
 		elif (os.path.isfile('ci-scripts/'+datalog_rt_stats_file)):
@@ -1016,12 +1029,9 @@ class RANManagement():
 			datalog_rt_stats = yaml.load(f,Loader=yaml.FullLoader)
 		rt_keys = datalog_rt_stats['Ref'] #we use the keys from the Ref field  
 
-		if (os.path.isfile('./nrL1_stats.log')) and (os.path.isfile('./nrL1_stats.log')):
-			stat_files_present=True
-		else:
-			stat_files_present=False
-			logging.debug("NR Stats files for RT analysis not found")
-		if stat_files_present:
+		if os.path.isfile('./nrL1_stats.log') and os.path.isfile('./nrMAC_stats.log'):
+			# don't use CI-nrL1_stats.log, as this will increase the processing time for
+			# no reason, we just need the last occurence
 			nrL1_stats = open('./nrL1_stats.log', 'r')
 			nrMAC_stats = open('./nrMAC_stats.log', 'r')
 			for line in nrL1_stats.readlines():
@@ -1042,6 +1052,8 @@ class RANManagement():
 							real_time_stats[k]=tmp.group(1)
 			nrL1_stats.close()
 			nrMAC_stats.close()
+		else:
+			logging.debug("NR Stats files for RT analysis not found")
 
 		#stdout log file and stat log files analysis completed
 		logging.debug('   File analysis (stdout, stats) completed')
@@ -1120,8 +1132,7 @@ class RANManagement():
 				#check if there is a fail => will render the test as failed
 				for k in datalog_rt_stats['Data']:
 					if float(datalog_rt_stats['Data'][k][2])> datalog_rt_stats['Threshold'][k]: #condition for fail : avg/ref is greater than the fixed threshold
-						#setting prematureExit is ok although not the best option
-						self.prematureExit=False #temp for debug : do not stop the test if RT stats are excedeed
+						RealTimeProcessingIssue = True
 			else:
 				statMsg = 'No real time stats found in the log file\n'
 				logging.debug('No real time stats found in the log file')
@@ -1155,7 +1166,10 @@ class RANManagement():
 			logging.debug(statMsg)
 			htmleNBFailureMsg += htmlMsg			
 
-
+		if RealTimeProcessingIssue:
+			logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB ended with real time processing issue! \u001B[0m')
+			htmleNBFailureMsg += 'Fail due to real time processing issue\n'
+			global_status = CONST.ENB_REAL_TIME_PROCESSING_ISSUE
 		if uciStatMsgCount > 0:
 			statMsg = nodeB_prefix + 'NB showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)'
 			logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
diff --git a/ci-scripts/ran_dashboard/Hdashboard.py b/ci-scripts/ran_dashboard/Hdashboard.py
index 0cfae97c76a3bdf689cdd674989ff50a47435431..1b65c7af4f0b78d2b8b2c1680857bf9ef7362e0f 100644
--- a/ci-scripts/ran_dashboard/Hdashboard.py
+++ b/ci-scripts/ran_dashboard/Hdashboard.py
@@ -509,46 +509,115 @@ class Dashboard:
         s3.meta.client.copy(copy_source, 'oaitestdashboard', path+'/'+ 'test_styles.css')
 
 
-    def PostGitNote(self,mr,jobname,buildurl,buildid,status):
-        gl = gitlab.Gitlab.from_config('OAI')
-        project_id = 223
-        project = gl.projects.get(project_id)
-        editable_mr = project.mergerequests.get(int(mr))
-        mr_notes = editable_mr.notes.list()
-        mr_note = editable_mr.notes.create({
-            'body': 'Completed Test : '+jobname+', status: <b>'+status+'</b>, '+\
-            '(<a href="'+buildurl+'">'+buildid+'</a>)<br>'+\
-            '<a href="https://oaitestdashboard.s3.eu-west-1.amazonaws.com/MR'+mr+'/index.html">Consolidated Test Results</a>'
-        })
-        editable_mr.save()
+    def PostGitNote(self,mr,commit,args):
+        #current date and time to be posted with test results
+        #now = datetime.now()
+        #dt_string = now.strftime("%d/%m/%Y %H:%M")
+
+        if len(args)%4 != 0:
+            print("Wrong Number of Arguments")
+            return
+        else :
+            n_tests=len(args)//4
+
+            gl = gitlab.Gitlab.from_config('OAI')
+            project_id = 223
+            project = gl.projects.get(project_id)
+
+            #retrieve all the notes from the MR
+            editable_mr = project.mergerequests.get(int(mr))
+            mr_notes = editable_mr.notes.list(all=True)
+
+            body = '<a href="https://oaitestdashboard.s3.eu-west-1.amazonaws.com/MR'+mr+'/index.html">Consolidated Test Results</a><br>'+\
+                'Tested CommitID: ' + commit + '<br>'
+
+            for i in range(0,n_tests):
+                jobname = args[4*i]
+                buildurl = args[4*i+1]
+                buildid = args[4*i+2]
+                status = args[4*i+3]
+                body += jobname+', status is <b>'+status+'</b>, (<a href="'+buildurl+'">'+buildid+'</a>)<br>'
+
+            #create new note
+            mr_note = editable_mr.notes.create({
+                'body': body
+            })
+            editable_mr.save()
+
+    def AWSCleanup(self,mode):
+        #first build MR list from aws S3 bucket
+        if mode != 'report' and mode !='delete':
+            print("incorrect mode for awsclean")
+            return
+        aws_mr_list=[]
+        s3 = boto3.resource('s3')
+        my_bucket = s3.Bucket('oaitestdashboard')
+        for my_bucket_object in my_bucket.objects.all():
+            #MR objects are like MR1407/index.html
+            res=re.search(r'^MR([0-9]+)',my_bucket_object.key)
+            if res!=None:
+                aws_mr_list.append(res.group(1))#store MR number as a string
+        #open MR list from GIt already exists as an attribute of this class self.mr_list
+        #parse aws MR list and delete those MR that are no longer open        
+        for aws_mr in aws_mr_list:
+            if aws_mr not in self.mr_list:
+                if mode=="report":
+                    print(aws_mr+' can be deleted from AWS S3')
+                else :
+                    awspath="MR"+aws_mr+"/"
+                    print('deleting ' + aws_mr)
+                    my_bucket.objects.filter(Prefix=awspath).delete()
+
+
 
 
 def main():
 
-    #call from Jenkinsfile : sh "python3 Hdashboard.py testevent ${params.eNB_MR} ${JOB_NAME} ${env.BUILD_URL} ${env.BUILD_ID} ${StatusForDb} "  
+    #call from slave Jenkinsfile : sh "python3 Hdashboard.py testevent ${params.eNB_MR} "  
+    #call from master Jenkinsfile : sh "python3 Hdashboard.py gitpost ${GitPostArgs}"
+   
 
-    #individual MR test results + test dashboard, event based (end of jenkins pipeline)
     if len(sys.argv)>1:
+
+        #individual MR test results + test dashboard, event based (end of slave jenkins pipeline)
         if sys.argv[1]=="testevent" :
             mr=sys.argv[2]
-            jobname=sys.argv[3]
-            buildurl=sys.argv[4]
-            buildid=sys.argv[5]
-            status=sys.argv[6]
             htmlDash=Dashboard()
             if mr in htmlDash.mr_list:
+                #single MR test results
                 htmlDash.Build('singleMR',mr,'/tmp/MR'+mr+'_index.html') 
                 htmlDash.CopyToS3('/tmp/MR'+mr+'_index.html','oaitestdashboard','MR'+mr+'/index.html')
+                #all MR test results
                 htmlDash.Build('Tests','0000','/tmp/Tests_index.html') 
                 htmlDash.CopyToS3('/tmp/Tests_index.html','oaitestdashboard','index.html')
-                htmlDash.PostGitNote(mr,jobname,buildurl,buildid,status)
+
+        #git post with MR test results, event based (end of master jenkins pipeline)
+        elif sys.argv[1]=="gitpost":
+            mr=sys.argv[2]
+            commit=sys.argv[3]
+            args=[]
+            for i in range (4, len(sys.argv)): #jobname, url, id , result
+                args.append(sys.argv[i])
+            htmlDash=Dashboard()
+            if mr in htmlDash.mr_list:
+                htmlDash.PostGitNote(mr,commit, args)
             else:
                 print("Not a Merge Request => this build is for testing/debug purpose, no report to git")
-    #test and MR status dash boards, cron based
+        elif sys.argv[1]=="awsclean":
+            mode=sys.argv[2]#report or delete
+            htmlDash=Dashboard()
+            htmlDash.AWSCleanup(mode)
+        else:
+            print("Wrong argument at position 1")
+
+
+    #test and MR status dashboards, cron based
     else:
         htmlDash=Dashboard()
+        #all MR status dashboard
         htmlDash.Build('MR','0000','/tmp/MR_index.html') 
         htmlDash.CopyToS3('/tmp/MR_index.html','oairandashboard','index.html') 
+        #all MR test results
         htmlDash.Build('Tests','0000','/tmp/Tests_index.html') 
         htmlDash.CopyToS3('/tmp/Tests_index.html','oaitestdashboard','index.html') 
 
diff --git a/ci-scripts/ran_dashboard/ran_dashboard_cfg.yaml b/ci-scripts/ran_dashboard/ran_dashboard_cfg.yaml
index 144fcd25a5ec986a048776cb78caed86c6340487..8b311cf6ac09050bebbdd530ed4e15585347e0b5 100644
--- a/ci-scripts/ran_dashboard/ran_dashboard_cfg.yaml
+++ b/ci-scripts/ran_dashboard/ran_dashboard_cfg.yaml
@@ -2,7 +2,7 @@ LTE-2x2 : #short name used in the dashboard
   job : 'RAN-LTE-2x2-Module-OAIEPC' #job name from Jenkins, used in the database
   link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-LTE-2x2-Module-OAIEPC'
   bench : 'Obelix-N310-OAIEPC-Quectel(nrmodule2)'
-  test : 'TDD, 40MHz, MCS9, 26Mb DL, 7Mb UL'
+  test : 'TM1 + TM2, TDD, 40MHz, MCS9, 26Mb DL, 7Mb UL'
 NSA-B200 :
   job : 'RAN-NSA-B200-Module-LTEBOX'
   link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-NSA-B200-Module-LTEBOX'
@@ -18,14 +18,9 @@ SA-N310 :
   link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-Module-CN5G'
   bench : 'Asterix-N310-OAICN5G-Quectel(nrmodule2)'
   test : 'TDD, 40MHz, 60Mb DL, 3Mb UL'
-SA-OAIUE-B200 :
-  job : 'RAN-SA-OAIUE-B200-CN5G'
-  link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-OAIUE-B200-CN5G/'
-  bench : 'Asterix-N310-OAICN5G-OAIUE-B200'
-  test : 'TDD, 40MHz, Ping, (to be implemented : iperf)'
-SA-OAIUE-N310 :
-  job : 'RAN-SA-OAIUE-N310-CN5G'
-  link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-OAIUE-N310-CN5G/'
+SA-OAIUE-N310-X300 :
+  job : 'RAN-SA-OAIUE-N310-X300-CN5G'
+  link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-OAIUE-N310-X300-CN5G/'
   bench : 'Asterix-N310-OAICN5G-OAIUE-N310'
   test : 'TDD, 40MHz, Ping, (to be implemented : iperf)'
 
diff --git a/ci-scripts/sshconnection.py b/ci-scripts/sshconnection.py
index 67e0b832e66210e359690ff0a388c5013c3d1c5c..d5b4a4c83e459ce8825977420949b2fe6588152f 100644
--- a/ci-scripts/sshconnection.py
+++ b/ci-scripts/sshconnection.py
@@ -157,22 +157,24 @@ class SSHConnection():
 		if not silent:
 			logging.debug(commandline)
 		self.cmd2Results = ''
+		noHistoryCmd = 'unset HISTFILE; ' + commandline
 		myHost = self.username + '@' + self.ipaddress
 		# CAUTION: THIS METHOD IMPLIES THAT THERE ARE VALID SSH KEYS
 		# BETWEEN THE PYTHON EXECUTOR NODE AND THE REMOTE HOST
 		# OTHERWISE IT WON'T WORK
-		lSsh = subprocess.Popen(["ssh", "%s" % myHost, commandline],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
+		lSsh = subprocess.Popen(["ssh", "%s" % myHost, noHistoryCmd],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
 		self.cmd2Results = str(lSsh.stdout.readlines())
 
 	def command3(self, commandline, timeout, silent=False):
 		if not silent:
 			logging.debug(commandline)
 		self.cmd2Results = ''
+		noHistoryCmd = 'unset HISTFILE; ' + commandline
 		myHost = self.username + '@' + self.ipaddress
 		# CAUTION: THIS METHOD IMPLIES THAT THERE ARE VALID SSH KEYS
 		# BETWEEN THE PYTHON EXECUTOR NODE AND THE REMOTE HOST
 		# OTHERWISE IT WON'T WORK
-		lSsh = subprocess.Popen(["ssh", "%s" % myHost, commandline],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
+		lSsh = subprocess.Popen(["ssh", "%s" % myHost, noHistoryCmd],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
 		return lSsh.stdout.readlines()
 
 		
diff --git a/ci-scripts/stats_monitor.py b/ci-scripts/stats_monitor.py
index 933bf13203c7fe577d68f52b7438f7087683beb0..d7cad7ae554b7aa427030c569b3bf3ac31db79af 100755
--- a/ci-scripts/stats_monitor.py
+++ b/ci-scripts/stats_monitor.py
@@ -11,6 +11,7 @@ import pickle
 import matplotlib.pyplot as plt
 import numpy as np
 import yaml
+import os
 
 
 class StatMonitor():
@@ -59,11 +60,21 @@ class StatMonitor():
                 self.d[node_type]['mcs'].append(int(result.group(4)))
 
 
-    def collect(self,node_type):
+    def collect(self,testcase_id,node_type):
         if node_type=='enb':
-            cmd='cat L1_stats.log MAC_stats.log PDCP_stats.log RRC_stats.log'
+            files = ["L1_stats.log", "MAC_stats.log", "PDCP_stats.log", "RRC_stats.log"]
         else: #'gnb'
-            cmd='cat nrL1_stats.log nrMAC_stats.log nrPDCP_stats.log nrRRC_stats.log'
+            files = ["nrL1_stats.log", "nrMAC_stats.log", "nrPDCP_stats.log", "nrRRC_stats.log"]
+        #append each file's contents to another file (prepended with CI-) for debug
+        for f in files:
+            if os.path.isfile(f):
+                cmd = 'cat '+ f + ' >> CI-'+testcase_id+'-'+f
+                subprocess.Popen(cmd,shell=True)  
+        #join the files for further processing
+        cmd='cat '
+        for f in files:
+            if os.path.isfile(f):
+                cmd += f+' '
         process=subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
         output = process.stdout.readlines()
         if node_type=='enb':
@@ -72,7 +83,7 @@ class StatMonitor():
             self.process_gnb(node_type,output)
 
 
-    def graph(self,node_type):
+    def graph(self,testcase_id, node_type):
         for page in self.d[node_type]['graph']:#work out a set a graphs per page
             col = 1
             figure, axis = plt.subplots(len(self.d[node_type]['graph'][page]), col ,figsize=(10, 10))
@@ -103,13 +114,14 @@ class StatMonitor():
 
             plt.tight_layout()
             #save as png
-            plt.savefig(node_type+'_stats_monitor_'+page+'.png')
+            plt.savefig(node_type+'_stats_monitor_'+testcase_id+'_'+page+'.png')
 
 
 if __name__ == "__main__":
 
     cfg_filename = sys.argv[1] #yaml file as metrics config
-    node = sys.argv[2]#enb or gnb
+    testcase_id = sys.argv[2] #test case id to name files accordingly, especially if we have several tests in a sequence
+    node = sys.argv[3]#enb or gnb
     mon=StatMonitor(cfg_filename)
 
     #collecting stats when modem process is stopped
@@ -117,11 +129,11 @@ if __name__ == "__main__":
     process=subprocess.Popen(CMD, shell=True, stdout=subprocess.PIPE)
     output = process.stdout.readlines()
     while len(output)!=0 :
-        mon.collect(node)
+        mon.collect(testcase_id,node)
         process=subprocess.Popen(CMD, shell=True, stdout=subprocess.PIPE)
         output = process.stdout.readlines()
         time.sleep(1)
     print('Process stopped')
     with open(node+'_stats_monitor.pickle', 'wb') as handle:
         pickle.dump(mon.d, handle, protocol=pickle.HIGHEST_PROTOCOL)
-    mon.graph(node)
+    mon.graph(testcase_id, node)
diff --git a/ci-scripts/stats_monitor.py.old b/ci-scripts/stats_monitor.py.old
deleted file mode 100755
index ae9b39bfa632c5b85d24d494464b2ae001040cb3..0000000000000000000000000000000000000000
--- a/ci-scripts/stats_monitor.py.old
+++ /dev/null
@@ -1,94 +0,0 @@
-import subprocess
-import time
-import shlex
-import re
-import sys
-import matplotlib.pyplot as plt
-import pickle
-import numpy as np
-import os
-
-def collect(d, node_type):
-    if node_type=='enb':
-        cmd='cat L1_stats.log MAC_stats.log PDCP_stats.log RRC_stats.log'
-    else: #'gnb'
-        cmd='cat nrL1_stats.log nrMAC_stats.log nrPDCP_stats.log nrRRC_stats.log'
-    process=subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
-    output = process.stdout.readlines()
-    for l in output:
-        tmp=l.decode("utf-8")
-        result=re.match(rf'^.*\bPHR\b ([0-9]+).+\bbler\b ([0-9]+\.[0-9]+).+\bmcsoff\b ([0-9]+).+\bmcs\b ([0-9]+)',tmp)
-        if result is not None:
-            d['PHR'].append(int(result.group(1)))
-            d['bler'].append(float(result.group(2)))
-            d['mcsoff'].append(int(result.group(3)))
-            d['mcs'].append(int(result.group(4)))
-
-
-def graph(d, node_type):
-
-
-    figure, axis = plt.subplots(4, 1,figsize=(10, 10)) 
-
-    major_ticks = np.arange(0, len(d['PHR'])+1, 1)
-    axis[0].set_xticks(major_ticks)
-    axis[0].set_xticklabels([])
-    axis[0].plot(d['PHR'],marker='o')
-    axis[0].set_xlabel('time')
-    axis[0].set_ylabel('PHR')
-    axis[0].set_title("PHR")
-  
-    major_ticks = np.arange(0, len(d['bler'])+1, 1)
-    axis[1].set_xticks(major_ticks)
-    axis[1].set_xticklabels([])
-    axis[1].plot(d['bler'],marker='o')
-    axis[1].set_xlabel('time')
-    axis[1].set_ylabel('bler')
-    axis[1].set_title("bler")
-
-    major_ticks = np.arange(0, len(d['mcsoff'])+1, 1)
-    axis[2].set_xticks(major_ticks)
-    axis[2].set_xticklabels([])
-    axis[2].plot(d['mcsoff'],marker='o')
-    axis[2].set_xlabel('time')
-    axis[2].set_ylabel('mcsoff')
-    axis[2].set_title("mcsoff")
-
-    major_ticks = np.arange(0, len(d['mcs'])+1, 1)
-    axis[3].set_xticks(major_ticks)
-    axis[3].set_xticklabels([])
-    axis[3].plot(d['mcs'],marker='o')
-    axis[3].set_xlabel('time')
-    axis[3].set_ylabel('mcs')
-    axis[3].set_title("mcs")
-
-    plt.tight_layout()
-    # Combine all the operations and display
-    plt.savefig(node_type+'_stats_monitor.png')
-    plt.show()
-
-if __name__ == "__main__":
-
-    node_type = sys.argv[1]#enb or gnb
-
-    d={}
-    d['PHR']=[]
-    d['bler']=[]
-    d['mcsoff']=[]
-    d['mcs']=[]
-
-
-    cmd='ps aux | grep modem | grep -v grep'
-    process=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
-    output = process.stdout.readlines()
-    while len(output)!=0 :
-        collect(d, node_type)
-        process=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
-        output = process.stdout.readlines()
-        time.sleep(1)
-    print('process stopped')
-    with open(node_type+'_stats_monitor.pickle', 'wb') as handle:
-        pickle.dump(d, handle, protocol=pickle.HIGHEST_PROTOCOL)
-    graph(d, node_type)
-
-
diff --git a/ci-scripts/stats_monitor_dev.py b/ci-scripts/stats_monitor_dev.py
deleted file mode 100755
index 83de20f5d25480f92d59698319231439b2c41231..0000000000000000000000000000000000000000
--- a/ci-scripts/stats_monitor_dev.py
+++ /dev/null
@@ -1,101 +0,0 @@
-"""
-To create graphs and pickle from runtime statistics in L1,MAC,RRC,PDCP files
-"""
-
-import subprocess
-import time
-import shlex
-import re
-import sys
-import pickle
-import matplotlib.pyplot as plt
-import numpy as np
-import yaml
-
-
-class StatMonitor():
-    def __init__(self,):
-        with open('stats_monitor_conf.yaml','r') as file:
-            self.d = yaml.load(file)
-        for node in self.d:
-            for metric in self.d[node]:
-                self.d[node][metric]=[]
-
-
-    def process_gnb (self,node_type,output):
-        for line in output:
-            tmp=line.decode("utf-8")
-            result=re.match(r'^.*\bdlsch_rounds\b ([0-9]+)\/([0-9]+).*\bdlsch_errors\b ([0-9]+)',tmp)
-            if result is not None:
-                self.d[node_type]['dlsch_err'].append(int(result.group(3)))
-                percentage=float(result.group(2))/float(result.group(1))
-                self.d[node_type]['dlsch_err_perc_round_1'].append(percentage)
-            result=re.match(r'^.*\bulsch_rounds\b ([0-9]+)\/([0-9]+).*\bulsch_errors\b ([0-9]+)',tmp)
-            if result is not None:
-                self.d[node_type]['ulsch_err'].append(int(result.group(3)))
-                percentage=float(result.group(2))/float(result.group(1))
-                self.d[node_type]['ulsch_err_perc_round_1'].append(percentage)
-
-
-    def process_enb (self,node_type,output):
-        for line in output:
-            tmp=line.decode("utf-8")
-            result=re.match(r'^.*\bPHR\b ([0-9]+).+\bbler\b ([0-9]+\.[0-9]+).+\bmcsoff\b ([0-9]+).+\bmcs\b ([0-9]+)',tmp)
-            if result is not None:
-                self.d[node_type]['PHR'].append(int(result.group(1)))
-                self.d[node_type]['bler'].append(float(result.group(2)))
-                self.d[node_type]['mcsoff'].append(int(result.group(3)))
-                self.d[node_type]['mcs'].append(int(result.group(4)))
-
-
-    def collect(self,node_type):
-        if node_type=='enb':
-            cmd='cat L1_stats.log MAC_stats.log PDCP_stats.log RRC_stats.log'
-        else: #'gnb'
-            cmd='cat nrL1_stats.log nrMAC_stats.log nrPDCP_stats.log nrRRC_stats.log'
-        process=subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
-        output = process.stdout.readlines()
-        if node_type=='enb':
-            self.process_enb(node_type,output)
-        else: #'gnb'
-            self.process_gnb(node_type,output)
-
-
-    def graph(self,node_type):
-        col = 1
-        figure, axis = plt.subplots(len(self.d[node_type]), col ,figsize=(10, 10))
-        i=0
-        for metric in self.d[node_type]:
-            major_ticks = np.arange(0, len(self.d[node_type][metric])+1, 1)
-            axis[i].set_xticks(major_ticks)
-            axis[i].set_xticklabels([])
-            axis[i].plot(self.d[node_type][metric],marker='o')
-            axis[i].set_xlabel('time')
-            axis[i].set_ylabel(metric)
-            axis[i].set_title(metric)
-            i+=1
-
-        plt.tight_layout()
-        # Combine all the operations and display
-        plt.savefig(node_type+'_stats_monitor.png')
-        plt.show()
-
-
-if __name__ == "__main__":
-
-    node = sys.argv[1]#enb or gnb
-    mon=StatMonitor()
-
-    #collecting stats when modem process is stopped
-    CMD='ps aux | grep mode | grep -v grep'
-    process=subprocess.Popen(CMD, shell=True, stdout=subprocess.PIPE)
-    output = process.stdout.readlines()
-    while len(output)!=0 :
-        mon.collect(node)
-        process=subprocess.Popen(CMD, shell=True, stdout=subprocess.PIPE)
-        output = process.stdout.readlines()
-        time.sleep(1)
-    print('Process stopped')
-    with open(node+'_stats_monitor.pickle', 'wb') as handle:
-        pickle.dump(mon.d, handle, protocol=pickle.HIGHEST_PROTOCOL)
-    mon.graph(node)
diff --git a/ci-scripts/xml_files/container_4g_rfsim.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml
similarity index 87%
rename from ci-scripts/xml_files/container_4g_rfsim.xml
rename to ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml
index 2466f55800e6d3b7f21358f4a3a6318fb3777e5b..fd254f185677c81ee189f636dbef00b7eb3bbf21 100644
--- a/ci-scripts/xml_files/container_4g_rfsim.xml
+++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml
@@ -21,10 +21,9 @@
 
 -->
 <testCaseList>
-        <htmlTabRef>rfsim-4glte</htmlTabRef>
-        <htmlTabName>Testing 4G LTE RF sim - Monolithic eNB</htmlTabName>
+        <htmlTabRef>rfsim-4glte-fdd05mhz</htmlTabRef>
+        <htmlTabName>Monolithic eNB - FDD 05MHz</htmlTabName>
         <htmlTabIcon>wrench</htmlTabIcon>
-        <repeatCount>2</repeatCount>
         <TestCaseRequestedList>
  100011
  000011
@@ -46,7 +45,7 @@
         <testCase id="000011">
                 <class>DeployGenObject</class>
                 <desc>Deploy Cassandra Database</desc>
-                <yaml_path>yaml_files/4g_rfsimulator</yaml_path>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz</yaml_path>
                 <services>cassandra db_init</services>
                 <nb_healthy>1</nb_healthy>
         </testCase>
@@ -66,23 +65,23 @@
         <testCase id="000012">
                 <class>DeployGenObject</class>
                 <desc>Deploy OAI 4G CoreNetwork</desc>
-                <yaml_path>yaml_files/4g_rfsimulator</yaml_path>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz</yaml_path>
                 <services>oai_hss oai_mme oai_spgwc oai_spgwu trf_gen</services>
                 <nb_healthy>6</nb_healthy>
         </testCase>
 
         <testCase id="000013">
                 <class>DeployGenObject</class>
-                <desc>Deploy OAI 4G eNB RF sim</desc>
-                <yaml_path>yaml_files/4g_rfsimulator</yaml_path>
+                <desc>Deploy OAI 4G eNB RF sim (FDD 05MHz)</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz</yaml_path>
                 <services>enb</services>
                 <nb_healthy>7</nb_healthy>
         </testCase>
 
         <testCase id="000014">
                 <class>DeployGenObject</class>
-                <desc>Deploy OAI 4G NR-UE RF sim</desc>
-                <yaml_path>yaml_files/4g_rfsimulator</yaml_path>
+                <desc>Deploy OAI 4G NR-UE RF sim (FDD 05MHz)</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz</yaml_path>
                 <services>oai_ue0</services>
                 <nb_healthy>8</nb_healthy>
         </testCase>
@@ -124,7 +123,7 @@
         <testCase id="100011">
                 <class>UndeployGenObject</class>
                 <desc>Undeploy all OAI 4G stack</desc>
-                <yaml_path>yaml_files/4g_rfsimulator</yaml_path>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz</yaml_path>
         </testCase>
 
 </testCaseList>
diff --git a/ci-scripts/xml_files/container_4g_rfsim_down.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_down.xml
similarity index 87%
rename from ci-scripts/xml_files/container_4g_rfsim_down.xml
rename to ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_down.xml
index 651447a9ca480f40e9b0e3ede56da36ed92feb04..1c3b1d5a7c3b37cd901258d110cae313c14069a4 100644
--- a/ci-scripts/xml_files/container_4g_rfsim_down.xml
+++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_down.xml
@@ -21,8 +21,8 @@
 
 -->
 <testCaseList>
-        <htmlTabRef>rfsim-4glte-down</htmlTabRef>
-        <htmlTabName>CleanUp 4G RF - Monolithic eNB</htmlTabName>
+        <htmlTabRef>rfsim-4glte-fdd05mhz-down</htmlTabRef>
+        <htmlTabName>CleanUp 4G RF</htmlTabName>
         <htmlTabIcon>trash</htmlTabIcon>
         <TestCaseRequestedList>
  100011
@@ -32,7 +32,7 @@
         <testCase id="100011">
                 <class>UndeployGenObject</class>
                 <desc>Undeploy all OAI 4G stack</desc>
-                <yaml_path>yaml_files/4g_rfsimulator</yaml_path>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz</yaml_path>
         </testCase>
 
 </testCaseList>
diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2ff9461b9361d490d8574d0a89034444449db4c0
--- /dev/null
+++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml
@@ -0,0 +1,109 @@
+<!--
+
+ 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
+
+-->
+<testCaseList>
+        <htmlTabRef>rfsim-4glte-fdd05mhz-noS1</htmlTabRef>
+        <htmlTabName>Monolithic eNB - FDD 05MHz - noS1</htmlTabName>
+        <htmlTabIcon>wrench</htmlTabIcon>
+        <TestCaseRequestedList>
+ 100011
+ 000013
+ 000001
+ 000014
+ 000002
+ 020011
+ 020012
+ 030011
+ 030012
+ 100011
+        </TestCaseRequestedList>
+        <TestCaseExclusionList></TestCaseExclusionList>
+
+        <testCase id="000001">
+                <class>IdleSleep</class>
+                <desc>Sleep</desc>
+                <idle_sleep_time_in_sec>30</idle_sleep_time_in_sec>
+        </testCase>
+
+        <testCase id="000002">
+                <class>IdleSleep</class>
+                <desc>Sleep</desc>
+                <idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
+        </testCase>
+
+        <testCase id="000013">
+                <class>DeployGenObject</class>
+                <desc>Deploy OAI 4G eNB RF sim (FDD 05MHz)</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz_noS1</yaml_path>
+                <services>enb</services>
+                <nb_healthy>1</nb_healthy>
+        </testCase>
+
+        <testCase id="000014">
+                <class>DeployGenObject</class>
+                <desc>Deploy OAI 4G NR-UE RF sim (FDD 05MHz)</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz_noS1</yaml_path>
+                <services>oai_ue0</services>
+                <nb_healthy>2</nb_healthy>
+        </testCase>
+
+        <testCase id="020011">
+                <class>PingFromContainer</class>
+                <desc>Ping Traffic-Gen from LTE-UE</desc>
+                <container_name>rfsim4g-oai-lte-ue0</container_name>
+                <options>-I oaitun_ue1 -c 20 10.0.1.1</options>
+                <loss_threshold>5</loss_threshold>
+        </testCase>
+
+        <testCase id="020012">
+                <class>PingFromContainer</class>
+                <desc>Ping LTE-UE from eNB</desc>
+				<container_name>rfsim4g-oai-enb</container_name>
+                <options>-I oaitun_enb1 -c 20 10.0.1.2</options>
+                <loss_threshold>5</loss_threshold>
+        </testCase>
+
+        <testCase id="030011">
+                <class>IperfFromContainer</class>
+                <desc>Iperf UDP Downlink</desc>
+                <server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
+                <client_container_name>rfsim4g-oai-enb</client_container_name>
+                <server_options>-B 10.0.1.2 -u -i 1 -s</server_options>
+                <client_options>-B 10.0.1.1 -c 10.0.1.2 -u -i 1 -t 30 -b 2M</client_options>
+        </testCase>
+
+        <testCase id="030012">
+                <class>IperfFromContainer</class>
+                <desc>Iperf UDP Uplink</desc>
+                <server_container_name>rfsim4g-oai-enb</server_container_name>
+                <client_container_name>rfsim4g-oai-lte-ue0</client_container_name>
+                <server_options>-B 10.0.1.1 -u -i 1 -s</server_options>
+                <client_options>-B 10.0.1.2 -c 10.0.1.1 -u -i 1 -t 30 -b 1M</client_options>
+        </testCase>
+
+        <testCase id="100011">
+                <class>UndeployGenObject</class>
+                <desc>Undeploy all OAI 4G stack</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz_noS1</yaml_path>
+        </testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1_down.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1_down.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6db1dfd9de73d167e0c58424c650cdf7dd867fc4
--- /dev/null
+++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1_down.xml
@@ -0,0 +1,38 @@
+<!--
+
+ 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
+
+-->
+<testCaseList>
+        <htmlTabRef>rfsim-4glte-fdd05mhz-nos1-down</htmlTabRef>
+        <htmlTabName>CleanUp 4G RF</htmlTabName>
+        <htmlTabIcon>trash</htmlTabIcon>
+        <TestCaseRequestedList>
+ 100011
+        </TestCaseRequestedList>
+        <TestCaseExclusionList></TestCaseExclusionList>
+
+        <testCase id="100011">
+                <class>UndeployGenObject</class>
+                <desc>Undeploy all OAI 4G stack</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz_noS1</yaml_path>
+        </testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f00e277c36f3bb7e91ad96f4737c895017323967
--- /dev/null
+++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml
@@ -0,0 +1,129 @@
+<!--
+
+ 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
+
+-->
+<testCaseList>
+        <htmlTabRef>rfsim-4glte-fdd10mhz</htmlTabRef>
+        <htmlTabName>Monolithic eNB - FDD 10MHz</htmlTabName>
+        <htmlTabIcon>wrench</htmlTabIcon>
+        <TestCaseRequestedList>
+ 100011
+ 000011
+ 000001
+ 000012
+ 000002
+ 000013
+ 000001
+ 000014
+ 000002
+ 020011
+ 020012
+ 030011
+ 030012
+ 100011
+        </TestCaseRequestedList>
+        <TestCaseExclusionList></TestCaseExclusionList>
+
+        <testCase id="000011">
+                <class>DeployGenObject</class>
+                <desc>Deploy Cassandra Database</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_10MHz</yaml_path>
+                <services>cassandra db_init</services>
+                <nb_healthy>1</nb_healthy>
+        </testCase>
+
+        <testCase id="000001">
+                <class>IdleSleep</class>
+                <desc>Sleep</desc>
+                <idle_sleep_time_in_sec>30</idle_sleep_time_in_sec>
+        </testCase>
+
+        <testCase id="000002">
+                <class>IdleSleep</class>
+                <desc>Sleep</desc>
+                <idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
+        </testCase>
+
+        <testCase id="000012">
+                <class>DeployGenObject</class>
+                <desc>Deploy OAI 4G CoreNetwork</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_10MHz</yaml_path>
+                <services>oai_hss oai_mme oai_spgwc oai_spgwu trf_gen</services>
+                <nb_healthy>6</nb_healthy>
+        </testCase>
+
+        <testCase id="000013">
+                <class>DeployGenObject</class>
+                <desc>Deploy OAI 4G eNB RF sim (FDD 10MHz)</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_10MHz</yaml_path>
+                <services>enb</services>
+                <nb_healthy>7</nb_healthy>
+        </testCase>
+
+        <testCase id="000014">
+                <class>DeployGenObject</class>
+                <desc>Deploy OAI 4G NR-UE RF sim (FDD 10MHz)</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_10MHz</yaml_path>
+                <services>oai_ue0</services>
+                <nb_healthy>8</nb_healthy>
+        </testCase>
+
+        <testCase id="020011">
+                <class>PingFromContainer</class>
+                <desc>Ping Traffic-Gen from LTE-UE</desc>
+                <container_name>rfsim4g-oai-lte-ue0</container_name>
+                <options>-I oaitun_ue1 -c 20 192.168.61.11</options>
+                <loss_threshold>5</loss_threshold>
+        </testCase>
+
+        <testCase id="020012">
+                <class>PingFromContainer</class>
+                <desc>Ping LTE-UE from Traffic-Gen</desc>
+		<container_name>rfsim4g-trf-gen</container_name>
+                <options>-c 20 12.0.0.2</options>
+                <loss_threshold>5</loss_threshold>
+        </testCase>
+
+        <testCase id="030011">
+                <class>IperfFromContainer</class>
+                <desc>Iperf UDP Downlink</desc>
+                <server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
+                <client_container_name>rfsim4g-trf-gen</client_container_name>
+                <server_options>-B 12.0.0.2 -u -i 1 -s</server_options>
+                <client_options>-c 12.0.0.2 -u -i 1 -t 30 -b 2M</client_options>
+        </testCase>
+
+        <testCase id="030012">
+                <class>IperfFromContainer</class>
+                <desc>Iperf UDP Uplink</desc>
+                <server_container_name>rfsim4g-trf-gen</server_container_name>
+                <client_container_name>rfsim4g-oai-lte-ue0</client_container_name>
+                <server_options>-u -i 1 -s</server_options>
+                <client_options>-B 12.0.0.2 -c 192.168.61.11 -u -i 1 -t 30 -b 1M</client_options>
+        </testCase>
+
+        <testCase id="100011">
+                <class>UndeployGenObject</class>
+                <desc>Undeploy all OAI 4G stack</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_10MHz</yaml_path>
+        </testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz_down.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz_down.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7d03d56ff4ce72c2031c96fc6781ba8118ecaa32
--- /dev/null
+++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz_down.xml
@@ -0,0 +1,38 @@
+<!--
+
+ 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
+
+-->
+<testCaseList>
+        <htmlTabRef>rfsim-4glte-fdd10mhz-down</htmlTabRef>
+        <htmlTabName>CleanUp 4G RF</htmlTabName>
+        <htmlTabIcon>trash</htmlTabIcon>
+        <TestCaseRequestedList>
+ 100011
+        </TestCaseRequestedList>
+        <TestCaseExclusionList></TestCaseExclusionList>
+
+        <testCase id="100011">
+                <class>UndeployGenObject</class>
+                <desc>Undeploy all OAI 4G stack</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_10MHz</yaml_path>
+        </testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml
new file mode 100644
index 0000000000000000000000000000000000000000..52e1ac7de18ee874300c685e2c0ae62282556e81
--- /dev/null
+++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml
@@ -0,0 +1,129 @@
+<!--
+
+ 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
+
+-->
+<testCaseList>
+        <htmlTabRef>rfsim-4glte-fdd20mhz</htmlTabRef>
+        <htmlTabName>Monolithic eNB - FDD 20MHz</htmlTabName>
+        <htmlTabIcon>wrench</htmlTabIcon>
+        <TestCaseRequestedList>
+ 100011
+ 000011
+ 000001
+ 000012
+ 000002
+ 000013
+ 000001
+ 000014
+ 000002
+ 020011
+ 020012
+ 030011
+ 030012
+ 100011
+        </TestCaseRequestedList>
+        <TestCaseExclusionList></TestCaseExclusionList>
+
+        <testCase id="000011">
+                <class>DeployGenObject</class>
+                <desc>Deploy Cassandra Database</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_20MHz</yaml_path>
+                <services>cassandra db_init</services>
+                <nb_healthy>1</nb_healthy>
+        </testCase>
+
+        <testCase id="000001">
+                <class>IdleSleep</class>
+                <desc>Sleep</desc>
+                <idle_sleep_time_in_sec>30</idle_sleep_time_in_sec>
+        </testCase>
+
+        <testCase id="000002">
+                <class>IdleSleep</class>
+                <desc>Sleep</desc>
+                <idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
+        </testCase>
+
+        <testCase id="000012">
+                <class>DeployGenObject</class>
+                <desc>Deploy OAI 4G CoreNetwork</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_20MHz</yaml_path>
+                <services>oai_hss oai_mme oai_spgwc oai_spgwu trf_gen</services>
+                <nb_healthy>6</nb_healthy>
+        </testCase>
+
+        <testCase id="000013">
+                <class>DeployGenObject</class>
+                <desc>Deploy OAI 4G eNB RF sim (FDD 20MHz)</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_20MHz</yaml_path>
+                <services>enb</services>
+                <nb_healthy>7</nb_healthy>
+        </testCase>
+
+        <testCase id="000014">
+                <class>DeployGenObject</class>
+                <desc>Deploy OAI 4G NR-UE RF sim (FDD 20MHz)</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_20MHz</yaml_path>
+                <services>oai_ue0</services>
+                <nb_healthy>8</nb_healthy>
+        </testCase>
+
+        <testCase id="020011">
+                <class>PingFromContainer</class>
+                <desc>Ping Traffic-Gen from LTE-UE</desc>
+                <container_name>rfsim4g-oai-lte-ue0</container_name>
+                <options>-I oaitun_ue1 -c 20 192.168.61.11</options>
+                <loss_threshold>5</loss_threshold>
+        </testCase>
+
+        <testCase id="020012">
+                <class>PingFromContainer</class>
+                <desc>Ping LTE-UE from Traffic-Gen</desc>
+		<container_name>rfsim4g-trf-gen</container_name>
+                <options>-c 20 12.0.0.2</options>
+                <loss_threshold>5</loss_threshold>
+        </testCase>
+
+        <testCase id="030011">
+                <class>IperfFromContainer</class>
+                <desc>Iperf UDP Downlink</desc>
+                <server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
+                <client_container_name>rfsim4g-trf-gen</client_container_name>
+                <server_options>-B 12.0.0.2 -u -i 1 -s</server_options>
+                <client_options>-c 12.0.0.2 -u -i 1 -t 30 -b 2M</client_options>
+        </testCase>
+
+        <testCase id="030012">
+                <class>IperfFromContainer</class>
+                <desc>Iperf UDP Uplink</desc>
+                <server_container_name>rfsim4g-trf-gen</server_container_name>
+                <client_container_name>rfsim4g-oai-lte-ue0</client_container_name>
+                <server_options>-u -i 1 -s</server_options>
+                <client_options>-B 12.0.0.2 -c 192.168.61.11 -u -i 1 -t 30 -b 1M</client_options>
+        </testCase>
+
+        <testCase id="100011">
+                <class>UndeployGenObject</class>
+                <desc>Undeploy all OAI 4G stack</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_20MHz</yaml_path>
+        </testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz_down.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz_down.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a721c5091697d0e2eba6daeed239b34f4dfc9bf
--- /dev/null
+++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz_down.xml
@@ -0,0 +1,38 @@
+<!--
+
+ 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
+
+-->
+<testCaseList>
+        <htmlTabRef>rfsim-4glte-fdd20mhz-down</htmlTabRef>
+        <htmlTabName>CleanUp 4G RF</htmlTabName>
+        <htmlTabIcon>trash</htmlTabIcon>
+        <TestCaseRequestedList>
+ 100011
+        </TestCaseRequestedList>
+        <TestCaseExclusionList></TestCaseExclusionList>
+
+        <testCase id="100011">
+                <class>UndeployGenObject</class>
+                <desc>Undeploy all OAI 4G stack</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_fdd_20MHz</yaml_path>
+        </testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cdaee430efc3c092a5cfd60cb95e94d10c0c7975
--- /dev/null
+++ b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml
@@ -0,0 +1,130 @@
+<!--
+
+ 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
+
+-->
+<testCaseList>
+        <htmlTabRef>rfsim-4glte-tdd05mhz</htmlTabRef>
+        <htmlTabName>Monolithic eNB - TDD 05MHz</htmlTabName>
+        <htmlTabIcon>wrench</htmlTabIcon>
+		<repeatCount>2</repeatCount>
+        <TestCaseRequestedList>
+ 100011
+ 000011
+ 000001
+ 000012
+ 000002
+ 000013
+ 000001
+ 000014
+ 000002
+ 020011
+ 020012
+ 030011
+ 030012
+ 100011
+        </TestCaseRequestedList>
+        <TestCaseExclusionList></TestCaseExclusionList>
+
+        <testCase id="000011">
+                <class>DeployGenObject</class>
+                <desc>Deploy Cassandra Database</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_tdd_05MHz</yaml_path>
+                <services>cassandra db_init</services>
+                <nb_healthy>1</nb_healthy>
+        </testCase>
+
+        <testCase id="000001">
+                <class>IdleSleep</class>
+                <desc>Sleep</desc>
+                <idle_sleep_time_in_sec>30</idle_sleep_time_in_sec>
+        </testCase>
+
+        <testCase id="000002">
+                <class>IdleSleep</class>
+                <desc>Sleep</desc>
+                <idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
+        </testCase>
+
+        <testCase id="000012">
+                <class>DeployGenObject</class>
+                <desc>Deploy OAI 4G CoreNetwork</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_tdd_05MHz</yaml_path>
+                <services>oai_hss oai_mme oai_spgwc oai_spgwu trf_gen</services>
+                <nb_healthy>6</nb_healthy>
+        </testCase>
+
+        <testCase id="000013">
+                <class>DeployGenObject</class>
+                <desc>Deploy OAI 4G eNB RF sim (TDD 05MHz)</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_tdd_05MHz</yaml_path>
+                <services>enb</services>
+                <nb_healthy>7</nb_healthy>
+        </testCase>
+
+        <testCase id="000014">
+                <class>DeployGenObject</class>
+                <desc>Deploy OAI 4G NR-UE RF sim (TDD 05MHz)</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_tdd_05MHz</yaml_path>
+                <services>oai_ue0</services>
+                <nb_healthy>8</nb_healthy>
+        </testCase>
+
+        <testCase id="020011">
+                <class>PingFromContainer</class>
+                <desc>Ping Traffic-Gen from LTE-UE</desc>
+                <container_name>rfsim4g-oai-lte-ue0</container_name>
+                <options>-I oaitun_ue1 -c 20 192.168.61.11</options>
+                <loss_threshold>5</loss_threshold>
+        </testCase>
+
+        <testCase id="020012">
+                <class>PingFromContainer</class>
+                <desc>Ping LTE-UE from Traffic-Gen</desc>
+		<container_name>rfsim4g-trf-gen</container_name>
+                <options>-c 20 12.0.0.2</options>
+                <loss_threshold>5</loss_threshold>
+        </testCase>
+
+        <testCase id="030011">
+                <class>IperfFromContainer</class>
+                <desc>Iperf UDP Downlink</desc>
+                <server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
+                <client_container_name>rfsim4g-trf-gen</client_container_name>
+                <server_options>-B 12.0.0.2 -u -i 1 -s</server_options>
+                <client_options>-c 12.0.0.2 -u -i 1 -t 30 -b 2M</client_options>
+        </testCase>
+
+        <testCase id="030012">
+                <class>IperfFromContainer</class>
+                <desc>Iperf UDP Uplink</desc>
+                <server_container_name>rfsim4g-trf-gen</server_container_name>
+                <client_container_name>rfsim4g-oai-lte-ue0</client_container_name>
+                <server_options>-u -i 1 -s</server_options>
+                <client_options>-B 12.0.0.2 -c 192.168.61.11 -u -i 1 -t 30 -b 1M</client_options>
+        </testCase>
+
+        <testCase id="100011">
+                <class>UndeployGenObject</class>
+                <desc>Undeploy all OAI 4G stack</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_tdd_05MHz</yaml_path>
+        </testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz_down.xml b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz_down.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7e27bac73c4200339e1cf94e06a568150a5c130c
--- /dev/null
+++ b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz_down.xml
@@ -0,0 +1,38 @@
+<!--
+
+ 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
+
+-->
+<testCaseList>
+        <htmlTabRef>rfsim-4glte-tdd05mhz-down</htmlTabRef>
+        <htmlTabName>CleanUp 4G RF</htmlTabName>
+        <htmlTabIcon>trash</htmlTabIcon>
+        <TestCaseRequestedList>
+ 100011
+        </TestCaseRequestedList>
+        <TestCaseExclusionList></TestCaseExclusionList>
+
+        <testCase id="100011">
+                <class>UndeployGenObject</class>
+                <desc>Undeploy all OAI 4G stack</desc>
+                <yaml_path>yaml_files/4g_rfsimulator_tdd_05MHz</yaml_path>
+        </testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/container_5g_rfsim.xml b/ci-scripts/xml_files/container_5g_rfsim.xml
index d930886d0b4ed2abc44e8fee9b40f1eee1724b46..d1114616a85e6815a53d3bae280a2914a6973662 100644
--- a/ci-scripts/xml_files/container_5g_rfsim.xml
+++ b/ci-scripts/xml_files/container_5g_rfsim.xml
@@ -93,7 +93,7 @@
                 <server_container_name>rfsim5g-oai-nr-ue</server_container_name>
                 <client_container_name>rfsim5g-oai-ext-dn</client_container_name>
                 <server_options>-B 12.1.1.2 -u -i 1 -s</server_options>
-                <client_options>-c 12.1.1.2 -u -i 1 -t 30 -b 400K</client_options>
+                <client_options>-c 12.1.1.2 -u -i 1 -t 30 -b 3M</client_options>
         </testCase>
 
         <testCase id="030002">
@@ -102,7 +102,7 @@
                 <server_container_name>rfsim5g-oai-ext-dn</server_container_name>
                 <client_container_name>rfsim5g-oai-nr-ue</client_container_name>
                 <server_options>-u -i 1 -s</server_options>
-                <client_options>-B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 30 -b 20K</client_options>
+                <client_options>-B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 30 -b 1M</client_options>
         </testCase>
 
         <testCase id="100001">
diff --git a/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml b/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml
index 045466a8adaf46b6c8600c57d24dece37d4de949..5c53bf5eed4de0b43ae07e18fb3f89cfd4821a2c 100644
--- a/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml
+++ b/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml
@@ -79,6 +79,7 @@
 		<eNB_serverId>1</eNB_serverId>
 		<air_interface>nr</air_interface>
 		<eNB_Stats>yes</eNB_Stats>
+		<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
 		<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
 	</testCase>
 
diff --git a/ci-scripts/xml_files/fr1_nsa_2x2_quectel_attach_detach.xml b/ci-scripts/xml_files/fr1_nsa_2x2_quectel_attach_detach.xml
index 6fe23e022b600e379e6d9c624fde29d35d1f802a..02544f273baae039405add42c5d89ef67c07cf8c 100644
--- a/ci-scripts/xml_files/fr1_nsa_2x2_quectel_attach_detach.xml
+++ b/ci-scripts/xml_files/fr1_nsa_2x2_quectel_attach_detach.xml
@@ -99,6 +99,7 @@
 		<eNB_serverId>1</eNB_serverId>
 		<air_interface>nr</air_interface>
 		<eNB_Stats>yes</eNB_Stats>
+		<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
 		<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
 	</testCase>
 
diff --git a/ci-scripts/xml_files/fr1_nsa_quectel.xml b/ci-scripts/xml_files/fr1_nsa_quectel.xml
index 55f6f4376ea275760a7c41aa5e7856a5c1860548..574286fbc26e7fc068f2f10a3cd66329331063d0 100644
--- a/ci-scripts/xml_files/fr1_nsa_quectel.xml
+++ b/ci-scripts/xml_files/fr1_nsa_quectel.xml
@@ -37,6 +37,8 @@
  070003
  070002
  000001
+ 070002
+ 000001
  050000
  050001
  010002
@@ -155,6 +157,14 @@
 		<iperf_profile>single-ue</iperf_profile>
 	</testCase>
 
+	<testCase id="070002">
+		<class>Iperf</class>
+		<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
+		<iperf_args>-t 10 --bidir</iperf_args>
+		<direction>BIDIR</direction>
+		<id>idefix</id>
+		<iperf_profile>single-ue</iperf_profile>
+	</testCase>
 
 	<testCase id="080000">
 		<class>Terminate_eNB</class>
diff --git a/ci-scripts/xml_files/fr1_sa_oaiue_x300.xml b/ci-scripts/xml_files/fr1_sa_oaiue_x300.xml
index 509fef9e8ab5aebb2ef9d6709b8fecfcb81612c1..c43bdd2a7c932197bf6a91e4a7a4e6b2105281f2 100644
--- a/ci-scripts/xml_files/fr1_sa_oaiue_x300.xml
+++ b/ci-scripts/xml_files/fr1_sa_oaiue_x300.xml
@@ -26,19 +26,19 @@
 	<htmlTabIcon>tasks</htmlTabIcon>
 	<repeatCount>1</repeatCount>
 	<TestCaseRequestedList>
- 040000
+ 041000
  000002
- 010000
+ 011000
  000002
- 050000
- 050001
+ 051000
+ 051001
  000001
  010002
  080000
 	</TestCaseRequestedList>
 	<TestCaseExclusionList></TestCaseExclusionList>
 
-	<testCase id="010000">
+	<testCase id="011000">
 		<class>Initialize_OAI_UE</class>
 		<desc>Initialize OAI UE (X300)</desc>
 		<air_interface>nr</air_interface>
@@ -51,7 +51,7 @@
 	</testCase>
 
 
-	<testCase id="040000">
+	<testCase id="041000">
 		<class>Initialize_eNB</class>
 		<desc>Initialize gNB</desc>
 		<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf --sa --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
@@ -76,14 +76,14 @@
 	</testCase>
 
 
-	<testCase id="050000">
+	<testCase id="051000">
 		<class>Ping</class>
 		<desc>Ping from CN to UE: 20pings in 20sec</desc>
 		<ping_args>-c 20</ping_args>
 		<ping_packetloss_threshold>5</ping_packetloss_threshold>
 	</testCase>
 
-	<testCase id="050001">
+	<testCase id="051001">
 		<class>Ping</class>
 		<desc>Ping from CN to UE: 100pings in 20sec</desc>
 		<ping_args>-c 100 -i 0.2</ping_args>
diff --git a/ci-scripts/xml_files/fr1_sa_quectel.xml b/ci-scripts/xml_files/fr1_sa_quectel.xml
index 72b4c0a273fbdcacf39241ab0650b746a04e5f63..cd67637ec01f0611c960bdb36865d4b13c2136cd 100644
--- a/ci-scripts/xml_files/fr1_sa_quectel.xml
+++ b/ci-scripts/xml_files/fr1_sa_quectel.xml
@@ -31,10 +31,15 @@
  010000
  000001
  050000
+ 000001
  050001
+ 000001
  070000
+ 000001
  070001
  000001
+ 070002
+ 000001
  010002
  080000
 	</TestCaseRequestedList>
@@ -64,6 +69,7 @@
 		<air_interface>nr</air_interface>
 		<eNB_Trace>yes</eNB_Trace>
 		<eNB_Stats>yes</eNB_Stats>
+		<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
 		<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
 	</testCase>
 
@@ -82,7 +88,7 @@
 
 	<testCase id="050000">
 		<class>Ping</class>
-		<desc>Ping: 20pings in 20sec</desc>
+		<desc>Ping: 40pings in 40sec</desc>
 		<id>nrmodule2_quectel</id>
 		<ping_args>-c 40</ping_args>
 		<ping_packetloss_threshold>1</ping_packetloss_threshold>
@@ -120,6 +126,15 @@
 		<iperf_profile>single-ue</iperf_profile>
 	</testCase>
 
+	<testCase id="070002">
+		<class>Iperf</class>
+		<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
+		<iperf_args>-t 10 --bidir</iperf_args>
+		<direction>BIDIR</direction>
+		<id>nrmodule2_quectel</id>
+		<iperf_profile>single-ue</iperf_profile>
+	</testCase>
+
 
 	<testCase id="080000">
 		<class>Terminate_eNB</class>
diff --git a/ci-scripts/xml_files/fr1_sa_quectel_162prb.xml b/ci-scripts/xml_files/fr1_sa_quectel_162prb.xml
index f465b320b6555f414f7d696d401a62e93755e001..23cc6d25b8415bb7937007f197bc9d842e5b5b38 100644
--- a/ci-scripts/xml_files/fr1_sa_quectel_162prb.xml
+++ b/ci-scripts/xml_files/fr1_sa_quectel_162prb.xml
@@ -22,18 +22,21 @@
 -->
 <testCaseList>
 	<htmlTabRef>TEST-SA-FR1-Tab3</htmlTabRef>
-	<htmlTabName>SA Ping DL UL with QUECTEL</htmlTabName>
+	<htmlTabName>SA 162PRB</htmlTabName>
 	<htmlTabIcon>tasks</htmlTabIcon>
 	<repeatCount>1</repeatCount>
 	<TestCaseRequestedList>
- 040000
+ 042000
  000002
  010000
  000001
- 050000
- 050001
- 070000
- 070001
+ 052000
+ 000001
+ 072000
+ 000001
+ 072001
+ 000001
+ 072002
  000001
  010002
  080000
@@ -55,7 +58,7 @@
 	</testCase>
 
 
-	<testCase id="040000">
+	<testCase id="042000">
 		<class>Initialize_eNB</class>
 		<desc>Initialize gNB</desc>
 		<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf --sa -q --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
@@ -64,6 +67,7 @@
 		<air_interface>nr</air_interface>
 		<eNB_Trace>yes</eNB_Trace>
 		<eNB_Stats>yes</eNB_Stats>
+		<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
 		<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
 	</testCase>
 
@@ -80,39 +84,44 @@
 	</testCase>
 
 
-	<testCase id="050000">
+	<testCase id="052000">
 		<class>Ping</class>
-		<desc>Ping: 20pings in 20sec</desc>
+		<desc>Ping: 40pings in 40sec</desc>
 		<id>nrmodule2_quectel</id>
-		<ping_args>-c 20</ping_args>
-		<ping_packetloss_threshold>5</ping_packetloss_threshold>
+		<ping_args>-c 40</ping_args>
+		<ping_packetloss_threshold>1</ping_packetloss_threshold>
+		<ping_rttavg_threshold>20</ping_rttavg_threshold>
 	</testCase>
 
-	<testCase id="050001">
-		<class>Ping</class>
-		<desc>Ping: 100pings in 20sec</desc>
-		<id>nrmodule2_quectel</id>
-		<ping_args>-c 100 -i 0,2</ping_args>
-		<ping_packetloss_threshold>5</ping_packetloss_threshold>
-	</testCase>
 
-	<testCase id="070000">
+	<testCase id="072000">
 		<class>Iperf</class>
 		<desc>iperf (DL/140Mbps/UDP)(60 sec)(single-ue profile)</desc>
 		<iperf_args>-u -b 140M -t 60</iperf_args>
 		<direction>DL</direction>
 		<id>nrmodule2_quectel</id>
-		<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
 		<iperf_profile>single-ue</iperf_profile>
 	</testCase>
 
-	<testCase id="070001">
+	<testCase id="072001">
 		<class>Iperf</class>
 		<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
 		<iperf_args>-u -b 3M -t 60</iperf_args>
 		<direction>UL</direction>
 		<id>nrmodule2_quectel</id>
 		<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
+		<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
+		<iperf_profile>single-ue</iperf_profile>
+	</testCase>
+
+	<testCase id="072002">
+		<class>Iperf</class>
+		<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
+		<iperf_args>-t 10 --bidir</iperf_args>
+		<direction>BIDIR</direction>
+		<id>nrmodule2_quectel</id>
 		<iperf_profile>single-ue</iperf_profile>
 	</testCase>
 
diff --git a/ci-scripts/xml_files/fr1_sa_quectel_stages.xml b/ci-scripts/xml_files/fr1_sa_quectel_stages.xml
index dabe53f233089b8a83db34742823fe72e3fee0f0..1e10d021807b0a2e504a62dccf14074353530874 100644
--- a/ci-scripts/xml_files/fr1_sa_quectel_stages.xml
+++ b/ci-scripts/xml_files/fr1_sa_quectel_stages.xml
@@ -26,21 +26,21 @@
 	<htmlTabIcon>tasks</htmlTabIcon>
 	<repeatCount>1</repeatCount>
 	<TestCaseRequestedList>
- 040000
+ 041000
  000002
  010000
  000001
- 050000
+ 051000
  000001
- 070000
+ 071000
  000001
- 070001
+ 071001
  000001
- 070002
+ 071002
  000001
- 070003
+ 071003
  000001
- 070004
+ 071004
  000001
  010002
  080000
@@ -62,7 +62,7 @@
 	</testCase>
 
 
-	<testCase id="040000">
+	<testCase id="041000">
 		<class>Initialize_eNB</class>
 		<desc>Initialize gNB</desc>
 		<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf --sa -q --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
@@ -71,6 +71,7 @@
 		<air_interface>nr</air_interface>
 		<eNB_Trace>yes</eNB_Trace>
 		<eNB_Stats>yes</eNB_Stats>
+		<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
 		<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
 	</testCase>
 
@@ -87,9 +88,9 @@
 	</testCase>
 
 
-	<testCase id="050000">
+	<testCase id="051000">
 		<class>Ping</class>
-		<desc>Ping: 20pings in 20sec</desc>
+		<desc>Ping: 40pings in 40sec</desc>
 		<id>nrmodule2_quectel</id>
 		<ping_args>-c 40</ping_args>
 		<ping_packetloss_threshold>1</ping_packetloss_threshold>
@@ -97,7 +98,7 @@
 	</testCase>
 
 
-	<testCase id="070000">
+	<testCase id="071000">
 		<class>Iperf</class>
 		<desc>iperf (DL/10Mbps/UDP)(30 sec)(single-ue profile)</desc>
 		<iperf_args>-u -b 10M -t 30</iperf_args>
@@ -107,7 +108,7 @@
 		<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
 		<iperf_profile>single-ue</iperf_profile>
 	</testCase>
-	<testCase id="070001">
+	<testCase id="071001">
 		<class>Iperf</class>
 		<desc>iperf (DL/20Mbps/UDP)(30 sec)(single-ue profile)</desc>
 		<iperf_args>-u -b 20M -t 30</iperf_args>
@@ -117,7 +118,7 @@
 		<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
 		<iperf_profile>single-ue</iperf_profile>
 	</testCase>
-	<testCase id="070002">
+	<testCase id="071002">
 		<class>Iperf</class>
 		<desc>iperf (DL/40Mbps/UDP)(30 sec)(single-ue profile)</desc>
 		<iperf_args>-u -b 40M -t 30</iperf_args>
@@ -127,7 +128,7 @@
 		<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
 		<iperf_profile>single-ue</iperf_profile>
 	</testCase>
-	<testCase id="070003">
+	<testCase id="071003">
 		<class>Iperf</class>
 		<desc>iperf (DL/60Mbps/UDP)(30 sec)(single-ue profile)</desc>
 		<iperf_args>-u -b 60M -t 30</iperf_args>
@@ -137,14 +138,14 @@
 		<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
 		<iperf_profile>single-ue</iperf_profile>
 	</testCase>
-	<testCase id="070004">
+	<testCase id="071004">
 		<class>Iperf</class>
 		<desc>iperf (DL/90Mbps/UDP)(30 sec)(single-ue profile)</desc>
 		<iperf_args>-u -b 90M -t 30</iperf_args>
 		<direction>DL</direction>
 		<id>nrmodule2_quectel</id>
-		<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
-		<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
+		<iperf_packetloss_threshold>10</iperf_packetloss_threshold>
+		<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
 		<iperf_profile>single-ue</iperf_profile>
 	</testCase>
 
diff --git a/ci-scripts/xml_files/fr1_sa_quectel_stages_162prb.xml b/ci-scripts/xml_files/fr1_sa_quectel_stages_162prb.xml
index c28791e555ec67fb41261a6a1b7ab183c3f68004..5feed7558657b039d75c1d16ca8b3f9ffce85d40 100644
--- a/ci-scripts/xml_files/fr1_sa_quectel_stages_162prb.xml
+++ b/ci-scripts/xml_files/fr1_sa_quectel_stages_162prb.xml
@@ -73,6 +73,7 @@
 		<air_interface>nr</air_interface>
 		<eNB_Trace>yes</eNB_Trace>
 		<eNB_Stats>yes</eNB_Stats>
+		<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
 		<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
 	</testCase>
 
diff --git a/ci-scripts/xml_files/fr1_lte_2x2_quectel.xml b/ci-scripts/xml_files/lte_2x2_tm1_quectel.xml
similarity index 97%
rename from ci-scripts/xml_files/fr1_lte_2x2_quectel.xml
rename to ci-scripts/xml_files/lte_2x2_tm1_quectel.xml
index 57a66ece76d362212c0140143c2dbefdd1b75537..6cb7b2883b0a10fbc492188d48c907a61b7b3f9f 100644
--- a/ci-scripts/xml_files/fr1_lte_2x2_quectel.xml
+++ b/ci-scripts/xml_files/lte_2x2_tm1_quectel.xml
@@ -21,8 +21,8 @@
 
 -->
 <testCaseList>
-	<htmlTabRef>TEST-LTE-TM2</htmlTabRef>
-	<htmlTabName>LTE 2x2 Ping DL UL with QUECTEL</htmlTabName>
+	<htmlTabRef>TEST-LTE-TM1-Tab1</htmlTabRef>
+	<htmlTabName>LTE 2x2 TM1 Ping DL UL with QUECTEL</htmlTabName>
 	<htmlTabIcon>tasks</htmlTabIcon>
 	<repeatCount>1</repeatCount>
 	<TestCaseRequestedList>
diff --git a/ci-scripts/xml_files/lte_2x2_tm2_quectel.xml b/ci-scripts/xml_files/lte_2x2_tm2_quectel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e6520fc5fcd4b7e73099de64ad8d62da744bec47
--- /dev/null
+++ b/ci-scripts/xml_files/lte_2x2_tm2_quectel.xml
@@ -0,0 +1,145 @@
+<!--
+
+ 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
+
+-->
+<testCaseList>
+	<htmlTabRef>TEST-LTE-TM2-Tab2</htmlTabRef>
+	<htmlTabName>LTE 2x2 TM2 Ping DL UL with QUECTEL</htmlTabName>
+	<htmlTabIcon>tasks</htmlTabIcon>
+	<repeatCount>1</repeatCount>
+	<TestCaseRequestedList>
+ 030001
+ 000002
+ 010000
+ 000001
+ 050002
+ 050003
+ 000002
+ 070002
+ 070003
+ 000001
+ 010002
+ 080000
+	</TestCaseRequestedList>
+	<TestCaseExclusionList></TestCaseExclusionList>
+
+	<testCase id="010000">
+		<class>Initialize_UE</class>
+		<desc>Initialize Quectel</desc>
+		<id>nrmodule2_quectel</id>
+		<UE_Trace>yes</UE_Trace>
+	</testCase>
+
+
+	<testCase id="010002">
+		<class>Terminate_UE</class>
+		<desc>Terminate Quectel</desc>
+		<id>nrmodule2_quectel</id>
+	</testCase>
+
+
+	<testCase id="030001">
+		<class>Initialize_eNB</class>
+		<desc>Initialize eNB</desc>
+		<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band38.lte_2x2_tm2.100PRB.usrpn310.conf --usrp-tx-thread-config 1 --thread-pool 0,2,4,6 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
+		<eNB_instance>0</eNB_instance>
+		<eNB_serverId>0</eNB_serverId>
+		<air_interface>lte</air_interface>
+		<eNB_Trace>yes</eNB_Trace>
+		<eNB_Stats>yes</eNB_Stats>
+		<USRP_IPAddress>192.168.18.241</USRP_IPAddress>
+	</testCase>
+
+
+	<testCase id="000001">
+		<class>IdleSleep</class>
+		<desc>Sleep</desc>
+		<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
+	</testCase>
+
+	<testCase id="000002">
+		<class>IdleSleep</class>
+		<desc>Sleep</desc>
+		<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
+	</testCase>
+
+
+	<testCase id="050002">
+		<class>Ping</class>
+		<desc>Ping: 20 pings</desc>
+		<id>nrmodule2_quectel</id>
+		<ping_args>-c 20</ping_args>
+		<ping_packetloss_threshold>1</ping_packetloss_threshold>
+		<ping_rttavg_threshold>40</ping_rttavg_threshold>
+	</testCase>
+	<testCase id="050003">
+		<class>Ping</class>
+		<desc>Ping: 100 pings, size 1024</desc>
+		<id>nrmodule2_quectel</id>
+		<ping_args>-c 100 -s 1024 -i 0,2</ping_args>
+		<ping_packetloss_threshold>1</ping_packetloss_threshold>
+		<ping_rttavg_threshold>30</ping_rttavg_threshold>
+	</testCase>
+
+
+	<testCase id="070002">
+		<class>Iperf</class>
+		<desc>iperf (DL/1Mbps/UDP)(60 sec)(single-ue profile)</desc>
+		<iperf_args>-u -b 1M -t 60</iperf_args>
+		<direction>DL</direction>
+		<id>nrmodule2_quectel</id>
+		<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
+		<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
+		<iperf_profile>single-ue</iperf_profile>
+	</testCase>
+
+	<testCase id="070003">
+		<class>Iperf</class>
+		<desc>iperf (UL/7Mbps/UDP)(60 sec)(single-ue profile)</desc>
+		<iperf_args>-u -b 7M -t 60</iperf_args>
+		<direction>UL</direction>
+		<id>nrmodule2_quectel</id>
+		<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
+		<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
+		<iperf_profile>single-ue</iperf_profile>
+	</testCase>
+
+
+
+
+	<testCase id="080000">
+		<class>Terminate_eNB</class>
+		<desc>Terminate eNB</desc>
+		<eNB_instance>0</eNB_instance>
+		<eNB_serverId>0</eNB_serverId>
+		<air_interface>lte</air_interface>
+	</testCase>
+
+	<testCase id="080001">
+		<class>Terminate_eNB</class>
+		<desc>Terminate gNB</desc>
+		<eNB_instance>1</eNB_instance>
+		<eNB_serverId>1</eNB_serverId>
+		<air_interface>nr</air_interface>
+	</testCase>
+
+</testCaseList>
+
diff --git a/ci-scripts/yaml_files/4g_rfsimulator/README.md b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md
similarity index 100%
rename from ci-scripts/yaml_files/4g_rfsimulator/README.md
rename to ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md
diff --git a/ci-scripts/yaml_files/4g_rfsimulator/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/docker-compose.yml
similarity index 100%
rename from ci-scripts/yaml_files/4g_rfsimulator/docker-compose.yml
rename to ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/docker-compose.yml
diff --git a/ci-scripts/yaml_files/4g_rfsimulator/oai_db.cql b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/oai_db.cql
similarity index 100%
rename from ci-scripts/yaml_files/4g_rfsimulator/oai_db.cql
rename to ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/oai_db.cql
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6e3916b8ca71af1828a977282d5457c14441472b
--- /dev/null
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1/docker-compose.yml
@@ -0,0 +1,75 @@
+version: '3.8'
+
+services:
+    enb:
+        image: oai-enb:develop
+        privileged: true
+        container_name: rfsim4g-oai-enb
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.20
+        environment:
+            TZ: Europe/Paris
+            USE_FDD_MONO: 'yes'
+            RFSIMULATOR: enb
+            ENB_NAME: eNB-rf-sim
+            MCC: '208'
+            MNC: '96'
+            MNC_LENGTH: 2
+            TAC: 1
+            UTRA_BAND_ID: 7
+            DL_FREQUENCY_IN_MHZ: 2680
+            UL_FREQUENCY_OFFSET_IN_MHZ: 120
+            NID_CELL: 10
+            NB_PRB: 25
+            MME_S1C_IP_ADDRESS: 192.168.61.3
+            ENB_S1C_IF_NAME: eth0
+            ENB_S1C_IP_ADDRESS: 192.168.61.20
+            ENB_S1U_IF_NAME: eth0
+            ENB_S1U_IP_ADDRESS: 192.168.61.20
+            ENB_X2_IP_ADDRESS: 192.168.61.20
+            FLEXRAN_ENABLED: 'no'
+            FLEXRAN_INTERFACE_NAME: eth0
+            FLEXRAN_IPV4_ADDRESS: 192.168.61.10
+            USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time --noS1
+        healthcheck:
+            test: /bin/bash -c "pgrep lte-softmodem"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    oai_ue0:
+        image: oai-lte-ue:develop
+        privileged: true
+        container_name: rfsim4g-oai-lte-ue0
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.30
+        expose:
+            - "10000"
+        environment:
+            TZ: Europe/Paris
+            HOSTNAME: oai_ue0
+            RFSIMULATOR: 192.168.61.20
+            MCC: '208'
+            MNC: '96'
+            SHORT_IMSI: '0100000001'
+            LTE_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
+            OPC: 'c42449363bbad02b66d16bc975d77cc1'
+            MSISDN: '001011234561010'
+            HPLMN: 20896
+            USE_ADDITIONAL_OPTIONS: --rfsim -C 2680000000 -r 25 --ue-rxgain 140 --ue-txgain 120 --nokrnmod 1 --log_config.global_log_options level,nocolor,time --noS1
+        healthcheck:
+            test: /bin/bash -c "pgrep lte-uesoftmodem"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+networks:
+    public_net:
+        name: rfsim4g-oai-public-net
+        ipam:
+            config:
+                - subnet: 192.168.61.0/26
+        driver_opts:
+            com.docker.network.bridge.name: "rfsim4g-public"
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4c1ceb424a09e08d3d5d5a316500fb7efda90f9e
--- /dev/null
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml
@@ -0,0 +1,272 @@
+version: '3.8'
+
+services:
+    cassandra:
+        image: cassandra:2.1
+        container_name: rfsim4g-cassandra
+        networks:
+            private_net:
+                ipv4_address: 192.168.68.2
+        environment:
+            CASSANDRA_CLUSTER_NAME: "OAI HSS Cluster"
+            CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch
+        healthcheck:
+            test: /bin/bash -c "nodetool status"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    db_init:
+        image: cassandra:2.1
+        container_name: rfsim4g-db-init
+        depends_on: [cassandra]
+        deploy:
+            restart_policy:
+                condition: on-failure
+                max_attempts: 10
+        networks:
+            private_net:
+                ipv4_address: 192.168.68.4
+        volumes:
+            - ../4g_rfsimulator_fdd_05MHz/oai_db.cql:/home/oai_db.cql
+        entrypoint: /bin/bash -c "cqlsh --file /home/oai_db.cql 192.168.68.2 && echo 'OK'"
+
+    oai_hss:
+        image: oai-hss:latest
+        container_name: rfsim4g-oai-hss
+        privileged: true
+        depends_on: [cassandra]
+        networks:
+            private_net:
+                ipv4_address: 192.168.68.3
+            public_net:
+                ipv4_address: 192.168.61.2
+        environment:
+            REALM: openairinterface.org
+            HSS_FQDN: hss.openairinterface.org
+            PREFIX: /openair-hss/etc
+            cassandra_Server_IP: 192.168.68.2
+            OP_KEY: 1006020f0a478bf6b699f15c062e42b3
+            LTE_K: fec86ba6eb707ed08905757b1bb44b8f
+            APN1: oai.ipv4
+            APN2: internet
+            FIRST_IMSI: 208960100000001
+            NB_USERS: 10
+        healthcheck:
+            test: /bin/bash -c "pgrep oai_hss"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    oai_mme:
+        image: oai-mme:latest
+        container_name: rfsim4g-oai-mme
+        privileged: true
+        depends_on: [oai_hss]
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.3
+        environment:
+            REALM: openairinterface.org
+            PREFIX: /openair-mme/etc
+            INSTANCE: 1
+            PID_DIRECTORY: /var/run
+            HSS_IP_ADDR: 192.168.61.2
+            HSS_HOSTNAME: hss
+            HSS_FQDN: hss.openairinterface.org
+            HSS_REALM: openairinterface.org
+            MCC: '208'
+            MNC: '96'
+            MME_GID: 32768
+            MME_CODE: 3
+            TAC_0: 1
+            TAC_1: 2
+            TAC_2: 3
+            MME_FQDN: mme.openairinterface.org
+            MME_S6A_IP_ADDR: 192.168.61.3
+            MME_INTERFACE_NAME_FOR_S1_MME: eth0
+            MME_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.3
+            MME_INTERFACE_NAME_FOR_S11: eth0
+            MME_IPV4_ADDRESS_FOR_S11: 192.168.61.3
+            MME_INTERFACE_NAME_FOR_S10: lo
+            MME_IPV4_ADDRESS_FOR_S10: 127.0.0.10
+            OUTPUT: CONSOLE
+            SGW_IPV4_ADDRESS_FOR_S11_0: 192.168.61.4
+            PEER_MME_IPV4_ADDRESS_FOR_S10_0: 0.0.0.0
+            PEER_MME_IPV4_ADDRESS_FOR_S10_1: 0.0.0.0
+            MCC_SGW_0: '208'
+            MNC3_SGW_0: '096'
+            TAC_LB_SGW_0: '01'
+            TAC_HB_SGW_0: '00'
+            MCC_MME_0: '208'
+            MNC3_MME_0: '096'
+            TAC_LB_MME_0: '02'
+            TAC_HB_MME_0: '00'
+            MCC_MME_1: '208'
+            MNC3_MME_1: '096'
+            TAC_LB_MME_1: '03'
+            TAC_HB_MME_1: '00'
+            TAC_LB_SGW_TEST_0: '03'
+            TAC_HB_SGW_TEST_0: '00'
+            SGW_IPV4_ADDRESS_FOR_S11_TEST_0: 0.0.0.0
+        healthcheck:
+            test: /bin/bash -c "pgrep oai_mme"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    oai_spgwc:
+        image: oai-spgwc:latest
+        privileged: true
+        depends_on: [oai_mme]
+        container_name: rfsim4g-oai-spgwc
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.4
+        environment:
+            TZ: Europe/Paris
+            SGW_INTERFACE_NAME_FOR_S11: eth0
+            PGW_INTERFACE_NAME_FOR_SX: eth0
+            DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
+            DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
+            PUSH_PROTOCOL_OPTION: 'true'
+            APN_NI_1: oai.ipv4
+            APN_NI_2: oai.ipv4_2
+            DEFAULT_APN_NI_1: oai.ipv4
+            UE_IP_ADDRESS_POOL_1: '12.0.0.2 - 12.0.0.254'
+            UE_IP_ADDRESS_POOL_2: '12.1.1.2 - 12.1.1.254'
+            MCC: '208'
+            MNC: '96'
+            MNC03: '096'
+            TAC: 1
+            GW_ID: 1
+            REALM: openairinterface.org
+        healthcheck:
+            test: /bin/bash -c "pgrep oai_spgwc"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    oai_spgwu:
+        image: oai-spgwu-tiny:latest
+        privileged: true
+        container_name: rfsim4g-oai-spgwu-tiny
+        depends_on: [oai_spgwc]
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.5
+        environment:
+            TZ: Europe/Paris
+            PID_DIRECTORY: /var/run
+            INSTANCE: 1
+            SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP: eth0
+            PGW_INTERFACE_NAME_FOR_SGI: eth0
+            SGW_INTERFACE_NAME_FOR_SX: eth0
+            SPGWC0_IP_ADDRESS: 192.168.61.4
+            NETWORK_UE_IP: '12.0.0.0/24'
+            NETWORK_UE_NAT_OPTION: 'yes'
+            MCC: '208'
+            MNC: '96'
+            MNC03: '096'
+            TAC: 1
+            GW_ID: 1
+            REALM: openairinterface.org
+        healthcheck:
+            test: /bin/bash -c "pgrep oai_spgwu"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    trf_gen:
+        image: trf-gen:production
+        privileged: true
+        container_name: rfsim4g-trf-gen
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.11
+        entrypoint: /bin/bash -c "ip route add 12.0.0.0/24 via 192.168.61.5 dev eth0; sleep infinity"
+        healthcheck:
+            test: /bin/bash -c "ping -c 2 192.168.61.5"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    enb:
+        image: oai-enb:develop
+        privileged: true
+        container_name: rfsim4g-oai-enb
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.20
+        environment:
+            TZ: Europe/Paris
+            USE_FDD_MONO: 'yes'
+            RFSIMULATOR: enb
+            ENB_NAME: eNB-rf-sim
+            MCC: '208'
+            MNC: '96'
+            MNC_LENGTH: 2
+            TAC: 1
+            UTRA_BAND_ID: 7
+            DL_FREQUENCY_IN_MHZ: 2680
+            UL_FREQUENCY_OFFSET_IN_MHZ: 120
+            NID_CELL: 10
+            NB_PRB: 50
+            MME_S1C_IP_ADDRESS: 192.168.61.3
+            ENB_S1C_IF_NAME: eth0
+            ENB_S1C_IP_ADDRESS: 192.168.61.20
+            ENB_S1U_IF_NAME: eth0
+            ENB_S1U_IP_ADDRESS: 192.168.61.20
+            ENB_X2_IP_ADDRESS: 192.168.61.20
+            FLEXRAN_ENABLED: 'no'
+            FLEXRAN_INTERFACE_NAME: eth0
+            FLEXRAN_IPV4_ADDRESS: 192.168.61.10
+            USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
+        healthcheck:
+            test: /bin/bash -c "pgrep lte-softmodem"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    oai_ue0:
+        image: oai-lte-ue:develop
+        privileged: true
+        container_name: rfsim4g-oai-lte-ue0
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.30
+        expose:
+            - "10000"
+        environment:
+            TZ: Europe/Paris
+            HOSTNAME: oai_ue0
+            RFSIMULATOR: 192.168.61.20
+            MCC: '208'
+            MNC: '96'
+            SHORT_IMSI: '0100000001'
+            LTE_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
+            OPC: 'c42449363bbad02b66d16bc975d77cc1'
+            MSISDN: '001011234561010'
+            HPLMN: 20896
+            USE_ADDITIONAL_OPTIONS: --rfsim -C 2680000000 -r 50 --ue-rxgain 140 --ue-txgain 120 --nokrnmod 1 --log_config.global_log_options level,nocolor,time
+        healthcheck:
+            test: /bin/bash -c "pgrep lte-uesoftmodem"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+networks:
+    private_net:
+        name: rfsim4g-oai-private-net
+        ipam:
+            config:
+                - subnet: 192.168.68.0/26
+        driver_opts:
+            com.docker.network.bridge.name: "rfsim4g-private"
+    public_net:
+        name: rfsim4g-oai-public-net
+        ipam:
+            config:
+                - subnet: 192.168.61.0/26
+        driver_opts:
+            com.docker.network.bridge.name: "rfsim4g-public"
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4a61181afbb620fa64d839e3b82fac5291eddfc5
--- /dev/null
+++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml
@@ -0,0 +1,272 @@
+version: '3.8'
+
+services:
+    cassandra:
+        image: cassandra:2.1
+        container_name: rfsim4g-cassandra
+        networks:
+            private_net:
+                ipv4_address: 192.168.68.2
+        environment:
+            CASSANDRA_CLUSTER_NAME: "OAI HSS Cluster"
+            CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch
+        healthcheck:
+            test: /bin/bash -c "nodetool status"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    db_init:
+        image: cassandra:2.1
+        container_name: rfsim4g-db-init
+        depends_on: [cassandra]
+        deploy:
+            restart_policy:
+                condition: on-failure
+                max_attempts: 10
+        networks:
+            private_net:
+                ipv4_address: 192.168.68.4
+        volumes:
+            - ../4g_rfsimulator_fdd_05MHz/oai_db.cql:/home/oai_db.cql
+        entrypoint: /bin/bash -c "cqlsh --file /home/oai_db.cql 192.168.68.2 && echo 'OK'"
+
+    oai_hss:
+        image: oai-hss:latest
+        container_name: rfsim4g-oai-hss
+        privileged: true
+        depends_on: [cassandra]
+        networks:
+            private_net:
+                ipv4_address: 192.168.68.3
+            public_net:
+                ipv4_address: 192.168.61.2
+        environment:
+            REALM: openairinterface.org
+            HSS_FQDN: hss.openairinterface.org
+            PREFIX: /openair-hss/etc
+            cassandra_Server_IP: 192.168.68.2
+            OP_KEY: 1006020f0a478bf6b699f15c062e42b3
+            LTE_K: fec86ba6eb707ed08905757b1bb44b8f
+            APN1: oai.ipv4
+            APN2: internet
+            FIRST_IMSI: 208960100000001
+            NB_USERS: 10
+        healthcheck:
+            test: /bin/bash -c "pgrep oai_hss"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    oai_mme:
+        image: oai-mme:latest
+        container_name: rfsim4g-oai-mme
+        privileged: true
+        depends_on: [oai_hss]
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.3
+        environment:
+            REALM: openairinterface.org
+            PREFIX: /openair-mme/etc
+            INSTANCE: 1
+            PID_DIRECTORY: /var/run
+            HSS_IP_ADDR: 192.168.61.2
+            HSS_HOSTNAME: hss
+            HSS_FQDN: hss.openairinterface.org
+            HSS_REALM: openairinterface.org
+            MCC: '208'
+            MNC: '96'
+            MME_GID: 32768
+            MME_CODE: 3
+            TAC_0: 1
+            TAC_1: 2
+            TAC_2: 3
+            MME_FQDN: mme.openairinterface.org
+            MME_S6A_IP_ADDR: 192.168.61.3
+            MME_INTERFACE_NAME_FOR_S1_MME: eth0
+            MME_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.3
+            MME_INTERFACE_NAME_FOR_S11: eth0
+            MME_IPV4_ADDRESS_FOR_S11: 192.168.61.3
+            MME_INTERFACE_NAME_FOR_S10: lo
+            MME_IPV4_ADDRESS_FOR_S10: 127.0.0.10
+            OUTPUT: CONSOLE
+            SGW_IPV4_ADDRESS_FOR_S11_0: 192.168.61.4
+            PEER_MME_IPV4_ADDRESS_FOR_S10_0: 0.0.0.0
+            PEER_MME_IPV4_ADDRESS_FOR_S10_1: 0.0.0.0
+            MCC_SGW_0: '208'
+            MNC3_SGW_0: '096'
+            TAC_LB_SGW_0: '01'
+            TAC_HB_SGW_0: '00'
+            MCC_MME_0: '208'
+            MNC3_MME_0: '096'
+            TAC_LB_MME_0: '02'
+            TAC_HB_MME_0: '00'
+            MCC_MME_1: '208'
+            MNC3_MME_1: '096'
+            TAC_LB_MME_1: '03'
+            TAC_HB_MME_1: '00'
+            TAC_LB_SGW_TEST_0: '03'
+            TAC_HB_SGW_TEST_0: '00'
+            SGW_IPV4_ADDRESS_FOR_S11_TEST_0: 0.0.0.0
+        healthcheck:
+            test: /bin/bash -c "pgrep oai_mme"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    oai_spgwc:
+        image: oai-spgwc:latest
+        privileged: true
+        depends_on: [oai_mme]
+        container_name: rfsim4g-oai-spgwc
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.4
+        environment:
+            TZ: Europe/Paris
+            SGW_INTERFACE_NAME_FOR_S11: eth0
+            PGW_INTERFACE_NAME_FOR_SX: eth0
+            DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
+            DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
+            PUSH_PROTOCOL_OPTION: 'true'
+            APN_NI_1: oai.ipv4
+            APN_NI_2: oai.ipv4_2
+            DEFAULT_APN_NI_1: oai.ipv4
+            UE_IP_ADDRESS_POOL_1: '12.0.0.2 - 12.0.0.254'
+            UE_IP_ADDRESS_POOL_2: '12.1.1.2 - 12.1.1.254'
+            MCC: '208'
+            MNC: '96'
+            MNC03: '096'
+            TAC: 1
+            GW_ID: 1
+            REALM: openairinterface.org
+        healthcheck:
+            test: /bin/bash -c "pgrep oai_spgwc"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    oai_spgwu:
+        image: oai-spgwu-tiny:latest
+        privileged: true
+        container_name: rfsim4g-oai-spgwu-tiny
+        depends_on: [oai_spgwc]
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.5
+        environment:
+            TZ: Europe/Paris
+            PID_DIRECTORY: /var/run
+            INSTANCE: 1
+            SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP: eth0
+            PGW_INTERFACE_NAME_FOR_SGI: eth0
+            SGW_INTERFACE_NAME_FOR_SX: eth0
+            SPGWC0_IP_ADDRESS: 192.168.61.4
+            NETWORK_UE_IP: '12.0.0.0/24'
+            NETWORK_UE_NAT_OPTION: 'yes'
+            MCC: '208'
+            MNC: '96'
+            MNC03: '096'
+            TAC: 1
+            GW_ID: 1
+            REALM: openairinterface.org
+        healthcheck:
+            test: /bin/bash -c "pgrep oai_spgwu"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    trf_gen:
+        image: trf-gen:production
+        privileged: true
+        container_name: rfsim4g-trf-gen
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.11
+        entrypoint: /bin/bash -c "ip route add 12.0.0.0/24 via 192.168.61.5 dev eth0; sleep infinity"
+        healthcheck:
+            test: /bin/bash -c "ping -c 2 192.168.61.5"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    enb:
+        image: oai-enb:develop
+        privileged: true
+        container_name: rfsim4g-oai-enb
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.20
+        environment:
+            TZ: Europe/Paris
+            USE_FDD_MONO: 'yes'
+            RFSIMULATOR: enb
+            ENB_NAME: eNB-rf-sim
+            MCC: '208'
+            MNC: '96'
+            MNC_LENGTH: 2
+            TAC: 1
+            UTRA_BAND_ID: 7
+            DL_FREQUENCY_IN_MHZ: 2680
+            UL_FREQUENCY_OFFSET_IN_MHZ: 120
+            NID_CELL: 10
+            NB_PRB: 100
+            MME_S1C_IP_ADDRESS: 192.168.61.3
+            ENB_S1C_IF_NAME: eth0
+            ENB_S1C_IP_ADDRESS: 192.168.61.20
+            ENB_S1U_IF_NAME: eth0
+            ENB_S1U_IP_ADDRESS: 192.168.61.20
+            ENB_X2_IP_ADDRESS: 192.168.61.20
+            FLEXRAN_ENABLED: 'no'
+            FLEXRAN_INTERFACE_NAME: eth0
+            FLEXRAN_IPV4_ADDRESS: 192.168.61.10
+            USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
+        healthcheck:
+            test: /bin/bash -c "pgrep lte-softmodem"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    oai_ue0:
+        image: oai-lte-ue:develop
+        privileged: true
+        container_name: rfsim4g-oai-lte-ue0
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.30
+        expose:
+            - "10000"
+        environment:
+            TZ: Europe/Paris
+            HOSTNAME: oai_ue0
+            RFSIMULATOR: 192.168.61.20
+            MCC: '208'
+            MNC: '96'
+            SHORT_IMSI: '0100000001'
+            LTE_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
+            OPC: 'c42449363bbad02b66d16bc975d77cc1'
+            MSISDN: '001011234561010'
+            HPLMN: 20896
+            USE_ADDITIONAL_OPTIONS: --rfsim -C 2680000000 -r 100 --ue-rxgain 140 --ue-txgain 120 --nokrnmod 1 --log_config.global_log_options level,nocolor,time
+        healthcheck:
+            test: /bin/bash -c "pgrep lte-uesoftmodem"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+networks:
+    private_net:
+        name: rfsim4g-oai-private-net
+        ipam:
+            config:
+                - subnet: 192.168.68.0/26
+        driver_opts:
+            com.docker.network.bridge.name: "rfsim4g-private"
+    public_net:
+        name: rfsim4g-oai-public-net
+        ipam:
+            config:
+                - subnet: 192.168.61.0/26
+        driver_opts:
+            com.docker.network.bridge.name: "rfsim4g-public"
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3424780791e5b1efaf468781bb99b698fade02e0
--- /dev/null
+++ b/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml
@@ -0,0 +1,271 @@
+version: '3.8'
+
+services:
+    cassandra:
+        image: cassandra:2.1
+        container_name: rfsim4g-cassandra
+        networks:
+            private_net:
+                ipv4_address: 192.168.68.2
+        environment:
+            CASSANDRA_CLUSTER_NAME: "OAI HSS Cluster"
+            CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch
+        healthcheck:
+            test: /bin/bash -c "nodetool status"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    db_init:
+        image: cassandra:2.1
+        container_name: rfsim4g-db-init
+        depends_on: [cassandra]
+        deploy:
+            restart_policy:
+                condition: on-failure
+                max_attempts: 10
+        networks:
+            private_net:
+                ipv4_address: 192.168.68.4
+        volumes:
+            - ../4g_rfsimulator_fdd_05MHz/oai_db.cql:/home/oai_db.cql
+        entrypoint: /bin/bash -c "cqlsh --file /home/oai_db.cql 192.168.68.2 && echo 'OK'"
+
+    oai_hss:
+        image: oai-hss:latest
+        container_name: rfsim4g-oai-hss
+        privileged: true
+        depends_on: [cassandra]
+        networks:
+            private_net:
+                ipv4_address: 192.168.68.3
+            public_net:
+                ipv4_address: 192.168.61.2
+        environment:
+            REALM: openairinterface.org
+            HSS_FQDN: hss.openairinterface.org
+            PREFIX: /openair-hss/etc
+            cassandra_Server_IP: 192.168.68.2
+            OP_KEY: 1006020f0a478bf6b699f15c062e42b3
+            LTE_K: fec86ba6eb707ed08905757b1bb44b8f
+            APN1: oai.ipv4
+            APN2: internet
+            FIRST_IMSI: 208960100000001
+            NB_USERS: 10
+        healthcheck:
+            test: /bin/bash -c "pgrep oai_hss"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    oai_mme:
+        image: oai-mme:latest
+        container_name: rfsim4g-oai-mme
+        privileged: true
+        depends_on: [oai_hss]
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.3
+        environment:
+            REALM: openairinterface.org
+            PREFIX: /openair-mme/etc
+            INSTANCE: 1
+            PID_DIRECTORY: /var/run
+            HSS_IP_ADDR: 192.168.61.2
+            HSS_HOSTNAME: hss
+            HSS_FQDN: hss.openairinterface.org
+            HSS_REALM: openairinterface.org
+            MCC: '208'
+            MNC: '96'
+            MME_GID: 32768
+            MME_CODE: 3
+            TAC_0: 1
+            TAC_1: 2
+            TAC_2: 3
+            MME_FQDN: mme.openairinterface.org
+            MME_S6A_IP_ADDR: 192.168.61.3
+            MME_INTERFACE_NAME_FOR_S1_MME: eth0
+            MME_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.3
+            MME_INTERFACE_NAME_FOR_S11: eth0
+            MME_IPV4_ADDRESS_FOR_S11: 192.168.61.3
+            MME_INTERFACE_NAME_FOR_S10: lo
+            MME_IPV4_ADDRESS_FOR_S10: 127.0.0.10
+            OUTPUT: CONSOLE
+            SGW_IPV4_ADDRESS_FOR_S11_0: 192.168.61.4
+            PEER_MME_IPV4_ADDRESS_FOR_S10_0: 0.0.0.0
+            PEER_MME_IPV4_ADDRESS_FOR_S10_1: 0.0.0.0
+            MCC_SGW_0: '208'
+            MNC3_SGW_0: '096'
+            TAC_LB_SGW_0: '01'
+            TAC_HB_SGW_0: '00'
+            MCC_MME_0: '208'
+            MNC3_MME_0: '096'
+            TAC_LB_MME_0: '02'
+            TAC_HB_MME_0: '00'
+            MCC_MME_1: '208'
+            MNC3_MME_1: '096'
+            TAC_LB_MME_1: '03'
+            TAC_HB_MME_1: '00'
+            TAC_LB_SGW_TEST_0: '03'
+            TAC_HB_SGW_TEST_0: '00'
+            SGW_IPV4_ADDRESS_FOR_S11_TEST_0: 0.0.0.0
+        healthcheck:
+            test: /bin/bash -c "pgrep oai_mme"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    oai_spgwc:
+        image: oai-spgwc:latest
+        privileged: true
+        depends_on: [oai_mme]
+        container_name: rfsim4g-oai-spgwc
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.4
+        environment:
+            TZ: Europe/Paris
+            SGW_INTERFACE_NAME_FOR_S11: eth0
+            PGW_INTERFACE_NAME_FOR_SX: eth0
+            DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
+            DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
+            PUSH_PROTOCOL_OPTION: 'true'
+            APN_NI_1: oai.ipv4
+            APN_NI_2: oai.ipv4_2
+            DEFAULT_APN_NI_1: oai.ipv4
+            UE_IP_ADDRESS_POOL_1: '12.0.0.2 - 12.0.0.254'
+            UE_IP_ADDRESS_POOL_2: '12.1.1.2 - 12.1.1.254'
+            MCC: '208'
+            MNC: '96'
+            MNC03: '096'
+            TAC: 1
+            GW_ID: 1
+            REALM: openairinterface.org
+        healthcheck:
+            test: /bin/bash -c "pgrep oai_spgwc"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    oai_spgwu:
+        image: oai-spgwu-tiny:latest
+        privileged: true
+        container_name: rfsim4g-oai-spgwu-tiny
+        depends_on: [oai_spgwc]
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.5
+        environment:
+            TZ: Europe/Paris
+            PID_DIRECTORY: /var/run
+            INSTANCE: 1
+            SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP: eth0
+            PGW_INTERFACE_NAME_FOR_SGI: eth0
+            SGW_INTERFACE_NAME_FOR_SX: eth0
+            SPGWC0_IP_ADDRESS: 192.168.61.4
+            NETWORK_UE_IP: '12.0.0.0/24'
+            NETWORK_UE_NAT_OPTION: 'yes'
+            MCC: '208'
+            MNC: '96'
+            MNC03: '096'
+            TAC: 1
+            GW_ID: 1
+            REALM: openairinterface.org
+        healthcheck:
+            test: /bin/bash -c "pgrep oai_spgwu"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    trf_gen:
+        image: trf-gen:production
+        privileged: true
+        container_name: rfsim4g-trf-gen
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.11
+        entrypoint: /bin/bash -c "ip route add 12.0.0.0/24 via 192.168.61.5 dev eth0; sleep infinity"
+        healthcheck:
+            test: /bin/bash -c "ping -c 2 192.168.61.5"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    enb:
+        image: oai-enb:develop
+        privileged: true
+        container_name: rfsim4g-oai-enb
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.20
+        environment:
+            TZ: Europe/Paris
+            USE_TDD_MONO: 'yes'
+            RFSIMULATOR: enb
+            ENB_NAME: eNB-rf-sim
+            MCC: '208'
+            MNC: '96'
+            MNC_LENGTH: 2
+            TAC: 1
+            UTRA_BAND_ID: 38
+            DL_FREQUENCY_IN_MHZ: 2605
+            UL_FREQUENCY_OFFSET_IN_MHZ: 0
+            NID_CELL: 10
+            NB_PRB: 25
+            MME_S1C_IP_ADDRESS: 192.168.61.3
+            S1C_IF_NAME: eth0
+            F1_CU_IP_ADDRESS: 192.168.61.20
+            S1U_IF_NAME: eth0
+            F1_CU_IP_ADDRESS: 192.168.61.20
+            FLEXRAN_ENABLED: 'no'
+            FLEXRAN_INTERFACE_NAME: eth0
+            FLEXRAN_IPV4_ADDRESS: 192.168.61.10
+            USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
+        healthcheck:
+            test: /bin/bash -c "pgrep lte-softmodem"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    oai_ue0:
+        image: oai-lte-ue:develop
+        privileged: true
+        container_name: rfsim4g-oai-lte-ue0
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.30
+        expose:
+            - "10000"
+        environment:
+            TZ: Europe/Paris
+            HOSTNAME: oai_ue0
+            RFSIMULATOR: 192.168.61.20
+            MCC: '208'
+            MNC: '96'
+            SHORT_IMSI: '0100000001'
+            LTE_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
+            OPC: 'c42449363bbad02b66d16bc975d77cc1'
+            MSISDN: '001011234561010'
+            HPLMN: 20896
+            USE_ADDITIONAL_OPTIONS: --rfsim -T -C 2605000000 -r 25 --ue-rxgain 140 --ue-txgain 120 --nokrnmod 1 --log_config.global_log_options level,nocolor,time
+        healthcheck:
+            test: /bin/bash -c "pgrep lte-uesoftmodem"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+networks:
+    private_net:
+        name: rfsim4g-oai-private-net
+        ipam:
+            config:
+                - subnet: 192.168.68.0/26
+        driver_opts:
+            com.docker.network.bridge.name: "rfsim4g-private"
+    public_net:
+        name: rfsim4g-oai-public-net
+        ipam:
+            config:
+                - subnet: 192.168.61.0/26
+        driver_opts:
+            com.docker.network.bridge.name: "rfsim4g-public"
diff --git a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
index eb15aef0d8aa48076f147111234baff19a16c3ca..6a39f2147ea7719ba7337db9b0ffc6713240f0d8 100644
--- a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
@@ -111,7 +111,6 @@ services:
     oai-smf:
         container_name: "rfsim5g-oai-smf"
         image: oai-smf:latest
-        entrypoint: /bin/bash -c "/openair-smf/bin/oai_smf -c /openair-smf/bin/oai-smf.conf -o"
         environment:
             - TZ=Europe/Paris
             - INSTANCE=0
@@ -140,12 +139,13 @@ services:
             - REGISTER_NRF=yes
             - DISCOVER_UPF=yes
             - USE_FQDN_DNS=yes
+            - DNN_NI0=oai
+            - DNN_NI2=oai.ipv4
         depends_on:
             - oai-nrf
             - oai-amf
         volumes:
             - ./smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
-            - ./oai-smf.conf:/openair-smf/bin/oai-smf.conf
         healthcheck:
             test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
             interval: 10s
diff --git a/ci-scripts/yaml_files/5g_f1_rfsimulator/oai-smf.conf b/ci-scripts/yaml_files/5g_f1_rfsimulator/oai-smf.conf
deleted file mode 100644
index 0c83ab8be937cee03a6b1dc0931473e162c952df..0000000000000000000000000000000000000000
--- a/ci-scripts/yaml_files/5g_f1_rfsimulator/oai-smf.conf
+++ /dev/null
@@ -1,133 +0,0 @@
-################################################################################
-# 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
-################################################################################
-
-SMF =
-{
-    FQDN = "oai-smf-svc";               
-    INSTANCE      = 0;         # 0 is the default
-    PID_DIRECTORY = "/var/run";  # /var/run is the default
-
-    INTERFACES :
-    {
-        N4 :
-        {
-            # SMF binded interface for N4 communication (UPF)
-            INTERFACE_NAME = "eth0"; # YOUR NETWORK CONFIG HERE
-            IPV4_ADDRESS   = "read";                        
-         };
-
-        SBI :
-        {
-            # SMF binded interface for SBI interface (e.g., communication with AMF, UDM)
-            INTERFACE_NAME = "eth0";     # YOUR NETWORK CONFIG HERE
-            IPV4_ADDRESS   = "read";
-            PORT           = 80;       # YOUR NETWORK CONFIG HERE (default: 80)
-            HTTP2_PORT     = 9090; # YOUR NETWORK CONFIG HERE
-            API_VERSION    = "v1";                # YOUR SMF API VERSION CONFIG HERE
-         };                 
-
-    };
-
-
-    # Pool of UE assigned IP addresses
-    # Do not make IP pools overlap
-    # first IPv4 address X.Y.Z.1 is reserved for GTP network device on UPF
-    IP_ADDRESS_POOL :
-    {
-        IPV4_LIST = (
-                      {RANGE = "12.1.1.2 - 12.1.1.128";},         # STRING, IPv4 RANGE IP_start - IP_end, YOUR NETWORK CONFIG HERE.
-                      {RANGE = "12.1.1.129 - 12.1.1.224";},       # STRING, IPv4 RANGE IP_start - IP_end, YOUR NETWORK CONFIG HERE.
-                      {RANGE = "10.10.10.2 - 10.10.10.253";}  # STRING, IPv4 RANGE IP_start - IP_end, YOUR NETWORK CONFIG HERE.
-
-                    );
-        IPV6_LIST = (
-                      {PREFIX = "2001:1:2::/64";},                # STRING, IPv6 prefix, YOUR NETWORK CONFIG HERE.
-                      {PREFIX = "3001:1:2::/64";},                # STRING, IPv6 prefix, YOUR NETWORK CONFIG HERE.
-                      {PREFIX = "4001:1:2::/64";}                 # STRING, IPv6 prefix, YOUR NETWORK CONFIG HERE.
-                    );
-    };
-
-    DNN_LIST = (
-       # IPV4_POOL, IPV6_POOL are index in IPV4_LIST, IPV6_LIST, PDU_SESSION_TYPE choice in {IPv4, IPv6, IPv4v6}
-      {DNN_NI = "default"; PDU_SESSION_TYPE = "IPv4"; IPV4_POOL  = 2; IPV6_POOL = -1},
-      {DNN_NI = "carrier.com"; PDU_SESSION_TYPE = "IPv4"; IPV4_POOL = 1; IPV6_POOL = -1},
-      {DNN_NI = "oai"; PDU_SESSION_TYPE = "IPv4"; IPV4_POOL = 0; IPV6_POOL = -1}
-    );
-
-    # DNS address communicated to UEs
-    DEFAULT_DNS_IPV4_ADDRESS     = "192.168.18.129";      # YOUR DNS CONFIG HERE
-    DEFAULT_DNS_SEC_IPV4_ADDRESS = "192.168.18.129";  # YOUR DNS CONFIG HERE
-    DEFAULT_DNS_IPV6_ADDRESS     = "2001:4860:4860::8888";            # YOUR DNS CONFIG HERE
-    DEFAULT_DNS_SEC_IPV6_ADDRESS = "2001:4860:4860::8844";            # YOUR DNS CONFIG HERE
- 
-    SUPPORT_FEATURES: 
-    {
-      # STRING, {"yes", "no"}, 
-      REGISTER_NRF = "yes";  # Set to yes if SMF resgisters to an NRF
-      DISCOVER_UPF = "yes";  # Set to yes to enable UPF discovery and selection
-      FORCE_PUSH_PROTOCOL_CONFIGURATION_OPTIONS = "no"; # Non standard feature, normally should be set to "no", 
-                                                        # but you may need to set to yes for UE that do not explicitly request a PDN address through NAS signalling
-      USE_LOCAL_SUBSCRIPTION_INFO = "yes";  # Set to yes if SMF uses local subscription information instead of from an UDM
-      USE_FQDN_DNS = "yes";                  # Set to yes if AMF/UDM/NRF/UPF will relying on a DNS to resolve FQDN
-    }  
-  
-    AMF :
-    {
-      IPV4_ADDRESS = "0.0.0.0";  # YOUR AMF CONFIG HERE
-      PORT         = 80;            # YOUR AMF CONFIG HERE (default: 80)
-      API_VERSION  = "v1";   # YOUR AMF API VERSION FOR SBI CONFIG HERE
-      FQDN         = "oai-amf"               # YOUR AMF FQDN CONFIG HERE
-    };
-    
-    UDM :
-    {
-      IPV4_ADDRESS = "127.0.0.1";  # YOUR UDM CONFIG HERE
-      PORT         = 80;            # YOUR UDM CONFIG HERE (default: 80)
-      API_VERSION  = "v1";   # YOUR UDM API VERSION FOR SBI CONFIG HERE
-      FQDN         = "localhost"      # YOUR UDM FQDN CONFIG HERE
-    };    
-
-    NRF :
-    {
-      IPV4_ADDRESS = "192.168.71.130";  # YOUR NRF CONFIG HERE
-      PORT         = 80;            # YOUR NRF CONFIG HERE (default: 80)
-      API_VERSION  = "v1";   # YOUR NRF API VERSION FOR SBI CONFIG HERE
-      FQDN         = "oai-nrf"      # YOUR NRF FQDN CONFIG HERE
-    };
-        
-    UPF_LIST = (
-         {IPV4_ADDRESS = "192.168.71.134" ; FQDN = "oai-spgwu"}   # YOUR UPF CONFIG HERE
-    );   
-   
-    LOCAL_CONFIGURATION :
-    {
-      SESSION_MANAGEMENT_SUBSCRIPTION_LIST = (
-         { NSSAI_SST = 222, NSSAI_SD = "123", DNN = "default", DEFAULT_SESSION_TYPE = "IPV4", DEFAULT_SSC_MODE = 1, 
-           QOS_PROFILE_5QI = 7, QOS_PROFILE_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PREEMPTCAP = "NOT_PREEMPT", 
-           QOS_PROFILE_ARP_PREEMPTVULN = "NOT_PREEMPTABLE", SESSION_AMBR_UL = "20Mbps", SESSION_AMBR_DL = "22Mbps"},
-         { NSSAI_SST = 1; NSSAI_SD = "1", DNN = "oai", DEFAULT_SESSION_TYPE = "IPV4", DEFAULT_SSC_MODE = 1, 
-           QOS_PROFILE_5QI = 6, QOS_PROFILE_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PREEMPTCAP = "NOT_PREEMPT", 
-           QOS_PROFILE_ARP_PREEMPTVULN = "NOT_PREEMPTABLE", SESSION_AMBR_UL = "20Mbps", SESSION_AMBR_DL = "22Mbps"}
-        );                 
-    };   
-    
-};
-
diff --git a/ci-scripts/yaml_files/5g_rfsimulator/README.md b/ci-scripts/yaml_files/5g_rfsimulator/README.md
index 5c384b3202fe080d5d8f20e4ef272f311b035373..fc562dd1eb97521aef7471435d04c1daef2ccc70 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator/README.md
+++ b/ci-scripts/yaml_files/5g_rfsimulator/README.md
@@ -14,7 +14,7 @@
 
 This page is only valid for an `Ubuntu18` host.
 
-**NOTE: this version (2021-10-05) is valid for the `v1.1.0` and `v1.2.0` versions of the `OAI 5G CN`.**
+**NOTE: this version (2022-01-27) has been updated  for the `v1.3.0` version of the `OAI 5G CN`.**
 
 **TABLE OF CONTENTS**
 
@@ -76,9 +76,9 @@ $ docker image tag rdefosseoai/oai-nr-ue:develop oai-nr-ue:develop
 $ docker logout
 ```
 
-**CAUTION: 2021/10/05 with the release `v1.2.0` of the `CN5G`, the previous version was not compatible any-more.**
+**CAUTION: 2022/01/27 with the release `v1.3.0` of the `CN5G`, the previous version was not compatible any-more.**
 
-**This new version is working for both the `v1.1.0` and `v1.2.0` of the `CN5G`.**
+**This new version is working only with the `v1.3.0` of the `CN5G`.**
 
 # 2. Deploy containers #
 
diff --git a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
index 952da8087dd93c44f7a1b2c63ebfee5ee1477597..f0476b0a1efd0ed1932c16ca927e7c9dac926bc0 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
@@ -111,7 +111,6 @@ services:
     oai-smf:
         container_name: "rfsim5g-oai-smf"
         image: oai-smf:latest
-        entrypoint: /bin/bash -c "/openair-smf/bin/oai_smf -c /openair-smf/bin/oai-smf.conf -o"
         environment:
             - TZ=Europe/Paris
             - INSTANCE=0
@@ -140,12 +139,13 @@ services:
             - REGISTER_NRF=yes
             - DISCOVER_UPF=yes
             - USE_FQDN_DNS=yes
+            - DNN_NI0=oai
+            - DNN_NI2=oai.ipv4
         depends_on:
             - oai-nrf
             - oai-amf
         volumes:
             - ./smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
-            - ./oai-smf.conf:/openair-smf/bin/oai-smf.conf
         healthcheck:
             test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
             interval: 10s
diff --git a/ci-scripts/yaml_files/5g_rfsimulator/oai-smf.conf b/ci-scripts/yaml_files/5g_rfsimulator/oai-smf.conf
deleted file mode 100644
index 0c83ab8be937cee03a6b1dc0931473e162c952df..0000000000000000000000000000000000000000
--- a/ci-scripts/yaml_files/5g_rfsimulator/oai-smf.conf
+++ /dev/null
@@ -1,133 +0,0 @@
-################################################################################
-# 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
-################################################################################
-
-SMF =
-{
-    FQDN = "oai-smf-svc";               
-    INSTANCE      = 0;         # 0 is the default
-    PID_DIRECTORY = "/var/run";  # /var/run is the default
-
-    INTERFACES :
-    {
-        N4 :
-        {
-            # SMF binded interface for N4 communication (UPF)
-            INTERFACE_NAME = "eth0"; # YOUR NETWORK CONFIG HERE
-            IPV4_ADDRESS   = "read";                        
-         };
-
-        SBI :
-        {
-            # SMF binded interface for SBI interface (e.g., communication with AMF, UDM)
-            INTERFACE_NAME = "eth0";     # YOUR NETWORK CONFIG HERE
-            IPV4_ADDRESS   = "read";
-            PORT           = 80;       # YOUR NETWORK CONFIG HERE (default: 80)
-            HTTP2_PORT     = 9090; # YOUR NETWORK CONFIG HERE
-            API_VERSION    = "v1";                # YOUR SMF API VERSION CONFIG HERE
-         };                 
-
-    };
-
-
-    # Pool of UE assigned IP addresses
-    # Do not make IP pools overlap
-    # first IPv4 address X.Y.Z.1 is reserved for GTP network device on UPF
-    IP_ADDRESS_POOL :
-    {
-        IPV4_LIST = (
-                      {RANGE = "12.1.1.2 - 12.1.1.128";},         # STRING, IPv4 RANGE IP_start - IP_end, YOUR NETWORK CONFIG HERE.
-                      {RANGE = "12.1.1.129 - 12.1.1.224";},       # STRING, IPv4 RANGE IP_start - IP_end, YOUR NETWORK CONFIG HERE.
-                      {RANGE = "10.10.10.2 - 10.10.10.253";}  # STRING, IPv4 RANGE IP_start - IP_end, YOUR NETWORK CONFIG HERE.
-
-                    );
-        IPV6_LIST = (
-                      {PREFIX = "2001:1:2::/64";},                # STRING, IPv6 prefix, YOUR NETWORK CONFIG HERE.
-                      {PREFIX = "3001:1:2::/64";},                # STRING, IPv6 prefix, YOUR NETWORK CONFIG HERE.
-                      {PREFIX = "4001:1:2::/64";}                 # STRING, IPv6 prefix, YOUR NETWORK CONFIG HERE.
-                    );
-    };
-
-    DNN_LIST = (
-       # IPV4_POOL, IPV6_POOL are index in IPV4_LIST, IPV6_LIST, PDU_SESSION_TYPE choice in {IPv4, IPv6, IPv4v6}
-      {DNN_NI = "default"; PDU_SESSION_TYPE = "IPv4"; IPV4_POOL  = 2; IPV6_POOL = -1},
-      {DNN_NI = "carrier.com"; PDU_SESSION_TYPE = "IPv4"; IPV4_POOL = 1; IPV6_POOL = -1},
-      {DNN_NI = "oai"; PDU_SESSION_TYPE = "IPv4"; IPV4_POOL = 0; IPV6_POOL = -1}
-    );
-
-    # DNS address communicated to UEs
-    DEFAULT_DNS_IPV4_ADDRESS     = "192.168.18.129";      # YOUR DNS CONFIG HERE
-    DEFAULT_DNS_SEC_IPV4_ADDRESS = "192.168.18.129";  # YOUR DNS CONFIG HERE
-    DEFAULT_DNS_IPV6_ADDRESS     = "2001:4860:4860::8888";            # YOUR DNS CONFIG HERE
-    DEFAULT_DNS_SEC_IPV6_ADDRESS = "2001:4860:4860::8844";            # YOUR DNS CONFIG HERE
- 
-    SUPPORT_FEATURES: 
-    {
-      # STRING, {"yes", "no"}, 
-      REGISTER_NRF = "yes";  # Set to yes if SMF resgisters to an NRF
-      DISCOVER_UPF = "yes";  # Set to yes to enable UPF discovery and selection
-      FORCE_PUSH_PROTOCOL_CONFIGURATION_OPTIONS = "no"; # Non standard feature, normally should be set to "no", 
-                                                        # but you may need to set to yes for UE that do not explicitly request a PDN address through NAS signalling
-      USE_LOCAL_SUBSCRIPTION_INFO = "yes";  # Set to yes if SMF uses local subscription information instead of from an UDM
-      USE_FQDN_DNS = "yes";                  # Set to yes if AMF/UDM/NRF/UPF will relying on a DNS to resolve FQDN
-    }  
-  
-    AMF :
-    {
-      IPV4_ADDRESS = "0.0.0.0";  # YOUR AMF CONFIG HERE
-      PORT         = 80;            # YOUR AMF CONFIG HERE (default: 80)
-      API_VERSION  = "v1";   # YOUR AMF API VERSION FOR SBI CONFIG HERE
-      FQDN         = "oai-amf"               # YOUR AMF FQDN CONFIG HERE
-    };
-    
-    UDM :
-    {
-      IPV4_ADDRESS = "127.0.0.1";  # YOUR UDM CONFIG HERE
-      PORT         = 80;            # YOUR UDM CONFIG HERE (default: 80)
-      API_VERSION  = "v1";   # YOUR UDM API VERSION FOR SBI CONFIG HERE
-      FQDN         = "localhost"      # YOUR UDM FQDN CONFIG HERE
-    };    
-
-    NRF :
-    {
-      IPV4_ADDRESS = "192.168.71.130";  # YOUR NRF CONFIG HERE
-      PORT         = 80;            # YOUR NRF CONFIG HERE (default: 80)
-      API_VERSION  = "v1";   # YOUR NRF API VERSION FOR SBI CONFIG HERE
-      FQDN         = "oai-nrf"      # YOUR NRF FQDN CONFIG HERE
-    };
-        
-    UPF_LIST = (
-         {IPV4_ADDRESS = "192.168.71.134" ; FQDN = "oai-spgwu"}   # YOUR UPF CONFIG HERE
-    );   
-   
-    LOCAL_CONFIGURATION :
-    {
-      SESSION_MANAGEMENT_SUBSCRIPTION_LIST = (
-         { NSSAI_SST = 222, NSSAI_SD = "123", DNN = "default", DEFAULT_SESSION_TYPE = "IPV4", DEFAULT_SSC_MODE = 1, 
-           QOS_PROFILE_5QI = 7, QOS_PROFILE_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PREEMPTCAP = "NOT_PREEMPT", 
-           QOS_PROFILE_ARP_PREEMPTVULN = "NOT_PREEMPTABLE", SESSION_AMBR_UL = "20Mbps", SESSION_AMBR_DL = "22Mbps"},
-         { NSSAI_SST = 1; NSSAI_SD = "1", DNN = "oai", DEFAULT_SESSION_TYPE = "IPV4", DEFAULT_SSC_MODE = 1, 
-           QOS_PROFILE_5QI = 6, QOS_PROFILE_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PREEMPTCAP = "NOT_PREEMPT", 
-           QOS_PROFILE_ARP_PREEMPTVULN = "NOT_PREEMPTABLE", SESSION_AMBR_UL = "20Mbps", SESSION_AMBR_DL = "22Mbps"}
-        );                 
-    };   
-    
-};
-
diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 95b5ff1a608e402e68e6485d26fb30317815e6d1..72fcd6a10382c0b2994f23aa8e8191e3cb284f60 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -1,4 +1,4 @@
-#/* 
+#/*
 # * 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.
@@ -343,8 +343,8 @@ set(CMAKE_CXX_FLAGS
 
 
 if (SANITIZE_ADDRESS)
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-common")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-common")
+  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan -fno-common")
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan -fno-common")
 endif ()
 
 add_definitions("-DASN_DISABLE_OER_SUPPORT")
diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index 2dc03967f67fa9caf2320936036f60ec6c9875ef..92bcfd88e2e577e27b3d481321e770e1b6d8ed8b 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -57,7 +57,7 @@ BUILD_DOXYGEN=0
 BUILD_COVERITY_SCAN=0
 T_TRACER="True"
 DISABLE_HARDWARE_DEPENDENCY="False"
-CMAKE_BUILD_TYPE=""
+CMAKE_BUILD_TYPE="RelWithDebInfo"
 CMAKE_CMD="$CMAKE"
 UE_AUTOTEST_TRACE="False"
 UE_DEBUG_TRACE="False"
@@ -99,25 +99,23 @@ Options
   Makes the LTE softmodem
 --eNBocp
   Makes the OCP LTE softmodem
--gNB
+--gNB
   Makes the NR softmodem
---nrUE
-  Makes the NR UE softmodem
 --RU
   Makes the OAI RRU
 --UE
    Makes the UE specific parts (ue_ip, usim, nvram) from the given configuration file
+--nrUE
+  Makes the NR UE softmodem
 --UE-conf-nvram [configuration file]
    Specify conf_nvram_path (default \"$conf_nvram_path\")
 --UE-gen-nvram [output path]
    Specify gen_nvram_path (default \"$gen_nvram_path\")
---HWLAT
-    Makes test program for haw latency tests
--a | --agent
-   Enables agent for software-defined control of the eNB
 -w | --hardware
    EXMIMO, USRP, BLADERF, LMSSDR, IRIS, ADRV9371_ZC706, SIMU, AW2SORI, None (Default)
    Adds this RF board support (in external packages installation and in compilation)
+-t | --transport
+   Selects the transport protocol type, options: None, Ethernet, benetel4g, benetel5g
 -P | --phy_simulators
    Makes the unitary tests Layer 1 simulators
 -S | --core_simulators
@@ -128,6 +126,14 @@ Options
    runs only specified test cases specified here. This flag is only valid with -s
 -V | --vcd
    Adds a debgging facility to the binary files: GUI with major internal synchronization events
+-x | --xforms
+   Will compile with software oscilloscope features
+--HWLAT
+    Makes test program for haw latency tests
+--HWLAT_TEST
+  Compiles a hw latency test program
+--verbose-ci
+  Compile with verbose instructions in CI Docker env
 --verbose-compile
    Shows detailed compilation instructions in makefile
 --cflags_processor
@@ -163,6 +169,10 @@ Options
    Build for I/Q record-playback modes
 -k | --skip-shared-libraries
    Skip build for shared libraries to reduce compilation time when building frequently for debugging purposes
+--ninja
+  Tell cmake to use the Ninja build system. Without, will generate make files
+--sanitize-address | -fsanitize=address
+   Enable the address sanitizer on all targets
 --ittiSIM
   Makes the itti simulator
 -h | --help
@@ -575,15 +585,12 @@ function main() {
   echo_info "3. building the compilation directives ..."
 
   DIR=$OPENAIR_DIR/cmake_targets
-  if [ "$SIMUS_PHY" = "1" -o "$SIMUS_CORE" = "1" ] ; then
-    build_dir=phy_simulators
-  else
-    if [ "$T_TRACER" =  "False" ] ; then
+  if [ "$T_TRACER" =  "False" ] ; then
       build_dir=ran_build_noLOG
-    else
+  else
       build_dir=ran_build  
-    fi
   fi
+
   [ "$CLEAN" = "1" ] && rm -rf $DIR/$build_dir/build
   mkdir -p $DIR/$build_dir/build
 
@@ -591,84 +598,81 @@ 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 "$RU" = "1" -o "$nrUE" = "1" -o "$HW" = "EXMIMO" -o "$ittiSIM" = "1" -o "$rfsimNas" = "1" ] ; then
-
-    # softmodem compilation
-
-    cmake_file=$DIR/$build_dir/CMakeLists.txt
-    echo "cmake_minimum_required(VERSION 2.8)"                             >  $cmake_file
-    echo "project (OpenAirInterface)"                                    >> $cmake_file
-    echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )"                     >> $cmake_file
-    echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )"       >> $cmake_file
-    echo "set ( UE_EXPANSION $UE_EXPANSION )"                             >> $cmake_file
-#    echo "set ( PHY_TX_THREAD $UE_EXPANSION )"                            >> $cmake_file
-    echo "set ( PRE_SCD_THREAD $UE_EXPANSION )"                           >> $cmake_file
-    echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )"                            >> $cmake_file
-    echo "set ( RF_BOARD \"${HW}\")"                                      >> $cmake_file
-    echo "set ( TRANSP_PRO \"${TP}\")"                                    >> $cmake_file
-    echo "set ( PACKAGE_NAME \"${exec}\")"                                >> $cmake_file
-    echo "set ( DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >> $cmake_file
-    echo "set ( CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )"             >> $cmake_file
-    echo "set ( T_TRACER $T_TRACER )"                                     >> $cmake_file
-    echo "set ( UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE )"                   >> $cmake_file
-    echo "set ( UE_DEBUG_TRACE $UE_DEBUG_TRACE )"                         >> $cmake_file
-    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 ( ITTI_SIM $ITTI_SIM )"                                     >> $cmake_file
-    echo "set ( SANITIZE_ADDRESS $SANITIZE_ADDRESS )"                     >> $cmake_file
-    echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)'         >> $cmake_file
-    cd  $DIR/$build_dir/build
-    eval $CMAKE_CMD
-
-    execlist=""
-    if [ "$eNB" = "1" ] ; then
+  # softmodem compilation
+  
+  cmake_file=$DIR/$build_dir/CMakeLists.txt
+  echo "cmake_minimum_required(VERSION 2.8)"                             >  $cmake_file
+  echo "project (OpenAirInterface)"                                    >> $cmake_file
+  echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )"                     >> $cmake_file
+  echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )"       >> $cmake_file
+  echo "set ( UE_EXPANSION $UE_EXPANSION )"                             >> $cmake_file
+  #    echo "set ( PHY_TX_THREAD $UE_EXPANSION )"                            >> $cmake_file
+  echo "set ( PRE_SCD_THREAD $UE_EXPANSION )"                           >> $cmake_file
+  echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )"                            >> $cmake_file
+  echo "set ( RF_BOARD \"${HW}\")"                                      >> $cmake_file
+  echo "set ( TRANSP_PRO \"${TP}\")"                                    >> $cmake_file
+  echo "set ( PACKAGE_NAME \"${exec}\")"                                >> $cmake_file
+  echo "set ( DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >> $cmake_file
+  echo "set ( CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )"             >> $cmake_file
+  echo "set ( T_TRACER $T_TRACER )"                                     >> $cmake_file
+  echo "set ( UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE )"                   >> $cmake_file
+  echo "set ( UE_DEBUG_TRACE $UE_DEBUG_TRACE )"                         >> $cmake_file
+  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 ( ITTI_SIM $ITTI_SIM )"                                     >> $cmake_file
+  echo "set ( SANITIZE_ADDRESS $SANITIZE_ADDRESS )"                     >> $cmake_file
+  echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)'         >> $cmake_file
+  cd  $DIR/$build_dir/build
+  eval $CMAKE_CMD
+
+  execlist=""
+  if [ "$eNB" = "1" ] ; then
       execlist="$execlist lte-softmodem"
-    fi
-    if [ "$eNBocp" = "1" ] ; then
+  fi
+  if [ "$eNBocp" = "1" ] ; then
       execlist="$execlist ocp-enb"
-    fi
-    if [ "$gNB" = "1" ] ; then
+  fi
+  if [ "$gNB" = "1" ] ; then
       execlist="$execlist nr-softmodem"
-    fi
-    if [ "$RU" = "1" ] ; then
+  fi
+  if [ "$RU" = "1" ] ; then
       execlist="$execlist oairu"
-    fi
-    if [ "$UE" = 1 ] ; then
+  fi
+  if [ "$UE" = 1 ] ; then
       execlist="$execlist lte-uesoftmodem"
-    fi
-    if [ "$nrUE" = 1 ] ; then
+  fi
+  if [ "$nrUE" = 1 ] ; then
       execlist="$execlist nr-uesoftmodem"
-    fi
-
-    if [ "$ittiSIM" = "1" ] ; then
+  fi
+  
+  if [ "$ittiSIM" = "1" ] ; then
       execlist="$execlist nr-ittisim"
-    fi
-
-    for f in $execlist ; do
+  fi
+  
+  for f in $execlist ; do
       echo_info "Compiling $f..."
       compilations \
-        $build_dir $f \
-        $f $dbin/$f.$REL
-    done
-
-
-# mandatory shared libraries common to UE and (e/g)NB
-
-    if [ "$SKIP_SHARED_LIB_FLAG" = "False" ]; then
+          $build_dir $f \
+          $f $dbin/$f.$REL
+  done
+  
+  
+  # mandatory shared libraries common to UE and (e/g)NB
+  
+  if [ "$SKIP_SHARED_LIB_FLAG" = "False" ]; then
       echo_info "Building shared libraries common to UE and gNB"
-
+      
+      compilations \
+          $build_dir $config_libconfig_shlib \
+          lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
+      
       compilations \
-        $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
-
-    fi
+      
   fi
-
+  
   if [ "$UE" = 1 ] ; then
 
     echo_info "Compiling UE specific part"
@@ -717,11 +721,8 @@ function main() {
     fi
   fi
 
-  if [ "$SIMUS_PHY" = "1" -o "$SIMUS_CORE" = "1" ] ; then
-    cd  $DIR/$build_dir/build
-    eval $CMAKE_CMD
-  fi
-
+  cd  $DIR/$build_dir/build
+  
   ##################
   # PHY simulators #
   ##################
@@ -732,11 +733,11 @@ function main() {
 	# simlist="ldpctest"
     for f in $simlist ; do
       compilations \
-        phy_simulators $f \
+        ran_build $f \
 	    $f $dbin/$f.$REL
     done
     compilations \
-      phy_simulators coding \
+      ran_build coding \
       libcoding.so $dbin/libcoding.so
 #    compilations \
 #	   lte-simulators $config_libconfig_shlib \
@@ -751,7 +752,7 @@ function main() {
     simlist="secu_knas_encrypt_eia1 secu_kenb aes128_ctr_encrypt aes128_ctr_decrypt secu_knas_encrypt_eea2 secu_knas secu_knas_encrypt_eea1 kdf aes128_cmac_encrypt secu_knas_encrypt_eia2"
     for f in $simlist ; do
       compilations \
-	    phy_simulators test_$f \
+	    ran_build test_$f \
 	    test_$f $dbin/test_$f.$REL
     done
   fi
diff --git a/cmake_targets/install_external_packages.ubuntu20 b/cmake_targets/install_external_packages.ubuntu20
index 0023c8d3c853d55f54d5b751a226355bf3698282..e58f5c9bb16ec52c5ede52a01a0eda26f402fe72 100755
--- a/cmake_targets/install_external_packages.ubuntu20
+++ b/cmake_targets/install_external_packages.ubuntu20
@@ -24,6 +24,7 @@
 # authors Laurent Thomas
 #
 #######################################
+
 if [ ! -f /etc/os-release ]; then
     echo "No /etc/os-release file found. You're likely on an unsupported distro."
     exit 1
@@ -134,7 +135,6 @@ clean_all_files() {
     rm -rf "$dir"/ran_build/build
     rm -rf "$dir"/ran_build_noLOG/build
     rm -rf "$dir"/lte-simulators/build 
-    rm -rf "$dir"/phy_simulators/build
     rm -rf "$dir"/nas_sim_tools/build 
     rm -rf "$dir"/oaisim_build_oai/build
     rm -rf "$dir"/oaisim_build_oai/CMakeLists.txt
@@ -472,7 +472,7 @@ if ! check_supported_distribution; then
     echo_error "Your distribution $(get_distribution_release) is not supported by oai !"
     exit 1
 fi
-
+set_openair_env
 echo_info "Installing packages"
 check_install_ubuntu_packages
 
diff --git a/cmake_targets/phy_simulators b/cmake_targets/phy_simulators
new file mode 120000
index 0000000000000000000000000000000000000000..2a12e92f3e9e3938cd869184ab1b8d3f78aa1240
--- /dev/null
+++ b/cmake_targets/phy_simulators
@@ -0,0 +1 @@
+ran_build/
\ No newline at end of file
diff --git a/cmake_targets/phy_simulators/CMakeLists.txt b/cmake_targets/phy_simulators/CMakeLists.txt
deleted file mode 100755
index f8c659959f36a6558a2cf76f3c8a6ac1676a9be0..0000000000000000000000000000000000000000
--- a/cmake_targets/phy_simulators/CMakeLists.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-project (OpenAirInterface)
-set ( CMAKE_BUILD_TYPE  )
-set ( CFLAGS_PROCESSOR_USER "" )
-set ( UE_EXPANSION False )
-set ( PRE_SCD_THREAD False )
-set ( ENABLE_VCD_FIFO False )
-set ( RF_BOARD "None")
-set ( TRANSP_PRO "None")
-set ( PACKAGE_NAME "")
-set ( DEADLINE_SCHEDULER "False" )
-set ( CPU_AFFINITY "False" )
-set ( T_TRACER True )
-set ( UE_AUTOTEST_TRACE False )
-set ( UE_DEBUG_TRACE False )
-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/tools/build_helper b/cmake_targets/tools/build_helper
index a23d4eca9dd4ef7b6ceb06648c8c7546ade40642..ec5de6a0d1b4272afafefd37d1a177338e81b95c 100755
--- a/cmake_targets/tools/build_helper
+++ b/cmake_targets/tools/build_helper
@@ -168,7 +168,7 @@ clean_all_files() {
  rm -rf $dir/log $OPENAIR_DIR/targets/bin/*
  rm -rf $dir/ran_build $dir/ran_build_noLOG
  rm -rf $dir/lte-simulators/build 
- rm -rf $dir/phy_simulators/build $dir/nas_sim_tools/build 
+ rm -rf $dir/nas_sim_tools/build 
  rm -rf $dir/oaisim_build_oai/build $dir/oaisim_build_oai/CMakeLists.txt
  rm -rf $dir/autotests/bin $dir/autotests/log $dir/autotests/*/build
 }
@@ -756,6 +756,7 @@ check_install_oai_software() {
 	libidn11-dev \
 	libmysqlclient-dev  \
 	libpython2.7-dev \
+        libreadline-dev \
 	libsctp1  \
 	libsctp-dev  \
 	libssl-dev  \
@@ -842,6 +843,7 @@ check_install_oai_software() {
       patch \
       psmisc \
       python \
+      readline-devel \
       subversion \
       xmlstarlet \
       python-pip \
diff --git a/common/config/config_load_configmodule.c b/common/config/config_load_configmodule.c
index d336c1f2293f64bb3a5a878a0be4fb3f09312d13..773692a82a05b53f1419b1418dffdb9acf54f04f 100644
--- a/common/config/config_load_configmodule.c
+++ b/common/config/config_load_configmodule.c
@@ -254,7 +254,7 @@ configmodule_interface_t *load_configmodule(int argc,
   cfgptr = calloc(sizeof(configmodule_interface_t),1);
   /* argv_info is used to memorize command line options which have been recognized */
   /* and to detect unrecognized command line options which might have been specified */
-  cfgptr->argv_info = calloc(sizeof(int32_t), argc);
+  cfgptr->argv_info = calloc(sizeof(int32_t), argc+10);
   /* argv[0] is the exec name, always Ok */
   cfgptr->argv_info[0] |= CONFIG_CMDLINEOPT_PROCESSED;
 
diff --git a/common/utils/LOG/DOC/addconsoletrace.md b/common/utils/LOG/DOC/addconsoletrace.md
index 9ab90cf12009e8de2bc2a5885f34dd67c4708295..d5ede8c57de08b0c5eb8f61a2110601f6c5de886 100644
--- a/common/utils/LOG/DOC/addconsoletrace.md
+++ b/common/utils/LOG/DOC/addconsoletrace.md
@@ -3,6 +3,7 @@
 ```C
 LOG_E(<component>,<format>,<argument>,...)
 LOG_W(<component>,<format>,<argument>,...)
+LOG_A(<component>,<format>,<argument>,...)
 LOG_I(<component>,<format>,<argument>,...)
 LOG_D(<component>,<format>,<argument>,...)
 LOG_T(<component>,<format>,<argument>,...)
@@ -14,9 +15,10 @@ these macros are used in place of the printf C function. The additionnal ***comp
 |:---------|:---------------|:---------------|----------------:|
 | LOG_E |  E | 0 | error |
 | LOG_W | W | 1 | warning |
-| LOG_I | I | 2 | informational |
-| LOG_D | D | 3 | debug |
-| LOG_T | T | 4 | trace |
+| LOG_A | A | 2 | analysis |
+| LOG_I | I | 3 | informational |
+| LOG_D | D | 4 | debug |
+| LOG_T | T | 5 | trace |
 
 component list is defined as an `enum` in  [log.h](https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/common/utils/LOG/log.h). A new component can be defined by adding an item in this type, it must also be defined in the T tracer [T_messages.txt ](https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/common/utils/T/T_messages.txt).
 
diff --git a/common/utils/LOG/DOC/rtusage.md b/common/utils/LOG/DOC/rtusage.md
index d7c748952d4adcbb2b3ba2dc06f6109de0ceb971..041c29e688ecea97e84b99e97b27e6e018bb76d2 100644
--- a/common/utils/LOG/DOC/rtusage.md
+++ b/common/utils/LOG/DOC/rtusage.md
@@ -7,9 +7,9 @@ All logging facility parameters are defined in the log_config section. Some para
 
 | name | type | default | description |
 |:---:|:---:|:---:|:----|
-| `global_log_level` | `pre-defined string of char` | `info` |  Allows printing of messages up to the specified  level. Available levels, from lower to higher are `error`,`warn`,`info`,`debug`,`trace` |
+| `global_log_level` | `pre-defined string of char` | `info` |  Allows printing of messages up to the specified  level. Available levels, from lower to higher are `error`,`warn`,`analysis`,`info`,`debug`,`trace` |
 | `global_log_online` | `boolean` | 1 (=true) | If false, all console messages are discarded, whatever their level |
-| `global_log_options` | `list of pre-defined string of char` |  |  3 options can be specified to trigger the information added in the header of the message:  `nocolor`, disable color usage in log messages, usefull when redirecting logs to a file, where escape sequences used for color selection can be annoying, `level`, add a one letter level id in the message header (T,D,I,W,E for trace, debug, info, warning, error),`thread`, add the thread name in the message header, `function`, adds the function name, `line_num`, adds the line number, `time` adds the time since process starts|
+| `global_log_options` | `list of pre-defined string of char` |  |  5 options can be specified to trigger the information added in the header of the message:  `nocolor`, disable color usage in log messages, usefull when redirecting logs to a file, where escape sequences used for color selection can be annoying, `level`, add a one letter level id in the message header (T,D,I,A,W,E for trace, debug, info, analysis, warning, error),`thread`, add the thread name in the message header, `thread_id`, adds the thread ID in the message header, `function`, adds the function name, `line_num`, adds the line number, `time` adds the time since process starts|
 
 ### Component specific parameters
 | name | type | default | description |
diff --git a/common/utils/LOG/log.c b/common/utils/LOG/log.c
index 28134d6db1c2a548eb10b1f4b19d23c8967c5f81..29e4f718c699e90998225159b1c0a1a4890e8114 100644
--- a/common/utils/LOG/log.c
+++ b/common/utils/LOG/log.c
@@ -65,6 +65,7 @@ char logmem_filename[1024] = {0};
 mapping log_level_names[] = {
   {"error",  OAILOG_ERR},
   {"warn",   OAILOG_WARNING},
+  {"analysis", OAILOG_ANALYSIS},
   {"info",   OAILOG_INFO},
   {"debug",  OAILOG_DEBUG},
   {"trace",  OAILOG_TRACE},
@@ -78,14 +79,15 @@ mapping log_options[] = {
   {"line_num",    FLAG_FILE_LINE },
   {"function", FLAG_FUNCT},
   {"time",     FLAG_TIME},
+  {"thread_id", FLAG_THREAD_ID},
   {NULL,-1}
 };
 
 
 mapping log_maskmap[] = LOG_MASKMAP_INIT;
 
-char *log_level_highlight_start[] = {LOG_RED, LOG_ORANGE, "", LOG_BLUE, LOG_CYBL};  /*!< \brief Optional start-format strings for highlighting */
-char *log_level_highlight_end[]   = {LOG_RESET,LOG_RESET,LOG_RESET, LOG_RESET,LOG_RESET};   /*!< \brief Optional end-format strings for highlighting */
+char *log_level_highlight_start[] = {LOG_RED, LOG_ORANGE, LOG_GREEN, "", LOG_BLUE, LOG_CYBL};  /*!< \brief Optional start-format strings for highlighting */
+char *log_level_highlight_end[]   = {LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET};   /*!< \brief Optional end-format strings for highlighting */
 static void log_output_memory(log_component_t *c, const char *file, const char *func, int line, int comp, int level, const char* format,va_list args);
 
 
@@ -501,6 +503,7 @@ int logInit (void)
   return 0;
 }
 
+#include <sys/syscall.h>
 static inline int log_header(log_component_t *c,
 			     char *log_buffer,
 			     int buffsize,
@@ -514,32 +517,45 @@ static inline int log_header(log_component_t *c,
   char threadname[64];
   if (flag & FLAG_THREAD ) {
     threadname[0]='{';
-    if ( pthread_getname_np(pthread_self(), threadname+1,61) != 0)
+    if (pthread_getname_np(pthread_self(), threadname + 1, sizeof(threadname) - 3) != 0)
       strcpy(threadname+1, "?thread?");
-    strcat(threadname,"}");
+    strcat(threadname,"} ");
   } else {
     threadname[0]=0;
   }
- 
+
   char l[32];
   if (flag & FLAG_FILE_LINE && flag & FLAG_FUNCT )
-    snprintf(l, sizeof l," (%s:%d) ", func, line);
+    snprintf(l, sizeof l, "(%s:%d) ", func, line);
   else if (flag & FLAG_FILE_LINE)
-    sprintf(l," (%d) ", line);
+    snprintf(l, sizeof l, "(%d) ", line);
+  else if (flag & FLAG_FUNCT)
+    snprintf(l, sizeof l, "(%s) ", func);
   else
-    l[0]=0;
+    l[0] = 0;
 
   char timeString[32];
   if ( flag & FLAG_TIME ) {
     struct timespec t;
-    clock_gettime(CLOCK_MONOTONIC, &t);
-    snprintf(timeString, sizeof t,"%05.3f",t.tv_sec+t.tv_nsec/1.0e9);
+    if (clock_gettime(CLOCK_MONOTONIC, &t) == -1)
+        abort();
+    snprintf(timeString, sizeof(timeString), "%lu.%06lu ",
+             t.tv_sec,
+             t.tv_nsec / 1000);
   } else {
-    timeString[0]=0;
+    timeString[0] = 0;
   }
-  return  snprintf(log_buffer, buffsize, "%s%s[%s]%c%s %s ",
-		   timeString,
+
+  char threadIdString[32];
+  if (flag & FLAG_THREAD_ID) {
+    snprintf(threadIdString, sizeof(threadIdString), "%08lx ", syscall(__NR_gettid));
+  } else {
+    threadIdString[0] = 0;
+  }
+  return snprintf(log_buffer, buffsize, "%s%s%s[%s] %c %s%s",
 		   flag & FLAG_NOCOLOR ? "" : log_level_highlight_start[level],
+		   timeString,
+		   threadIdString,
 		   c->name,
 		   flag & FLAG_LEVEL ? g_log->level2string[level] : ' ',
 		   l,
@@ -547,53 +563,6 @@ static inline int log_header(log_component_t *c,
 		   );
 }
 
-#if LOG_MINIMAL
-#include <sys/syscall.h>
-void logMinimal(int comp, int level, const char *format, ...)
-{
-    struct timespec ts;
-    if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1)
-        abort();
-
-    char buf[MAX_LOG_TOTAL];
-    int n = snprintf(buf, sizeof(buf), "%lu.%06lu %08lx [%s] %c ",
-                     ts.tv_sec,
-                     ts.tv_nsec / 1000,
-                     syscall(__NR_gettid),
-                     g_log->log_component[comp].name,
-                     level);
-    if (n < 0 || n >= sizeof(buf))
-    {
-        fprintf(stderr, "%s: n=%d\n", __func__, n);
-        return;
-    }
-
-    va_list args;
-    va_start(args, format);
-    int m = vsnprintf(buf + n, sizeof(buf) - n, format, args);
-    va_end(args);
-
-    if (m < 0)
-    {
-        fprintf(stderr, "%s: n=%d m=%d\n", __func__, n, m);
-        return;
-    }
-
-    int len = n + m;
-    if (len > sizeof(buf) - 1)
-    {
-        len = sizeof(buf) - 1;
-    }
-    if (buf[len - 1] != '\n')
-    {
-        buf[len++] = '\n';
-    }
-
-    __attribute__((unused))
-    int unused = write(STDOUT_FILENO, buf, len);
-}
-#endif // LOG_MINIMAL
-
 void logRecord_mt(const char *file,
 		  const char *func,
 		  int line,
@@ -864,7 +833,14 @@ void flush_mem_to_file(void)
   }
 }
 
-char logmem_log_level[NUM_LOG_LEVEL]={'E','W','I','D','T'};
+const char logmem_log_level[NUM_LOG_LEVEL] = {
+  [OAILOG_ERR] = 'E',
+  [OAILOG_WARNING] = 'W',
+  [OAILOG_ANALYSIS] = 'A',
+  [OAILOG_INFO] = 'I',
+  [OAILOG_DEBUG] = 'D',
+  [OAILOG_TRACE] = 'T',
+};
 
 static void log_output_memory(log_component_t *c, const char *file, const char *func, int line, int comp, int level, const char* format,va_list args)
 {
@@ -878,12 +854,32 @@ static void log_output_memory(log_component_t *c, const char *file, const char *
   char log_buffer[MAX_LOG_TOTAL];
 
   // make sure that for log trace the extra info is only printed once, reset when the level changes
-  if (level < OAILOG_TRACE)
-    len += log_header(c, log_buffer, MAX_LOG_TOTAL, file, func, line, level);
-  len += vsnprintf(log_buffer+len, MAX_LOG_TOTAL-len, format, args);
-  if ( !((g_log->flag | c->flag) & FLAG_NOCOLOR) )
-    len+=snprintf(log_buffer+len, MAX_LOG_TOTAL-len, "%s", log_level_highlight_end[level]);
-  
+  if (level < OAILOG_TRACE) {
+    int n = log_header(c, log_buffer+len, MAX_LOG_TOTAL, file, func, line, level);
+    if (n > 0) {
+      len += n;
+      if (len > MAX_LOG_TOTAL) {
+        len = MAX_LOG_TOTAL;
+      }
+    }
+  }
+  int n = vsnprintf(log_buffer+len, MAX_LOG_TOTAL-len, format, args);
+  if (n > 0) {
+    len += n;
+    if (len > MAX_LOG_TOTAL) {
+      len = MAX_LOG_TOTAL;
+    }
+  }
+  if ( !((g_log->flag | c->flag) & FLAG_NOCOLOR) ) {
+    int n = snprintf(log_buffer+len, MAX_LOG_TOTAL-len, "%s", log_level_highlight_end[level]);
+    if (n > 0) {
+      len += n;
+      if (len > MAX_LOG_TOTAL) {
+        len = MAX_LOG_TOTAL;
+      }
+    }
+  }
+
   // OAI printf compatibility
   if(log_mem_flag==1){
     if(log_mem_d[log_mem_side].enable_flag==1){
@@ -919,6 +915,7 @@ static void log_output_memory(log_component_t *c, const char *file, const char *
         }
       }
   }else{
+    AssertFatal(len >= 0 && len <= MAX_LOG_TOTAL, "Bad len %d\n", len);
     if (write(fileno(c->stream), log_buffer, len)) {};
   }
 }
diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h
index 350337b61be638ee3f7f20a8e441f9ea50f94c56..46c73427c183910010233a1c18fbc8590cefe4cf 100644
--- a/common/utils/LOG/log.h
+++ b/common/utils/LOG/log.h
@@ -90,11 +90,12 @@ extern "C" {
 # define  OAILOG_DISABLE -1 /*!< \brief disable all LOG messages, cannot be used in LOG macros, use only in LOG module */
 # define  OAILOG_ERR      0 /*!< \brief critical error conditions, impact on "must have" functionalities */
 # define  OAILOG_WARNING  1 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */
-# define  OAILOG_INFO     2 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */
-# define  OAILOG_DEBUG    3 /*!< \brief first level debug-level messages, for developers, may impact real-time behavior */
-# define  OAILOG_TRACE    4 /*!< \brief second level debug-level messages, for developers, likely impact real-time behavior*/
+# define  OAILOG_ANALYSIS 2 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */
+# define  OAILOG_INFO     3 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */
+# define  OAILOG_DEBUG    4 /*!< \brief first level debug-level messages, for developers, may impact real-time behavior */
+# define  OAILOG_TRACE    5 /*!< \brief second level debug-level messages, for developers, likely impact real-time behavior*/
 
-#define NUM_LOG_LEVEL 5 /*!< \brief the number of message levels users have with LOG (OAILOG_DISABLE is not available to user as a level, so it is not included)*/
+#define NUM_LOG_LEVEL 6 /*!< \brief the number of message levels users have with LOG (OAILOG_DISABLE is not available to user as a level, so it is not included)*/
 /* @}*/
 
 
@@ -127,6 +128,7 @@ extern "C" {
 #define FLAG_FUNCT       0x0020
 #define FLAG_FILE_LINE   0x0040
 #define FLAG_TIME        0x0100
+#define FLAG_THREAD_ID   0x0200
 #define FLAG_INITIALIZED 0x8000
 
 #define SET_LOG_OPTION(O)   g_log->flag = (g_log->flag | O)
@@ -390,7 +392,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
 /*   optname                               help                                          paramflags         XXXptr               defXXXval                          type        numelt */
 /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
 #define LOG_GLOBALPARAMS_DESC { \
-    {LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL,   "Default log level for all componemts\n",              0, strptr:(char **)&gloglevel, defstrval:log_level_names[2].name, TYPE_STRING,     0}, \
+    {LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL,   "Default log level for all componemts\n",              0, strptr:(char **)&gloglevel, defstrval:log_level_names[3].name, TYPE_STRING,     0}, \
     {LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE,  "Default console output option, for all components\n", 0, iptr:&(consolelog),         defintval:1,                       TYPE_INT,        0}, \
     {LOG_CONFIG_STRING_GLOBAL_LOG_OPTIONS, LOG_CONFIG_HELP_OPTIONS,                               0, strlistptr:NULL,            defstrlistval:NULL,                TYPE_STRINGLIST, 0} \
   }
@@ -408,32 +410,14 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
 // debugging macros
 #define LOG_F  LOG_I           /* because  LOG_F was originaly to dump a message or buffer but is also used as a regular level...., to dump use LOG_DUMPMSG */
 
-#if LOG_MINIMAL
-
-  void logMinimal(int component, int level, const char *format, ...) __attribute__((format(printf, 3, 4)));
-# define LOG_E(COMPONENT, ...) do if (1) logMinimal(COMPONENT, 'E', __VA_ARGS__); while (0)
-# define LOG_W(COMPONENT, ...) do if (1) logMinimal(COMPONENT, 'W', __VA_ARGS__); while (0)
-# define LOG_A(COMPONENT, ...) do if (1) logMinimal(COMPONENT, 'A', __VA_ARGS__); while (0) /* logs intended for analysis */
-# define LOG_I(COMPONENT, ...) do if (1) logMinimal(COMPONENT, 'I', __VA_ARGS__); while (0)
-# define LOG_D(COMPONENT, ...) do if (0) logMinimal(COMPONENT, 'D', __VA_ARGS__); while (0)
-# define LOG_T(COMPONENT, ...) do if (0) logMinimal(COMPONENT, 'T', __VA_ARGS__); while (0)
-
-# define LOG_M(FILE, VECTOR, DATA, LEN, DEC, FORMAT) ((void) 0)
-# define LOG_DUMPFLAG(D) 0
-# define LOG_DEBUGFLAG(D) 0
-# define LOG_DUMPMSG(C, B, S, X...) ((void) 0)
-# define VLOG(C, L, F, ARGS) ((void) 0)
-
-#else // LOG_MINIMAL
-
 #  if T_TRACER
 /* per component, level dependent macros */
-#    define LOG_E(c, x...) do { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x))  ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR    ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x)    ;} } while (0)
-#    define LOG_W(c, x...) do { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)); if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x);} } while (0)
-#    define LOG_A LOG_I
-#    define LOG_I(c, x...) do { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x))   ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO   ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x)   ;} } while (0)
-#    define LOG_D(c, x...) do { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x))  ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG  ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x)  ;} } while (0)
-#    define LOG_T(c, x...) do { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x))  ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE  ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x)  ;} } while (0)
+#    define LOG_E(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR    ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x)     ;} else { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x))   ;}} while (0)
+#    define LOG_W(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} else { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)) ;}} while (0)
+#    define LOG_A(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ANALYSIS) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ANALYSIS, x) ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x))    ;}} while (0)
+#    define LOG_I(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO   ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x)    ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x))    ;}} while (0)
+#    define LOG_D(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG  ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x)   ;} else { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x))   ;}} while (0)
+#    define LOG_T(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE  ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x)   ;} else { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x))   ;}} while (0)
 #    define VLOG(c,l, f, args) do { if (T_stdout) { if( g_log->log_component[c].level >= l  ) vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, l, f, args)   ;} } while (0)
 /* macro used to dump a buffer or a message as in openair2/RRC/LTE/RRC_eNB.c, replaces LOG_F macro */
 #    define LOG_DUMPMSG(c, f, b, s, x...) do {  if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x)  ;}   while (0)  /* */
@@ -449,8 +433,8 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
 
 #    define LOG_E(c, x...) do { if( g_log->log_component[c].level >= OAILOG_ERR    ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x)     ;}  while (0)
 #    define LOG_W(c, x...) do { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;}  while (0)
+#    define LOG_A(c, x...) do { if( g_log->log_component[c].level >= OAILOG_ANALYSIS) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ANALYSIS, x);}  while (0)
 #    define LOG_I(c, x...) do { if( g_log->log_component[c].level >= OAILOG_INFO   ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x)    ;}  while (0)
-#    define LOG_A LOG_I
 #    define LOG_D(c, x...) do { if( g_log->log_component[c].level >= OAILOG_DEBUG  ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x)   ;}  while (0)
 #    define LOG_T(c, x...) do { if( g_log->log_component[c].level >= OAILOG_TRACE  ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x)   ;}  while (0)
 #    define VLOG(c,l, f, args) do { if( g_log->log_component[c].level >= l  ) vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, l, f, args)   ; } while (0)
@@ -464,7 +448,6 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
 #    define LOG_VAR(A,B) A B
 #    define T_ACTIVE(a) (0) 
 #  endif /* T_TRACER */
-#endif // LOG_MINIMAL
 
 /* avoid warnings for variables only used in LOG macro's but set outside debug section */
 #define GCC_NOTUSED   __attribute__((unused))
diff --git a/common/utils/T/tracer/macpdu2wireshark.c b/common/utils/T/tracer/macpdu2wireshark.c
index b9284748e411388d97cdec713bfc5e26659aa2dd..a024f181458b88186ad15490e71d302b469219e9 100644
--- a/common/utils/T/tracer/macpdu2wireshark.c
+++ b/common/utils/T/tracer/macpdu2wireshark.c
@@ -362,6 +362,16 @@ void nr_dl_retx(void *_d, event e)
            e.e[d->nr_dl_retx_data].bsize, NO_PREAMBLE);
 }
 
+void nr_dl_retx(void *_d, event e)
+{
+  ev_data *d = _d;
+
+  trace_nr(d, NR_DIRECTION_DOWNLINK, NR_C_RNTI, e.e[d->nr_dl_retx_rnti].i,
+           e.e[d->nr_dl_retx_frame].i, e.e[d->nr_dl_retx_slot].i,
+           e.e[d->nr_dl_retx_data].b, e.e[d->nr_dl_retx_data].bsize,
+           NO_PREAMBLE);
+}
+
 void nr_mib(void *_d, event e)
 {
   ev_data *d = _d;
@@ -396,6 +406,7 @@ void setup_data(ev_data *d, void *database, int ul_id, int dl_id, int mib_id,
 {
   database_event_format f;
   int i;
+
   d->ul_rnti             = -1;
   d->ul_frame            = -1;
   d->ul_subframe         = -1;
@@ -568,6 +579,20 @@ void setup_data(ev_data *d, void *database, int ul_id, int dl_id, int mib_id,
       d->nr_dl_retx_data == -1)
     goto error;
 
+  /* NR dl retx: rnti, frame, slot, data */
+  f = get_format(database, nr_dl_retx_id);
+
+  for (i = 0; i < f.count; i++) {
+    G("rnti",  "int",    d->nr_dl_retx_rnti);
+    G("frame", "int",    d->nr_dl_retx_frame);
+    G("slot",  "int",    d->nr_dl_retx_slot);
+    G("data",  "buffer", d->nr_dl_retx_data);
+  }
+
+  if (d->nr_dl_retx_rnti == -1 || d->nr_dl_retx_frame == -1 ||
+      d->nr_dl_retx_slot == -1 || d->nr_dl_retx_data == -1)
+    goto error;
+
   /* NR MIB: frame, slot, data */
   f = get_format(database, nr_mib_id);
 
diff --git a/doc/BUILD.md b/doc/BUILD.md
index 40b63ac697587fd2d4348dfeeb8e480ad3bd4cdf..852a2486595740315eb6b6427c43f40e514969a3 100644
--- a/doc/BUILD.md
+++ b/doc/BUILD.md
@@ -60,7 +60,7 @@ cd cmake_targets/
 ./build_oai -I --phy_simulators
 ```
 
-After completing the build, the binaries are available in the cmake_targets/phy_simulators/build directory.  
+After completing the build, the binaries are available in the cmake_targets/ran_build/build directory.  
 A copy is also available in the target/bin directory, with all binaries suffixed by the 3GPP release number, today **.Rel15**.  
 
 
diff --git a/doc/RUNMODEM.md b/doc/RUNMODEM.md
index d063afd5d937d72fc4deb8e196c9dad5b5e039f5..89d2ec8a2de34ca4bc4214ba58de4ffb8b3a241a 100644
--- a/doc/RUNMODEM.md
+++ b/doc/RUNMODEM.md
@@ -89,6 +89,8 @@ At the UE the --phy-test flag will
 
 ```bash sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf --phy-test```
 
+In phy-test mode it is possible to mimic the reception of UE Capabilities at gNB by passing through the command line parameter `--uecap_file` the location and file name of the input UE Capability file, e.g. `--uecap_file ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap.xml`
+
 ### Launch UE in another window
 
 ```bash sudo ./nr-uesoftmodem --phy-test [--rrc_config_path ../../../ci-scripts/rrc-files]```
@@ -122,6 +124,8 @@ gNB on machine 1:
 
 `sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf --do-ra`
 
+In do-ra mode it is possible to mimic the reception of UE Capabilities at gNB by passing through the command line parameter `--uecap_file` the location and file name of the input UE Capability file, e.g. `--uecap_file ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap.xml`
+
 UE on machine 2:
 
 `sudo ./nr-uesoftmodem --do-ra`
@@ -161,13 +165,17 @@ gNB on machine 1:
 
 UE on machine 2:
 
-`sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --sa`
+`sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 -s 516 --sa`
 
 With the RF simulator (on the same machine):
 
 `sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --rfsim --sa`
 
-`sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --rfsim --sa`
+`sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 -s 516 --rfsim --sa`
+
+where `-r` sets the transmission bandwidth configuration in terms of RBs, `-C` sets the downlink carrier frequency and `-s` sets the SSB start subcarrier.
+
+Additionally, at UE side `--uecap_file` option can be used to pass the UE Capabilities input file (path location + filename), e.g. `--uecap_file ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap.xml`
 
 ## IF setup with OAI
 
diff --git a/doc/SW-archi-graph.md b/doc/SW-archi-graph.md
new file mode 100644
index 0000000000000000000000000000000000000000..8f8a6f6e5cf1ed944d291c8e9fc02f48002c522a
--- /dev/null
+++ b/doc/SW-archi-graph.md
@@ -0,0 +1,75 @@
+```mermaid
+flowchart TB
+    A[ru_thread] --> RFin>block rx_rf] --> feprx
+    feprx --> half-slot --> end_feprx
+    feprx --> second-thread -- block_end_feprx --> end_feprx>feprx]
+    end_feprx --> rx_nr_prach_ru
+rx_nr_prach_ru -- block_queue_singleton --> resp_L1>resp L1]
+resp_L1 -- async launch --> rx_func
+resp_L1 -- immediate return --> RFin
+
+subgraph rxfunc
+rx_func_implem[rx_func] 
+    subgraph rxfuncbeg
+      handle_nr_slot_ind
+      --> rnti_to_remove-mgmt
+      --> L1_nr_prach_procedures
+      --> apply_nr_rotation_ul
+    end 
+    subgraph phy_procedures_gNB_uespec_RX
+      fill_ul_rb_mask
+      --> pucch(decode each gNB->pucch)
+      -->nr_fill_ul_indication
+      --> nr_ulsch_procedures
+      --> nr_ulsch_decoding
+      --> segInParallel[[all segments decode in parallel]]
+      --> barrier_end_of_ulsch_decoding
+    end 
+    subgraph NR_UL_indication
+      handle_nr_rach
+      --> handle_nr_uci
+      --> handle_nr_ulsch
+      subgraph gNB_dlsch_ulsch_scheduler
+          run_pdcp
+          --> nr_rrc_trigger
+          --> schedule_xxxx
+      end
+      handle_nr_ulsch --> gNB_dlsch_ulsch_scheduler
+      subgraph NR_Schedule_response
+         L1_tx_free3>L1_tx_free]
+         --> handle_nr_nfapi_xxx_pdu
+         --> sendTxFilled((L1_tx_filled))
+         --> nr_fill_ul_xxx
+         --> nr_fill_prach
+      end
+      gNB_dlsch_ulsch_scheduler --> NR_Schedule_response
+    end 
+    rx_func_implem --> rxfuncbeg
+    rxfuncbeg --> phy_procedures_gNB_uespec_RX
+phy_procedures_gNB_uespec_RX --> NR_UL_indication
+-- block_queue_block_PNF_monolithic --> L1_tx_free2>L1 tx filled]
+-- async launch --> tx_func
+L1_tx_free2 -- send_msg --> rsp((resp_L1))
+end 
+rx_func --> rxfunc
+
+
+subgraph tx_func
+    direction LR
+    subgraph phy_procedures_gNB_TX
+       dcitop[nr_generate dci top]
+       --> nr_generate_csi_rs
+       --> apply_nr_rotation
+       -- send_msg --> end_tx_func((L1_tx_out))
+    end
+    subgraph tx_reorder_thread
+        L1_tx_out>L1_tx_out]
+        --> reorder{re order} --> reorder
+        reorder --> ru_tx_func
+        reorder --> L1_tx_free((L1_tx_free))
+        ru_tx_func --> feptx_prec
+        --> feptx_ofdm
+    end 
+end
+
+```
diff --git a/doc/SW_archi.md b/doc/SW_archi.md
index 059386310213a17ef6149ec571c3c0bd813a084f..0e77cfa580afa5647df6173fc9458adef0f23f20 100644
--- a/doc/SW_archi.md
+++ b/doc/SW_archi.md
@@ -17,6 +17,70 @@ body {
 
 </style>
 
+```mermaid
+flowchart TB
+    A[ru_thread] --> RFin>block rx_rf] --> feprx
+    feprx --> half-slot --> end_feprx
+    feprx --> second-thread -- block_end_feprx --> end_feprx>feprx]
+    end_feprx --> rx_nr_prach_ru
+rx_nr_prach_ru -- block_queue --> resp_L1>resp L1]
+resp_L1 -- async launch --> rx_func
+resp_L1 -- immediate return --> RFin
+
+subgraph rxfunc
+rx_func_implem[rx_func] 
+    subgraph rxfuncbeg
+      handle_nr_slot_ind
+      --> rnti_to_remove-mgmt
+      --> L1_nr_prach_procedures
+      --> apply_nr_rotation_ul
+    end 
+    subgraph phy_procedures_gNB_uespec_RX
+      fill_ul_rb_mask
+      --> pucch(decode each gNB->pucch)
+      -->nr_fill_ul_indication
+      --> nr_ulsch_procedures
+      --> nr_ulsch_decoding
+      --> segInParallel[[all segments decode in parallel]]
+      --> barrier_end_of_ulsch_decoding
+    end 
+    subgraph NR_UL_indication
+      handle_nr_rach
+      --> handle_nr_uci
+      --> handle_nr_ulsch
+      --> gNB_dlsch_ulsch_scheduler
+      --> NR_Schedule_response
+    end 
+    rx_func_implem --> rxfuncbeg
+    rxfuncbeg --> phy_procedures_gNB_uespec_RX
+phy_procedures_gNB_uespec_RX --> NR_UL_indication
+-- block_queue --> L1_tx_free2>L1 tx free]
+-- async launch --> tx_func
+L1_tx_free2 -- send_msg --> rsp((resp_L1))
+end 
+rx_func --> rxfunc
+
+
+subgraph tx
+    direction LR
+    subgraph tx_func2
+       phy_procedures_gNB_TX
+       --> dcitop[nr_generate dci top]
+       --> nr_generate_csi_rs
+       --> apply_nr_rotation
+       -- send_msg --> end_tx_func((L1_tx_out))
+    end
+    subgraph tx_reorder_thread
+        L1_tx_out>L1_tx_out]
+        --> reorder{re order} --> reorder
+        reorder --> ru_tx_func
+        reorder --> L1_tx_free((L1_tx_free))
+        ru_tx_func --> feptx_prec
+        --> feptx_ofdm
+    end 
+    tx_func2 --> tx_reorder_thread
+end
+```
 
 This tuto for 5G gNB design, with Open Cells main
 {: .text-center}
diff --git a/docker/Dockerfile.build.rhel8.2 b/docker/Dockerfile.build.rhel8.2
index 7ddfcdc034086c1efc618e1b23113a20ff59dd41..22486c5e68082826d47a67cd88c4c4ddcf471fb5 100644
--- a/docker/Dockerfile.build.rhel8.2
+++ b/docker/Dockerfile.build.rhel8.2
@@ -35,4 +35,4 @@ COPY . .
 RUN /bin/sh oaienv && \ 
     cd cmake_targets && \
     mkdir -p log && \
-    ./build_oai --eNB --gNB --RU --UE --nrUE --ninja -w USRP --verbose-ci
+    ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib all -w USRP --verbose-ci
diff --git a/docker/Dockerfile.build.ubuntu18 b/docker/Dockerfile.build.ubuntu18
index b479ee90d901c9bd6b5a05809b9dd5554594590d..3ba1e41442f6c653f22dc2a9dd62aae50e3af979 100644
--- a/docker/Dockerfile.build.ubuntu18
+++ b/docker/Dockerfile.build.ubuntu18
@@ -35,4 +35,4 @@ COPY . .
 RUN /bin/sh oaienv && \
     cd cmake_targets && \
     mkdir -p log && \
-    ./build_oai --eNB --gNB --RU --UE --nrUE --ninja -w USRP --verbose-ci
+    ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib all -w USRP --verbose-ci
diff --git a/docker/Dockerfile.eNB.rhel8.2 b/docker/Dockerfile.eNB.rhel8.2
index bb0a9cb06449606a2f372240a88d1def8af7a67b..6c921a493226808c49ac80dde8d55dcf697c65a9 100644
--- a/docker/Dockerfile.eNB.rhel8.2
+++ b/docker/Dockerfile.eNB.rhel8.2
@@ -69,6 +69,8 @@ COPY --from=enb-build \
     /oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
     /oai-ran/cmake_targets/ran_build/build/libdfts.so \
     /oai-ran/cmake_targets/ran_build/build/liboai_iqplayer.so \
+    /oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
+    /oai-ran/cmake_targets/ran_build/build/libtelnetsrv_enb.so \
     /usr/local/lib/
 
 COPY --from=enb-base \
diff --git a/docker/Dockerfile.eNB.ubuntu18 b/docker/Dockerfile.eNB.ubuntu18
index 23cea729cacf941fb2d4c1a1b365f99043a21db0..1f375a20dc9ab0725258024ad1433128008946c8 100644
--- a/docker/Dockerfile.eNB.ubuntu18
+++ b/docker/Dockerfile.eNB.ubuntu18
@@ -76,6 +76,8 @@ COPY --from=enb-build \
      /oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
      /oai-ran/cmake_targets/ran_build/build/libdfts.so \
      /oai-ran/cmake_targets/ran_build/build/liboai_iqplayer.so \
+     /oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
+     /oai-ran/cmake_targets/ran_build/build/libtelnetsrv_enb.so \
      /usr/local/lib/
 
 # Now we are copying from builder-image the UHD files.
diff --git a/docker/Dockerfile.gNB.rhel8.2 b/docker/Dockerfile.gNB.rhel8.2
index 832fa171536f72f4e6cf79d09714ea5404860796..703f4c67b5e1748a9405f5e348522bc659c40b5b 100644
--- a/docker/Dockerfile.gNB.rhel8.2
+++ b/docker/Dockerfile.gNB.rhel8.2
@@ -74,6 +74,7 @@ COPY --from=gnb-build \
     /oai-ran/cmake_targets/ran_build/build/libldpc_optim.so \
     /oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so \
     /oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \
+    /oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
     /usr/local/lib/
 
 COPY --from=gnb-base \
diff --git a/docker/Dockerfile.gNB.ubuntu18 b/docker/Dockerfile.gNB.ubuntu18
index 66c5d7703f8b15a5a3174fda372f692aeb729967..24e4bcbc7c16762ea0787a9109934dfc2d517d4f 100644
--- a/docker/Dockerfile.gNB.ubuntu18
+++ b/docker/Dockerfile.gNB.ubuntu18
@@ -78,6 +78,7 @@ COPY --from=gnb-build \
     /oai-ran/cmake_targets/ran_build/build/libldpc_optim.so \
     /oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so \
     /oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \
+    /oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
     /usr/local/lib/
 
 # Now we are copying from builder-image the UHD files.
diff --git a/docker/Dockerfile.lteUE.rhel8.2 b/docker/Dockerfile.lteUE.rhel8.2
index 2580b95278fd40fc66673a0cfe05a782e6ec19a5..f547558bdb7cab32f41da185f9ee4ca79de6a788 100644
--- a/docker/Dockerfile.lteUE.rhel8.2
+++ b/docker/Dockerfile.lteUE.rhel8.2
@@ -73,6 +73,7 @@ COPY --from=lte-ue-build \
     /oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
     /oai-ran/cmake_targets/ran_build/build/libSIMU.so \
     /oai-ran/cmake_targets/ran_build/build/libdfts.so \
+    /oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
     /usr/local/lib/
 
 COPY --from=lte-ue-base \
diff --git a/docker/Dockerfile.lteUE.ubuntu18 b/docker/Dockerfile.lteUE.ubuntu18
index 70394d8a4b62e7c1ff5174d45f47669069ac3bd1..a5bf4cfe9441c5fa0d4c9c9b2fefb4bf6db4de1e 100644
--- a/docker/Dockerfile.lteUE.ubuntu18
+++ b/docker/Dockerfile.lteUE.ubuntu18
@@ -80,6 +80,7 @@ COPY --from=lte-ue-build \
     /oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
     /oai-ran/cmake_targets/ran_build/build/libSIMU.so \
     /oai-ran/cmake_targets/ran_build/build/libdfts.so \
+    /oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
     /usr/local/lib/
 
 # Now we are copying from builder-image the UHD files.
diff --git a/docker/Dockerfile.nrUE.rhel8.2 b/docker/Dockerfile.nrUE.rhel8.2
index f774638f4711723eb139d0e90cc12ee630d547f3..cbc8d8c65fd87db590233a6012b59def69bbc04e 100644
--- a/docker/Dockerfile.nrUE.rhel8.2
+++ b/docker/Dockerfile.nrUE.rhel8.2
@@ -76,6 +76,8 @@ COPY --from=nr-ue-build \
     /oai-ran/cmake_targets/ran_build/build/libldpc_optim.so \
     /oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so \
     /oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \
+    /oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
+    /oai-ran/cmake_targets/ran_build/build/libtelnetsrv_5Gue.so \
     /usr/local/lib/
 
 COPY --from=nr-ue-base \
diff --git a/docker/Dockerfile.nrUE.ubuntu18 b/docker/Dockerfile.nrUE.ubuntu18
index 021e8d39cf3494a716f622e072372f9b40386ab8..126f268e000e24bdf552dbe27482d4573eec8379 100644
--- a/docker/Dockerfile.nrUE.ubuntu18
+++ b/docker/Dockerfile.nrUE.ubuntu18
@@ -81,6 +81,8 @@ COPY --from=nr-ue-build \
     /oai-ran/cmake_targets/ran_build/build/libldpc_optim.so \
     /oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so \
     /oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \
+    /oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
+    /oai-ran/cmake_targets/ran_build/build/libtelnetsrv_5Gue.so \
     /usr/local/lib/
 
 # Now we are copying from builder-image the UHD files.
diff --git a/docker/Dockerfile.phySim.rhel8.2 b/docker/Dockerfile.phySim.rhel8.2
index 141a80cb50d80052e41cafdaf18415e8e5080bd6..9f4b27ec0e4255a4b2bb4938fd67359e561a4e6f 100644
--- a/docker/Dockerfile.phySim.rhel8.2
+++ b/docker/Dockerfile.phySim.rhel8.2
@@ -85,10 +85,10 @@ COPY --from=phy-sim-build \
     /lib64/liblapack.so.3 \
     /lib64/libexslt.so.0 \
     /lib64/libxslt.so.1 \
-    /oai-ran/cmake_targets/phy_simulators/build/libdfts.so \
-    /oai-ran/cmake_targets/phy_simulators/build/libSIMU.so \
-    /oai-ran/cmake_targets/phy_simulators/build/libldpc.so \
-    /oai-ran/cmake_targets/phy_simulators/build/libldpc_orig.so \
+    /oai-ran/cmake_targets/ran_build/build/libdfts.so \
+    /oai-ran/cmake_targets/ran_build/build/libSIMU.so \
+    /oai-ran/cmake_targets/ran_build/build/libldpc.so \
+    /oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \
     /usr/local/lib/
 
 RUN ldconfig
diff --git a/executables/nr-gnb.c b/executables/nr-gnb.c
index 4fe8cfa1bfd310c21c35e70be1651516ef591d12..2b1c36407bd7073198d89539b103ab72b6c0bf20 100644
--- a/executables/nr-gnb.c
+++ b/executables/nr-gnb.c
@@ -87,7 +87,6 @@
 #include <openair1/PHY/NR_TRANSPORT/nr_ulsch.h>
 #include <openair1/PHY/NR_TRANSPORT/nr_dlsch.h>
 #include <PHY/NR_ESTIMATION/nr_ul_estimation.h>
-//#define DEBUG_THREADS 1
 
 //#define USRP_DEBUG 1
 // Fix per CC openair rf/if device update
@@ -114,7 +113,6 @@ time_stats_t softmodem_stats_rx_sf; // total rx time
 void tx_func(void *param) {
 
   processingData_L1tx_t *info = (processingData_L1tx_t *) param;
-  PHY_VARS_gNB *gNB = info->gNB;
   int frame_tx = info->frame;
   int slot_tx = info->slot;
 
@@ -122,35 +120,9 @@ void tx_func(void *param) {
                         frame_tx,
                         slot_tx,
                         1);
-  info->slot = -1;
-  //if ((frame_tx&127) == 0) dump_pdsch_stats(fd,gNB);
-
-  // If the later of the 2 L1 tx thread finishes first,
-  // we wait for the earlier one to finish and start the RU thread
-  // to avoid realtime issues with USRP
-
-  // Start RU TX processing.
-  notifiedFIFO_elt_t *res;
-  res = pullTpool(gNB->resp_RU_tx, gNB->threadPool);
-  processingData_RU_t *syncMsg = (processingData_RU_t *)NotifiedFifoData(res);
-  LOG_D(PHY,"waiting for previous tx to finish, next slot %d,%d\n",syncMsg->next_slot,slot_tx);
-  while (syncMsg->next_slot != slot_tx) {
-    pushNotifiedFIFO(gNB->resp_RU_tx, res);
-    res = pullTpool(gNB->resp_RU_tx, gNB->threadPool);
-    syncMsg = (processingData_RU_t *)NotifiedFifoData(res);
-  }
-  LOG_D(PHY,"previous tx finished, next slot %d,%d\n",syncMsg->next_slot,slot_tx);
-  syncMsg->frame_tx = frame_tx;
-  syncMsg->slot_tx = slot_tx;
-  syncMsg->next_slot = get_next_downlink_slot(gNB, &gNB->gNB_config, frame_tx, slot_tx);
-  syncMsg->timestamp_tx = info->timestamp_tx;
-  syncMsg->ru = gNB->RU_list[0];
-  res->key = slot_tx;
-  pushTpool(gNB->threadPool, res);
 }
 
 void rx_func(void *param) {
-
   processingData_L1_t *info = (processingData_L1_t *) param;
   PHY_VARS_gNB *gNB = info->gNB;
   int frame_rx = info->frame_rx;
@@ -275,15 +247,12 @@ void rx_func(void *param) {
   
   if (tx_slot_type == NR_DOWNLINK_SLOT || tx_slot_type == NR_MIXED_SLOT) {
     notifiedFIFO_elt_t *res;
-    res = pullTpool(gNB->resp_L1_tx, gNB->threadPool);
-    processingData_L1tx_t *syncMsg = (processingData_L1tx_t *)NotifiedFifoData(res);
-    while (syncMsg->slot != slot_tx) {
-      pushNotifiedFIFO(gNB->resp_L1_tx, res);
-      res = pullTpool(gNB->resp_L1_tx, gNB->threadPool);
-      syncMsg = (processingData_L1tx_t *)NotifiedFifoData(res);
-    }
+    processingData_L1tx_t *syncMsg;
+    // Its a FIFO so it maitains the order in which the MAC fills the messages
+    // so no need for checking for right slot
+    res = pullTpool(gNB->L1_tx_filled, gNB->threadPool);
+    syncMsg = (processingData_L1tx_t *)NotifiedFifoData(res);
     syncMsg->gNB = gNB;
-    AssertFatal(syncMsg->slot == slot_tx, "Thread message slot and logical slot number do not match\n");
     syncMsg->timestamp_tx = info->timestamp_tx;
     res->key = slot_tx;
     pushTpool(gNB->threadPool, res);
@@ -331,13 +300,14 @@ void rx_func(void *param) {
 }
 static void dump_L1_meas_stats(PHY_VARS_gNB *gNB, RU_t *ru, char *output) {
   int stroff = 0;
-  stroff += print_meas_log(gNB->phy_proc_tx_0, "L1 Tx processing thread 0", NULL, NULL, output);
-  stroff += print_meas_log(gNB->phy_proc_tx_1, "L1 Tx processing thread 1", NULL, NULL, output+stroff);
+  stroff += print_meas_log(gNB->phy_proc_tx[0], "L1 Tx processing thread 0", NULL, NULL, output);
+  //stroff += print_meas_log(gNB->phy_proc_tx[1], "L1 Tx processing thread 1", NULL, NULL, output+stroff);
   stroff += print_meas_log(&gNB->dlsch_encoding_stats, "DLSCH encoding", NULL, NULL, output+stroff);
   stroff += print_meas_log(&gNB->phy_proc_rx, "L1 Rx processing", NULL, NULL, output+stroff);
   stroff += print_meas_log(&gNB->ul_indication_stats, "UL Indication", NULL, NULL, output+stroff);
   stroff += print_meas_log(&gNB->rx_pusch_stats, "PUSCH inner-receiver", NULL, NULL, output+stroff);
   stroff += print_meas_log(&gNB->ulsch_decoding_stats, "PUSCH decoding", NULL, NULL, output+stroff);
+  stroff += print_meas_log(&gNB->schedule_response_stats, "Schedule Response",NULL,NULL, output+stroff);
   if (ru->feprx) stroff += print_meas_log(&ru->ofdm_demod_stats,"feprx",NULL,NULL, output+stroff);
 
   if (ru->feptx_ofdm) {
@@ -367,13 +337,14 @@ void *nrL1_stats_thread(void *param) {
   fd=fopen("nrL1_stats.log","w");
   AssertFatal(fd!=NULL,"Cannot open nrL1_stats.log\n");
 
-  reset_meas(gNB->phy_proc_tx_0);
-  reset_meas(gNB->phy_proc_tx_1);
+  reset_meas(gNB->phy_proc_tx[0]);
+  //reset_meas(gNB->phy_proc_tx[1]);
   reset_meas(&gNB->dlsch_encoding_stats);
   reset_meas(&gNB->phy_proc_rx);
   reset_meas(&gNB->ul_indication_stats);
   reset_meas(&gNB->rx_pusch_stats);
   reset_meas(&gNB->ulsch_decoding_stats);
+  reset_meas(&gNB->schedule_response_stats);
 
   while (!oai_exit) {
     sleep(1);
@@ -389,6 +360,52 @@ void *nrL1_stats_thread(void *param) {
   return(NULL);
 }
 
+// This thread reads the finished L1 tx jobs from threaPool
+// and pushes RU tx thread in the right order. It works only
+// two parallel L1 tx threads.
+void *tx_reorder_thread(void* param) {
+  PHY_VARS_gNB *gNB = (PHY_VARS_gNB *)param;
+    notifiedFIFO_elt_t *resL1Reserve = NULL;
+  
+
+  resL1Reserve=pullTpool(gNB->L1_tx_out, gNB->threadPool);
+  int next_tx_slot=((processingData_L1tx_t *)NotifiedFifoData(resL1Reserve))->slot;
+  
+  while (!oai_exit) {
+    notifiedFIFO_elt_t *resL1;
+    if (resL1Reserve) {
+       resL1=resL1Reserve;
+       if (((processingData_L1tx_t *)NotifiedFifoData(resL1))->slot != next_tx_slot) {
+         LOG_E(PHY,"order mistake");
+	 resL1Reserve=NULL;
+	 resL1 = pullTpool(gNB->L1_tx_out, gNB->threadPool);
+       }
+     } else { 
+       resL1 = pullTpool(gNB->L1_tx_out, gNB->threadPool);
+       if (((processingData_L1tx_t *)NotifiedFifoData(resL1))->slot != next_tx_slot) {
+          if (resL1Reserve)
+              LOG_E(PHY,"error, have a stored packet, then a second one\n");
+	  resL1Reserve=resL1;
+          resL1 = pullTpool(gNB->L1_tx_out, gNB->threadPool);
+          if (((processingData_L1tx_t *)NotifiedFifoData(resL1))->slot != next_tx_slot)
+	    LOG_E(PHY,"error, pull two msg, none is good\n");
+       }
+    }
+    processingData_L1tx_t *syncMsgL1= (processingData_L1tx_t *)NotifiedFifoData(resL1);
+    processingData_RU_t syncMsgRU;
+    syncMsgRU.frame_tx = syncMsgL1->frame;
+    syncMsgRU.slot_tx = syncMsgL1->slot;
+    syncMsgRU.timestamp_tx = syncMsgL1->timestamp_tx;
+    syncMsgRU.ru = gNB->RU_list[0];
+    next_tx_slot = get_next_downlink_slot(gNB, &gNB->gNB_config, syncMsgRU.frame_tx, syncMsgRU.slot_tx);
+    pushNotifiedFIFO(gNB->L1_tx_free, resL1);
+    if (resL1==resL1Reserve)
+       resL1Reserve=NULL;
+    ru_tx_func((void*)&syncMsgRU);
+  }
+  return(NULL);
+}
+
 void init_gNB_Tpool(int inst) {
   PHY_VARS_gNB *gNB;
   gNB = RC.gNB[inst];
@@ -397,8 +414,8 @@ void init_gNB_Tpool(int inst) {
   // ULSCH decoding threadpool
   gNB->threadPool = (tpool_t*)malloc(sizeof(tpool_t));
   int numCPU = sysconf(_SC_NPROCESSORS_ONLN);
-  LOG_I(PHY,"Number of threads requested in config file: %d, Number of threads available on this machine: %d\n",gNB->pusch_proc_threads,numCPU);
-  int threadCnt = min(numCPU, gNB->pusch_proc_threads);
+  LOG_I(PHY,"Number of threads requested in config file: %d, Number of threads available on this machine: %d\n",gNB->thread_pool_size,numCPU);
+  int threadCnt = min(numCPU, gNB->thread_pool_size);
   if (threadCnt < 2) LOG_E(PHY,"Number of threads for gNB should be more than 1. Allocated only %d\n",threadCnt);
   char pool[80];
   sprintf(pool,"-1");
@@ -420,40 +437,29 @@ void init_gNB_Tpool(int inst) {
   pushNotifiedFIFO(gNB->resp_L1,msg); // to unblock the process in the beginning
 
   // L1 TX result FIFO 
-  gNB->resp_L1_tx = (notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
-  initNotifiedFIFO(gNB->resp_L1_tx);
+  gNB->L1_tx_free = (notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
+  gNB->L1_tx_filled = (notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
+  gNB->L1_tx_out = (notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
+  initNotifiedFIFO(gNB->L1_tx_free);
+  initNotifiedFIFO(gNB->L1_tx_filled);
+  initNotifiedFIFO(gNB->L1_tx_out);
+  
   // we create 2 threads for L1 tx processing
-  notifiedFIFO_elt_t *msgL1Tx = newNotifiedFIFO_elt(sizeof(processingData_L1tx_t),0,gNB->resp_L1_tx,tx_func);
-  processingData_L1tx_t *msgDataTx = (processingData_L1tx_t *)NotifiedFifoData(msgL1Tx);
-  init_DLSCH_struct(gNB, msgDataTx);
-  msgDataTx->slot = -1;
-  memset(msgDataTx->ssb, 0, 64*sizeof(NR_gNB_SSB_t));
-  reset_meas(&msgDataTx->phy_proc_tx);
-  gNB->phy_proc_tx_0 = &msgDataTx->phy_proc_tx;
-  pushNotifiedFIFO(gNB->resp_L1_tx,msgL1Tx); // to unblock the process in the beginning
-
-  msgL1Tx = newNotifiedFIFO_elt(sizeof(processingData_L1tx_t),0,gNB->resp_L1_tx,tx_func);
-  msgDataTx = (processingData_L1tx_t *)NotifiedFifoData(msgL1Tx);
-  init_DLSCH_struct(gNB, msgDataTx);
-  msgDataTx->slot = -1;
-  memset(msgDataTx->ssb, 0, 64*sizeof(NR_gNB_SSB_t));
-  reset_meas(&msgDataTx->phy_proc_tx);
-  gNB->phy_proc_tx_1 = &msgDataTx->phy_proc_tx;
-  pushNotifiedFIFO(gNB->resp_L1_tx,msgL1Tx); // to unblock the process in the beginning
-
-  // RU TX result FIFO 
-  gNB->resp_RU_tx = (notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
-  initNotifiedFIFO(gNB->resp_RU_tx);
-  notifiedFIFO_elt_t *msgRUTx = newNotifiedFIFO_elt(sizeof(processingData_RU_t),0,gNB->resp_RU_tx,ru_tx_func);
-  processingData_RU_t *msgData = (processingData_RU_t*)msgRUTx->msgData;
-  int first_tx_slot = sf_ahead*gNB->frame_parms.slots_per_subframe;
-  msgData->next_slot = get_next_downlink_slot(gNB, &gNB->gNB_config, 0, first_tx_slot-1);
-  pushNotifiedFIFO(gNB->resp_RU_tx,msgRUTx); // to unblock the process in the beginning
-
-  if (!get_softmodem_params()->emulate_l1) {
-    threadCreate(&proc->L1_stats_thread,nrL1_stats_thread,(void*)gNB,"L1_stats",-1,OAI_PRIORITY_RT_LOW);
+  for (int i=0; i < 2; i++) {
+    notifiedFIFO_elt_t *msgL1Tx = newNotifiedFIFO_elt(sizeof(processingData_L1tx_t),0,gNB->L1_tx_out,tx_func);
+    processingData_L1tx_t *msgDataTx = (processingData_L1tx_t *)NotifiedFifoData(msgL1Tx);
+    init_DLSCH_struct(gNB, msgDataTx);
+    memset(msgDataTx->ssb, 0, 64*sizeof(NR_gNB_SSB_t));
+    reset_meas(&msgDataTx->phy_proc_tx);
+    gNB->phy_proc_tx[i] = &msgDataTx->phy_proc_tx;
+    pushNotifiedFIFO(gNB->L1_tx_free,msgL1Tx); // to unblock the process in the beginning
   }
 
+  if (!get_softmodem_params()->emulate_l1) 
+     threadCreate(&proc->L1_stats_thread,nrL1_stats_thread,(void*)gNB,"L1_stats",-1,OAI_PRIORITY_RT_LOW);
+
+  threadCreate(&proc->pthread_tx_reorder, tx_reorder_thread, (void *)gNB, "thread_tx_reorder", -1, OAI_PRIORITY_RT_MAX);
+
 }
 
 
diff --git a/executables/nr-ru.c b/executables/nr-ru.c
index c8cce5f9a1fdc19d33b805976f188f392d9b01dd..08decf0f679a6c15d1f9e51a56a50951dfeb3143 100644
--- a/executables/nr-ru.c
+++ b/executables/nr-ru.c
@@ -1471,11 +1471,9 @@ void *ru_thread( void *param ) {
 
   res = pullNotifiedFIFO(gNB->resp_L1);
   delNotifiedFIFO_elt(res);
-  res = pullNotifiedFIFO(gNB->resp_L1_tx);
+  res = pullNotifiedFIFO(gNB->L1_tx_free);
   delNotifiedFIFO_elt(res);
-  res = pullNotifiedFIFO(gNB->resp_L1_tx);
-  delNotifiedFIFO_elt(res);
-  res = pullNotifiedFIFO(gNB->resp_RU_tx);
+  res = pullNotifiedFIFO(gNB->L1_tx_free);
   delNotifiedFIFO_elt(res);
 
   ru_thread_status = 0;
diff --git a/executables/nr-softmodem-common.h b/executables/nr-softmodem-common.h
index c02155326b6b5be42f0c2225604078d70ba430f5..45d7852adc134fb6de30b5b60d598563ff90097d 100644
--- a/executables/nr-softmodem-common.h
+++ b/executables/nr-softmodem-common.h
@@ -87,8 +87,9 @@
 #define CONFIG_HLP_NOTWAIT       "don't wait for tracer, start immediately\n"
 #define CONFIG_HLP_TNOFORK       "to ease debugging with gdb\n"
 #define CONFIG_HLP_DISABLNBIOT   "disable nb-iot, even if defined in config\n"
-#define CONFIG_HLP_DISABLETIMECORR   "disable UE timing correction\n"
-#define CONFIG_HLP_RRC_CFG_PATH   "path for RRC configuration\n"
+#define CONFIG_HLP_DISABLETIMECORR "disable UE timing correction\n"
+#define CONFIG_HLP_RRC_CFG_PATH  "path for RRC configuration\n"
+#define CONFIG_HLP_UECAP_FILE    "path for UE Capabilities file\n"
 
 #define CONFIG_HLP_NUMEROLOGY    "adding numerology for 5G\n"
 #define CONFIG_HLP_EMULATE_RF    "Emulated RF enabled(disable by defult)\n"
diff --git a/executables/nr-softmodem.c b/executables/nr-softmodem.c
index 2b8335167ac7fe3626ed278d76b79d8bac2e163f..5f579196455bd3afce45f6c989211cb917b2c295 100644
--- a/executables/nr-softmodem.c
+++ b/executables/nr-softmodem.c
@@ -111,16 +111,11 @@ int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
 
 //Temp fix for inexistent NR upper layer
 unsigned char NB_gNB_INST = 1;
+char *uecap_file;
 
-
-int UE_scan = 1;
-int UE_scan_carrier = 0;
 runmode_t mode = normal_txrx;
 static double snr_dB=20;
 
-FILE *input_fd=NULL;
-
-
 #if MAX_NUM_CCs == 1
 rx_gain_t rx_gain_mode[MAX_NUM_CCs][4] = {{max_gain,max_gain,max_gain,max_gain}};
 double tx_gain[MAX_NUM_CCs][4] = {{20,0,0,0}};
@@ -193,8 +188,6 @@ openair0_config_t openair0_cfg[MAX_CARDS];
 
 double cpuf;
 
-extern char uecap_xer[1024];
-char uecap_xer_in=0;
 
 /* see file openair2/LAYER2/MAC/main.c for why abstraction_flag is needed
  * this is very hackish - find a proper solution
@@ -710,6 +703,7 @@ int main( int argc, char **argv ) {
   // don't create if node doesn't connect to RRC/S1/GTP
   int ret=create_gNB_tasks(1);
   AssertFatal(ret==0,"cannot create ITTI tasks\n");
+
   /* Start the agent. If it is turned off in the configuration, it won't start */
   /*
   RCconfig_nr_flexran();
diff --git a/executables/nr-softmodem.h b/executables/nr-softmodem.h
index 896c363cbf15ed17d06d6ea242d8c912f9e9b4a1..4190a6074bde182afcacec428a31dc4a84f57471 100644
--- a/executables/nr-softmodem.h
+++ b/executables/nr-softmodem.h
@@ -29,6 +29,7 @@
     {"D" ,                    CONFIG_HLP_DLBM_PHYTEST,0,                u64ptr:&dlsch_slot_bitmap,          defintval:0,                   TYPE_UINT64, 0},        \
     {"U" ,                    CONFIG_HLP_ULBM_PHYTEST,0,                u64ptr:&ulsch_slot_bitmap,          defintval:0,                   TYPE_UINT64, 0},        \
     {"usrp-tx-thread-config", CONFIG_HLP_USRP_THREAD, 0,                iptr:&usrp_tx_thread,               defstrval:0,                   TYPE_INT,    0},        \
+    {"uecap_file",            CONFIG_HLP_UECAP_FILE,  0,                strptr:(char **)&uecap_file,        defstrval:"./uecap.xml",       TYPE_STRING, 0},        \
     {"s" ,                    CONFIG_HLP_SNR,         0,                dblptr:&snr_dB,                     defdblval:25,                  TYPE_DOUBLE, 0},        \
   }
 
@@ -41,6 +42,7 @@ extern uint32_t target_dl_bw;
 extern uint32_t target_ul_bw;
 extern uint64_t dlsch_slot_bitmap;
 extern uint64_t ulsch_slot_bitmap;
+extern char *uecap_file;
 
 // In nr-gnb.c
 extern void init_gNB(int single_thread_flag,int wait_for_sync);
diff --git a/executables/nr-ue.c b/executables/nr-ue.c
index 05f9efae3cd9919d96b5805b23414e7d3af4570e..2e7b2ea0e156d8f5fd09d80d29ccbd279e4d27f8 100644
--- a/executables/nr-ue.c
+++ b/executables/nr-ue.c
@@ -1140,13 +1140,15 @@ void *UE_thread(void *arg) {
   return NULL;
 }
 
-void init_NR_UE(int nb_inst, char* rrc_config_path) {
+void init_NR_UE(int nb_inst,
+                char* uecap_file,
+                char* rrc_config_path) {
   int inst;
   NR_UE_MAC_INST_t *mac_inst;
   NR_UE_RRC_INST_t* rrc_inst;
   
   for (inst=0; inst < nb_inst; inst++) {
-    AssertFatal((rrc_inst = nr_l3_init_ue(rrc_config_path)) != NULL, "can not initialize RRC module\n");
+    AssertFatal((rrc_inst = nr_l3_init_ue(uecap_file,rrc_config_path)) != NULL, "can not initialize RRC module\n");
     AssertFatal((mac_inst = nr_l2_init_ue(rrc_inst)) != NULL, "can not initialize L2 module\n");
     AssertFatal((mac_inst->if_module = nr_ue_if_module_init(inst)) != NULL, "can not initialize IF module\n");
   }
diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c
index c718b7a15cff4f973fa5586680c54501b9a53287..ddbbbdf52c1eccb9c7a0a4b02ac2818375d61a8a 100644
--- a/executables/nr-uesoftmodem.c
+++ b/executables/nr-uesoftmodem.c
@@ -118,6 +118,7 @@ int                 vcdflag = 0;
 double          rx_gain_off = 0.0;
 char             *usrp_args = NULL;
 char       *rrc_config_path = NULL;
+char            *uecap_file = NULL;
 int               dumpframe = 0;
 
 uint64_t        downlink_frequency[MAX_NUM_CCs][4];
@@ -150,8 +151,6 @@ int            numerology = 0;
 int           oaisim_flag = 0;
 int            emulate_rf = 0;
 uint32_t       N_RB_DL    = 106;
-char         uecap_xer_in = 0;
-char         uecap_xer[1024];
 
 /* see file openair2/LAYER2/MAC/main.c for why abstraction_flag is needed
  * this is very hackish - find a proper solution
@@ -264,14 +263,6 @@ static void get_options(void) {
 
   if (vcdflag > 0)
     ouput_vcd = 1;
-
-  if ( !(CONFIG_ISFLAGSET(CONFIG_ABORT))  && (!(CONFIG_ISFLAGSET(CONFIG_NOOOPT))) ) {
-    // Here the configuration file is the XER encoded UE capabilities
-    // Read it in and store in asn1c data structures
-    sprintf(uecap_xer,"%stargets/PROJECTS/GENERIC-LTE-EPC/CONF/UE_config.xml",getenv("OPENAIR_HOME"));
-    printf("%s\n",uecap_xer);
-    uecap_xer_in=1;
-  } /* UE with config file  */
 }
 
 // set PHY vars from command line
@@ -454,7 +445,7 @@ int main( int argc, char **argv ) {
 #endif
   LOG_I(HW, "Version: %s\n", PACKAGE_VERSION);
 
-  init_NR_UE(1,rrc_config_path);
+  init_NR_UE(1,uecap_file,rrc_config_path);
 
   int mode_offset = get_softmodem_params()->nsa ? NUMBER_OF_UE_MAX : 1;
   uint16_t node_number = get_softmodem_params()->node_number;
diff --git a/executables/nr-uesoftmodem.h b/executables/nr-uesoftmodem.h
index eb7175be9db2ecc96f13c94c5ecaf3be4281820b..95914678e5ba84418d7d65ab1c04510e9b664fc6 100644
--- a/executables/nr-uesoftmodem.h
+++ b/executables/nr-uesoftmodem.h
@@ -33,8 +33,9 @@
     {"dlsch-parallel",           CONFIG_HLP_DLSCH_PARA,  0,               iptr:(int32_t *)&nrUE_params.nr_dlsch_parallel,       defintval:0,           TYPE_UINT8,  0}, \
     {"offset-divisor",           CONFIG_HLP_OFFSET_DIV,  0,               uptr:(uint32_t *)&nrUE_params.ofdm_offset_divisor,    defuintval:UINT_MAX,           TYPE_UINT32,  0}, \
     {"nr-dlsch-demod-shift",     CONFIG_HLP_DLSHIFT,     0,               iptr:(int32_t *)&nr_dlsch_demod_shift,    defintval:0,     TYPE_INT,    0}, \
-    {"V" ,                       CONFIG_HLP_VCD,         PARAMFLAG_BOOL,  iptr:&vcdflag,                            defintval:0,     TYPE_INT,    0}, \
-    {"rrc_config_path",          CONFIG_HLP_RRC_CFG_PATH,0,               strptr:(char **)&rrc_config_path,         defstrval:"./",  TYPE_STRING, 0}, \
+    {"V" ,                       CONFIG_HLP_VCD,         PARAMFLAG_BOOL,  iptr:&vcdflag,                      defintval:0,     TYPE_INT,    0}, \
+    {"uecap_file",               CONFIG_HLP_UECAP_FILE,  0,               strptr:(char **)&uecap_file,        defstrval:"./uecap.xml", TYPE_STRING, 0}, \
+    {"rrc_config_path",          CONFIG_HLP_RRC_CFG_PATH,0,               strptr:(char **)&rrc_config_path,   defstrval:"./",  TYPE_STRING, 0}, \
     {"ue-idx-standalone",        NULL,                   0,               u16ptr:&ue_idx_standalone,          defuintval:0xFFFF,    TYPE_UINT16,   0} \
 }
 
@@ -85,7 +86,7 @@ extern nrUE_params_t *get_nrUE_params(void);
 // In nr-ue.c
 extern int setup_nr_ue_buffers(PHY_VARS_NR_UE **phy_vars_ue, openair0_config_t *openair0_cfg);
 extern void fill_ue_band_info(void);
-extern void init_NR_UE(int, char*);
+extern void init_NR_UE(int, char*, char*);
 extern void init_NR_UE_threads(int);
 extern void reset_opp_meas(void);
 extern void print_opp_meas(void);
diff --git a/nfapi/oai_integration/nfapi_pnf.c b/nfapi/oai_integration/nfapi_pnf.c
index 3a59be41e9e40564acf9287d1655f107a68d6719..2c317687cf6cc3e925ed1b57f07426816e8d169d 100644
--- a/nfapi/oai_integration/nfapi_pnf.c
+++ b/nfapi/oai_integration/nfapi_pnf.c
@@ -1101,41 +1101,10 @@ void pnf_phy_deallocate_p7_vendor_ext(nfapi_p7_message_header_t *header) {
 
 notifiedFIFO_elt_t *l1tx_message_extract(PHY_VARS_gNB *gNB, int frame, int slot) {
   notifiedFIFO_elt_t *res;
-  notifiedFIFO_elt_t *freeRes = NULL;
 
-  // check first message
-  res = pullTpool(gNB->resp_L1_tx, gNB->threadPool);
-  processingData_L1tx_t *msgTx = (processingData_L1tx_t *)NotifiedFifoData(res);
-  if (msgTx->slot == slot) {
-    return res;
-  }
-  if (msgTx->slot == -1) {
-    freeRes = res;
-  }
-
-  // check second message
-  pushNotifiedFIFO(gNB->resp_L1_tx,res);
-  res = pullTpool(gNB->resp_L1_tx, gNB->threadPool);
-  msgTx = (processingData_L1tx_t *)NotifiedFifoData(res);
-  if (msgTx->slot == slot) {
-    return res;
-  }
-  if (msgTx->slot == -1) {
-    freeRes = res;
-  }
-
-  if (freeRes) {
-    msgTx = (processingData_L1tx_t *)NotifiedFifoData(res);
-    msgTx->num_pdsch_slot=0;
-    msgTx->pdcch_pdu.pdcch_pdu_rel15.numDlDci = 0;
-    msgTx->ul_pdcch_pdu.pdcch_pdu.pdcch_pdu_rel15.numDlDci = 0;
-    msgTx->slot = slot;
-    msgTx->frame = frame;
-    return freeRes;
-  }
-  pushNotifiedFIFO(gNB->resp_L1_tx,res);
-  AssertFatal(1==0, "It means both L1 Tx messages are still waiting to be processed. This happens when L1 Tx processing is too slow. Message slot %d, scheduled slot %d\n",
-    msgTx->slot, slot);
+  //TODO: This needs to be reworked for nfapi to work
+  res = pullTpool(gNB->L1_tx_free, gNB->threadPool);
+  return res;
 }
 
 int pnf_phy_ul_dci_req(gNB_L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7, nfapi_nr_ul_dci_request_t *req) {
@@ -1161,7 +1130,7 @@ int pnf_phy_ul_dci_req(gNB_L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7,
     }
   }
 
-  pushNotifiedFIFO(gNB->resp_L1_tx,res);
+  pushNotifiedFIFO(gNB->L1_tx_filled,res);
 
   return 0;
 }
@@ -1269,7 +1238,7 @@ int pnf_phy_dl_tti_req(gNB_L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7,
     else {
       NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() UNKNOWN:%d\n", __FUNCTION__, dl_tti_pdu_list[i].PDUType);
     }
-    pushNotifiedFIFO(gNB->resp_L1_tx,res);
+    pushNotifiedFIFO(gNB->L1_tx_filled,res);
   }
 
   if(req->vendor_extension)
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
index a36a0c54ff029c6079e904fcb1711f0d7f0e4561..3b429a5e84e30edd094246b44bf2b65b5e15fff7 100644
--- a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+++ b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
@@ -379,6 +379,8 @@ typedef struct {
 } fapi_nr_ul_config_request_pdu_t;
 
 typedef struct {
+  //uint16_t sfn;
+  //uint16_t slot;
   uint16_t sfn;
   uint16_t slot;
   uint8_t number_pdus;
diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c
index 32b87f80e01dfe31d0efbf068b6b9cf277fd41c9..ce9c22f7f71ae29ebafcd59f07d6aa7ab4b0bb09 100644
--- a/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c
+++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c
@@ -263,8 +263,8 @@ static uint8_t pack_nr_pnf_config_request(void *msg, uint8_t **ppWritePackedMsg,
 
 static uint8_t pack_pnf_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) {
   nfapi_pnf_config_request_t *pNfapiMsg = (nfapi_pnf_config_request_t *)msg;
-  return (pack_tlv(NFAPI_PNF_PHY_RF_TAG, &pNfapiMsg->pnf_phy_rf_config, ppWritePackedMsg, end, &pack_pnf_phy_rf_config_value) &&
-          push8(pNfapiMsg->num_tlvs,ppWritePackedMsg,end) &&
+  return (push8(pNfapiMsg->num_tlvs,ppWritePackedMsg,end) &&
+          pack_tlv(NFAPI_PNF_PHY_RF_TAG, &pNfapiMsg->pnf_phy_rf_config, ppWritePackedMsg, end, &pack_pnf_phy_rf_config_value) &&
           pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
 }
 
@@ -697,8 +697,7 @@ static uint8_t pack_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_
            pack_tlv(NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_gsm_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
            pack_tlv(NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_umts_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
            pack_tlv(NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_lte_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
-           pack_tlv(NFAPI_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG, &(pNfapiMsg->nfapi_config.nmm_uplink_rssi_supported), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
-           pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config) );
+           pack_tlv(NFAPI_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG, &(pNfapiMsg->nfapi_config.nmm_uplink_rssi_supported), ppWritePackedMsg, end, &pack_uint8_tlv_value));
 }
 
 
@@ -724,47 +723,50 @@ static uint8_t pack_nr_config_request(void *msg, uint8_t **ppWritePackedMsg, uin
 			pack_tlv(NFAPI_NR_CONFIG_UL_K0_TAG, &(pNfapiMsg->carrier_config.ul_k0[1]), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
 			pack_tlv(NFAPI_NR_CONFIG_UPLINK_BANDWIDTH_TAG, &(pNfapiMsg->carrier_config.uplink_bandwidth), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
 			pack_tlv(NFAPI_NR_CONFIG_UPLINK_FREQUENCY_TAG, &(pNfapiMsg->carrier_config.uplink_frequency), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
-			
+			pack_tlv(NFAPI_NR_CONFIG_FREQUENCY_SHIFT_7P5KHZ_TAG, &(pNfapiMsg->carrier_config.frequency_shift_7p5khz), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
+
 			pack_tlv(NFAPI_NR_CONFIG_FRAME_DUPLEX_TYPE_TAG, &(pNfapiMsg->cell_config.frame_duplex_type), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
-			pack_tlv(NFAPI_NR_CONFIG_PHY_CELL_ID_TAG, &(pNfapiMsg->cell_config.phy_cell_id), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
-			
+			pack_tlv(NFAPI_NR_CONFIG_PHY_CELL_ID_TAG, &(pNfapiMsg->cell_config.phy_cell_id), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
+
+			pack_tlv(NFAPI_NR_CONFIG_PRACH_MULTIPLE_CARRIERS_IN_A_BAND_TAG, &(pNfapiMsg->prach_config.prach_multiple_carriers_in_a_band), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
+			pack_tlv(NFAPI_NR_CONFIG_PRACH_CONFIG_INDEX_TAG, &(pNfapiMsg->prach_config.prach_ConfigurationIndex), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
 			pack_tlv(NFAPI_NR_CONFIG_NUM_PRACH_FD_OCCASIONS_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
 			pack_tlv(NFAPI_NR_CONFIG_PRACH_SEQUENCE_LENGTH_TAG, &(pNfapiMsg->prach_config.prach_sequence_length), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
 			pack_tlv(NFAPI_NR_CONFIG_RESTRICTED_SET_CONFIG_TAG, &(pNfapiMsg->prach_config.restricted_set_config), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
 			pack_tlv(NFAPI_NR_CONFIG_SSB_PER_RACH_TAG, &(pNfapiMsg->prach_config.ssb_per_rach), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
-            pack_tlv(NFAPI_NR_CONFIG_PRACH_SUB_C_SPACING_TAG, &(pNfapiMsg->prach_config.prach_sub_c_spacing), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
-            pack_tlv(NFAPI_NR_CONFIG_PRACH_ROOT_SEQUENCE_INDEX_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].prach_root_sequence_index), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
-            pack_tlv(NFAPI_NR_CONFIG_K1_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].k1), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
-            pack_tlv(NFAPI_NR_CONFIG_PRACH_ZERO_CORR_CONF_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].prach_zero_corr_conf), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
+			pack_tlv(NFAPI_NR_CONFIG_PRACH_SUB_C_SPACING_TAG, &(pNfapiMsg->prach_config.prach_sub_c_spacing), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
+			pack_tlv(NFAPI_NR_CONFIG_PRACH_ROOT_SEQUENCE_INDEX_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].prach_root_sequence_index), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
+			pack_tlv(NFAPI_NR_CONFIG_K1_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].k1), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
+			pack_tlv(NFAPI_NR_CONFIG_PRACH_ZERO_CORR_CONF_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].prach_zero_corr_conf), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
 			pack_tlv(NFAPI_NR_CONFIG_NUM_ROOT_SEQUENCES_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].num_root_sequences), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
 
-
 			pack_tlv(NFAPI_NR_CONFIG_SCS_COMMON_TAG, &(pNfapiMsg->ssb_config.scs_common), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
+			pack_tlv(NFAPI_NR_CONFIG_BCH_PAYLOAD_TAG, &(pNfapiMsg->ssb_config.bch_payload), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
 			pack_tlv(NFAPI_NR_CONFIG_SS_PBCH_POWER_TAG, &(pNfapiMsg->ssb_config.ss_pbch_power), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
 
 			pack_tlv(NFAPI_NR_CONFIG_BETA_PSS_TAG, &(pNfapiMsg->ssb_table.beta_pss), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
 			pack_tlv(NFAPI_NR_CONFIG_MIB_TAG, &(pNfapiMsg->ssb_table.MIB), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
 			pack_tlv(NFAPI_NR_CONFIG_SSB_MASK_TAG, &(pNfapiMsg->ssb_table.ssb_mask_list[0].ssb_mask), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
-			pack_tlv(NFAPI_NR_CONFIG_SSB_MASK_TAG, &(pNfapiMsg->ssb_table.ssb_mask_list[1].ssb_mask), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
-
+			// TODO: Not sure what's going on, ssb_mask_list[1] packing below seems to match unpack, but is causing problems
+			// pack_tlv(NFAPI_NR_CONFIG_SSB_MASK_TAG, &(pNfapiMsg->ssb_table.ssb_mask_list[1].ssb_mask), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
+			pack_tlv(NFAPI_NR_CONFIG_BEAM_ID_TAG, &(pNfapiMsg->ssb_table.ssb_beam_id_list[0].beam_id), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
 			pack_tlv(NFAPI_NR_CONFIG_SSB_OFFSET_POINT_A_TAG, &(pNfapiMsg->ssb_table.ssb_offset_point_a), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
 			pack_tlv(NFAPI_NR_CONFIG_SSB_PERIOD_TAG, &(pNfapiMsg->ssb_table.ssb_period), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
 			pack_tlv(NFAPI_NR_CONFIG_SSB_SUBCARRIER_OFFSET_TAG, &(pNfapiMsg->ssb_table.ssb_subcarrier_offset), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
+			pack_tlv(NFAPI_NR_CONFIG_SS_PBCH_MULTIPLE_CARRIERS_IN_A_BAND_TAG, &(pNfapiMsg->ssb_table.ss_pbch_multiple_carriers_in_a_band), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
+			pack_tlv(NFAPI_NR_CONFIG_MULTIPLE_CELLS_SS_PBCH_IN_A_CARRIER_TAG, &(pNfapiMsg->ssb_table.multiple_cells_ss_pbch_in_a_carrier), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
 
 			pack_tlv(NFAPI_NR_CONFIG_TDD_PERIOD_TAG, &(pNfapiMsg->tdd_table.tdd_period), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
-			pack_tlv(NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv4), ppWritePackedMsg, end, &pack_ipv4_address_value) &&
-			pack_tlv(NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv6), ppWritePackedMsg, end, &pack_ipv6_address_value) &&
-			pack_tlv(NFAPI_NR_NFAPI_P7_PNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_port), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
+
 			pack_tlv(NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv4), ppWritePackedMsg, end, &pack_ipv4_address_value) &&
 			pack_tlv(NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv6), ppWritePackedMsg, end, &pack_ipv6_address_value) &&
 			pack_tlv(NFAPI_NR_NFAPI_P7_VNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_port), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
-			//pack_tlv(NFAPI_NR_NFAPI_RF_BANDS_TAG, &(pNfapiMsg->nfapi_config.rf_bands), ppWritePackedMsg, end, &pack_rf_bands_value) &&
-			pack_tlv(NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG, &(pNfapiMsg->nfapi_config.timing_info_mode), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
-			pack_tlv(NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG, &(pNfapiMsg->nfapi_config.timing_info_period), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
+			pack_tlv(NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv4), ppWritePackedMsg, end, &pack_ipv4_address_value) &&
+			pack_tlv(NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv6), ppWritePackedMsg, end, &pack_ipv6_address_value) &&
+			pack_tlv(NFAPI_NR_NFAPI_P7_PNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_port), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
 			pack_tlv(NFAPI_NR_NFAPI_TIMING_WINDOW_TAG, &(pNfapiMsg->nfapi_config.timing_window), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
-			//pack_tlv(NFAPI_NR_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.ul_ue_per_sf), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
-
-			pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config) );
+			pack_tlv(NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG, &(pNfapiMsg->nfapi_config.timing_info_mode), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
+			pack_tlv(NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG, &(pNfapiMsg->nfapi_config.timing_info_period), ppWritePackedMsg, end, &pack_uint8_tlv_value));
 }
 
 static uint8_t pack_nr_config_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) {
@@ -775,7 +777,7 @@ static uint8_t pack_nr_config_response(void *msg, uint8_t **ppWritePackedMsg, ui
 
 static uint8_t pack_config_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) {
   nfapi_config_response_t *pNfapiMsg = (nfapi_config_response_t *)msg;
-  return ( push8(pNfapiMsg->error_code, ppWritePackedMsg, end) &&
+  return ( push32(pNfapiMsg->error_code, ppWritePackedMsg, end) &&
            pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config) );
 }
 
@@ -1346,7 +1348,8 @@ static uint8_t unpack_pnf_config_request(uint8_t **ppReadPackedMsg, uint8_t *end
   unpack_tlv_t unpack_fns[] = {
     { NFAPI_PNF_PHY_RF_TAG, &pNfapiMsg->pnf_phy_rf_config, &unpack_pnf_phy_rf_config_value},
   };
-  return unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension);
+  return (pull8(ppReadPackedMsg, &pNfapiMsg->num_tlvs, end) &&
+          unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
 }
 
 
@@ -1722,13 +1725,14 @@ static uint8_t unpack_nr_config_request(uint8_t **ppReadPackedMsg, uint8_t *end,
 	for(int i=0;i<40;i++)
 		pNfapiMsg->tdd_table.max_tdd_periodicity_list[i].max_num_of_symbol_per_slot_list = (nfapi_nr_max_num_of_symbol_per_slot_t*) malloc(14*sizeof(nfapi_nr_max_num_of_symbol_per_slot_t));
 
-    pNfapiMsg->prach_config.num_prach_fd_occasions_list=(nfapi_nr_num_prach_fd_occasions_t *) malloc(sizeof(nfapi_nr_num_prach_fd_occasions_t));
 
 	for(int i = 0; i < 40; i++){ //unpacking tdd slot config
 		for(int symbol = 0; symbol<14;symbol++){
 			pull8(ppReadPackedMsg,&pNfapiMsg->tdd_table.max_tdd_periodicity_list[i].max_num_of_symbol_per_slot_list[symbol].slot_config.value, end);
 		}
 	}
+	pNfapiMsg->prach_config.num_prach_fd_occasions_list=(nfapi_nr_num_prach_fd_occasions_t *) malloc(sizeof(nfapi_nr_num_prach_fd_occasions_t));
+
 	unpack_tlv_t unpack_fns[] =
 	{
 		{ NFAPI_NR_CONFIG_DL_BANDWIDTH_TAG,  &(pNfapiMsg->carrier_config.dl_bandwidth),  &unpack_uint16_tlv_value},
@@ -1741,8 +1745,13 @@ static uint8_t unpack_nr_config_request(uint8_t **ppReadPackedMsg, uint8_t *end,
 		{ NFAPI_NR_CONFIG_UL_K0_TAG,  &(pNfapiMsg->carrier_config.ul_k0[1]),  &unpack_uint16_tlv_value},
 		{ NFAPI_NR_CONFIG_UPLINK_BANDWIDTH_TAG,  &(pNfapiMsg->carrier_config.uplink_bandwidth),  &unpack_uint16_tlv_value},
 		{ NFAPI_NR_CONFIG_UPLINK_FREQUENCY_TAG,  &(pNfapiMsg->carrier_config.uplink_frequency),  &unpack_uint32_tlv_value},
+		{ NFAPI_NR_CONFIG_FREQUENCY_SHIFT_7P5KHZ_TAG,  &(pNfapiMsg->carrier_config.frequency_shift_7p5khz),  &unpack_uint8_tlv_value},
+
 		{ NFAPI_NR_CONFIG_FRAME_DUPLEX_TYPE_TAG,  &(pNfapiMsg->cell_config.frame_duplex_type),  &unpack_uint8_tlv_value},
-		{ NFAPI_NR_CONFIG_PHY_CELL_ID_TAG,  &(pNfapiMsg->cell_config.phy_cell_id),  &unpack_uint8_tlv_value},
+		{ NFAPI_NR_CONFIG_PHY_CELL_ID_TAG,  &(pNfapiMsg->cell_config.phy_cell_id),  &unpack_uint16_tlv_value},
+
+		{ NFAPI_NR_CONFIG_PRACH_MULTIPLE_CARRIERS_IN_A_BAND_TAG,  &(pNfapiMsg->prach_config.prach_multiple_carriers_in_a_band),  &unpack_uint8_tlv_value},
+		{ NFAPI_NR_CONFIG_PRACH_CONFIG_INDEX_TAG,  &(pNfapiMsg->prach_config.prach_ConfigurationIndex),  &unpack_uint8_tlv_value},
 		{ NFAPI_NR_CONFIG_NUM_PRACH_FD_OCCASIONS_TAG,  &(pNfapiMsg->prach_config.num_prach_fd_occasions),  &unpack_uint8_tlv_value},
 		{ NFAPI_NR_CONFIG_PRACH_SEQUENCE_LENGTH_TAG,  &(pNfapiMsg->prach_config.prach_sequence_length),  &unpack_uint8_tlv_value},
 		{ NFAPI_NR_CONFIG_RESTRICTED_SET_CONFIG_TAG,  &(pNfapiMsg->prach_config.restricted_set_config),  &unpack_uint8_tlv_value},
@@ -1754,24 +1763,32 @@ static uint8_t unpack_nr_config_request(uint8_t **ppReadPackedMsg, uint8_t *end,
 		{ NFAPI_NR_CONFIG_NUM_ROOT_SEQUENCES_TAG,  &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].num_root_sequences),  &unpack_uint8_tlv_value},
 
 		{ NFAPI_NR_CONFIG_SCS_COMMON_TAG,  &(pNfapiMsg->ssb_config.scs_common),  &unpack_uint8_tlv_value},
+		{ NFAPI_NR_CONFIG_BCH_PAYLOAD_TAG,  &(pNfapiMsg->ssb_config.bch_payload),  &unpack_uint8_tlv_value},
 		{ NFAPI_NR_CONFIG_SS_PBCH_POWER_TAG,  &(pNfapiMsg->ssb_config.ss_pbch_power),  &unpack_uint32_tlv_value},
+
 		{ NFAPI_NR_CONFIG_BETA_PSS_TAG,  &(pNfapiMsg->ssb_table.beta_pss),  &unpack_uint8_tlv_value},
 		{ NFAPI_NR_CONFIG_MIB_TAG,  &(pNfapiMsg->ssb_table.MIB),  &unpack_uint32_tlv_value},
 		{ NFAPI_NR_CONFIG_SSB_MASK_TAG,  &(pNfapiMsg->ssb_table.ssb_mask_list[0].ssb_mask),  &unpack_uint32_tlv_value},
-		{ NFAPI_NR_CONFIG_SSB_MASK_TAG,  &(pNfapiMsg->ssb_table.ssb_mask_list[1].ssb_mask),  &unpack_uint32_tlv_value},
-
+		// TODO: Not sure what's going on, ssb_mask_list[1] unpacking below seems to match pack, but is causing problems
+		// { NFAPI_NR_CONFIG_SSB_MASK_TAG,  &(pNfapiMsg->ssb_table.ssb_mask_list[1].ssb_mask),  &unpack_uint32_tlv_value},
+		{ NFAPI_NR_CONFIG_BEAM_ID_TAG,  &(pNfapiMsg->ssb_table.ssb_beam_id_list[0].beam_id),  &unpack_uint8_tlv_value},
 		{ NFAPI_NR_CONFIG_SSB_OFFSET_POINT_A_TAG,  &(pNfapiMsg->ssb_table.ssb_offset_point_a),  &unpack_uint16_tlv_value},
 		{ NFAPI_NR_CONFIG_SSB_PERIOD_TAG,  &(pNfapiMsg->ssb_table.ssb_period),  &unpack_uint8_tlv_value},
 		{ NFAPI_NR_CONFIG_SSB_SUBCARRIER_OFFSET_TAG,  &(pNfapiMsg->ssb_table.ssb_subcarrier_offset),  &unpack_uint8_tlv_value},
+		{ NFAPI_NR_CONFIG_SS_PBCH_MULTIPLE_CARRIERS_IN_A_BAND_TAG,  &(pNfapiMsg->ssb_table.ss_pbch_multiple_carriers_in_a_band),  &unpack_uint8_tlv_value},
+		{ NFAPI_NR_CONFIG_MULTIPLE_CELLS_SS_PBCH_IN_A_CARRIER_TAG,  &(pNfapiMsg->ssb_table.multiple_cells_ss_pbch_in_a_carrier),  &unpack_uint8_tlv_value},
+
 		{ NFAPI_NR_CONFIG_TDD_PERIOD_TAG,  &(pNfapiMsg->tdd_table.tdd_period),  &unpack_uint8_tlv_value},
-		{ NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG,  &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv6),  &unpack_ipv6_address_value},
-		{ NFAPI_NR_NFAPI_P7_PNF_PORT_TAG,  &(pNfapiMsg->nfapi_config.p7_pnf_port),  &unpack_uint16_tlv_value},
+
 		{ NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG,  &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv4),  &unpack_ipv4_address_value},
 		{ NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG,  &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv6),  &unpack_ipv6_address_value},
 		{ NFAPI_NR_NFAPI_P7_VNF_PORT_TAG,  &(pNfapiMsg->nfapi_config.p7_vnf_port),  &unpack_uint16_tlv_value},
+		{ NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG,  &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv4),  &unpack_ipv4_address_value},
+		{ NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG,  &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv6),  &unpack_ipv6_address_value},
+		{ NFAPI_NR_NFAPI_P7_PNF_PORT_TAG,  &(pNfapiMsg->nfapi_config.p7_pnf_port),  &unpack_uint16_tlv_value},
+		{ NFAPI_NR_NFAPI_TIMING_WINDOW_TAG,  &(pNfapiMsg->nfapi_config.timing_window),  &unpack_uint8_tlv_value},
 		{ NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG,  &(pNfapiMsg->nfapi_config.timing_info_mode),  &unpack_uint8_tlv_value},
 		{ NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG,  &(pNfapiMsg->nfapi_config.timing_info_period),  &unpack_uint8_tlv_value},
-		{ NFAPI_NR_NFAPI_TIMING_WINDOW_TAG,  &(pNfapiMsg->nfapi_config.timing_window),  &unpack_uint8_tlv_value},
 	};
 
 	return ( pull8(ppReadPackedMsg, &pNfapiMsg->num_tlv, end) &&
diff --git a/openair1/PHY/CODING/crc_byte.c b/openair1/PHY/CODING/crc_byte.c
index d1c3917c2cc99bad4510ce6b496342b95cc29311..7e37abcf8152c4b388dd206edd0d3aee6523beff 100644
--- a/openair1/PHY/CODING/crc_byte.c
+++ b/openair1/PHY/CODING/crc_byte.c
@@ -38,7 +38,7 @@
 
 #include "coding_defs.h"
 #include "assertions.h"
-#if USE_INTEL_CRC 
+#if USE_INTEL_CRC
 #include "crc.h"
 #endif
 /*ref 36-212 v8.6.0 , pp 8-9 */
@@ -159,7 +159,7 @@ unsigned int crc24a (unsigned char * inptr,
   if ( bitlen % 8 || !USE_INTEL_CRC ) {
   unsigned int      crc = 0;
   int resbit= (bitlen % 8);
-    
+
   while (octetlen-- > 0) {
     //   printf("crc24a: in %x => crc %x\n",crc,*inptr);
     crc = (crc << 8) ^ crc24aTable[(*inptr++) ^ (crc >> 24)];
@@ -192,7 +192,7 @@ unsigned int crc24b (unsigned char * inptr,
 	   	     int bitlen)
 {
   int octetlen = bitlen / 8;  /* Change in octets */
-  
+
   if ( bitlen % 8 || !USE_INTEL_CRC ) {
   unsigned int crc = 0;
   int resbit = (bitlen % 8);
diff --git a/openair1/PHY/NR_REFSIG/ptrs_nr.c b/openair1/PHY/NR_REFSIG/ptrs_nr.c
index d3d4bf0fafb34161be0820676da186047a06dc43..40a6a56611ebbf0db6bbb2f2e2f8a6f4d2859f0b 100644
--- a/openair1/PHY/NR_REFSIG/ptrs_nr.c
+++ b/openair1/PHY/NR_REFSIG/ptrs_nr.c
@@ -105,10 +105,9 @@ void set_ptrs_symb_idx(uint16_t *ptrs_symbols,
                        uint8_t L_ptrs,
                        uint16_t ul_dmrs_symb_pos) {
 
-  uint i = 0, last_symbol, l_ref;
-  int l_counter;
-  l_ref         = start_symbol;
-  last_symbol   = start_symbol + duration_in_symbols - 1;
+  int i = 0;
+  int l_ref = start_symbol;
+  const int last_symbol   = start_symbol + duration_in_symbols - 1;
   if (L_ptrs==0) {
     LOG_E(PHY,"bug: impossible L_ptrs\n");
     *ptrs_symbols = 0;
@@ -117,7 +116,7 @@ void set_ptrs_symb_idx(uint16_t *ptrs_symbols,
 
   while ( (l_ref + i*L_ptrs) <= last_symbol) {
 
-    int is_dmrs_symbol = 0;
+    int is_dmrs_symbol = 0, l_counter;
 
     for(l_counter = l_ref + i*L_ptrs; l_counter >= max(l_ref + (i-1)*L_ptrs + 1, l_ref); l_counter--) {
 
@@ -269,8 +268,8 @@ void nr_ptrs_cpe_estimation(uint8_t K_ptrs,
     return;
   }
   uint16_t              sc_per_symbol    = (nb_rb + K_ptrs - 1)/K_ptrs;
-  int16_t              *ptrs_p           = (int16_t *)malloc(sizeof(int32_t)*((1 + sc_per_symbol/4)*4));
-  int16_t              *dmrs_comp_p      = (int16_t *)malloc(sizeof(int32_t)*((1 + sc_per_symbol/4)*4));
+  struct complex16      ptrs_p[(1 + sc_per_symbol/4)*4];
+  struct complex16      dmrs_comp_p[(1 + sc_per_symbol/4)*4];
   double                abs              = 0.0;
   double                real             = 0.0;
   double                imag             = 0.0;
@@ -278,7 +277,7 @@ void nr_ptrs_cpe_estimation(uint8_t K_ptrs,
   double                alpha            = 0;
 #endif
   /* generate PTRS RE for the symbol */
-  nr_gen_ref_conj_symbols(gold_seq,sc_per_symbol*2,ptrs_p, NR_MOD_TABLE_QPSK_OFFSET,2);// 2 for QPSK
+  nr_gen_ref_conj_symbols(gold_seq,sc_per_symbol*2,(int16_t*)ptrs_p, NR_MOD_TABLE_QPSK_OFFSET,2);// 2 for QPSK
 
   /* loop over all sub carriers to get compensated RE on ptrs symbols*/
   for (int re = 0; re < nb_re_pdsch; re++) {
@@ -292,8 +291,8 @@ void nr_ptrs_cpe_estimation(uint8_t K_ptrs,
                                     0,// start_re is 0 here
                                     ofdm_symbol_size);
     if(is_ptrs_re) {
-      dmrs_comp_p[re_cnt*2]     = rxF_comp[re *2];
-      dmrs_comp_p[(re_cnt*2)+1] = rxF_comp[(re *2)+1];
+      dmrs_comp_p[re_cnt].r = rxF_comp[re *2];
+      dmrs_comp_p[re_cnt].i = rxF_comp[(re *2)+1];
       re_cnt++;
     }
     else {
@@ -307,7 +306,7 @@ void nr_ptrs_cpe_estimation(uint8_t K_ptrs,
   *ptrs_sc = re_cnt;
 
   /*Multiple compensated data with conj of PTRS */
-  mult_cpx_vector(dmrs_comp_p, ptrs_p, ptrs_ch_p,(1 + sc_per_symbol/4)*4,15); // 2^15 shifted
+  mult_cpx_vector((int16_t*)dmrs_comp_p, (int16_t*)ptrs_p, ptrs_ch_p,(1 + sc_per_symbol/4)*4,15); // 2^15 shifted
 
   /* loop over all ptrs sub carriers in a symbol */
   /* sum the error vector */
@@ -331,9 +330,6 @@ void nr_ptrs_cpe_estimation(uint8_t K_ptrs,
 #ifdef DEBUG_PTRS
   printf("[PHY][PTRS]: Estimated Symbol  %d -> %d + j* %d \n",symbol, error_est[0], error_est[1] );
 #endif
-  /* free vectors */
-  free(ptrs_p);
-  free(dmrs_comp_p);
 }
 
 
@@ -426,9 +422,10 @@ void get_slope_from_estimates(uint8_t start, uint8_t end, int16_t *est_p, double
 /* estimate from slope */
 void ptrs_estimate_from_slope(int16_t *error_est, double *slope_p, uint8_t start, uint8_t end)
 {
+  struct complex16 *error=(struct complex16 *) error_est;
   for(uint8_t i = 1; i< (end -start);i++) {
-    error_est[(start+i)*2]      = (error_est[start*2]   + (int16_t)(i * slope_p[0]));// real
-    error_est[((start +i)*2)+1] = (error_est[(start*2)+1] + (int16_t)( i * slope_p[1])); //imag
+    error[start+i].r = error[start].r + (int16_t)(i * slope_p[0]);// real
+    error[start+i].i = error[start].i + (int16_t)(i * slope_p[1]); //imag
 #ifdef DEBUG_PTRS
     printf("[PHY][PTRS]: Estimated Symbol %2d -> %4d %4d from Slope (%4f %4f)\n", start+i,error_est[(start+i)*2],error_est[((start +i)*2)+1],
            slope_p[0],slope_p[1]);
diff --git a/openair1/PHY/NR_TRANSPORT/nr_csi_rs.c b/openair1/PHY/NR_TRANSPORT/nr_csi_rs.c
index ac0eac8a79c32683ba95053da38336183f95727f..4f5baacc34e0fc1c8af47aeff418882a5132ea96 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_csi_rs.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_csi_rs.c
@@ -35,7 +35,7 @@ void nr_generate_csi_rs(PHY_VARS_gNB *gNB,
 
   NR_DL_FRAME_PARMS frame_parms=gNB->frame_parms;
   int32_t **txdataF = gNB->common_vars.txdataF;
-  int txdataF_offset = (slot%2)*frame_parms.samples_per_slot_wCP;
+  int txdataF_offset = slot*frame_parms.samples_per_slot_wCP;
   uint32_t **gold_csi_rs = gNB->nr_gold_csi_rs[slot];
   int16_t mod_csi[frame_parms.symbols_per_slot][NR_MAX_CSI_RS_LENGTH>>1] __attribute__((aligned(16)));;
   uint16_t b = csi_params.freq_domain;
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c
index f26464fd7084c32a64c2bcd6be6c7d93a08b489c..945d8ca909ac9dd87b6571e53971c3b1d8d0edd4 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dci.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c
@@ -66,12 +66,11 @@ void nr_pdcch_scrambling(uint32_t *in,
   }
 }
 
-void nr_generate_dci(PHY_VARS_gNB *gNB,
-                        nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15,
-                        uint32_t **gold_pdcch_dmrs,
-                        int32_t *txdataF,
-                        int16_t amp,
-                        NR_DL_FRAME_PARMS *frame_parms) {
+void nr_generate_dci(nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15,
+                     uint32_t **gold_pdcch_dmrs,
+                     int32_t *txdataF,
+                     int16_t amp,
+                     NR_DL_FRAME_PARMS *frame_parms) {
 
   int16_t mod_dmrs[NR_MAX_CSET_DURATION][NR_MAX_PDCCH_DMRS_LENGTH>>1] __attribute__((aligned(16))); // 3 for the max coreset duration
   uint16_t cset_start_sc;
@@ -84,7 +83,8 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
   int n_rb;
   
   // compute rb_offset and n_prb based on frequency allocation
-  nr_fill_cce_list(gNB,0,pdcch_pdu_rel15);
+  nr_cce_t cce_list[MAX_DCI_CORESET][NR_MAX_PDCCH_AGG_LEVEL];
+  nr_fill_cce_list(cce_list,0,pdcch_pdu_rel15);
   get_coreset_rballoc(pdcch_pdu_rel15->FreqDomainResource,&n_rb,&rb_offset);
   cset_start_sc = frame_parms->first_carrier_offset + (pdcch_pdu_rel15->BWPStart + rb_offset) * NR_NB_SC_PER_RB;
 
@@ -175,7 +175,7 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
     int reg_list_order[NR_MAX_PDCCH_AGG_LEVEL] = {};
     for (int p = 0; p < NR_MAX_PDCCH_AGG_LEVEL; p++) {
       for(int p2 = 0; p2 < dci_pdu->AggregationLevel; p2++) {
-        if(gNB->cce_list[d][p2].reg_list[0].reg_idx == p * NR_NB_REG_PER_CCE) {
+        if(cce_list[d][p2].reg_list[0].reg_idx == p * NR_NB_REG_PER_CCE) {
           reg_list_order[reg_list_index] = p2;
           reg_list_index++;
           break;
@@ -191,7 +191,7 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
 
         for (int reg_in_cce_idx = 0; reg_in_cce_idx < NR_NB_REG_PER_CCE; reg_in_cce_idx++) {
 
-          k = cset_start_sc + gNB->cce_list[d][cce_idx].reg_list[reg_in_cce_idx].start_sc_idx;
+          k = cset_start_sc + cce_list[d][cce_idx].reg_list[reg_in_cce_idx].start_sc_idx;
 
           if (k >= frame_parms->ofdm_symbol_size)
             k -= frame_parms->ofdm_symbol_size;
@@ -200,9 +200,9 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
 
           // dmrs index depends on reference point for k according to 38.211 7.4.1.3.2
           if (pdcch_pdu_rel15->CoreSetType == NFAPI_NR_CSET_CONFIG_PDCCH_CONFIG)
-            dmrs_idx = (gNB->cce_list[d][cce_idx].reg_list[reg_in_cce_idx].reg_idx) * 3;
+            dmrs_idx = (cce_list[d][cce_idx].reg_list[reg_in_cce_idx].reg_idx) * 3;
           else
-            dmrs_idx = (gNB->cce_list[d][cce_idx].reg_list[reg_in_cce_idx].reg_idx + rb_offset) * 3;
+            dmrs_idx = (cce_list[d][cce_idx].reg_list[reg_in_cce_idx].reg_idx + rb_offset) * 3;
 
           k_prime = 0;
 
@@ -250,21 +250,20 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
   } // for (int d=0;d<pdcch_pdu_rel15->numDlDci;d++)
 }
 
-void nr_generate_dci_top(PHY_VARS_gNB *gNB,
-			    nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
-			    nfapi_nr_dl_tti_pdcch_pdu *ul_dci_pdu,
-                            uint32_t **gold_pdcch_dmrs,
-                            int32_t *txdataF,
-                            int16_t amp,
-                            NR_DL_FRAME_PARMS *frame_parms) {
+void nr_generate_dci_top(nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
+                         nfapi_nr_dl_tti_pdcch_pdu *ul_dci_pdu,
+                         uint32_t **gold_pdcch_dmrs,
+                         int32_t *txdataF,
+                         int16_t amp,
+                         NR_DL_FRAME_PARMS *frame_parms) {
 
   AssertFatal(pdcch_pdu!=NULL || ul_dci_pdu!=NULL,"At least one pointer has to be !NULL\n");
 
   if (pdcch_pdu) {
-    nr_generate_dci(gNB,&pdcch_pdu->pdcch_pdu_rel15,gold_pdcch_dmrs,txdataF,amp,frame_parms);
+    nr_generate_dci(&pdcch_pdu->pdcch_pdu_rel15,gold_pdcch_dmrs,txdataF,amp,frame_parms);
   }
   if (ul_dci_pdu) {
-    nr_generate_dci(gNB,&ul_dci_pdu->pdcch_pdu_rel15,gold_pdcch_dmrs,txdataF,amp,frame_parms);
+    nr_generate_dci(&ul_dci_pdu->pdcch_pdu_rel15,gold_pdcch_dmrs,txdataF,amp,frame_parms);
   }
 }
 
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.h b/openair1/PHY/NR_TRANSPORT/nr_dci.h
index 07baaf2728f8b02d163623fa664694d2a36d6c51..d763891f28db921f8a1f341e8b213f77e2ea32ca 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dci.h
+++ b/openair1/PHY/NR_TRANSPORT/nr_dci.h
@@ -29,7 +29,7 @@ uint16_t nr_get_dci_size(nfapi_nr_dci_format_e format,
                          nfapi_nr_rnti_type_e rnti_type,
                          uint16_t N_RB);
 
-void nr_generate_dci_top(PHY_VARS_gNB *gNB,
+void nr_generate_dci_top(
 			    nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
 			    nfapi_nr_dl_tti_pdcch_pdu *ul_pdcch_pdu,
 			    uint32_t **gold_pdcch_dmrs,
@@ -57,6 +57,6 @@ void nr_fill_ul_dci(PHY_VARS_gNB *gNB,
 		    int slot,
 		    nfapi_nr_ul_dci_request_pdus_t *pdcch_pdu);
 
-void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint8_t m,nfapi_nr_dl_tti_pdcch_pdu_rel15_t *);
+void nr_fill_cce_list(nr_cce_t cce_list[MAX_DCI_CORESET][NR_MAX_PDCCH_AGG_LEVEL], uint8_t m,nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15);
 
 #endif //__PHY_NR_TRANSPORT_DCI__H
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c b/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c
index 167504544355c042c1290c0b586077aa20f7bcfb..8d5eb4a66072ca56684ebee75c12cc2f69c07a47 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dci_tools.c
@@ -119,7 +119,7 @@ void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint16_t n_shift, uint8_t m) {
 
 */
 
-void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint8_t m,  nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15) {
+void nr_fill_cce_list(nr_cce_t cce_list[MAX_DCI_CORESET][NR_MAX_PDCCH_AGG_LEVEL], uint8_t m,  nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15) {
 
   nr_cce_t* cce;
   nr_reg_t* reg;
@@ -156,7 +156,7 @@ void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint8_t m,  nfapi_nr_dl_tti_pdcch_pdu_r
     
     if (pdcch_pdu_rel15->dci_pdu[d].RNTI != 0xFFFF) LOG_D(PHY, "CCE list generation for candidate %d: bundle size %d ilv size %d CceIndex %d\n", m, bsize, R, pdcch_pdu_rel15->dci_pdu[d].CceIndex);
     for (uint8_t cce_idx=0; cce_idx<L; cce_idx++) {
-      cce = &gNB->cce_list[d][cce_idx];
+      cce = &cce_list[d][cce_idx];
       cce->cce_idx = pdcch_pdu_rel15->dci_pdu[d].CceIndex + cce_idx;
       LOG_D(PHY, "cce_idx %d\n", cce->cce_idx);
       
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
index 9bbc61d4b60f5075b186bd7d78b0603cc285d57e..920522aa35e652b69b52a0c7402da9d98a91b397 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
@@ -183,12 +183,13 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
     unsigned char output[rel15->rbSize * NR_SYMBOLS_PER_SLOT * NR_NB_SC_PER_RB * 8 * NR_MAX_NB_LAYERS] __attribute__((aligned(32)));
     bzero(output,rel15->rbSize * NR_SYMBOLS_PER_SLOT * NR_NB_SC_PER_RB * 8 * NR_MAX_NB_LAYERS);
     start_meas(dlsch_encoding_stats);
-    nr_dlsch_encoding(gNB,
-		      harq->pdu, frame, slot, dlsch, frame_parms, output,
-		      tinput,tprep,tparity,toutput,
-		      dlsch_rate_matching_stats,
-		      dlsch_interleaving_stats,
-		      dlsch_segmentation_stats);
+
+    if (nr_dlsch_encoding(gNB,
+                          harq->pdu, frame, slot, dlsch, frame_parms,output,tinput,tprep,tparity,toutput,
+                          dlsch_rate_matching_stats,
+                          dlsch_interleaving_stats,
+                          dlsch_segmentation_stats) == -1)
+      return;
     stop_meas(dlsch_encoding_stats);
 #ifdef DEBUG_DLSCH
     printf("PDSCH encoding:\nPayload:\n");
@@ -276,7 +277,7 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
     if (start_sc >= frame_parms->ofdm_symbol_size)
       start_sc -= frame_parms->ofdm_symbol_size;
 
-    int txdataF_offset = (slot%2)*frame_parms->samples_per_slot_wCP;
+    int txdataF_offset = slot*frame_parms->samples_per_slot_wCP;
 
 #ifdef DEBUG_DLSCH_MAPPING
     printf("PDSCH resource mapping started (start SC %d\tstart symbol %d\tN_PRB %d\tnb_re %d,nb_layers %d)\n",
@@ -375,12 +376,12 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
             /* 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[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;
+              txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1)     ] = (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 ] = (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)],
-                     txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)]);
+                     dmrs_idx, l, k, k_prime, n, txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1)],
+                     txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1]);
 #endif
               dmrs_idx++;
               k_prime++;
@@ -388,8 +389,8 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
               n+=(k_prime)?0:1;
             }
             else if(is_ptrs_re){
-              txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) +     (2*txdataF_offset)] = (beta_ptrs*amp*mod_ptrs[ptrs_idx<<1]) >> 15;
-              txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)] = (beta_ptrs*amp*mod_ptrs[(ptrs_idx<<1) + 1])>> 15;
+              txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1)    ] = (beta_ptrs*amp*mod_ptrs[ptrs_idx<<1]) >> 15;
+              txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = (beta_ptrs*amp*mod_ptrs[(ptrs_idx<<1) + 1])>> 15;
 #ifdef DEBUG_DLSCH_MAPPING
               printf("ptrs_idx %d\t l %d \t k %d \t k_prime %d \t n %d \t txdataF: %d %d, mod_ptrs: %d %d\n",
                      ptrs_idx, l, k, k_prime, n, ((int16_t*)txdataF[ap])[((l*frame_parms->ofdm_symbol_size + k)<<1) + (2*txdataF_offset)],
@@ -399,19 +400,19 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
             }
           /* Map DATA Symbol */
             else if( ptrs_symbol || allowed_xlsch_re_in_dmrs_symbol(k,start_sc,frame_parms->ofdm_symbol_size,rel15->numDmrsCdmGrpsNoData,dmrs_Type)) {
-              txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) +     (2*txdataF_offset)] = (amp * tx_layers[ap][m<<1]) >> 15;
-              txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)] = (amp * tx_layers[ap][(m<<1) + 1]) >> 15;
+              txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1)    ] = (amp * tx_layers[ap][m<<1]) >> 15;
+              txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = (amp * tx_layers[ap][(m<<1) + 1]) >> 15;
 #ifdef DEBUG_DLSCH_MAPPING
               printf("m %d\t l %d \t k %d \t txdataF: %d %d\n",
-                     m, l, k, txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + (2*txdataF_offset)],
-                     txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)]);
+                     m, l, k, txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1)],
+                     txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1]);
 #endif
               m++;
             }
             /* mute RE */
             else {
-              txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) +     (2*txdataF_offset)] = 0;
-              txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)] = 0;
+              txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1)    ] = 0;
+              txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = 0;
             }
             if (++k >= frame_parms->ofdm_symbol_size)
               k -= frame_parms->ofdm_symbol_size;
@@ -427,7 +428,7 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
           }
           // fix the alignment issues later, use 64-bit SIMD below instead of 128.
           if (0/*(frame_parms->N_RB_DL&1)==0*/) {
-            __m128i *txF=(__m128i*)&txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size+start_sc+txdataF_offset)<<1)];
+            __m128i *txF=(__m128i*)&txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size+start_sc)<<1)];
 
             __m128i *txl = (__m128i*)&tx_layers[ap][m<<1];
             __m128i amp128=_mm_set1_epi16(amp);
@@ -436,7 +437,7 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
             } //RE loop, first part
             m+=upper_limit;
             if (remaining_re > 0) {
-               txF = (__m128i*)&txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size+txdataF_offset)<<1)];
+               txF = (__m128i*)&txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size)<<1)];
                txl = (__m128i*)&tx_layers[ap][m<<1];
                for (int i=0; i<(remaining_re>>2); i++) {
                  txF[i] = _mm_mulhrs_epi16(amp128,txl[i]);
@@ -444,7 +445,7 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
             }
           }
           else {
-            __m64 *txF=(__m64*)&txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size+start_sc+txdataF_offset)<<1)];
+            __m64 *txF=(__m64*)&txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size+start_sc)<<1)];
 
             __m64 *txl = (__m64*)&tx_layers[ap][m<<1];
             __m64 amp64=_mm_set1_pi16(amp);
@@ -454,31 +455,31 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
 #ifdef DEBUG_DLSCH_MAPPING
               if ((i&1) > 0)
                   printf("m %d\t l %d \t k %d \t txdataF: %d %d\n",
-                       m, l, start_sc+(i>>1), txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + start_sc+(i>>1))<<1) + (2*txdataF_offset)],
-                  txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + start_sc+(i>>1))<<1) + 1 + (2*txdataF_offset)]);
+                       m, l, start_sc+(i>>1), txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + start_sc+(i>>1))<<1)],
+                  txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + start_sc+(i>>1))<<1) + 1]);
 #endif
               /* handle this, mute RE */
               /*else {
-                txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) +     (2*txdataF_offset)] = 0;
-                txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)] = 0;
+                txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = 0;
+                txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = 0;
               }*/
             } //RE loop, first part
             m+=upper_limit;
             if (remaining_re > 0) {
-               txF = (__m64*)&txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size+txdataF_offset)<<1)];
+               txF = (__m64*)&txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size)<<1)];
                txl = (__m64*)&tx_layers[ap][m<<1];
                for (int i=0; i<(remaining_re>>1); i++) {
                  txF[i] = _mm_mulhrs_pi16(amp64,txl[i]);
 #ifdef DEBUG_DLSCH_MAPPING
                  if ((i&1) > 0)
                    printf("m %d\t l %d \t k %d \t txdataF: %d %d\n",
-                          m, l, i>>1, txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + (i>>1))<<1) + (2*txdataF_offset)],
-                          txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + (i>>1))<<1) + 1 + (2*txdataF_offset)]);
+                          m, l, i>>1, txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + (i>>1))<<1) ],
+                          txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + (i>>1))<<1) + 1]);
 #endif
                  /* handle this, mute RE */
                  /*else {
-                   txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) +     (2*txdataF_offset)] = 0;
-                   txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)] = 0;
+                   txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1)    ] = 0;
+                   txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = 0;
                  }*/
                } //RE loop, second part
             } // 
@@ -515,7 +516,7 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
           if (pmi == 0) {//unitary Precoding
             if(ap<rel15->nrOfLayers)
               memcpy((void*)&txdataF[ap][l*frame_parms->ofdm_symbol_size + txdataF_offset + k],
-                     (void*)&txdataF_precoding[ap][2*(l*frame_parms->ofdm_symbol_size + txdataF_offset+ k)],
+                     (void*)&txdataF_precoding[ap][2*(l*frame_parms->ofdm_symbol_size + k)],
                      NR_NB_SC_PER_RB*sizeof(int32_t));
             else
               memset((void*)&txdataF[ap][l*frame_parms->ofdm_symbol_size + txdataF_offset + k],
@@ -556,7 +557,7 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
             }
             for (int i=0; i<NR_NB_SC_PER_RB; i++) {
               int32_t re_offset = l*frame_parms->ofdm_symbol_size + k;
-              int32_t precodatatx_F = nr_layer_precoder(txdataF_precoding, W_prec, rel15->nrOfLayers, re_offset+txdataF_offset);
+              int32_t precodatatx_F = nr_layer_precoder(txdataF_precoding, W_prec, rel15->nrOfLayers, re_offset);
               ((int16_t*)txdataF[ap])[(re_offset<<1) + (2*txdataF_offset)] = ((int16_t *) &precodatatx_F)[0];
               ((int16_t*)txdataF[ap])[(re_offset<<1) + 1 + (2*txdataF_offset)] = ((int16_t *) &precodatatx_F)[1];
 #ifdef DEBUG_DLSCH_MAPPING
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
index afd1fc6e0da14dcb0aeba83edbff8963fe5fc381..b006eaae89cbdaa6b33b88e10f0581c725dbecb4 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
@@ -254,7 +254,7 @@ void ldpc8blocks( void *p) {
 #ifdef DEBUG_DLSCH_CODING
 
     for (int i =0; i<16; i++)
-      printf("output ratematching e[%d]= %d r_offset %u\n", i,harq->e[i+r_offset], r_offset);
+      printf("output ratematching e[%d]= %d r_offset %u\n", i,e[i], r_offset);
 
 #endif
     nr_interleaving_ldpc(E,
@@ -294,8 +294,8 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_DLSCH_ENCODING, VCD_FUNCTION_IN);
   uint32_t A = rel15->TBSize[0]<<3;
 
-  if ( dlsch->rnti != SI_RNTI )
-    trace_NRpdu(DIRECTION_DOWNLINK, a, rel15->TBSize[0], 0, WS_C_RNTI, dlsch->rnti, frame, slot,0, 0);
+  if ( rel15->rnti != SI_RNTI)
+    trace_NRpdu(DIRECTION_DOWNLINK, a, rel15->TBSize[0], 0, WS_C_RNTI, rel15->rnti, frame, slot,0, 0);
 
   NR_gNB_SCH_STATS_t *stats=NULL;
   int first_free=-1;
@@ -370,11 +370,11 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
     //d_tmp[r] = &harq->d[r][0];
     //channel_input[r] = &harq->d[r][0];
 #ifdef DEBUG_DLSCH_CODING
-    LOG_D(PHY,"Encoder: B %d F %d \n",harq->B, impp->F);
+    LOG_D(PHY,"Encoder: B %d F %d \n",harq->B, impp.F);
     LOG_D(PHY,"start ldpc encoder segment %d/%d\n",r,impp.n_segments);
     LOG_D(PHY,"input %d %d %d %d %d \n", harq->c[r][0], harq->c[r][1], harq->c[r][2],harq->c[r][3], harq->c[r][4]);
 
-    for (int cnt =0 ; cnt < 22*(*Zc)/8; cnt ++) {
+    for (int cnt =0 ; cnt < 22*(*impp.Zc)/8; cnt ++) {
       LOG_D(PHY,"%d ", harq->c[r][cnt]);
     }
 
@@ -405,6 +405,7 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
     notifiedFIFO_elt_t *req=pullTpool(&nf, gNB->threadPool);
     delNotifiedFIFO_elt(req);
     nbJobs--;
+
   }
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_DLSCH_ENCODING, VCD_FUNCTION_OUT);
   return 0;
diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c
index a4cec432de30d4b2805db685964b7dc7a52b137d..bf5edccb1bedccc6098d19d256bcd2b891cefdce 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c
@@ -219,8 +219,7 @@ void nr_init_pbch_interleaver(uint8_t *interleaver) {
       *(interleaver+i) = *(nr_pbch_payload_interleaving_pattern+j_ssb++);
 }
 
-int nr_generate_pbch(NR_gNB_PBCH *pbch,
-		     nfapi_nr_dl_tti_ssb_pdu *ssb_pdu,
+int nr_generate_pbch(nfapi_nr_dl_tti_ssb_pdu *ssb_pdu,
                      uint8_t *interleaver,
                      int32_t *txdataF,
                      int16_t amp,
@@ -239,6 +238,8 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
   uint64_t a_reversed=0;
   LOG_D(PHY, "PBCH generation started\n");
   ///Payload generation
+  NR_gNB_PBCH m_pbch;
+  NR_gNB_PBCH *pbch = &m_pbch;
   memset((void *)pbch, 0, sizeof(NR_gNB_PBCH));
   pbch->pbch_a=0;
   uint8_t ssb_index = ssb_pdu->ssb_pdu_rel15.SsbBlockIndex;
diff --git a/openair1/PHY/NR_TRANSPORT/nr_pss.c b/openair1/PHY/NR_TRANSPORT/nr_pss.c
index 535ce991438c9ed3220cd7a94eb851ef019e39aa..8564efe3de0d4fd73a45fe1610b0f07938e2c6be 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_pss.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_pss.c
@@ -24,55 +24,47 @@
 
 //#define NR_PSS_DEBUG
 
-int nr_generate_pss(  int16_t *d_pss,
-                      int32_t *txdataF,
+int nr_generate_pss(  int32_t *txdataF,
                       int16_t amp,
                       uint8_t ssb_start_symbol,
                       nfapi_nr_config_request_scf_t* config,
                       NR_DL_FRAME_PARMS *frame_parms)
 {
-  int i,k,l,m;
-  int16_t a;
   int16_t x[NR_PSS_LENGTH];
   const int x_initial[7] = {0, 1, 1 , 0, 1, 1, 1};
 
-  uint8_t Nid2 = config->cell_config.phy_cell_id.value % 3;
-
   /// Sequence generation
-  for (i=0; i < 7; i++)
+  for (int i=0; i < 7; i++)
     x[i] = x_initial[i];
 
-  for (i=0; i < (NR_PSS_LENGTH - 7); i++) {
+  for (int i=0; i < (NR_PSS_LENGTH - 7); i++) {
     x[i+7] = (x[i + 4] + x[i]) %2;
   }
 
-  for (i=0; i < NR_PSS_LENGTH; i++) {
-    m = (i + 43*Nid2)%(NR_PSS_LENGTH);
-    d_pss[i] = (1 - 2*x[m]) * 23170;
-  }
-
 #ifdef NR_PSS_DEBUG
   write_output("d_pss.m", "d_pss", (void*)d_pss, NR_PSS_LENGTH, 1, 0);
   printf("PSS: ofdm_symbol_size %d, first_carrier_offset %d\n",frame_parms->ofdm_symbol_size,frame_parms->first_carrier_offset);
 #endif
 
   /// Resource mapping
-  a = amp;
 
-    // PSS occupies a predefined position (subcarriers 56-182, symbol 0) within the SSB block starting from
-    k = frame_parms->first_carrier_offset + frame_parms->ssb_start_subcarrier + 56; //and
-    if (k>= frame_parms->ofdm_symbol_size) k-=frame_parms->ofdm_symbol_size;
+  // PSS occupies a predefined position (subcarriers 56-182, symbol 0) within the SSB block starting from
+  int k = frame_parms->first_carrier_offset + frame_parms->ssb_start_subcarrier + 56; //and
+  if (k>= frame_parms->ofdm_symbol_size) k-=frame_parms->ofdm_symbol_size;
 
-    l = ssb_start_symbol;
+  int l = ssb_start_symbol;
 
-    for (m = 0; m < NR_PSS_LENGTH; m++) {
-      //      printf("pss: writing position k %d / %d\n",k,frame_parms->ofdm_symbol_size);
-      ((int16_t*)txdataF)[2*(l*frame_parms->ofdm_symbol_size + k)] = (a * d_pss[m]) >> 15;
-      k++;
-
-      if (k >= frame_parms->ofdm_symbol_size)
-        k-=frame_parms->ofdm_symbol_size;
-    }
+  uint8_t Nid2 = config->cell_config.phy_cell_id.value % 3;
+  for (int i = 0; i < NR_PSS_LENGTH; i++) {
+    int m = (i + 43*Nid2)%(NR_PSS_LENGTH);
+    int16_t d_pss = (1 - 2*x[m]) * 23170;
+    //      printf("pss: writing position k %d / %d\n",k,frame_parms->ofdm_symbol_size);
+    ((int16_t*)txdataF)[2*(l*frame_parms->ofdm_symbol_size + k)] = (((int16_t)amp) * d_pss) >> 15;
+    k++;
+
+    if (k >= frame_parms->ofdm_symbol_size)
+      k-=frame_parms->ofdm_symbol_size;
+  }
 
 #ifdef NR_PSS_DEBUG
   LOG_M("pss_0.m", "pss_0", 
diff --git a/openair1/PHY/NR_TRANSPORT/nr_sss.c b/openair1/PHY/NR_TRANSPORT/nr_sss.c
index de92237f6caf2b45cb325da09b0b550a08c83b81..5181f6bac18de7af72c174310e5811459ebb28b8 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_sss.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_sss.c
@@ -23,42 +23,34 @@
 
 //#define NR_SSS_DEBUG
 
-int nr_generate_sss(  int16_t *d_sss,
-                      int32_t *txdataF,
+int nr_generate_sss(  int32_t *txdataF,
                       int16_t amp,
                       uint8_t ssb_start_symbol,
                       nfapi_nr_config_request_scf_t* config,
                       NR_DL_FRAME_PARMS *frame_parms)
 {
-  int i,k,l;
-  int m0, m1;
-  int Nid, Nid1, Nid2;
-  //int16_t a;
-  int16_t x0[NR_SSS_LENGTH], x1[NR_SSS_LENGTH];
+  int16_t x0[NR_SSS_LENGTH];
+  int16_t x1[NR_SSS_LENGTH];
   const int x0_initial[7] = { 1, 0, 0, 0, 0, 0, 0 };
   const int x1_initial[7] = { 1, 0, 0, 0, 0, 0, 0 };
 
   /// Sequence generation
-  Nid = config->cell_config.phy_cell_id.value;
-  Nid2 = Nid % 3;
-  Nid1 = (Nid - Nid2)/3;
+  int Nid = config->cell_config.phy_cell_id.value;
+  int Nid2 = Nid % 3;
+  int Nid1 = (Nid - Nid2)/3;
 
-  for ( i=0 ; i < 7 ; i++) {
+  for (int i=0; i < 7; i++) {
     x0[i] = x0_initial[i];
     x1[i] = x1_initial[i];
   }
 
-  for ( i=0 ; i < NR_SSS_LENGTH - 7 ; i++) {
+  for (int i=0; i < NR_SSS_LENGTH - 7; i++) {
     x0[i+7] = (x0[i + 4] + x0[i]) % 2;
     x1[i+7] = (x1[i + 1] + x1[i]) % 2;
   }
 
-  m0 = 15*(Nid1/112) + (5*Nid2);
-  m1 = Nid1 % 112;
-
-  for (i = 0; i < NR_SSS_LENGTH ; i++) {
-    d_sss[i] = (1 - 2*x0[(i + m0) % NR_SSS_LENGTH] ) * (1 - 2*x1[(i + m1) % NR_SSS_LENGTH] ) * 23170;
-  }
+  int m0 = 15*(Nid1/112) + (5*Nid2);
+  int m1 = Nid1 % 112;
 
 #ifdef NR_SSS_DEBUG
   write_output("d_sss.m", "d_sss", (void*)d_sss, NR_SSS_LENGTH, 1, 1);
@@ -66,17 +58,18 @@ int nr_generate_sss(  int16_t *d_sss,
 
   /// Resource mapping
 
-    // SSS occupies a predefined position (subcarriers 56-182, symbol 2) within the SSB block starting from
-    k = frame_parms->first_carrier_offset + frame_parms->ssb_start_subcarrier + 56; //and
-    l = ssb_start_symbol + 2;
+  // SSS occupies a predefined position (subcarriers 56-182, symbol 2) within the SSB block starting from
+  int k = frame_parms->first_carrier_offset + frame_parms->ssb_start_subcarrier + 56; //and
+  int l = ssb_start_symbol + 2;
 
-    for (int m = 0; m < NR_SSS_LENGTH; m++) {
-      ((int16_t*)txdataF)[2*(l*frame_parms->ofdm_symbol_size + k)] = (amp * d_sss[m]) >> 15;
-      k++;
+  for (int i = 0; i < NR_SSS_LENGTH; i++) {
+    int16_t d_sss = (1 - 2*x0[(i + m0) % NR_SSS_LENGTH] ) * (1 - 2*x1[(i + m1) % NR_SSS_LENGTH] ) * 23170;
+    ((int16_t*)txdataF)[2*(l*frame_parms->ofdm_symbol_size + k)] = (((int16_t)amp) * d_sss) >> 15;
+    k++;
 
-      if (k >= frame_parms->ofdm_symbol_size)
-        k-=frame_parms->ofdm_symbol_size;
-    }
+    if (k >= frame_parms->ofdm_symbol_size)
+      k-=frame_parms->ofdm_symbol_size;
+  }
 #ifdef NR_SSS_DEBUG
   //  write_output("sss_0.m", "sss_0", (void*)txdataF[0][l*frame_parms->ofdm_symbol_size], frame_parms->ofdm_symbol_size, 1, 1);
 #endif
diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
index 06ccc70d7733d892b498bb9e95e4c82a3eb2b225..d45858bca0814c1155ffb4e86237e64602bb28b6 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
+++ b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
@@ -44,8 +44,7 @@
 @param
 @returns 0 on success
  */
-int nr_generate_pss(int16_t *d_pss,
-                    int32_t *txdataF,
+int nr_generate_pss(int32_t *txdataF,
                     int16_t amp,
                     uint8_t ssb_start_symbol,
                     nfapi_nr_config_request_scf_t *config,
@@ -57,8 +56,7 @@ int nr_generate_pss(int16_t *d_pss,
 @param
 @returns 0 on success
  */
-int nr_generate_sss(int16_t *d_sss,
-                    int32_t *txdataF,
+int nr_generate_sss(int32_t *txdataF,
                     int16_t amp,
                     uint8_t ssb_start_symbol,
                     nfapi_nr_config_request_scf_t *config,
@@ -83,8 +81,7 @@ int nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs,
 @param
 @returns 0 on success
  */
-int nr_generate_pbch(NR_gNB_PBCH *pbch,
-                     nfapi_nr_dl_tti_ssb_pdu *ssb_pdu,
+int nr_generate_pbch(nfapi_nr_dl_tti_ssb_pdu *ssb_pdu,
                      uint8_t *interleaver,
                      int32_t *txdataF,
                      int16_t amp,
diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
index 5286fe878061b72a04e059ef4ed060e2eacd754e..33071e40704a9d582075299175465b87c1298c81 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
@@ -463,7 +463,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_ULSCH_DECODING,1);
   harq_process->TBS = pusch_pdu->pusch_data.tb_size;
-  harq_process->round = nr_rv_round_map[pusch_pdu->pusch_data.rv_index];
+  harq_process->round = nr_rv_to_round(pusch_pdu->pusch_data.rv_index);
 
   harq_process->new_rx = false; // flag to indicate if this is a new reception for this harq (initialized to false)
   if (harq_process->round == 0) {
diff --git a/openair1/PHY/NR_TRANSPORT/pucch_rx.c b/openair1/PHY/NR_TRANSPORT/pucch_rx.c
index 22c8ff0b0ec99d1dc09a4b0e5a5126d4582e6595..56d87866edb9cc397ea2dcf1154745d1c79aea8c 100644
--- a/openair1/PHY/NR_TRANSPORT/pucch_rx.c
+++ b/openair1/PHY/NR_TRANSPORT/pucch_rx.c
@@ -328,7 +328,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
     LOG_D(PHY,"PUCCH IDFT[%d/%d] = (%d,%d)=>%f\n",
           mcs[i],seq_index,corr_re[0][0],corr_im[0][0],
           10*log10((double)corr_re[0][0]*corr_re[0][0] + (double)corr_im[0][0]*corr_im[0][0]));
-    if (pucch_pdu->nr_of_symbols==2) 
+    if (pucch_pdu->nr_of_symbols==2)
        LOG_D(PHY,"PUCCH 2nd symbol IDFT[%d/%d] = (%d,%d)=>%f\n",
              mcs[i],seq_index,corr_re[0][1],corr_im[0][1],
              10*log10((double)corr_re[0][1]*corr_re[0][1] + (double)corr_im[0][1]*corr_im[0][1]));
@@ -431,9 +431,11 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
     uci_pdu->harq->num_harq = 1;
     uci_pdu->harq->harq_confidence_level = no_conf ? 1 : 0;
     uci_pdu->harq->harq_list = (nfapi_nr_harq_t*)malloc(1);
+
     uci_pdu->harq->harq_list[0].harq_value = !(index&0x01);
     LOG_D(PHY, "[DLSCH/PDSCH/PUCCH] %d.%d HARQ value %d (0 pass, 1 fail) with confidence level %d (0 is good, 1 is bad) xrt_mag %d xrt_mag_next %d n0 %d (%d,%d) pucch0_thres %d, cqi %d, SNRtimes10 %d, energy %f, sync_pos %d\n",
           frame,slot,uci_pdu->harq->harq_list[0].harq_value,uci_pdu->harq->harq_confidence_level,xrtmag_dBtimes10,xrtmag_next_dBtimes10,max_n0,uci_stats->pucch0_n00,uci_stats->pucch0_n01,uci_stats->pucch0_thres,cqi,SNRtimes10,10*log10((double)sigenergy),gNB->ulsch_stats[0].sync_pos);
+
     if (pucch_pdu->sr_flag == 1) {
       uci_pdu->sr = calloc(1,sizeof(*uci_pdu->sr));
       uci_pdu->sr->sr_indication = (index>1) ? 1 : 0;
@@ -447,6 +449,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
     uci_pdu->harq->num_harq = 2;
     uci_pdu->harq->harq_confidence_level = (no_conf) ? 1 : 0;
     uci_pdu->harq->harq_list = (nfapi_nr_harq_t*)malloc(2);
+
     uci_pdu->harq->harq_list[1].harq_value = !(index&0x01);
     uci_pdu->harq->harq_list[0].harq_value = !((index>>1)&0x01);
     LOG_D(PHY, "[DLSCH/PDSCH/PUCCH] %d.%d HARQ values %d (0 pass, 1 fail) and %d with confidence level %d (0 is good, 1 is bad), xrt_mag %d xrt_mag_next %d n0 %d (%d,%d) pucch0_thres %d, cqi %d, SNRtimes10 %d,sync_pos %d\n",
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
index 95c451fa1a1b5a6085aa700e3deb161008fa8410..7360eff4941cc8a847c4a8906fe6e26aa60902d3 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
@@ -271,7 +271,6 @@ bool nr_ue_postDecode(PHY_VARS_NR_UE *phy_vars_ue, notifiedFIFO_elt_t *req, bool
       //LOG_D(PHY,"[UE %d] DLSCH: Setting NAK for SFN/SF %d/%d (pid %d, status %d, round %d, TBS %d, mcs %d) Kr %d r %d harq_process->round %d\n",
       //      phy_vars_ue->Mod_id, frame, nr_slot_rx, harq_pid,harq_process->status, harq_process->round,harq_process->TBS,harq_process->mcs,Kr,r,harq_process->round);
       harq_process->ack = 0;
-      harq_process->round++;
       if (harq_process->round >= dlsch->Mlimit) {
         harq_process->status = SCH_IDLE;
         harq_process->round  = 0;
diff --git a/openair1/PHY/TOOLS/nr_phy_scope.c b/openair1/PHY/TOOLS/nr_phy_scope.c
index 44adf02f576f16d39e906238676abda1df701184..5594d566934d659c322ce19382d67c90b5c8e57d 100644
--- a/openair1/PHY/TOOLS/nr_phy_scope.c
+++ b/openair1/PHY/TOOLS/nr_phy_scope.c
@@ -33,7 +33,6 @@
 #define ScaleZone 4
 #define localBuff(NaMe,SiZe) float NaMe[SiZe]; memset(NaMe,0,sizeof(NaMe));
 
-int otg_enabled;
 
 const FL_COLOR rx_antenna_colors[4] = {FL_RED,FL_BLUE,FL_GREEN,FL_YELLOW};
 const FL_COLOR water_colors[4] = {FL_BLUE,FL_GREEN,FL_YELLOW,FL_RED};
diff --git a/openair1/PHY/TOOLS/time_meas.h b/openair1/PHY/TOOLS/time_meas.h
index 56d8299470df7983645700c32e83fa3cd885910b..023640aa0e69beb3d2c2be502a6ae28a18021a9a 100644
--- a/openair1/PHY/TOOLS/time_meas.h
+++ b/openair1/PHY/TOOLS/time_meas.h
@@ -142,6 +142,7 @@ static inline void start_meas(time_stats_t *ts) {
     } else {
       ts->in = rdtsc_oai();
     }
+    if ((ts->trials&16383)<10) ts->max=0;
   }
 }
 
diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h
index 0e486eff572498f1d6fe6347fe4fe85041d85e57..4af1eaee69ce9604951e855d8a2ffd3ebf51d4ad 100644
--- a/openair1/PHY/defs_gNB.h
+++ b/openair1/PHY/defs_gNB.h
@@ -604,6 +604,8 @@ typedef struct gNB_L1_proc_t_s {
   pthread_t L1_stats_thread;
   /// pthread structure for printing time meas
   pthread_t process_stats_thread;
+  /// pthread structure for reordering L1 tx thread messages
+  pthread_t pthread_tx_reorder;
   /// flag to indicate first RX acquisition
   int first_rx;
   /// flag to indicate first TX transmission
@@ -761,7 +763,6 @@ typedef struct PHY_VARS_gNB_s {
   //  nfapi_nr_ul_dci_request_pdus_t  *ul_dci_pdu;
   uint16_t num_pdsch_rnti[80];
   NR_gNB_PBCH        pbch;
-  nr_cce_t           cce_list[MAX_DCI_CORESET][NR_MAX_PDCCH_AGG_LEVEL];
   NR_gNB_COMMON      common_vars;
   NR_gNB_PRACH       prach_vars;
   NR_gNB_PUSCH       *pusch_vars[NUMBER_OF_NR_ULSCH_MAX];
@@ -788,9 +789,6 @@ typedef struct PHY_VARS_gNB_s {
 
   // PUCCH0 Look-up table for cyclic-shifts
   NR_gNB_PUCCH0_LUT_t pucch0_lut;
-  /// NR synchronization sequences
-  int16_t d_pss[NR_PSS_LENGTH];
-  int16_t d_sss[NR_SSS_LENGTH];
 
   /// PBCH DMRS sequence
   uint32_t nr_gold_pbch_dmrs[2][64][NR_PBCH_DMRS_LENGTH_DWORD];
@@ -858,8 +856,7 @@ typedef struct PHY_VARS_gNB_s {
   /*
   time_stats_t phy_proc;
   */
-  time_stats_t *phy_proc_tx_0;
-  time_stats_t *phy_proc_tx_1;
+  time_stats_t *phy_proc_tx[2];
   time_stats_t phy_proc_rx;
   time_stats_t rx_prach;
   /*
@@ -882,6 +879,7 @@ typedef struct PHY_VARS_gNB_s {
 
   time_stats_t rx_pusch_stats;
   time_stats_t ul_indication_stats;
+  time_stats_t schedule_response_stats;
   time_stats_t ulsch_decoding_stats;
   time_stats_t ulsch_rate_unmatching_stats;
   time_stats_t ulsch_ldpc_decoding_stats;
@@ -900,11 +898,13 @@ typedef struct PHY_VARS_gNB_s {
   */
   notifiedFIFO_t *respDecode;
   notifiedFIFO_t *resp_L1;
-  notifiedFIFO_t *resp_L1_tx;
+  notifiedFIFO_t *L1_tx_free;
+  notifiedFIFO_t *L1_tx_filled;
+  notifiedFIFO_t *L1_tx_out;
   notifiedFIFO_t *resp_RU_tx;
   tpool_t *threadPool;
   int nbDecode;
-  uint8_t pusch_proc_threads;
+  uint8_t thread_pool_size;
   int number_of_nr_dlsch_max;
   int number_of_nr_ulsch_max;
   void * scopeData;
diff --git a/openair1/PHY/defs_nr_common.h b/openair1/PHY/defs_nr_common.h
index 20549d3978a729cb7649632ead2fddf90a961f48..78599dcbb65f3ab118aad088eecf24c2101e4fd5 100644
--- a/openair1/PHY/defs_nr_common.h
+++ b/openair1/PHY/defs_nr_common.h
@@ -115,7 +115,16 @@
 #define NR_NB_TH_SLOT 2
 
 extern const uint8_t nr_rv_round_map[4]; 
-extern const uint8_t nr_rv_round_map_ue[4]; 
+
+static inline
+uint8_t nr_rv_to_round(uint8_t rv)
+{
+  for (uint8_t round = 0; round < 4; round++) {
+    if (nr_rv_round_map[round] == rv)
+      return round;
+  }
+  return 0;
+}
 
 typedef enum {
   NR_MU_0=0,
diff --git a/openair1/PHY/phy_vars.h b/openair1/PHY/phy_vars.h
index 9fd186ec4f9d7ab2a25f7725b735d3150631bbb8..d99a3016ba6a07a012cb9a6f1640c156fedd495f 100644
--- a/openair1/PHY/phy_vars.h
+++ b/openair1/PHY/phy_vars.h
@@ -82,8 +82,7 @@ const double sinr_to_cqi[4][16]= { {-2.5051, -2.5051, -1.7451, -0.3655, 1.0812,
   { -4.1057, -4.1057, -3.3768, -2.2916, -1.1392, 0.1236, 1.2849, 3.1933, 5.9298, 6.4052, 9.6245, 10.9414, 13.5166, 14.9545, 14.9545, 14.9545}
 };
 
-//int cqi_to_mcs[16]={0, 0, 1, 3, 5, 7, 9, 13, 15, 16, 20, 23, 25, 27, 27, 27};
-const int cqi_to_mcs[16]= {0, 0, 1, 2, 4, 6, 8, 11, 13, 16, 18, 20, 23, 25, 27, 27};
+const int cqi_to_mcs[16]= {0, 0, 1, 2, 4, 6, 8, 11, 13, 16, 18, 20, 23, 25, 27, 28};
 
 //for SNR to MI conversion 7 th order Polynomial coeff
 const double q_qam16[8]= {3.21151853033897e-10,5.55435952230651e-09,-2.30760065362117e-07,-6.25587743817859e-06,4.62251036452795e-06,0.00224150813158937,0.0393723140344367,0.245486379182639};
diff --git a/openair1/PHY/phy_vars_nr_ue.h b/openair1/PHY/phy_vars_nr_ue.h
index 303853add22a5012bc2b7ff157429a522e0be91b..550a2f0394665bda6fef28b3ca8f5acc42defd25 100644
--- a/openair1/PHY/phy_vars_nr_ue.h
+++ b/openair1/PHY/phy_vars_nr_ue.h
@@ -83,9 +83,6 @@ const double sinr_to_cqi[4][16]= { {-2.5051, -2.5051, -1.7451, -0.3655, 1.0812,
   { -4.1057, -4.1057, -3.3768, -2.2916, -1.1392, 0.1236, 1.2849, 3.1933, 5.9298, 6.4052, 9.6245, 10.9414, 13.5166, 14.9545, 14.9545, 14.9545}
 };
 
-//int cqi_to_mcs[16]={0, 0, 1, 3, 5, 7, 9, 13, 15, 16, 20, 23, 25, 27, 27, 27};
-const int cqi_to_mcs[16]= {0, 0, 1, 2, 4, 6, 8, 11, 13, 16, 18, 20, 23, 25, 27, 27};
-
 //for SNR to MI conversion 7 th order Polynomial coeff
 const double q_qam16[8]= {3.21151853033897e-10,5.55435952230651e-09,-2.30760065362117e-07,-6.25587743817859e-06,4.62251036452795e-06,0.00224150813158937,0.0393723140344367,0.245486379182639};
 const double q_qpsk[8]= {1.94491167814437e-09,8.40494123817774e-08,4.75527131198034e-07,-2.48946285301621e-05,-0.000347614016158364,0.00209252225437100,0.0742986115462510,0.488297879889425};
diff --git a/openair1/PHY/phy_vars_ue.h b/openair1/PHY/phy_vars_ue.h
index 2c1334b80b19e679d6312894b10a7addfde95890..2cdec82f0f9565a9fd2519c7460ff476ad531e43 100644
--- a/openair1/PHY/phy_vars_ue.h
+++ b/openair1/PHY/phy_vars_ue.h
@@ -72,8 +72,7 @@ const double sinr_to_cqi[4][16]= { {-2.5051, -2.5051, -1.7451, -0.3655, 1.0812,
   { -4.1057, -4.1057, -3.3768, -2.2916, -1.1392, 0.1236, 1.2849, 3.1933, 5.9298, 6.4052, 9.6245, 10.9414, 13.5166, 14.9545, 14.9545, 14.9545}
 };
 
-//int cqi_to_mcs[16]={0, 0, 1, 3, 5, 7, 9, 13, 15, 16, 20, 23, 25, 27, 27, 27};
-const int cqi_to_mcs[16]= {0, 0, 1, 2, 4, 6, 8, 11, 13, 16, 18, 20, 23, 25, 27, 27};
+const int cqi_to_mcs[16]= {0, 0, 1, 2, 4, 6, 8, 11, 13, 16, 18, 20, 23, 25, 27, 28};
 
 //for SNR to MI conversion 7 th order Polynomial coeff
 const double q_qam16[8]= {3.21151853033897e-10,5.55435952230651e-09,-2.30760065362117e-07,-6.25587743817859e-06,4.62251036452795e-06,0.00224150813158937,0.0393723140344367,0.245486379182639};
diff --git a/openair1/SCHED_NR/fapi_nr_l1.c b/openair1/SCHED_NR/fapi_nr_l1.c
index 5851710c2b947f8225de043b35608f696a94f29f..7ffd29c8797f20d41e4028bf8dea7f34441197ae 100644
--- a/openair1/SCHED_NR/fapi_nr_l1.c
+++ b/openair1/SCHED_NR/fapi_nr_l1.c
@@ -148,6 +148,11 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO){
   AssertFatal(RC.gNB[Mod_id]!=NULL,"RC.gNB[%d] is null\n",Mod_id);
 
   gNB = RC.gNB[Mod_id];
+  start_meas(&gNB->schedule_response_stats);
+
+  nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config;
+
+  int slot_type = nr_slot_select(cfg,frame,slot);
 
   uint8_t number_dl_pdu             = (DL_req==NULL) ? 0 : DL_req->dl_tti_request_body.nPDUs;
   uint8_t number_ul_dci_pdu         = (UL_dci_req==NULL) ? 0 : UL_dci_req->numPdus;
@@ -155,62 +160,59 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO){
   uint8_t number_tx_data_pdu        = (TX_req == NULL) ? 0 : TX_req->Number_of_PDUs;
 
   if (NFAPI_MODE == NFAPI_MONOLITHIC){
-    notifiedFIFO_elt_t *res;
-    res = pullTpool(gNB->resp_L1_tx, gNB->threadPool);
-    processingData_L1tx_t *msgTx = (processingData_L1tx_t *)NotifiedFifoData(res);
-    if (DL_req != NULL && TX_req!=NULL && (number_dl_pdu > 0 || number_ul_dci_pdu > 0 || number_ul_tti_pdu > 0))
-      LOG_D(PHY,"NFAPI: Sched_INFO:SFN/SLOT:%04d/%d DL_req:SFN/SLO:%04d/%d:dl_pdu:%d tx_req:SFN/SLOT:%04d/%d:pdus:%d;ul_dci %d ul_tti %d\n",
-      frame,slot,
-      DL_req->SFN,DL_req->Slot,number_dl_pdu,
-      TX_req->SFN,TX_req->Slot,TX_req->Number_of_PDUs,
-      number_ul_dci_pdu,number_ul_tti_pdu);
-
-    int pdcch_received=0;
-    msgTx->num_pdsch_slot=0;
-    msgTx->pdcch_pdu.pdcch_pdu_rel15.numDlDci = 0;
-    msgTx->ul_pdcch_pdu.pdcch_pdu.pdcch_pdu_rel15.numDlDci = 0;
-    msgTx->slot = slot;
-    msgTx->frame = frame;
-
-    for (int i=0;i<number_dl_pdu;i++) {
-      nfapi_nr_dl_tti_request_pdu_t *dl_tti_pdu = &DL_req->dl_tti_request_body.dl_tti_pdu_list[i];
-      LOG_D(PHY,"NFAPI: dl_pdu %d : type %d\n",i,dl_tti_pdu->PDUType);
-      switch (dl_tti_pdu->PDUType) {
-        case NFAPI_NR_DL_TTI_SSB_PDU_TYPE:
-          handle_nr_nfapi_ssb_pdu(msgTx,frame,slot,
-                                  dl_tti_pdu);
-          break;
-
-        case NFAPI_NR_DL_TTI_PDCCH_PDU_TYPE:
-          AssertFatal(pdcch_received == 0, "pdcch_received is not 0, we can only handle one PDCCH PDU per slot\n");
-          msgTx->pdcch_pdu = dl_tti_pdu->pdcch_pdu;
-
-          pdcch_received = 1;
-          break;
 
-        case NFAPI_NR_DL_TTI_CSI_RS_PDU_TYPE:
-          LOG_D(PHY,"frame %d, slot %d, Got NFAPI_NR_DL_TTI_CSI_RS_PDU_TYPE for %d.%d\n",frame,slot,DL_req->SFN,DL_req->Slot);
-          handle_nfapi_nr_csirs_pdu(msgTx,frame,slot,
-            &dl_tti_pdu->csi_rs_pdu);
-          break;
-
-        case NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE:
-          LOG_D(PHY,"frame %d, slot %d, Got NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE for %d.%d\n",frame,slot,DL_req->SFN,DL_req->Slot);
-          nfapi_nr_dl_tti_pdsch_pdu_rel15_t *pdsch_pdu_rel15 = &dl_tti_pdu->pdsch_pdu.pdsch_pdu_rel15;
-          uint16_t pduIndex = pdsch_pdu_rel15->pduIndex;
-          AssertFatal(TX_req->pdu_list[pduIndex].num_TLV == 1, "TX_req->pdu_list[%d].num_TLV %d != 1\n",
-          pduIndex,TX_req->pdu_list[pduIndex].num_TLV);
-          uint8_t *sdu = (uint8_t *)TX_req->pdu_list[pduIndex].TLVs[0].value.direct;
-          AssertFatal(msgTx->num_pdsch_slot < gNB->number_of_nr_dlsch_max,"Number of PDSCH PDUs %d exceeded the limit %d\n",
-            msgTx->num_pdsch_slot,gNB->number_of_nr_dlsch_max);
-          handle_nr_nfapi_pdsch_pdu(msgTx,&dl_tti_pdu->pdsch_pdu, sdu);
+    if (slot_type == NR_DOWNLINK_SLOT || slot_type == NR_MIXED_SLOT) {
+      notifiedFIFO_elt_t *res;
+      res = pullTpool(gNB->L1_tx_free, gNB->threadPool);
+      processingData_L1tx_t *msgTx = (processingData_L1tx_t *)NotifiedFifoData(res);
+
+      int pdcch_received=0;
+      msgTx->num_pdsch_slot=0;
+      msgTx->pdcch_pdu.pdcch_pdu_rel15.numDlDci = 0;
+      msgTx->ul_pdcch_pdu.pdcch_pdu.pdcch_pdu_rel15.numDlDci = 0;
+      msgTx->slot = slot;
+      msgTx->frame = frame;
+
+      for (int i=0;i<number_dl_pdu;i++) {
+        nfapi_nr_dl_tti_request_pdu_t *dl_tti_pdu = &DL_req->dl_tti_request_body.dl_tti_pdu_list[i];
+        LOG_D(PHY,"NFAPI: dl_pdu %d : type %d\n",i,dl_tti_pdu->PDUType);
+        switch (dl_tti_pdu->PDUType) {
+          case NFAPI_NR_DL_TTI_SSB_PDU_TYPE:
+            handle_nr_nfapi_ssb_pdu(msgTx,frame,slot,
+                                    dl_tti_pdu);
+            break;
+
+          case NFAPI_NR_DL_TTI_PDCCH_PDU_TYPE:
+            AssertFatal(pdcch_received == 0, "pdcch_received is not 0, we can only handle one PDCCH PDU per slot\n");
+            msgTx->pdcch_pdu = dl_tti_pdu->pdcch_pdu;
+
+            pdcch_received = 1;
+            break;
+
+          case NFAPI_NR_DL_TTI_CSI_RS_PDU_TYPE:
+            LOG_D(PHY,"frame %d, slot %d, Got NFAPI_NR_DL_TTI_CSI_RS_PDU_TYPE for %d.%d\n",frame,slot,DL_req->SFN,DL_req->Slot);
+            handle_nfapi_nr_csirs_pdu(msgTx,frame,slot,
+              &dl_tti_pdu->csi_rs_pdu);
+            break;
+
+          case NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE:
+            LOG_D(PHY,"frame %d, slot %d, Got NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE for %d.%d\n",frame,slot,DL_req->SFN,DL_req->Slot);
+            nfapi_nr_dl_tti_pdsch_pdu_rel15_t *pdsch_pdu_rel15 = &dl_tti_pdu->pdsch_pdu.pdsch_pdu_rel15;
+            uint16_t pduIndex = pdsch_pdu_rel15->pduIndex;
+            AssertFatal(TX_req->pdu_list[pduIndex].num_TLV == 1, "TX_req->pdu_list[%d].num_TLV %d != 1\n",
+            pduIndex,TX_req->pdu_list[pduIndex].num_TLV);
+            uint8_t *sdu = (uint8_t *)TX_req->pdu_list[pduIndex].TLVs[0].value.direct;
+            AssertFatal(msgTx->num_pdsch_slot < gNB->number_of_nr_dlsch_max,"Number of PDSCH PDUs %d exceeded the limit %d\n",
+              msgTx->num_pdsch_slot,gNB->number_of_nr_dlsch_max);
+            handle_nr_nfapi_pdsch_pdu(msgTx,&dl_tti_pdu->pdsch_pdu, sdu);
+        }
       }
-    }
 
-    if (number_ul_dci_pdu > 0)
-      msgTx->ul_pdcch_pdu = UL_dci_req->ul_dci_pdu_list[number_ul_dci_pdu-1]; // copy the last pdu
+      if (number_ul_dci_pdu > 0)
+        msgTx->ul_pdcch_pdu = UL_dci_req->ul_dci_pdu_list[number_ul_dci_pdu-1]; // copy the last pdu
 
-    pushNotifiedFIFO(gNB->resp_L1_tx,res);
+      pushNotifiedFIFO(gNB->L1_tx_filled,res);
+    }
 
     for (int i = 0; i < number_ul_tti_pdu; i++) {
       switch (UL_tti_req->pdus_list[i].pdu_type) {
@@ -250,6 +252,6 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO){
     if (number_dl_pdu>0)
       oai_nfapi_dl_tti_req(DL_req);
 
-  } 
-  
+  }
+  stop_meas(&gNB->schedule_response_stats);
 }
diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c
index 3f4c2f71fb24b063ad5a0e6e834bf33a6e3c0103..4d3174007a62d7895fbe92f32ceb4bc6c1ed6c34 100644
--- a/openair1/SCHED_NR/nr_ru_procedures.c
+++ b/openair1/SCHED_NR/nr_ru_procedures.c
@@ -155,7 +155,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru,int frame_tx,int tti_tx) {
   int aa   = 0;//physical antenna number
   int ret  = 0;
   int ofdm_mask_full   = (1<<(ru->nb_tx*2))-1;
-  int txdataF_offset   = ((tti_tx%2)*fp->samples_per_slot_wCP);
+  int txdataF_offset   = (tti_tx*fp->samples_per_slot_wCP);
 
   if (nr_slot_select(cfg,frame_tx,slot) == NR_UPLINK_SLOT) return;
   for (aa=0; aa<ru->nb_tx; aa++) memset(ru->common.txdataF[aa],0,fp->samples_per_slot_wCP*sizeof(int32_t));
@@ -300,7 +300,7 @@ static void *nr_feptx_thread(void *param) {
     ofdm_mask_full   = (1<<(ru->nb_tx*2))-1;
 
     if(ru->num_gNB != 0){
-      txdataF_offset = ((slot%2)*fp->samples_per_slot_wCP);
+      txdataF_offset = (slot*fp->samples_per_slot_wCP);
       ////////////precoding////////////
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC+feptx->index+1 , 1);
       
@@ -464,7 +464,7 @@ void nr_feptx_prec(RU_t *ru,int frame_tx,int tti_tx) {
   int32_t ***bw;
   int i=0;
   int slot_tx = tti_tx;
-  int txdataF_offset   = ((tti_tx%2)*fp->samples_per_slot_wCP);
+  int txdataF_offset   = (tti_tx*fp->samples_per_slot_wCP);
 
   start_meas(&ru->precoding_stats);
   AssertFatal(ru->nb_log_antennas > 0,"ru->nb_log_antennas is 0!\n");
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index 023f57d81a42dbe6bf73bde99a45024d5715fcf0..674f3d224ec68ff24eb1e409df6b0dedff930bfa 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -69,7 +69,7 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame,int slot,nfapi_nr_
   int **txdataF = gNB->common_vars.txdataF;
   uint8_t ssb_index, n_hf;
   uint16_t ssb_start_symbol;
-  int txdataF_offset = (slot%2)*fp->samples_per_slot_wCP;
+  int txdataF_offset = slot*fp->samples_per_slot_wCP;
   uint16_t slots_per_hf = (fp->slots_per_frame)>>1;
 
   if (slot<slots_per_hf)
@@ -86,8 +86,8 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame,int slot,nfapi_nr_
   nr_set_ssb_first_subcarrier(cfg, fp);  // setting the first subcarrier
 
   LOG_D(PHY,"SS TX: frame %d, slot %d, start_symbol %d\n",frame,slot, ssb_start_symbol);
-  nr_generate_pss(gNB->d_pss, &txdataF[0][txdataF_offset], AMP, ssb_start_symbol, cfg, fp);
-  nr_generate_sss(gNB->d_sss, &txdataF[0][txdataF_offset], AMP, ssb_start_symbol, cfg, fp);
+  nr_generate_pss(&txdataF[0][txdataF_offset], AMP, ssb_start_symbol, cfg, fp);
+  nr_generate_sss(&txdataF[0][txdataF_offset], AMP, ssb_start_symbol, cfg, fp);
 
   if (cfg->carrier_config.num_tx_ant.value <= 4)
     nr_generate_pbch_dmrs(gNB->nr_gold_pbch_dmrs[n_hf][ssb_index&7],&txdataF[0][txdataF_offset], AMP, ssb_start_symbol, cfg, fp);
@@ -109,8 +109,7 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame,int slot,nfapi_nr_
       gNB->common_vars.beam_id[0][slot*fp->symbols_per_slot+j] = cfg->ssb_table.ssb_beam_id_list[ssb_index].beam_id.value;
   }
 
-  nr_generate_pbch(&gNB->pbch,
-                   &ssb_pdu,
+  nr_generate_pbch(&ssb_pdu,
                    gNB->nr_pbch_interleaver,
                    &txdataF[0][txdataF_offset],
                    AMP,
@@ -123,12 +122,13 @@ void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx,
                            int frame,
                            int slot,
                            int do_meas) {
+
   int aa;
   PHY_VARS_gNB *gNB = msgTx->gNB;
   NR_DL_FRAME_PARMS *fp=&gNB->frame_parms;
   nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config;
   int offset = gNB->CC_id;
-  int txdataF_offset = (slot%2)*fp->samples_per_slot_wCP;
+  int txdataF_offset = slot*fp->samples_per_slot_wCP;
 
   if ((cfg->cell_config.frame_duplex_type.value == TDD) &&
       (nr_slot_select(cfg,frame,slot) == NR_UPLINK_SLOT)) return;
@@ -162,7 +162,7 @@ void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx,
   
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_PDCCH_TX,1);
 
-    nr_generate_dci_top(gNB,
+    nr_generate_dci_top(
 			num_dl_dci > 0 ? &msgTx->pdcch_pdu : NULL,
 			num_ul_dci > 0 ? &msgTx->ul_pdcch_pdu.pdcch_pdu : NULL,
 			gNB->nr_gold_pdcch_dmrs[slot],
@@ -199,6 +199,8 @@ void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx,
   }
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_TX+offset,0);
+  //pthread_mutex_unlock(&mutextest);
+
 }
 
 void nr_postDecode(PHY_VARS_gNB *gNB, notifiedFIFO_elt_t *req) {
diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
index 228e5ce9b3de60793afb1f3c1a39e3444097f700..4f4757ec5a43f6bb27822930a165f27866cd6e16 100644
--- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
@@ -430,6 +430,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
         }
       }
 
+
       //Clear the fields when all the config pdu are done
       if (pdu_done == ul_config->number_pdus) {
         if (scheduled_response->tx_request)
@@ -440,6 +441,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
         LOG_D(PHY, "%d.%d clear ul_config %p\n", scheduled_response->frame, slot, ul_config);
         memset(ul_config->ul_config_list, 0, sizeof(ul_config->ul_config_list));
       }
+
       pthread_mutex_unlock(&ul_config->mutex_ul_config);
     }
   }
diff --git a/openair1/SCHED_NR_UE/harq_nr.c b/openair1/SCHED_NR_UE/harq_nr.c
index 5b651319347a74f407c3f4538e38059319e52e5c..4d92509d48e4985d31793b1eaf392c4a056d5742 100644
--- a/openair1/SCHED_NR_UE/harq_nr.c
+++ b/openair1/SCHED_NR_UE/harq_nr.c
@@ -349,7 +349,7 @@ void downlink_harq_process(NR_DL_UE_HARQ_t *dl_harq, int harq_pid, int ndi, int
         dl_harq->DCINdi = ndi;
         break;
       case 1:
-        dl_harq->round = 2;
+        dl_harq->round = 3;
         dl_harq->status = ACTIVE;
         dl_harq->first_rx = 0;
         if (dl_harq->DCINdi != ndi) {
@@ -373,7 +373,7 @@ void downlink_harq_process(NR_DL_UE_HARQ_t *dl_harq, int harq_pid, int ndi, int
           dl_harq->status = SCH_IDLE;
         break;
       case 3:
-        dl_harq->round = 3;
+        dl_harq->round = 2;
         dl_harq->status = ACTIVE;
         dl_harq->first_rx = 0;
         if (dl_harq->DCINdi != ndi) {
diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
index 02e0467c68173014722e106ee710351f32529e3c..aaa8e441231b4de7724e5f14ee78dc400d0333db 100644
--- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
@@ -76,8 +76,6 @@ fifo_dump_emos_UE emos_dump_UE;
 
 char nr_mode_string[NUM_UE_MODE][20] = {"NOT SYNCHED","PRACH","RAR","RA_WAIT_CR", "PUSCH", "RESYNCH"};
 
-const uint8_t nr_rv_round_map_ue[4] = {0, 2, 1, 3};
-
 #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) || defined(OAI_ADRV9371_ZC706)
 extern uint64_t downlink_frequency[MAX_NUM_CCs][4];
 #endif
diff --git a/openair1/SIMULATION/NR_PHY/dlschsim.c b/openair1/SIMULATION/NR_PHY/dlschsim.c
index ff07422c6b7041d8cd90f571f63793966c634d05..f566b93d9c31c138eb4351aabac30309f1ce60ed 100644
--- a/openair1/SIMULATION/NR_PHY/dlschsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlschsim.c
@@ -59,8 +59,7 @@ double cpuf;
 //uint8_t nfapi_mode = 0;
 uint16_t NB_UE_INST = 1;
 
-uint8_t const nr_rv_round_map[4] = {0, 2, 1, 3};
-uint8_t const nr_rv_round_map_ue[4] = {0, 2, 1, 3};
+uint8_t const nr_rv_round_map[4] = {0, 2, 3, 1};
 
 // needed for some functions
 PHY_VARS_NR_UE *PHY_vars_UE_g[1][1] = { { NULL } };
@@ -119,7 +118,7 @@ int main(int argc, char **argv)
         double DS_TDL = .03;
 	cpuf = get_cpu_freq_GHz();
 	char gNBthreads[128]="n";
-	
+
 	if (load_configmodule(argc, argv, CONFIG_ENABLECMDLINEONLY) == 0) {
 		exit_fun("[NR_DLSCHSIM] Error, configuration module init failed\n");
 	}
@@ -532,12 +531,12 @@ int main(int argc, char **argv)
 
 				//if (i<16)
 				//   printf("encoder output f[%d] = %d\n",i,dlsch->harq_processes[0]->f[i]);
-				
+
 				if (output[i] == 0)
 					modulated_input[i] = 1.0;        ///sqrt(2);  //QPSK
 				else
 					modulated_input[i] = -1.0;        ///sqrt(2);
-				
+
 				//if (i<16) printf("modulated_input[%d] = %d\n",i,modulated_input[i]);
 				//SNR =10;
 				SNR_lin = pow(10, SNR / 10.0);
diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c
index e74885217090f3b47d7d206ba02dc8b4fdf49a5c..46909608198e64c43ae70b1f25e2673472970791 100644
--- a/openair1/SIMULATION/NR_PHY/dlsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlsim.c
@@ -82,6 +82,7 @@ RAN_CONTEXT_t RC;
 int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
 
 double cpuf;
+char *uecap_file;
 
 uint16_t sf_ahead=4 ;
 uint16_t sl_ahead=0;
@@ -983,18 +984,21 @@ int main(int argc, char **argv)
 
   gNB->threadPool = (tpool_t*)malloc(sizeof(tpool_t));
   initTpool(gNBthreads, gNB->threadPool, true);
-  gNB->resp_L1_tx = (notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
-  initNotifiedFIFO(gNB->resp_L1_tx);
+  gNB->L1_tx_free = (notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
+  gNB->L1_tx_filled = (notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
+  gNB->L1_tx_out = (notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
+  initNotifiedFIFO(gNB->L1_tx_free);
+  initNotifiedFIFO(gNB->L1_tx_filled);
+  initNotifiedFIFO(gNB->L1_tx_out);
   // we create 2 threads for L1 tx processing
-  notifiedFIFO_elt_t *msgL1Tx = newNotifiedFIFO_elt(sizeof(processingData_L1tx_t),0,gNB->resp_L1_tx,processSlotTX);
+  notifiedFIFO_elt_t *msgL1Tx = newNotifiedFIFO_elt(sizeof(processingData_L1tx_t),0,gNB->L1_tx_free,processSlotTX);
   processingData_L1tx_t *msgDataTx = (processingData_L1tx_t *)NotifiedFifoData(msgL1Tx);
   init_DLSCH_struct(gNB, msgDataTx);
   msgDataTx->slot = slot;
   msgDataTx->frame = frame;
   memset(msgDataTx->ssb, 0, 64*sizeof(NR_gNB_SSB_t));
   reset_meas(&msgDataTx->phy_proc_tx);
-  gNB->phy_proc_tx_0 = &msgDataTx->phy_proc_tx;
-  pushTpool(gNB->threadPool,msgL1Tx);
+  gNB->phy_proc_tx[0] = &msgDataTx->phy_proc_tx;
 
   for (SNR = snr0; SNR < snr1; SNR += .2) {
 
@@ -1073,6 +1077,7 @@ int main(int argc, char **argv)
         Sched_INFO.UL_tti_req    = gNB_mac->UL_tti_req_ahead[slot];
         Sched_INFO.UL_dci_req  = NULL;
         Sched_INFO.TX_req    = &gNB_mac->TX_req[0];
+        pushNotifiedFIFO(gNB->L1_tx_free,msgL1Tx);
         nr_schedule_response(&Sched_INFO);
 
         /* PTRS values for DLSIM calculations   */
@@ -1099,7 +1104,7 @@ int main(int argc, char **argv)
         else
           phy_procedures_gNB_TX(msgDataTx,frame,slot,1);
             
-        int txdataF_offset = (slot%2) * frame_parms->samples_per_slot_wCP;
+        int txdataF_offset = slot * frame_parms->samples_per_slot_wCP;
         
         if (n_trials==1) {
           LOG_M("txsigF0.m","txsF0=", &gNB->common_vars.txdataF[0][txdataF_offset+2*frame_parms->ofdm_symbol_size],frame_parms->ofdm_symbol_size,1,1);
@@ -1306,10 +1311,10 @@ int main(int argc, char **argv)
     printf("\n");
 
     if (print_perf==1) {
-      printf("\ngNB TX function statistics (per %d us slot, NPRB %d, mcs %d, TBS %d)\n",
+      printf("\ngNB TX function statistics (per %d us slot, NPRB %d, mcs %d, block %d)\n",
 	     1000>>*scc->ssbSubcarrierSpacing, g_rbSize, g_mcsIndex,
 	     msgDataTx->dlsch[0][0]->harq_process.pdsch_pdu.pdsch_pdu_rel15.TBSize[0]<<3);
-      printDistribution(gNB->phy_proc_tx_0,table_tx,"PHY proc tx");
+      printDistribution(gNB->phy_proc_tx[0],table_tx,"PHY proc tx");
       printStatIndent2(&gNB->dlsch_encoding_stats,"DLSCH encoding time");
       printStatIndent3(&gNB->dlsch_segmentation_stats,"DLSCH segmentation time");
       printStatIndent3(&gNB->tinput,"DLSCH LDPC input processing time");
diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c
index 2413a86912fa10ca9dd8b02a1644b19e7cc2c740..8baaf624162b8a660c26c531e32b013cbe58b0f4 100644
--- a/openair1/SIMULATION/NR_PHY/pbchsim.c
+++ b/openair1/SIMULATION/NR_PHY/pbchsim.c
@@ -63,8 +63,7 @@ uint16_t NB_UE_INST = 1;
 // needed for some functions
 openair0_config_t openair0_cfg[MAX_CARDS];
 
-uint8_t const nr_rv_round_map[4] = {0, 2, 1, 3};
-uint8_t const nr_rv_round_map_ue[4] = {0, 2, 1, 3};
+uint8_t const nr_rv_round_map[4] = {0, 2, 3, 1};
 
 uint64_t get_softmodem_optmask(void) {return 0;}
 softmodem_params_t *get_softmodem_params(void) {return 0;}
diff --git a/openair1/SIMULATION/NR_PHY/prachsim.c b/openair1/SIMULATION/NR_PHY/prachsim.c
index 6b9512a38b7e745bca6eb34f9ac5997ba32cf236..fb0f37d7ac6665e3a1ab6d39f9fbf1bdb72b1b53 100644
--- a/openair1/SIMULATION/NR_PHY/prachsim.c
+++ b/openair1/SIMULATION/NR_PHY/prachsim.c
@@ -60,6 +60,7 @@
 LCHAN_DESC DCCH_LCHAN_DESC,DTCH_DL_LCHAN_DESC,DTCH_UL_LCHAN_DESC;
 rlc_info_t Rlc_info_um,Rlc_info_am_config;
 
+char *uecap_file;
 PHY_VARS_gNB *gNB;
 PHY_VARS_NR_UE *UE;
 RAN_CONTEXT_t RC;
diff --git a/openair1/SIMULATION/NR_PHY/pucchsim.c b/openair1/SIMULATION/NR_PHY/pucchsim.c
index 213924e5fd7425509d75ebacf387afb594ea32ef..d07469a4b79e87cc63f6c38c05ceaab3fdc953af 100644
--- a/openair1/SIMULATION/NR_PHY/pucchsim.c
+++ b/openair1/SIMULATION/NR_PHY/pucchsim.c
@@ -56,8 +56,7 @@ int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
 double cpuf;
 //uint8_t nfapi_mode = 0;
 uint16_t NB_UE_INST = 1;
-uint8_t const nr_rv_round_map[4] = {0, 2, 1, 3};
-uint8_t const nr_rv_round_map_ue[4] = {0, 2, 1, 3};
+uint8_t const nr_rv_round_map[4] = {0, 2, 3, 1};
 
 // needed for some functions
 PHY_VARS_NR_UE * PHY_vars_UE_g[1][1]={{NULL}};
diff --git a/openair1/SIMULATION/NR_PHY/ulschsim.c b/openair1/SIMULATION/NR_PHY/ulschsim.c
index 94aea36a670ce960ffcc663080cb48473813b31d..931a63a77e3aae6d3f74a04de84c4ce03c2bb31a 100644
--- a/openair1/SIMULATION/NR_PHY/ulschsim.c
+++ b/openair1/SIMULATION/NR_PHY/ulschsim.c
@@ -56,8 +56,7 @@ int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
 
 void init_downlink_harq_status(NR_DL_UE_HARQ_t *dl_harq) {}
 
-uint8_t const nr_rv_round_map[4] = {0, 2, 1, 3};
-uint8_t const nr_rv_round_map_ue[4] = {0, 2, 1, 3};
+uint8_t const nr_rv_round_map[4] = {0, 2, 3, 1};
 
 double cpuf;
 //uint8_t nfapi_mode = 0;
diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c
index 701708c0ef73ad2afd920569e783c1dbca35c1e0..c71f52c41a65b148ebc8dbf49a6e8440b2b117b4 100644
--- a/openair1/SIMULATION/NR_PHY/ulsim.c
+++ b/openair1/SIMULATION/NR_PHY/ulsim.c
@@ -74,6 +74,7 @@ rlc_info_t Rlc_info_um,Rlc_info_am_config;
 PHY_VARS_gNB *gNB;
 PHY_VARS_NR_UE *UE;
 RAN_CONTEXT_t RC;
+char *uecap_file;
 int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
 
 uint16_t sf_ahead=4 ;
@@ -243,7 +244,6 @@ nrUE_params_t *get_nrUE_params(void) {
 // needed for some functions
 uint16_t n_rnti = 0x1234;
 openair0_config_t openair0_cfg[MAX_CARDS];
-//const uint8_t nr_rv_round_map[4] = {0, 2, 1, 3}; 
 
 channel_desc_t *UE2gNB[NUMBER_OF_UE_MAX][NUMBER_OF_gNB_MAX];
 
@@ -669,13 +669,16 @@ int main(int argc, char **argv)
   char tp_param[] = "n";
   initTpool(tp_param, gNB->threadPool, false);
   initNotifiedFIFO(gNB->respDecode);
-  gNB->resp_L1_tx = (notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
-  initNotifiedFIFO(gNB->resp_L1_tx);
-  notifiedFIFO_elt_t *msgL1Tx = newNotifiedFIFO_elt(sizeof(processingData_L1tx_t),0,gNB->resp_L1_tx,NULL);
+  gNB->L1_tx_free = (notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
+  gNB->L1_tx_filled = (notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
+  gNB->L1_tx_out = (notifiedFIFO_t*) malloc(sizeof(notifiedFIFO_t));
+  initNotifiedFIFO(gNB->L1_tx_free);
+  initNotifiedFIFO(gNB->L1_tx_filled);
+  initNotifiedFIFO(gNB->L1_tx_out);
+  notifiedFIFO_elt_t *msgL1Tx = newNotifiedFIFO_elt(sizeof(processingData_L1tx_t),0,gNB->L1_tx_free,NULL);
   processingData_L1tx_t *msgDataTx = (processingData_L1tx_t *)NotifiedFifoData(msgL1Tx);
   msgDataTx->slot = -1;
-  gNB->phy_proc_tx_0 = &msgDataTx->phy_proc_tx;
-  pushNotifiedFIFO(gNB->resp_L1_tx,msgL1Tx); // to unblock the process in the beginning
+  gNB->phy_proc_tx[0] = &msgDataTx->phy_proc_tx;
   //gNB_config = &gNB->gNB_config;
 
   //memset((void *)&gNB->UL_INFO,0,sizeof(gNB->UL_INFO));
@@ -1117,6 +1120,7 @@ int main(int argc, char **argv)
       }
 
       // prepare ULSCH/PUSCH reception
+      pushNotifiedFIFO(gNB->L1_tx_free,msgL1Tx); // to unblock the process in the beginning
       nr_schedule_response(Sched_INFO);
 
       // --------- setting parameters for UE --------
diff --git a/openair2/GNB_APP/L1_nr_paramdef.h b/openair2/GNB_APP/L1_nr_paramdef.h
index 0306713845b9f302a42a44b5bef53ae61b8030ed..90cd9aae2900054567423a3bcadc822b7c6eedab 100644
--- a/openair2/GNB_APP/L1_nr_paramdef.h
+++ b/openair2/GNB_APP/L1_nr_paramdef.h
@@ -46,7 +46,7 @@
 #define CONFIG_STRING_L1_LOCAL_N_PORTD                     "local_n_portd"
 #define CONFIG_STRING_L1_REMOTE_N_PORTD                    "remote_n_portd"
 #define CONFIG_STRING_L1_TRANSPORT_N_PREFERENCE            "tr_n_preference"
-#define CONFIG_STRING_L1_PUSCH_PROC_THREADS                "pusch_proc_threads"
+#define CONFIG_STRING_L1_THREAD_POOL_SIZE                  "thread_pool_size"
 #define CONFIG_STRING_L1_OFDM_OFFSET_DIVISOR               "ofdm_offset_divisor"
 #define CONFIG_STRING_L1_PUCCH0_DTX_THRESHOLD              "pucch0_dtx_threshold"
 #define CONFIG_STRING_L1_PRACH_DTX_THRESHOLD               "prach_dtx_threshold"
@@ -65,8 +65,8 @@
 {CONFIG_STRING_L1_REMOTE_N_PORTC,                    NULL,      0,         uptr:NULL,           defintval:50030,           TYPE_UINT,     0},         \
 {CONFIG_STRING_L1_LOCAL_N_PORTD,                     NULL,      0,         uptr:NULL,           defintval:50031,           TYPE_UINT,     0},         \
 {CONFIG_STRING_L1_REMOTE_N_PORTD,                    NULL,      0,         uptr:NULL,           defintval:50031,           TYPE_UINT,     0},         \
-{CONFIG_STRING_L1_PUSCH_PROC_THREADS,                NULL,      0,         uptr:NULL,           defintval:3,               TYPE_UINT,     0}, \
-{CONFIG_STRING_L1_OFDM_OFFSET_DIVISOR,               NULL,      0,         uptr:NULL,           defuintval:8,              TYPE_UINT,     0}, \
+{CONFIG_STRING_L1_THREAD_POOL_SIZE, "Maximum number of CPU cores for L1 processing (either max HW CPU cores or this value is used)",      0,         uptr:NULL,           defintval:4,               TYPE_UINT,     0},         \
+{CONFIG_STRING_L1_OFDM_OFFSET_DIVISOR,               NULL,      0,         uptr:NULL,           defuintval:8,              TYPE_UINT,     0},         \
 {CONFIG_STRING_L1_PUCCH0_DTX_THRESHOLD,              NULL,      0,         uptr:NULL,           defintval:100,             TYPE_UINT,     0},         \
 {CONFIG_STRING_L1_PRACH_DTX_THRESHOLD,               NULL,      0,         uptr:NULL,           defintval:150,             TYPE_UINT,     0},         \
 {CONFIG_STRING_L1_PUSCH_DTX_THRESHOLD,               NULL,      0,         uptr:NULL,           defintval:50,              TYPE_UINT,     0}          \
@@ -80,7 +80,7 @@
 #define L1_REMOTE_N_PORTC_IDX                              6
 #define L1_LOCAL_N_PORTD_IDX                               7
 #define L1_REMOTE_N_PORTD_IDX                              8
-#define L1_PUSCH_PROC_THREADS                              9
+#define L1_THREAD_POOL_SIZE                                9
 #define L1_OFDM_OFFSET_DIVISOR                             10
 #define L1_PUCCH0_DTX_THRESHOLD                            11
 #define L1_PRACH_DTX_THRESHOLD                             12
diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c
index 27932676d12195fc53e7774ae0c27a8c74996818..db9614b13f886dd3ad3456d8fe449163b61e20c8 100644
--- a/openair2/GNB_APP/gnb_config.c
+++ b/openair2/GNB_APP/gnb_config.c
@@ -653,7 +653,7 @@ void RCconfig_NR_L1(void) {
 	      RC.gNB[j]->Mod_id  = j;
       }
 
-      RC.gNB[j]->pusch_proc_threads = *(L1_ParamList.paramarray[j][L1_PUSCH_PROC_THREADS].uptr);
+      RC.gNB[j]->thread_pool_size   = *(L1_ParamList.paramarray[j][L1_THREAD_POOL_SIZE].uptr);
       RC.gNB[j]->ofdm_offset_divisor = *(L1_ParamList.paramarray[j][L1_OFDM_OFFSET_DIVISOR].uptr);
       RC.gNB[j]->pucch0_thres       = *(L1_ParamList.paramarray[j][L1_PUCCH0_DTX_THRESHOLD].uptr);
       RC.gNB[j]->prach_thres        = *(L1_ParamList.paramarray[j][L1_PRACH_DTX_THRESHOLD].uptr);
@@ -1512,7 +1512,7 @@ void NRRCConfig(void) {
   config_get( GNBSParams,sizeof(GNBSParams)/sizeof(paramdef_t),NULL); 
   RC.nb_nr_inst = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt;
 
-	// Get num MACRLC instances
+  // Get num MACRLC instances
   config_getlist( &MACRLCParamList,NULL,0, NULL);
   RC.nb_nr_macrlc_inst  = MACRLCParamList.numelt;
   // Get num L1 instances
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
index 87b077070617aa384fc2395258fefc30dbce6261..44bd8f0ce35d5ba01e16771505c004e57aba1021 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
@@ -75,6 +75,8 @@ void fill_ul_config(fapi_nr_ul_config_request_t *ul_config, frame_t frame_tx, in
     memset(ul_config->ul_config_list, 0, sizeof(ul_config->ul_config_list)); 
   }
   ul_config->ul_config_list[ul_config->number_pdus].pdu_type = pdu_type;
+  //ul_config->slot = slot_tx;
+  //ul_config->sfn = frame_tx;
   ul_config->slot = slot_tx;
   ul_config->sfn = frame_tx;
   ul_config->number_pdus++;
@@ -1104,6 +1106,8 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
         uint8_t ulsch_input_buffer_array[NFAPI_MAX_NUM_UL_PDU][MAX_ULSCH_PAYLOAD_BYTES];
         nr_scheduled_response_t scheduled_response;
         fapi_nr_tx_request_t tx_req;
+        //tx_req.slot = slot_tx;
+        //tx_req.sfn = frame_tx;
         tx_req.slot = slot_tx;
         tx_req.sfn = frame_tx;
         tx_req.number_of_pdus = 0;
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
index 2463f1108b68858ab713b529587f02eed337c885..70843ef7632aa70a6d9948e9aa3ffb1794411900 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
@@ -55,6 +55,7 @@
 #include <errno.h>
 #include <string.h>
 
+const uint8_t nr_rv_round_map[4] = { 0, 2, 3, 1 };
 uint16_t nr_pdcch_order_table[6] = { 31, 31, 511, 2047, 2047, 8191 };
 
 uint8_t vnf_first_sched_entry = 1;
@@ -272,6 +273,7 @@ bool is_xlsch_in_slot(uint64_t bitmap, sub_frame_t slot) {
 void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
                                frame_t frame,
                                sub_frame_t slot){
+  //pthread_mutex_lock(&mutextest);
 
   protocol_ctxt_t   ctxt={0};
   PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, NOT_A_RNTI, frame, slot,module_idP);
@@ -397,7 +399,9 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
   nr_schedule_ulsch(module_idP, frame, slot);
 
   // This schedules the DCI for Downlink and PDSCH
-  nr_schedule_ue_spec(module_idP, frame, slot);
+  start_meas(&gNB->schedule_dlsch);
+  nr_schedule_ue_spec(module_idP, frame, slot); 
+  stop_meas(&gNB->schedule_dlsch);
 
   nr_schedule_pucch(module_idP, frame, slot);
 
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
index ea298494c438e73c05deb9332c2294df49a04c2e..207c4d1ef103d73987e127f6fcc06ff87cf58a85 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
@@ -409,7 +409,7 @@ int get_mcs_from_bler(module_id_t mod_id, int CC_id, frame_t frame, sub_frame_t
   /*const int dret3x = stats->dlsch_rounds[3] - bler_stats->dlsch_rounds[3];
   if (dret3x > 0) {
      if there is a third retransmission, decrease MCS for stabilization and
-     restart averaging window to stabilize transmission 
+     restart averaging window to stabilize transmission
     bler_stats->last_frame_slot = now;
     bler_stats->mcs = max(9, bler_stats->mcs - 1);
     memcpy(bler_stats->dlsch_rounds, stats->dlsch_rounds, sizeof(stats->dlsch_rounds));
@@ -431,7 +431,7 @@ int get_mcs_from_bler(module_id_t mod_id, int CC_id, frame_t frame, sub_frame_t
   int new_mcs = old_mcs;
   // TODO put back this condition when relevant
   /* first ensure that number of 2nd retx is below threshold. If this is the
-   * case, use 1st retx to adjust faster 
+   * case, use 1st retx to adjust faster
   if (bler_stats->rd2_bler > nrmac->dl_rd2_bler_threshold && old_mcs > 6) {
     new_mcs -= 2;
   } else if (bler_stats->rd2_bler < nrmac->dl_rd2_bler_threshold) {*/
@@ -486,7 +486,8 @@ void nr_store_dlsch_buffer(module_id_t module_id,
                                                         DL_SCH_LCID_DCCH,
                                                         0,
                                                         0);
-    if ((sched_ctrl->lcid_mask&(1<<4)) > 0)  
+    if ((sched_ctrl->lcid_mask&(1<<4)) > 0) {  
+       start_meas(&RC.nrmac[module_id]->rlc_status_ind);
        sched_ctrl->rlc_status[DL_SCH_LCID_DTCH] = mac_rlc_status_ind(module_id,
                                                                     rnti,
                                                                     module_id,
@@ -497,16 +498,17 @@ void nr_store_dlsch_buffer(module_id_t module_id,
                                                                     DL_SCH_LCID_DTCH,
                                                                     0,
                                                                     0);
-
-     if(sched_ctrl->rlc_status[DL_SCH_LCID_DCCH].bytes_in_buffer > 0){
-       lcid = DL_SCH_LCID_DCCH;       
-     } 
-     else if (sched_ctrl->rlc_status[DL_SCH_LCID_DCCH1].bytes_in_buffer > 0)
-     {
-       lcid = DL_SCH_LCID_DCCH1;       
-     }else{
-       lcid = DL_SCH_LCID_DTCH;       
-     }
+       stop_meas(&RC.nrmac[module_id]->rlc_status_ind);
+    }
+    if(sched_ctrl->rlc_status[DL_SCH_LCID_DCCH].bytes_in_buffer > 0){
+      lcid = DL_SCH_LCID_DCCH;       
+    } 
+    else if (sched_ctrl->rlc_status[DL_SCH_LCID_DCCH1].bytes_in_buffer > 0)
+    {
+      lcid = DL_SCH_LCID_DCCH1;       
+    }else{
+      lcid = DL_SCH_LCID_DTCH;       
+    }
                                                       
     sched_ctrl->num_total_bytes += sched_ctrl->rlc_status[lcid].bytes_in_buffer;
     //later multiplex here. Just select DCCH/SRB before DTCH/DRB
@@ -1228,6 +1230,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
       // const int lcid = DL_SCH_LCID_DTCH;
       const int lcid = sched_ctrl->lcid_to_schedule;
       int dlsch_total_bytes = 0;
+      start_meas(&gNB_mac->rlc_data_req);
       if (sched_ctrl->num_total_bytes > 0) {
         tbs_size_t len = 0;
         while (size > 3) {
@@ -1241,6 +1244,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
           /* limit requested number of bytes to what preprocessor specified, or
            * such that TBS is full */
           const rlc_buffer_occupancy_t ndata = min(sched_ctrl->rlc_status[lcid].bytes_in_buffer, size);
+
           len = mac_rlc_data_req(module_id,
                                  rnti,
                                  module_id,
@@ -1301,6 +1305,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
         buf += size;
         dlsch_total_bytes += size;
       }
+      stop_meas(&gNB_mac->rlc_data_req);
 
       // Add padding header and zero rest out if there is space left
       if (size > 0) {
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
index c0107c5fc6af04f08c6265cfaf66a419bd21138c..9ec126d42908e4f126f0d3233267ee4299fa5d75 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
@@ -53,7 +53,6 @@
 //#define UL_HARQ_PRINT
 extern RAN_CONTEXT_t RC;
 
-const uint8_t nr_rv_round_map[4] = {0, 2, 3, 1};
 //#define ENABLE_MAC_PAYLOAD_DEBUG 1
 
 //uint8_t mac_pdu[MAX_NR_DLSCH_PAYLOAD_BYTES];
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
index 1a0ccaf072e29f7065f46ac44dc26aa62357843b..2654875ef825b735806fc2ec6602f2a858452506 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
@@ -1946,7 +1946,7 @@ int add_new_nr_ue(module_id_t mod_idP, rnti_t rntiP, NR_CellGroupConfig_t *CellG
     add_nr_list(&UE_info->list, UE_id);
     memset(&UE_info->mac_stats[UE_id], 0, sizeof(NR_mac_stats_t));
     set_Y(UE_info->Y[UE_id], rntiP);
-    if (CellGroup && CellGroup->spCellConfig && CellGroup->spCellConfig && CellGroup->spCellConfig->spCellConfigDedicated)
+    if (CellGroup && CellGroup->spCellConfig && CellGroup->spCellConfig->spCellConfigDedicated)
       compute_csi_bitlen (CellGroup->spCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup, UE_info, UE_id, mod_idP);
     NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
     memset(sched_ctrl, 0, sizeof(*sched_ctrl));
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
index ca641ed1baae62a365717ec2a73fdc56cd6249c0..efb903f6976dabd43dfe675d3be40cfb6f5b908f 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
@@ -1117,7 +1117,7 @@ void handle_nr_uci_pucch_0_1(module_id_t mod_id,
 
   // tpc (power control) only if we received AckNack or positive SR. For a
   // negative SR, the UE won't have sent anything, and the SNR is not valid
-  if (((uci_01->pduBitmap >> 1) & 0x1) || sched_ctrl->SR) {
+  if (((uci_01->pduBitmap >> 1) & 0x1) ) {
     if ((uci_01->harq) && (uci_01->harq->harq_confidence_level==0)) sched_ctrl->tpc1 = nr_get_tpc(RC.nrmac[mod_id]->pucch_target_snrx10, uci_01->ul_cqi, 30);
     else                                        sched_ctrl->tpc1 = 3;
     sched_ctrl->pucch_snrx10 = uci_01->ul_cqi * 5 - 640;
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
index 9a6e0b225235b329b69a96e663843021224a2326..9b415a437a447513d63d890a00008e8e6789ecd1 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
@@ -910,13 +910,22 @@ bool nr_UE_is_to_be_scheduled(module_id_t mod_id, int CC_id, int UE_id, frame_t
   const NR_UE_sched_ctrl_t *sched_ctrl = &nrmac->UE_info.UE_sched_ctrl[UE_id];
   const int last_ul_sched = sched_ctrl->last_ul_frame * n + sched_ctrl->last_ul_slot;
 
+  const NR_TDD_UL_DL_Pattern_t *tdd =
+      scc->tdd_UL_DL_ConfigurationCommon ? &scc->tdd_UL_DL_ConfigurationCommon->pattern1 : NULL;
+  int num_slots_per_period;
+  int tdd_period_len[8] = {500,625,1000,1250,2000,2500,5000,10000};
+  if (tdd)
+    num_slots_per_period = n*tdd_period_len[tdd->dl_UL_TransmissionPeriodicity]/10000;
+  else
+    num_slots_per_period = n;
+
   const int diff = (now - last_ul_sched + 1024 * n) % (1024 * n);
   /* UE is to be scheduled if
    * (1) we think the UE has more bytes awaiting than what we scheduled
    * (2) there is a scheduling request
    * (3) or we did not schedule it in more than 10 frames */
   const bool has_data = sched_ctrl->estimated_ul_buffer > sched_ctrl->sched_ul_bytes;
-  const bool high_inactivity = diff >= nrmac->ulsch_max_frame_inactivity * n;
+  const bool high_inactivity = diff >= (nrmac->ulsch_max_frame_inactivity>0 ? (nrmac->ulsch_max_frame_inactivity * n) : num_slots_per_period);
   LOG_D(NR_MAC,
         "%4d.%2d UL inactivity %d slots has_data %d SR %d\n",
         frame,
diff --git a/openair2/LAYER2/NR_MAC_gNB/main.c b/openair2/LAYER2/NR_MAC_gNB/main.c
index 5e5de9a8e1c7beba72ee83e52fe62f1a7145a09c..b9da84ead202fef5b19f1023ab1e936f31cb9671 100644
--- a/openair2/LAYER2/NR_MAC_gNB/main.c
+++ b/openair2/LAYER2/NR_MAC_gNB/main.c
@@ -128,7 +128,10 @@ void dump_mac_stats(gNB_MAC_INST *gNB, char *output, int strlen, bool reset_rsrp
       }
     }
   }
-  print_meas_log(&gNB->eNB_scheduler, "DL & UL scheduling timing stats", NULL, NULL, output+stroff);
+  print_meas(&gNB->eNB_scheduler, "DL & UL scheduling timing stats", NULL, NULL);
+  print_meas(&gNB->schedule_dlsch,"dlsch scheduler",NULL,NULL);
+  print_meas(&gNB->rlc_data_req, "rlc_data_req",NULL,NULL);
+  print_meas(&gNB->rlc_status_ind,"rlc_status_ind",NULL,NULL);
 }
 
 
diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
index 639775badce5556ce8023b86921f35d6c8ef9cd7..ac0ad4d04fa39c39a31e9c87f01161cc6ee5cc90 100644
--- a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+++ b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
@@ -747,6 +747,10 @@ typedef struct gNB_MAC_INST_s {
   time_stats_t schedule_dlsch_preprocessor;
   /// processing time of eNB DLSCH scheduler
   time_stats_t schedule_dlsch;  // include rlc_data_req + MAC header + preprocessor
+  /// processing time of rlc_data_req
+  time_stats_t rlc_data_req;
+  /// processing time of rlc_status_ind
+  time_stats_t rlc_status_ind;
   /// processing time of eNB MCH scheduler
   time_stats_t schedule_mch;
   /// processing time of eNB ULSCH reception
diff --git a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c
index d4f4bff745ec7f9187059b1415c2eb2e229045b9..57bb411dcc943c6248a66e211715ed26aecac394 100644
--- a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c
+++ b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c
@@ -490,13 +490,11 @@ void NR_UL_indication(NR_UL_IND_t *UL_info) {
       dump_dl(sched_info);
 #endif
 
-      if (ifi->NR_Schedule_response) {
-        AssertFatal(ifi->NR_Schedule_response!=NULL,
-                    "nr_schedule_response is null (mod %d, cc %d)\n",
-                    module_id,
-                    CC_id);
-        ifi->NR_Schedule_response(sched_info);
-      }
+      AssertFatal(ifi->NR_Schedule_response!=NULL,
+                  "nr_schedule_response is null (mod %d, cc %d)\n",
+                  module_id,
+                  CC_id);
+      ifi->NR_Schedule_response(sched_info);
 
       LOG_D(NR_PHY,"NR_Schedule_response: SFN SLOT:%d %d dl_pdus:%d\n",
 	    sched_info->frame,
diff --git a/openair2/RRC/NR/nr_rrc_defs.h b/openair2/RRC/NR/nr_rrc_defs.h
index 018ae7e2dcffafd515957a1cb23066aa8a43798d..667b5ed24a1213fb57e55fbde6fa1e8fd88b9678 100644
--- a/openair2/RRC/NR/nr_rrc_defs.h
+++ b/openair2/RRC/NR/nr_rrc_defs.h
@@ -523,6 +523,8 @@ typedef struct gNB_RRC_INST_s {
   int cell_info_configured;
   pthread_mutex_t cell_info_mutex;
 
+  char *uecap_file;
+
   // security configuration (preferred algorithms)
   nr_security_configuration_t security;
 } gNB_RRC_INST;
diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c
index 099d33d2ae946716a061edd1fb3851d8b7ffbf4a..dda128f52f72545f4af6a8d7efe25d8d0c8ac704 100755
--- a/openair2/RRC/NR/rrc_gNB.c
+++ b/openair2/RRC/NR/rrc_gNB.c
@@ -202,56 +202,12 @@ static void init_NR_SI(gNB_RRC_INST *rrc, gNB_RrcConfigurationReq *configuration
   pthread_mutex_unlock(&rrc->cell_info_mutex);
 
   if (get_softmodem_params()->phy_test > 0 || get_softmodem_params()->do_ra > 0) {
-    // This is for phytest only, emulate first X2 message if uecap.raw file is present
-    FILE *fd;
-    fd = fopen("uecap.raw","r");
-
-    if (fd != NULL) {
-      char buffer[4096];
-      int msg_len=fread(buffer,1,4096,fd);
-      LOG_I(RRC,"Read in %d bytes for uecap\n",msg_len);
-      LTE_UL_DCCH_Message_t *LTE_UL_DCCH_Message;
-      asn_dec_rval_t dec_rval = uper_decode_complete( NULL,
-                                &asn_DEF_LTE_UL_DCCH_Message,
-                                (void **)&LTE_UL_DCCH_Message,
-                                (uint8_t *)buffer,
-                                msg_len);
-
-      if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) {
-        AssertFatal(1==0,"NR_UL_DCCH_MESSAGE decode error\n");
-        // free the memory
-        SEQUENCE_free( &asn_DEF_LTE_UL_DCCH_Message, LTE_UL_DCCH_Message, 1 );
-        return;
-      }
-
-      fclose(fd);
-      xer_fprint(stdout,&asn_DEF_LTE_UL_DCCH_Message, LTE_UL_DCCH_Message);
-      // recreate enough of X2 EN-DC Container
-      AssertFatal(LTE_UL_DCCH_Message->message.choice.c1.present == LTE_UL_DCCH_MessageType__c1_PR_ueCapabilityInformation,
-                  "ueCapabilityInformation not present\n");
-      NR_CG_ConfigInfo_t *CG_ConfigInfo = calloc(1,sizeof(*CG_ConfigInfo));
-      CG_ConfigInfo->criticalExtensions.present = NR_CG_ConfigInfo__criticalExtensions_PR_c1;
-      CG_ConfigInfo->criticalExtensions.choice.c1 = calloc(1,sizeof(*CG_ConfigInfo->criticalExtensions.choice.c1));
-      CG_ConfigInfo->criticalExtensions.choice.c1->present = NR_CG_ConfigInfo__criticalExtensions__c1_PR_cg_ConfigInfo;
-      CG_ConfigInfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo = calloc(1,sizeof(*CG_ConfigInfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo));
-      NR_CG_ConfigInfo_IEs_t *cg_ConfigInfo = CG_ConfigInfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo;
-      cg_ConfigInfo->ue_CapabilityInfo = calloc(1,sizeof(*cg_ConfigInfo->ue_CapabilityInfo));
-      asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_UE_CapabilityRAT_ContainerList,NULL,
-                                (void *)&LTE_UL_DCCH_Message->message.choice.c1.choice.ueCapabilityInformation.criticalExtensions.choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList,buffer,4096);
-      AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n",
-                   enc_rval.failed_type->name, enc_rval.encoded);
-      OCTET_STRING_fromBuf(cg_ConfigInfo->ue_CapabilityInfo,
-                           (const char *)buffer,
-                           (enc_rval.encoded+7)>>3);
-      parse_CG_ConfigInfo(rrc,CG_ConfigInfo,NULL);
-    } else {
-      struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_allocate_new_UE_context(rrc);
-      ue_context_p->ue_context.spCellConfig = calloc(1, sizeof(struct NR_SpCellConfig));
-      ue_context_p->ue_context.spCellConfig->spCellConfigDedicated = configuration->scd;
-      LOG_I(NR_RRC,"Adding new user (%p)\n",ue_context_p);
-      if (!NODE_IS_CU(RC.nrrrc[0]->node_type)) {
-        rrc_add_nsa_user(rrc,ue_context_p,NULL);
-      }
+    struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_allocate_new_UE_context(rrc);
+    ue_context_p->ue_context.spCellConfig = calloc(1, sizeof(struct NR_SpCellConfig));
+    ue_context_p->ue_context.spCellConfig->spCellConfigDedicated = configuration->scd;
+    LOG_I(NR_RRC,"Adding new user (%p)\n",ue_context_p);
+    if (!NODE_IS_CU(RC.nrrrc[0]->node_type)) {
+      rrc_add_nsa_user(rrc,ue_context_p,NULL);
     }
   }
 }
@@ -662,7 +618,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",
+  LOG_A(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.Srb1.Srb_info.Srb_id = 1;
@@ -754,7 +710,7 @@ rrc_gNB_generate_defaultRRCReconfiguration(
   DRB_config->pdcp_Config->moreThanOneRLC = NULL;
 
   DRB_config->pdcp_Config->t_Reordering = calloc(1, sizeof(*DRB_config->pdcp_Config->t_Reordering));
-  *DRB_config->pdcp_Config->t_Reordering = NR_PDCP_Config__t_Reordering_ms0;
+  *DRB_config->pdcp_Config->t_Reordering = NR_PDCP_Config__t_Reordering_ms100;
   DRB_config->pdcp_Config->ext1 = NULL;
 
   ASN_SEQUENCE_ADD(&(*DRB_configList)->list, DRB_config);
@@ -1392,7 +1348,7 @@ rrc_gNB_process_RRCReconfigurationComplete(
     for (int i = 0; i < DRB_configList->list.count; i++) {
       if (DRB_configList->list.array[i]) {
         drb_id = (int)DRB_configList->list.array[i]->drb_Identity;
-        LOG_I(NR_RRC, "[gNB %d] Frame  %d : Logical Channel UL-DCCH, Received NR_RRCReconfigurationComplete from UE rnti %x, reconfiguring DRB %d\n",
+        LOG_A(NR_RRC, "[gNB %d] Frame  %d : Logical Channel UL-DCCH, Received NR_RRCReconfigurationComplete from UE rnti %x, reconfiguring DRB %d\n",
             ctxt_pP->module_id,
             ctxt_pP->frame,
             ctxt_pP->rnti,
diff --git a/openair2/RRC/NR/rrc_gNB_nsa.c b/openair2/RRC/NR/rrc_gNB_nsa.c
index c3fe88610ba7e31027093985c75b7bb291de557b..536010bbc6b0c7bc3606b7859b786b2105d878e7 100644
--- a/openair2/RRC/NR/rrc_gNB_nsa.c
+++ b/openair2/RRC/NR/rrc_gNB_nsa.c
@@ -38,6 +38,7 @@
 #include "openair2/LAYER2/NR_MAC_gNB/mac_proto.h"
 #include "openair2/RRC/LTE/rrc_eNB_GTPV1U.h"
 #include "executables/softmodem-common.h"
+#include "executables/nr-softmodem.h"
 #include <openair2/RRC/NR/rrc_gNB_UE_context.h>
 #include <openair3/ocp-gtpu/gtp_itf.h>
 #include "UTIL/OSA/osa_defs.h"
@@ -143,6 +144,30 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
   unsigned char *kUPenc = NULL;
   unsigned char *kUPint = NULL;
   int i;
+
+  // In case of phy-test and do-ra mode, read UE capabilities directly from file
+  if (get_softmodem_params()->phy_test == 1 || get_softmodem_params()->do_ra == 1) {
+    NR_UE_NR_Capability_t* UE_Capability_nr = NULL;
+    char UE_NR_Capability_xer[65536];
+    FILE *f = NULL;
+    if (uecap_file)
+      f = fopen(uecap_file, "r");
+    if(f){
+      size_t size = fread(UE_NR_Capability_xer, 1, sizeof UE_NR_Capability_xer, f);
+      if (size == 0 || size == sizeof UE_NR_Capability_xer)
+        LOG_E(NR_RRC,"UE Capabilities XER file %s is too large (%ld)\n", uecap_file, size);
+      else {
+        UE_Capability_nr = CALLOC(1,sizeof(NR_UE_NR_Capability_t));
+        asn_dec_rval_t dec_rval = xer_decode(0, &asn_DEF_NR_UE_NR_Capability, (void *)&UE_Capability_nr, UE_NR_Capability_xer, size);
+        assert(dec_rval.code == RC_OK);
+        xer_fprint(stdout,&asn_DEF_NR_UE_NR_Capability,(void *)UE_Capability_nr);
+      }
+    }
+    else
+      LOG_E(NR_RRC,"Could not open UE Capabilities input file. Not handling OAI UE Capabilities.\n");
+    ue_context_p->ue_context.UE_Capability_nr = UE_Capability_nr;
+  }
+
   // NR RRCReconfiguration
   AssertFatal(rrc->Nb_ue < MAX_NR_RRC_UE_CONTEXTS,"cannot add another UE\n");
   ue_context_p->ue_context.reconfig = calloc(1,sizeof(NR_RRCReconfiguration_t));
diff --git a/openair2/RRC/NR_UE/main_ue.c b/openair2/RRC/NR_UE/main_ue.c
index 07409c6026194f3512832678d61b4f506feebbc2..5e2bc429ebb0b59c784f49e2a3c3aa4080ce85cf 100644
--- a/openair2/RRC/NR_UE/main_ue.c
+++ b/openair2/RRC/NR_UE/main_ue.c
@@ -34,8 +34,8 @@
 #include "rrc_proto.h"
 #include "common/utils/LOG/log.h"
 
-NR_UE_RRC_INST_t* nr_l3_init_ue(char* rrc_config_path){
+NR_UE_RRC_INST_t* nr_l3_init_ue(char* uecap, char* rrc_config_path){
     //LOG_I(RRC, "[MAIN] NR UE MAC initialization...\n");
 
-    return openair_rrc_top_init_ue_nr(rrc_config_path); 
+    return openair_rrc_top_init_ue_nr(uecap,rrc_config_path);
 }
diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c
index 4a04192248d3a3ded5710006e3bdb8951767589f..f910ff68d45fcfc1616ed31c92d408676baaa2ea 100644
--- a/openair2/RRC/NR_UE/rrc_UE.c
+++ b/openair2/RRC/NR_UE/rrc_UE.c
@@ -422,7 +422,7 @@ void process_nsa_message(NR_UE_RRC_INST_t *rrc, nsa_message_t nsa_message_type,
 
 }
 
-NR_UE_RRC_INST_t* openair_rrc_top_init_ue_nr(char* rrc_config_path){
+NR_UE_RRC_INST_t* openair_rrc_top_init_ue_nr(char* uecap_file, char* rrc_config_path){
   int nr_ue;
   if(NB_NR_UE_INST > 0){
     NR_UE_rrc_inst = (NR_UE_RRC_INST_t *)calloc(NB_NR_UE_INST , sizeof(NR_UE_RRC_INST_t));
@@ -496,6 +496,8 @@ NR_UE_RRC_INST_t* openair_rrc_top_init_ue_nr(char* rrc_config_path){
       RRC_LIST_INIT(NR_UE_rrc_inst[nr_ue].CSI_ReportConfig_list, NR_maxNrofCSI_ReportConfigurations);
     }
 
+    NR_UE_rrc_inst->uecap_file = uecap_file;
+
     if (get_softmodem_params()->phy_test==1 || get_softmodem_params()->do_ra==1) {
       // read in files for RRCReconfiguration and RBconfig
       FILE *fd;
@@ -505,7 +507,7 @@ NR_UE_RRC_INST_t* openair_rrc_top_init_ue_nr(char* rrc_config_path){
       else
         sprintf(filename,"reconfig.raw");
       fd = fopen(filename,"r");
-          char buffer[1024];
+      char buffer[1024];
       AssertFatal(fd,
                   "cannot read file %s: errno %d, %s\n",
                   filename,
@@ -2178,7 +2180,8 @@ nr_rrc_ue_establish_srb2(
                                     NULL,
                                     radioBearerConfig->drb_ToAddModList,
                                     NULL,
-                                    0,
+                                    NR_UE_rrc_inst[ctxt_pP->module_id].cipheringAlgorithm
+                                      | (NR_UE_rrc_inst[ctxt_pP->module_id].integrityProtAlgorithm << 4),
                                     NULL,
                                     NULL,
                                     kUPenc,
@@ -2634,14 +2637,18 @@ nr_rrc_ue_process_ueCapabilityEnquiry(
 //-----------------------------------------------------------------------------
 {
   asn_enc_rval_t enc_rval;
+  asn_dec_rval_t dec_rval;
   NR_UL_DCCH_Message_t ul_dcch_msg;
   NR_UE_CapabilityRAT_Container_t ue_CapabilityRAT_Container;
+  char UE_NR_Capability_xer[65536];
+  size_t size;
   uint8_t buffer[200];
   int i;
   LOG_I(NR_RRC,"[UE %d] Frame %d: Receiving from SRB1 (DL-DCCH), Processing UECapabilityEnquiry (gNB %d)\n",
         ctxt_pP->module_id,
         ctxt_pP->frame,
         gNB_index);
+
   memset((void *)&ul_dcch_msg,0,sizeof(NR_UL_DCCH_Message_t));
   memset((void *)&ue_CapabilityRAT_Container,0,sizeof(NR_UE_CapabilityRAT_Container_t));
   ul_dcch_msg.message.present            = NR_UL_DCCH_MessageType_PR_c1;
@@ -2650,20 +2657,35 @@ nr_rrc_ue_process_ueCapabilityEnquiry(
   ul_dcch_msg.message.choice.c1->choice.ueCapabilityInformation                            = CALLOC(1, sizeof(struct NR_UECapabilityInformation));
   ul_dcch_msg.message.choice.c1->choice.ueCapabilityInformation->rrc_TransactionIdentifier = UECapabilityEnquiry->rrc_TransactionIdentifier;
   ue_CapabilityRAT_Container.rat_Type = NR_RAT_Type_nr;
-  NR_UE_NR_Capability_t*             UE_Capability_nr;
-  UE_Capability_nr = CALLOC(1,sizeof(NR_UE_NR_Capability_t));
-  NR_BandNR_t *nr_bandnr;
-  nr_bandnr  = CALLOC(1,sizeof(NR_BandNR_t));
-  nr_bandnr->bandNR = 1;
-  ASN_SEQUENCE_ADD(
-    &UE_Capability_nr->rf_Parameters.supportedBandListNR.list,
-    nr_bandnr);
+  NR_UE_NR_Capability_t* UE_Capability_nr = NULL;
+
+  char *file_path = NR_UE_rrc_inst[ctxt_pP->module_id].uecap_file;
+
+  FILE *f = NULL;
+  if (file_path)
+    f = fopen(file_path, "r");
+  if(f){
+    size = fread(UE_NR_Capability_xer, 1, sizeof UE_NR_Capability_xer, f);
+    if (size == 0 || size == sizeof UE_NR_Capability_xer) {
+      LOG_E(NR_RRC,"UE Capabilities XER file %s is too large (%ld)\n", file_path,size);
+      free(UE_Capability_nr);
+      return;
+    }
+    dec_rval = xer_decode(0, &asn_DEF_NR_UE_NR_Capability, (void *)&UE_Capability_nr, UE_NR_Capability_xer, size);
+    assert(dec_rval.code == RC_OK);
+  }
+  else {
+    UE_Capability_nr = CALLOC(1,sizeof(NR_UE_NR_Capability_t));
+    NR_BandNR_t *nr_bandnr;
+    nr_bandnr  = CALLOC(1,sizeof(NR_BandNR_t));
+    nr_bandnr->bandNR = 1;
+    ASN_SEQUENCE_ADD(&UE_Capability_nr->rf_Parameters.supportedBandListNR.list,
+                     nr_bandnr);
+  }
   OAI_NR_UECapability_t *UECap;
   UECap = CALLOC(1,sizeof(OAI_NR_UECapability_t));
   UECap->UE_NR_Capability = UE_Capability_nr;
-  if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
-    xer_fprint(stdout,&asn_DEF_NR_UE_NR_Capability,(void *)UE_Capability_nr);
-  }
+  xer_fprint(stdout,&asn_DEF_NR_UE_NR_Capability,(void *)UE_Capability_nr);
 
   enc_rval = uper_encode_to_buffer(&asn_DEF_NR_UE_NR_Capability,
                                    NULL,
diff --git a/openair2/RRC/NR_UE/rrc_defs.h b/openair2/RRC/NR_UE/rrc_defs.h
index 0da6748b32382e880834f0eff8d0d89d0488f3c6..bf2c99c219f381d5f26c2293fdfa89a6530f8ff0 100644
--- a/openair2/RRC/NR_UE/rrc_defs.h
+++ b/openair2/RRC/NR_UE/rrc_defs.h
@@ -70,7 +70,7 @@ typedef enum {
   nr_RadioBearerConfigX_r15=1
 } nsa_message_t;
 
-#define MAX_UE_NR_CAPABILITY_SIZE 255
+#define MAX_UE_NR_CAPABILITY_SIZE 2048
 typedef struct OAI_NR_UECapability_s {
   uint8_t sdu[MAX_UE_NR_CAPABILITY_SIZE];
   uint8_t sdu_size;
@@ -120,13 +120,15 @@ typedef struct NR_UE_RRC_INST_s {
     NR_DRB_ToAddMod_t              *DRB_config[NB_CNX_UE][8];
     rb_id_t                        *defaultDRB; // remember the ID of the default DRB
 
-    NR_SRB_INFO Srb0[NB_SIG_CNX_UE];
+    char                           *uecap_file;
+
+    NR_SRB_INFO                    Srb0[NB_SIG_CNX_UE];
     NR_SRB_INFO_TABLE_ENTRY        Srb1[NB_CNX_UE];
     NR_SRB_INFO_TABLE_ENTRY        Srb2[NB_CNX_UE];
 
     uint8_t                        MBMS_flag;
     OAI_NR_UECapability_t          *UECap;
-    uint8_t 					             *UECapability;
+    uint8_t 			   *UECapability;
     uint8_t                        UECapability_size;
 
     RA_trigger_t                   ra_trigger;
diff --git a/openair2/RRC/NR_UE/rrc_proto.h b/openair2/RRC/NR_UE/rrc_proto.h
index c9b3bf86a10f498a7ffaee81dca30adc0f439a73..62d9167251300a064289082f07ddb7a6e6ed5fe5 100644
--- a/openair2/RRC/NR_UE/rrc_proto.h
+++ b/openair2/RRC/NR_UE/rrc_proto.h
@@ -56,14 +56,14 @@ extern queue_t nr_wait_ul_tti_req_queue;
 //  main_rrc.c
 //
 /**\brief Layer 3 initialization*/
-NR_UE_RRC_INST_t* nr_l3_init_ue(char*);
+NR_UE_RRC_INST_t* nr_l3_init_ue(char*,char*);
 
 //
 //  UE_rrc.c
 //
 
 /**\brief Initial the top level RRC structure instance*/
-NR_UE_RRC_INST_t* openair_rrc_top_init_ue_nr(char*);
+NR_UE_RRC_INST_t* openair_rrc_top_init_ue_nr(char*,char*);
 
 
 
diff --git a/openair3/NAS/NR_UE/nr_nas_msg_sim.c b/openair3/NAS/NR_UE/nr_nas_msg_sim.c
index 2628c5b0b25681e3d603b6e5a923e35acb808be9..7cf1378d8b96773baef3b30fba8554e6a6ce1509 100644
--- a/openair3/NAS/NR_UE/nr_nas_msg_sim.c
+++ b/openair3/NAS/NR_UE/nr_nas_msg_sim.c
@@ -674,7 +674,7 @@ void decodeDownlinkNASTransport(as_nas_info_t *initialNasMsg, uint8_t * pdu_buff
     sprintf(baseNetAddress, "%d.%d", *(pdu_buffer + 39),*(pdu_buffer + 40));
     int third_octet = *(pdu_buffer + 41);
     int fourth_octet = *(pdu_buffer + 42);
-    LOG_I(NAS, "Received PDU Session Establishment Accept\n");
+    LOG_A(NAS, "Received PDU Session Establishment Accept\n");
     nas_config(1,third_octet,fourth_octet,"ue");
   } else {
     LOG_E(NAS, "Received unexpected message in DLinformationTransfer %d\n", msg_type);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-5g.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-5g.conf
index c6a4a90a14910f4f018b1b5c6086514479c1763e..575fddda2b11614a23957930f4da58f1c73f0248 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-5g.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-5g.conf
@@ -216,11 +216,11 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-	pusch_proc_threads = 8;
-        }  
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpn300.conf
index fd9399f89ecc9c1eb5d4b4538e7c976be5827e70..c3faa198ddac89ec1d406ee77d623124cc7a01fb 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpn300.conf
@@ -210,12 +210,12 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
+{
   num_cc = 1;
   tr_n_preference = "local_mac";
-  pusch_proc_threads = 8;
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-        }  
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpx300.conf
index 59e71a622514d55672addc9f165316f23a16e702..8fa8fcf99244344760c147d6730aaa8a85f2a813 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpx300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.32PRB.usrpx300.conf
@@ -196,12 +196,12 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
+{
   num_cc = 1;
   tr_n_preference = "local_mac";
-  pusch_proc_threads = 8;
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-        }  
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.66PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.66PRB.usrpn300.conf
index 3fc81c0d6ccbc39047e5c2a0939d07a8deb4e2be..c2e364b75edba6e139f5e378abb0c64c169a81f9 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.66PRB.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band257.tm1.66PRB.usrpn300.conf
@@ -193,12 +193,12 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
+{
   num_cc = 1;
   tr_n_preference = "local_mac";
-  pusch_proc_threads = 8;
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-        }  
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band261.tm1.32PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band261.tm1.32PRB.usrpn300.conf
index a40a93c789b6a17fcc03a239e18bfb5797574730..813a0e58e303b6f8fb33c22e8e8f91939a05dd9a 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band261.tm1.32PRB.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band261.tm1.32PRB.usrpn300.conf
@@ -210,12 +210,12 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-	pusch_proc_threads = 8;
-  ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-        }  
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+	ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.106PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.106PRB.usrpn300.conf
index 3860aba93592762a8874ea5d288c583fae78fb3a..d81655e5d5a8db2aa74f2102d38b6b19118d8a9a 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.106PRB.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.106PRB.usrpn300.conf
@@ -194,12 +194,12 @@ MACRLCs = (
 );
 
 L1s = (
-  {
+{
   num_cc = 1;
   tr_n_preference = "local_mac";
-  pusch_proc_threads = 8;
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-  }
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.106PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.106PRB.usrpx300.conf
index 7c527e07c8ea801f0fac383265b708be4d4dbdf9..b063989fd257f3f98ba0f2f1ecfc2ae98d9ce897 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.106PRB.usrpx300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band66.tm1.106PRB.usrpx300.conf
@@ -194,12 +194,12 @@ MACRLCs = (
 );
 
 L1s = (
-  {
+{
   num_cc = 1;
   tr_n_preference = "local_mac";
-  pusch_proc_threads = 8;
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-  }
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.106PRB.slave.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.106PRB.slave.conf
index 4f8c785baaabf3b1da86bc14a5af399046f04360..856eed4fc2c877b87d08697b404467cc60c66a55 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.106PRB.slave.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.106PRB.slave.conf
@@ -209,12 +209,12 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
+{
   num_cc = 1;
   tr_n_preference = "local_mac";
-  pusch_proc_threads = 8;
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-        }  
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.PTRS.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.PTRS.usrpx300.conf
index b6b9252560250a6f9348328bca2688d5331cd5ad..2e4dc540f3aa2b1503d37d28100dfda15e87c395 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.PTRS.usrpx300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.PTRS.usrpx300.conf
@@ -242,12 +242,12 @@ MACRLCs = (
 );
 
 L1s = (
- {
-   num_cc = 1;
-   tr_n_preference = "local_mac";
-   pusch_proc_threads = 8;
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
- }
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpb210.conf
index 0817d7373e930d14a879ce25ef50ee02702e9a42..a454af7b21ffd9d02b3658cc4106522013c95c0e 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpb210.conf
@@ -193,12 +193,12 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
+{
   num_cc = 1;
   tr_n_preference = "local_mac";
-  pusch_proc_threads = 8;
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-        }  
+}
 );
 
 RUs = (
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 fd4c23cfdbaf268e3e1d52b89f3ed68f7f689a7f..af26091260466439ce424de8d5ec9d0075ece7fe 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
@@ -192,12 +192,12 @@ MACRLCs = (
 );
 
 L1s = (
-	{
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-	pusch_proc_threads = 8;
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-	}
+}
 );
 
 RUs = (
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 965408332ccc7715b5de2058ce678c7363536a78..928c70113f576a1f8682ac8edabcfc7d75b3bbd9 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
@@ -192,12 +192,12 @@ MACRLCs = (
 );
 
 L1s = (
-	{
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-	pusch_proc_threads = 8;
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-	}
+}
 );
 
 RUs = (
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 e36748a3a9df2d10933b9fafef6f31f29dff4707..76bc5bf99231784ee30833efce4d765b381392df 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
@@ -209,12 +209,12 @@ MACRLCs = (
 );
 
 L1s = (
-  {
-    num_cc = 1;
-    tr_n_preference = "local_mac";
-    pusch_proc_threads = 8;
-    ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-  }
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+  ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
+}
 );
 
 RUs = (
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 7b2d369919035f7ba3181630cb8edec4b19b7db8..7ff9d0ea770b8a63e9b8cc9fef2b5447fbf9344e 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
@@ -193,12 +193,12 @@ MACRLCs = (
 );
 
 L1s = (
-  {
-    num_cc = 1;
-    tr_n_preference = "local_mac";
-    pusch_proc_threads = 8;
-    ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-  }
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+  ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.24PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.24PRB.usrpb210.conf
index dbf4f58348d6c23613b74845bb0c13d5eaab0342..5c0434b57ef4f4f30cae38986e341dc3ccd49fb4 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.24PRB.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.24PRB.usrpb210.conf
@@ -192,12 +192,12 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-	pusch_proc_threads = 8;
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-        }  
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.24PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.24PRB.usrpn300.conf
index 6d23726a788834185e2f6f460b71d4a7d56c8355..4b1476a76d8f296421467286c4e5604999086062 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.24PRB.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.24PRB.usrpn300.conf
@@ -192,12 +192,12 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-	pusch_proc_threads = 8;
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-        }  
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.24PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.24PRB.usrpx300.conf
index c3fa56f15e45afa27300826ac7e0230ad603494a..50169f4bce955887a224d7e0186c2d1a4c750c3e 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.24PRB.usrpx300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.24PRB.usrpx300.conf
@@ -192,12 +192,12 @@ MACRLCs = (
 );
 
 L1s = (
-    {
-        num_cc = 1;
-        tr_n_preference = "local_mac";
-        pusch_proc_threads = 8;
-        ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-    }
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+  ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
+}
 );
 
 RUs = (
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 15aa368fdfea8ecf56ef2fbb640876977ac346e0..e217f39b94323ae3305dccde96694d5421862b3c 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
@@ -193,12 +193,12 @@ MACRLCs = (
 );
 
 L1s = (
-  {
-    num_cc = 1;
-    tr_n_preference = "local_mac";
-    pusch_proc_threads = 8;
-    ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-  }
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+  ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/oaiL1.nfapi.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/oaiL1.nfapi.usrpx300.conf
index 06ae5af06678efcde9262c118b8c5b06075efab4..0b384958ae4b2b239d2a0a5884cd073ab660fe57 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/oaiL1.nfapi.usrpx300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/oaiL1.nfapi.usrpx300.conf
@@ -18,18 +18,18 @@ log_config = {
 
 
 L1s = (
-  {
-    num_cc = 1;
-    tr_n_preference = "nfapi";
-    local_n_if_name  = "lo";
-    remote_n_address = "127.0.0.2"; // vnf addr
-    local_n_address  = "127.0.0.1"; // pnf addr
-    local_n_portc    = 50000; // pnf p5 port [!]
-    remote_n_portc   = 50001; // vnf p5 port
-    local_n_portd    = 50010; // pnf p7 port
-    remote_n_portd   = 50011; // vnf p7 port
-    pusch_proc_threads = 8;
-  }  
+{
+  num_cc = 1;
+  tr_n_preference = "nfapi";
+  local_n_if_name  = "lo";
+  remote_n_address = "127.0.0.2"; // vnf addr
+  local_n_address  = "127.0.0.1"; // pnf addr
+  local_n_portc    = 50000; // pnf p5 port [!]
+  remote_n_portc   = 50001; // vnf p5 port
+  local_n_portd    = 50010; // pnf p7 port
+  remote_n_portd   = 50011; // vnf p7 port
+  thread_pool_size = 8;
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/testing_gnb.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/testing_gnb.conf
index 8dfcfb2b8824f67e3f12d2d3b6bded9c22ef4c07..5591ed082dcecc81b959d44502fd5c5cab00acfa 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/testing_gnb.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/testing_gnb.conf
@@ -210,12 +210,12 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-	pusch_proc_threads = 8;
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-        }  
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/testing_gnb_24PRB.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/testing_gnb_24PRB.conf
index d01b0947c053d7d56048c63ab086ea7b0443c013..dd8113e059020007251e9c152c2b2ee4cd2dc61d 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/testing_gnb_24PRB.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/testing_gnb_24PRB.conf
@@ -211,12 +211,12 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-	pusch_proc_threads = 8;
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
   ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
-        }  
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/testing_gnb_nsa_n310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/testing_gnb_nsa_n310.conf
index 2f4839fd3b864b7b5afaa31f30534cff95ed2ea1..96335f23caf5f2a0ea673476487de6ac3bee4e1b 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/testing_gnb_nsa_n310.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/testing_gnb_nsa_n310.conf
@@ -210,11 +210,11 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-	pusch_proc_threads = 8;
-        }  
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf
index 417e937edf15fd7948b20327566fdf7bb858ad18..215a57b95c5ab25322d3bc5808049db6b0af233d 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf
@@ -210,11 +210,11 @@ MACRLCs = (
 );
 
 L1s = (
-    	{
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-        pusch_proc_threads = 2;
-        }  
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band41.fr1.106PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band41.fr1.106PRB.usrpb210.conf
index 76b45bda15bb2b62758f172a0471961f679e57fa..b77ad0b264297e0bcf95b63bbf6e4ed3dcdd9553 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band41.fr1.106PRB.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band41.fr1.106PRB.usrpb210.conf
@@ -212,7 +212,7 @@ MACRLCs = (
   tr_n_preference             = "local_RRC";
   pusch_TargetSNRx10          = 150;
   pucch_TargetSNRx10          = 200;
-  ulsch_max_frame_inactivity  = 1;
+  ulsch_max_frame_inactivity  = 0;
 }
 );
 
@@ -220,7 +220,6 @@ L1s = (
 {
   num_cc = 1;
   tr_n_preference       = "local_mac";
-  pusch_proc_threads    = 4;
   prach_dtx_threshold   = 120;
   pucch0_dtx_threshold  = 150;
   ofdm_offset_divisor   = 8; #set this to UINT_MAX for offset 0
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf
index 5c372f9580c4663c3397f53361e93506164a118b..27a1b6ad62c0258eeb0e5a9dd2a639db9dba3941 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf
@@ -212,7 +212,7 @@ MACRLCs = (
   tr_n_preference             = "local_RRC";
   #pusch_TargetSNRx10         = 150;
   #pucch_TargetSNRx10         = 200;
-  ulsch_max_frame_inactivity  = 1;
+  ulsch_max_frame_inactivity  = 0;
 }
 );
 
@@ -220,7 +220,6 @@ L1s = (
 {
   num_cc                = 1;
   tr_n_preference       = "local_mac";
-  pusch_proc_threads    = 4;
   prach_dtx_threshold   = 120;
   #pucch0_dtx_threshold = 120;
 }
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
index 5cea75e4f6d03291bd05ffb2c7c4bfa5fc3e2339..e96c545a4e54838862762eb29d2534c6c0465607 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
@@ -212,7 +212,7 @@ MACRLCs = (
   tr_n_preference             = "local_RRC";
   pusch_TargetSNRx10          = 150;
   pucch_TargetSNRx10          = 200;
-  ulsch_max_frame_inactivity  = 1;
+  ulsch_max_frame_inactivity  = 0;
 }
 );
 
@@ -220,7 +220,6 @@ L1s = (
 {
   num_cc = 1;
   tr_n_preference       = "local_mac";
-  pusch_proc_threads    = 4;
   prach_dtx_threshold   = 120;
   pucch0_dtx_threshold  = 150;
   ofdm_offset_divisor   = 8; #set this to UINT_MAX for offset 0
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.sabox.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.sabox.conf
index e9577ee2656583cbf76dba1f3a82d55bc1d0241a..c8a0bace37b79f7bd99f1d2cacebfe5e265a6777 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.sabox.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.sabox.conf
@@ -225,11 +225,11 @@ MACRLCs = (
 );
 
 L1s = (
-    {
-	num_cc = 1;
-	tr_n_preference = "local_mac";
-	pusch_proc_threads = 8;
-    }
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  thread_pool_size = 8;
+}
 );
 
 RUs = (
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf
new file mode 100644
index 0000000000000000000000000000000000000000..befceae6952fb739cbe4c47032f23ce8c92fbb37
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf
@@ -0,0 +1,330 @@
+Active_gNBs = ( "gNB-OAI");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+gNBs =
+(
+ {
+    ////////// Identification parameters:
+    gNB_ID    =  0xe00;
+    gNB_name  =  "gNB-OAI";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  1;
+    plmn_list = ({
+                  mcc = 208;
+                  mnc = 99;
+                  mnc_length = 2;
+                  snssaiList = (
+                    {
+                      sst = 1;
+                      sd  = 0x1; // 0 false, else true
+                    },
+                    {
+                      sst = 1;
+                      sd  = 0x112233; // 0 false, else true
+                    }
+                  );
+
+                  });
+
+    nr_cellid = 12345678L;
+
+    ////////// Physical parameters:
+
+    ssb_SubcarrierOffset                                      = 0;
+    pdsch_AntennaPorts                                        = 1;
+    pusch_AntennaPorts                                        = 2;
+#    do_CSIRS                                                  = 1;
+    min_rxtxtime_pdsch                                        = 2;
+    ul_prbblacklist                                           = "79,80,81,82"
+    pdcch_ConfigSIB1 = (
+      {
+        controlResourceSetZero = 11;
+        searchSpaceZero = 10;
+      }
+    );
+
+    servingCellConfigCommon = (
+    {
+ #spCellConfigCommon
+
+      physCellId                                                    = 0;
+
+#  downlinkConfigCommon
+    #frequencyInfoDL
+      # this is 3300.60 MHz + 81*12*30e-3 MHz = 3329.76
+      absoluteFrequencySSB                                          = 621984;
+      # this is 3300.60 MHz
+      dl_absoluteFrequencyPointA                                       = 620040;
+      #scs-SpecificCarrierList
+        dl_offstToCarrier                                              = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+        dl_subcarrierSpacing                                           = 1;
+        dl_carrierBandwidth                                            = 162;
+     #initialDownlinkBWP
+      #genericParameters
+       # this is RBstart=0,L=162 (275*(275-L+1))+(274-RBstart))
+       initialDLBWPlocationAndBandwidth                                        = 31899;
+       #
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+        initialDLBWPsubcarrierSpacing                                           = 1;
+      #pdcch-ConfigCommon
+        initialDLBWPcontrolResourceSetZero                                      = 11;
+        initialDLBWPsearchSpaceZero                                             = 10;
+      #pdsch-ConfigCommon
+        #pdschTimeDomainAllocationList (up to 16 entries)
+             initialDLBWPk0_0                    = 0;
+             #initialULBWPmappingType
+	          #0=typeA,1=typeB
+             initialDLBWPmappingType_0           = 0;
+             #this is SS=1,L=13
+             initialDLBWPstartSymbolAndLength_0  = 40;
+
+             initialDLBWPk0_1                    = 0;
+             initialDLBWPmappingType_1           = 0;
+             #this is SS=1,L=5
+             initialDLBWPstartSymbolAndLength_1  = 57;
+
+  #uplinkConfigCommon
+     #frequencyInfoUL
+      ul_frequencyBand                                                 = 78;
+      #scs-SpecificCarrierList
+      ul_offstToCarrier                                              = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+      ul_subcarrierSpacing                                           = 1;
+      ul_carrierBandwidth                                            = 162;
+      pMax                                                          = 20;
+     #initialUplinkBWP
+      #genericParameters
+        initialULBWPlocationAndBandwidth                                        = 31899;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+        initialULBWPsubcarrierSpacing                                           = 1;
+      #rach-ConfigCommon
+        #rach-ConfigGeneric
+          prach_ConfigurationIndex                                  = 98;
+#prach_msg1_FDM
+#0 = one, 1=two, 2=four, 3=eight
+          prach_msg1_FDM                                            = 0;
+          prach_msg1_FrequencyStart                                 = 0;
+          zeroCorrelationZoneConfig                                 = 12;
+          preambleReceivedTargetPower                               = -104;
+#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
+          preambleTransMax                                          = 6;
+#powerRampingStep
+# 0=dB0,1=dB2,2=dB4,3=dB6
+        powerRampingStep                                            = 1;
+#ra_ReponseWindow
+#1,2,4,8,10,20,40,80
+        ra_ResponseWindow                                           = 4;
+#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
+#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
+        ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR                = 3;
+#oneHalf (0..15) 4,8,12,16,...60,64
+        ssb_perRACH_OccasionAndCB_PreamblesPerSSB                   = 15;
+#ra_ContentionResolutionTimer
+#(0..7) 8,16,24,32,40,48,56,64
+        ra_ContentionResolutionTimer                                = 7;
+        rsrp_ThresholdSSB                                           = 19;
+#prach-RootSequenceIndex_PR
+#1 = 839, 2 = 139
+        prach_RootSequenceIndex_PR                                  = 2;
+        prach_RootSequenceIndex                                     = 1;
+        # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
+        #
+        msg1_SubcarrierSpacing                                      = 1,
+# restrictedSetConfig
+# 0=unrestricted, 1=restricted type A, 2=restricted type B
+        restrictedSetConfig                                         = 0,
+
+      # pusch-ConfigCommon (up to 16 elements)
+        initialULBWPk2_0                      = 2;
+        initialULBWPmappingType_0             = 1
+        # this is SS=2 L=13
+        initialULBWPstartSymbolAndLength_0    = 41;
+
+        initialULBWPk2_1                      = 2;
+        initialULBWPmappingType_1             = 1;
+        # this is SS=0 L=4
+        initialULBWPstartSymbolAndLength_1    = 52;
+
+        initialULBWPk2_2                      = 7;
+        initialULBWPmappingType_2             = 1;
+        # this is SS=10 L=4
+        initialULBWPstartSymbolAndLength_2    = 52;
+
+        msg3_DeltaPreamble                                          = 1;
+        p0_NominalWithGrant                                         =-90;
+
+# pucch-ConfigCommon setup :
+# pucchGroupHopping
+# 0 = neither, 1= group hopping, 2=sequence hopping
+        pucchGroupHopping                                           = 0;
+        hoppingId                                                   = 40;
+        p0_nominal                                                  = -70;
+# ssb_PositionsInBurs_BitmapPR
+# 1=short, 2=medium, 3=long
+      ssb_PositionsInBurst_PR                                       = 2;
+      ssb_PositionsInBurst_Bitmap                                   = 1;
+
+# ssb_periodicityServingCell
+# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
+      ssb_periodicityServingCell                                    = 2;
+
+# dmrs_TypeA_position
+# 0 = pos2, 1 = pos3
+      dmrs_TypeA_Position                                           = 0;
+
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+      subcarrierSpacing                                             = 1;
+
+
+  #tdd-UL-DL-ConfigurationCommon
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
+      referenceSubcarrierSpacing                                    = 1;
+      # pattern1
+      # dl_UL_TransmissionPeriodicity
+      # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
+      dl_UL_TransmissionPeriodicity                                 = 6;
+      nrofDownlinkSlots                                             = 7;
+      nrofDownlinkSymbols                                           = 6;
+      nrofUplinkSlots                                               = 2;
+      nrofUplinkSymbols                                             = 4;
+
+  ssPBCH_BlockPower                                             = -25;
+  }
+
+  );
+
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+
+    ////////// AMF parameters:
+    amf_ip_address      = ( { ipv4       = "192.168.70.132";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+
+    NETWORK_INTERFACES :
+    {
+        GNB_INTERFACE_NAME_FOR_NG_AMF            = "demo-oai";
+        GNB_IPV4_ADDRESS_FOR_NG_AMF              = "192.168.70.129/24";
+        GNB_INTERFACE_NAME_FOR_NGU               = "demo-oai";
+        GNB_IPV4_ADDRESS_FOR_NGU                 = "192.168.70.129/24";
+        GNB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+  }
+);
+
+MACRLCs = (
+{
+  num_cc                      = 1;
+  tr_s_preference             = "local_L1";
+  tr_n_preference             = "local_RRC";
+  pusch_TargetSNRx10          = 200;
+  pucch_TargetSNRx10          = 200;
+  ulsch_max_frame_inactivity  = 0;
+}
+);
+
+L1s = (
+{
+  num_cc = 1;
+  tr_n_preference = "local_mac";
+  prach_dtx_threshold = 120;
+  pucch0_dtx_threshold = 120;
+}
+);
+
+RUs = (
+{
+  local_rf       = "yes"
+  nb_tx          = 2
+  nb_rx          = 2
+  att_tx         = 0
+  att_rx         = 0;
+  bands          = [78];
+  max_pdschReferenceSignalPower = -27;
+  max_rxgain                    = 75;
+  sf_extension                  = 0;
+  eNB_instances  = [0];
+  ##beamforming 1x2 matrix: 1 layer x 2 antennas
+  bf_weights = [0x00007fff, 0x0000];
+  #clock_src = "internal";
+  sdr_addrs = "mgmt_addr=192.168.10.2,addr=192.168.10.2,clock_source=internal,time_source=internal"
+}
+);
+
+THREAD_STRUCT = (
+{
+  #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
+  parallel_config    = "PARALLEL_SINGLE_THREAD";
+  #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
+  worker_config      = "WORKER_ENABLE";
+}
+);
+
+rfsimulator :
+{
+  serveraddr = "server";
+  serverport = "4043";
+  options = (); #("saviq"); or/and "chanmod"
+  modelname = "AWGN";
+  IQfile = "/tmp/rfsimulator.iqs";
+};
+
+security = {
+  # preferred ciphering algorithms
+  # the first one of the list that an UE supports in chosen
+  # valid values: nea0, nea1, nea2, nea3
+  ciphering_algorithms = ( "nea0" );
+
+  # preferred integrity algorithms
+  # the first one of the list that an UE supports in chosen
+  # valid values: nia0, nia1, nia2, nia3
+  integrity_algorithms = ( "nia2", "nia0" );
+
+  # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
+  # what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
+  drb_ciphering = "yes";
+  drb_integrity = "no";
+};
+
+log_config :
+{
+  global_log_level                      ="info";
+  global_log_verbosity                  ="medium";
+  hw_log_level                          ="info";
+  hw_log_verbosity                      ="medium";
+  phy_log_level                         ="info";
+  phy_log_verbosity                     ="medium";
+  mac_log_level                         ="info";
+  mac_log_verbosity                     ="high";
+  rlc_log_level                         ="info";
+  rlc_log_verbosity                     ="medium";
+  pdcp_log_level                        ="info";
+  pdcp_log_verbosity                    ="medium";
+  rrc_log_level                         ="info";
+  rrc_log_verbosity                     ="medium";
+  ngap_log_level                        ="debug";
+  ngap_log_verbosity                    ="medium";
+  f1ap_log_level                        ="debug";
+  f1ap_log_verbosity                    ="medium";
+};
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap.xml b/targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap.xml
new file mode 100644
index 0000000000000000000000000000000000000000..baca6649cbf10848fd327d49b926a8f6ba11d3ab
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap.xml
@@ -0,0 +1,862 @@
+<UE-NR-Capability>
+    <accessStratumRelease><rel15/></accessStratumRelease>
+    <pdcp-Parameters>
+        <supportedROHC-Profiles>
+            <profile0x0000><false/></profile0x0000>
+            <profile0x0001><false/></profile0x0001>
+            <profile0x0002><false/></profile0x0002>
+            <profile0x0003><false/></profile0x0003>
+            <profile0x0004><false/></profile0x0004>
+            <profile0x0006><false/></profile0x0006>
+            <profile0x0101><false/></profile0x0101>
+            <profile0x0102><false/></profile0x0102>
+            <profile0x0103><false/></profile0x0103>
+            <profile0x0104><false/></profile0x0104>
+        </supportedROHC-Profiles>
+        <maxNumberROHC-ContextSessions><cs2/></maxNumberROHC-ContextSessions>
+        <shortSN><supported/></shortSN>
+    </pdcp-Parameters>
+    <rlc-Parameters>
+        <am-WithShortSN><supported/></am-WithShortSN>
+        <um-WithShortSN><supported/></um-WithShortSN>
+        <um-WithLongSN><supported/></um-WithLongSN>
+    </rlc-Parameters>
+    <mac-Parameters>
+        <mac-ParametersXDD-Diff>
+            <logicalChannelSR-DelayTimer><supported/></logicalChannelSR-DelayTimer>
+            <longDRX-Cycle><supported/></longDRX-Cycle>
+            <shortDRX-Cycle><supported/></shortDRX-Cycle>
+            <multipleSR-Configurations><supported/></multipleSR-Configurations>
+        </mac-ParametersXDD-Diff>
+    </mac-Parameters>
+    <phy-Parameters>
+        <phy-ParametersCommon>
+            <nzp-CSI-RS-IntefMgmt><supported/></nzp-CSI-RS-IntefMgmt>
+            <dynamicHARQ-ACK-Codebook><supported/></dynamicHARQ-ACK-Codebook>
+            <semiStaticHARQ-ACK-Codebook><supported/></semiStaticHARQ-ACK-Codebook>
+            <pdsch-MappingTypeA><supported/></pdsch-MappingTypeA>
+            <rateMatchingResrcSetSemi-Static><supported/></rateMatchingResrcSetSemi-Static>
+            <ext2>
+                <maxLayersMIMO-Indication><supported/></maxLayersMIMO-Indication>
+            </ext2>
+        </phy-ParametersCommon>
+        <phy-ParametersFRX-Diff>
+            <twoFL-DMRS>
+                11
+            </twoFL-DMRS>
+            <supportedDMRS-TypeDL><type1/></supportedDMRS-TypeDL>
+            <supportedDMRS-TypeUL><type1And2/></supportedDMRS-TypeUL>
+            <onePortsPTRS>
+                01
+            </onePortsPTRS>
+            <pucch-F2-WithFH><supported/></pucch-F2-WithFH>
+            <pucch-F3-WithFH><supported/></pucch-F3-WithFH>
+            <absoluteTPC-Command><supported/></absoluteTPC-Command>
+            <pusch-HalfPi-BPSK><supported/></pusch-HalfPi-BPSK>
+            <pucch-F3-4-HalfPi-BPSK><supported/></pucch-F3-4-HalfPi-BPSK>
+            <ext1>
+                <csi-RS-IM-ReceptionForFeedback>
+                    <maxConfigNumberNZP-CSI-RS-PerCC>8</maxConfigNumberNZP-CSI-RS-PerCC>
+                    <maxConfigNumberPortsAcrossNZP-CSI-RS-PerCC>64</maxConfigNumberPortsAcrossNZP-CSI-RS-PerCC>
+                    <maxConfigNumberCSI-IM-PerCC><n8/></maxConfigNumberCSI-IM-PerCC>
+                    <maxNumberSimultaneousNZP-CSI-RS-PerCC>4</maxNumberSimultaneousNZP-CSI-RS-PerCC>
+                    <totalNumberPortsSimultaneousNZP-CSI-RS-PerCC>32</totalNumberPortsSimultaneousNZP-CSI-RS-PerCC>
+                </csi-RS-IM-ReceptionForFeedback>
+                <csi-ReportFramework>
+                    <maxNumberPeriodicCSI-PerBWP-ForCSI-Report>2</maxNumberPeriodicCSI-PerBWP-ForCSI-Report>
+                    <maxNumberAperiodicCSI-PerBWP-ForCSI-Report>2</maxNumberAperiodicCSI-PerBWP-ForCSI-Report>
+                    <maxNumberSemiPersistentCSI-PerBWP-ForCSI-Report>0</maxNumberSemiPersistentCSI-PerBWP-ForCSI-Report>
+                    <maxNumberPeriodicCSI-PerBWP-ForBeamReport>2</maxNumberPeriodicCSI-PerBWP-ForBeamReport>
+                    <maxNumberAperiodicCSI-PerBWP-ForBeamReport>2</maxNumberAperiodicCSI-PerBWP-ForBeamReport>
+                    <maxNumberAperiodicCSI-triggeringStatePerCC><n63/></maxNumberAperiodicCSI-triggeringStatePerCC>
+                    <maxNumberSemiPersistentCSI-PerBWP-ForBeamReport>0</maxNumberSemiPersistentCSI-PerBWP-ForBeamReport>
+                    <simultaneousCSI-ReportsPerCC>4</simultaneousCSI-ReportsPerCC>
+                </csi-ReportFramework>
+                <mux-SR-HARQ-ACK-CSI-PUCCH-OncePerSlot>
+                    <sameSymbol><supported/></sameSymbol>
+                </mux-SR-HARQ-ACK-CSI-PUCCH-OncePerSlot>
+                <oneFL-DMRS-TwoAdditionalDMRS-UL><supported/></oneFL-DMRS-TwoAdditionalDMRS-UL>
+                <twoFL-DMRS-TwoAdditionalDMRS-UL><supported/></twoFL-DMRS-TwoAdditionalDMRS-UL>
+            </ext1>
+        </phy-ParametersFRX-Diff>
+        <phy-ParametersFR1>
+            <pdsch-256QAM-FR1><supported/></pdsch-256QAM-FR1>
+            <pdsch-RE-MappingFR1-PerSymbol><n10/></pdsch-RE-MappingFR1-PerSymbol>
+            <ext1>
+                <pdsch-RE-MappingFR1-PerSlot><n32/></pdsch-RE-MappingFR1-PerSlot>
+            </ext1>
+        </phy-ParametersFR1>
+    </phy-Parameters>
+    <rf-Parameters>
+        <supportedBandListNR>
+            <BandNR>
+                <bandNR>78</bandNR>
+                <mimo-ParametersPerBand>
+                    <tci-StatePDSCH>
+                        <maxNumberConfiguredTCIstatesPerCC><n16/></maxNumberConfiguredTCIstatesPerCC>
+                        <maxNumberActiveTCI-PerBWP><n1/></maxNumberActiveTCI-PerBWP>
+                    </tci-StatePDSCH>
+                    <pusch-TransCoherence><nonCoherent/></pusch-TransCoherence>
+                    <periodicBeamReport><supported/></periodicBeamReport>
+                    <aperiodicBeamReport><supported/></aperiodicBeamReport>
+                    <maxNumberNonGroupBeamReporting><n4/></maxNumberNonGroupBeamReporting>
+                    <maxNumberSSB-BFD>2</maxNumberSSB-BFD>
+                    <maxNumberCSI-RS-SSB-CBD>8</maxNumberCSI-RS-SSB-CBD>
+                    <beamReportTiming>
+                        <scs-15kHz><sym8/></scs-15kHz>
+                        <scs-30kHz><sym14/></scs-30kHz>
+                    </beamReportTiming>
+                    <ext1>
+                        <beamManagementSSB-CSI-RS>
+                            <maxNumberSSB-CSI-RS-ResourceOneTx><n8/></maxNumberSSB-CSI-RS-ResourceOneTx>
+                            <maxNumberCSI-RS-Resource><n32/></maxNumberCSI-RS-Resource>
+                            <maxNumberCSI-RS-ResourceTwoTx><n8/></maxNumberCSI-RS-ResourceTwoTx>
+                            <supportedCSI-RS-Density><oneAndThree/></supportedCSI-RS-Density>
+                            <maxNumberAperiodicCSI-RS-Resource><n32/></maxNumberAperiodicCSI-RS-Resource>
+                        </beamManagementSSB-CSI-RS>
+                        <codebookParameters>
+                            <type1>
+                                <singlePanel>
+                                    <supportedCSI-RS-ResourceList>
+                                        <SupportedCSI-RS-Resource>
+                                            <maxNumberTxPortsPerResource><p8/></maxNumberTxPortsPerResource>
+                                            <maxNumberResourcesPerBand>8</maxNumberResourcesPerBand>
+                                            <totalNumberTxPortsPerBand>64</totalNumberTxPortsPerBand>
+                                        </SupportedCSI-RS-Resource>
+                                        <SupportedCSI-RS-Resource>
+                                            <maxNumberTxPortsPerResource><p4/></maxNumberTxPortsPerResource>
+                                            <maxNumberResourcesPerBand>8</maxNumberResourcesPerBand>
+                                            <totalNumberTxPortsPerBand>32</totalNumberTxPortsPerBand>
+                                        </SupportedCSI-RS-Resource>
+                                        <SupportedCSI-RS-Resource>
+                                            <maxNumberTxPortsPerResource><p16/></maxNumberTxPortsPerResource>
+                                            <maxNumberResourcesPerBand>4</maxNumberResourcesPerBand>
+                                            <totalNumberTxPortsPerBand>64</totalNumberTxPortsPerBand>
+                                        </SupportedCSI-RS-Resource>
+                                        <SupportedCSI-RS-Resource>
+                                            <maxNumberTxPortsPerResource><p32/></maxNumberTxPortsPerResource>
+                                            <maxNumberResourcesPerBand>2</maxNumberResourcesPerBand>
+                                            <totalNumberTxPortsPerBand>64</totalNumberTxPortsPerBand>
+                                        </SupportedCSI-RS-Resource>
+                                    </supportedCSI-RS-ResourceList>
+                                    <modes><mode1/></modes>
+                                    <maxNumberCSI-RS-PerResourceSet>4</maxNumberCSI-RS-PerResourceSet>
+                                </singlePanel>
+                            </type1>
+                        </codebookParameters>
+                        <csi-RS-IM-ReceptionForFeedback>
+                            <maxConfigNumberNZP-CSI-RS-PerCC>8</maxConfigNumberNZP-CSI-RS-PerCC>
+                            <maxConfigNumberPortsAcrossNZP-CSI-RS-PerCC>64</maxConfigNumberPortsAcrossNZP-CSI-RS-PerCC>
+                            <maxConfigNumberCSI-IM-PerCC><n8/></maxConfigNumberCSI-IM-PerCC>
+                            <maxNumberSimultaneousNZP-CSI-RS-PerCC>4</maxNumberSimultaneousNZP-CSI-RS-PerCC>
+                            <totalNumberPortsSimultaneousNZP-CSI-RS-PerCC>32</totalNumberPortsSimultaneousNZP-CSI-RS-PerCC>
+                        </csi-RS-IM-ReceptionForFeedback>
+                        <csi-ReportFramework>
+                            <maxNumberPeriodicCSI-PerBWP-ForCSI-Report>2</maxNumberPeriodicCSI-PerBWP-ForCSI-Report>
+                            <maxNumberAperiodicCSI-PerBWP-ForCSI-Report>2</maxNumberAperiodicCSI-PerBWP-ForCSI-Report>
+                            <maxNumberSemiPersistentCSI-PerBWP-ForCSI-Report>0</maxNumberSemiPersistentCSI-PerBWP-ForCSI-Report>
+                            <maxNumberPeriodicCSI-PerBWP-ForBeamReport>2</maxNumberPeriodicCSI-PerBWP-ForBeamReport>
+                            <maxNumberAperiodicCSI-PerBWP-ForBeamReport>2</maxNumberAperiodicCSI-PerBWP-ForBeamReport>
+                            <maxNumberAperiodicCSI-triggeringStatePerCC><n63/></maxNumberAperiodicCSI-triggeringStatePerCC>
+                            <maxNumberSemiPersistentCSI-PerBWP-ForBeamReport>0</maxNumberSemiPersistentCSI-PerBWP-ForBeamReport>
+                            <simultaneousCSI-ReportsPerCC>4</simultaneousCSI-ReportsPerCC>
+                        </csi-ReportFramework>
+                        <csi-RS-ForTracking>
+                            <maxBurstLength>2</maxBurstLength>
+                            <maxSimultaneousResourceSetsPerCC>1</maxSimultaneousResourceSetsPerCC>
+                            <maxConfiguredResourceSetsPerCC>8</maxConfiguredResourceSetsPerCC>
+                            <maxConfiguredResourceSetsAllCC>16</maxConfiguredResourceSetsAllCC>
+                        </csi-RS-ForTracking>
+                    </ext1>
+                </mimo-ParametersPerBand>
+                <multipleTCI><supported/></multipleTCI>
+                <pusch-256QAM><supported/></pusch-256QAM>
+                <ue-PowerClass><pc2/></ue-PowerClass>
+                <channelBWs-DL>
+                    <fr1>
+                        <scs-15kHz>
+                            0000000000
+                        </scs-15kHz>
+                        <scs-30kHz>
+                            0001011111
+                        </scs-30kHz>
+                        <scs-60kHz>
+                            0000000000
+                        </scs-60kHz>
+                    </fr1>
+                </channelBWs-DL>
+                <channelBWs-UL>
+                    <fr1>
+                        <scs-15kHz>
+                            0000000000
+                        </scs-15kHz>
+                        <scs-30kHz>
+                            0001011111
+                        </scs-30kHz>
+                        <scs-60kHz>
+                            0000000000
+                        </scs-60kHz>
+                    </fr1>
+                </channelBWs-UL>
+                <ext1>
+                    <maxUplinkDutyCycle-PC2-FR1><n100/></maxUplinkDutyCycle-PC2-FR1>
+                </ext1>
+                <ext4>
+                    <channelBWs-DL-v1590>
+                        <fr1>
+                            <scs-30kHz>
+                                1000000000000000
+                            </scs-30kHz>
+                        </fr1>
+                    </channelBWs-DL-v1590>
+                    <channelBWs-UL-v1590>
+                        <fr1>
+                            <scs-30kHz>
+                                1000000000000000
+                            </scs-30kHz>
+                        </fr1>
+                    </channelBWs-UL-v1590>
+                </ext4>
+            </BandNR>
+        </supportedBandListNR>
+        <supportedBandCombinationList>
+            <BandCombination>
+                <bandList>
+                        <nr>
+                            <bandNR>78</bandNR>
+                            <ca-BandwidthClassDL-NR><a/></ca-BandwidthClassDL-NR>
+                            <ca-BandwidthClassUL-NR><a/></ca-BandwidthClassUL-NR>
+                        </nr>
+                </bandList>
+                <featureSetCombination>0</featureSetCombination>
+                <powerClass-v1530><pc2/></powerClass-v1530>
+            </BandCombination>
+        </supportedBandCombinationList>
+        <appliedFreqBandListFilter>
+                <bandInformationNR>
+                    <bandNR>78</bandNR>
+                </bandInformationNR>
+        </appliedFreqBandListFilter>
+        <ext1>
+            <supportedBandCombinationList-v1540>
+                <BandCombination-v1540>
+                    <bandList-v1540>
+                        <BandParameters-v1540>
+                            <srs-TxSwitch>
+                                <supportedSRS-TxPortSwitch><t2r4/></supportedSRS-TxPortSwitch>
+                            </srs-TxSwitch>
+                        </BandParameters-v1540>
+                    </bandList-v1540>
+                    <ca-ParametersNR-v1540>
+                        <csi-RS-IM-ReceptionForFeedbackPerBandComb>
+                            <maxNumberSimultaneousNZP-CSI-RS-ActBWP-AllCC>8</maxNumberSimultaneousNZP-CSI-RS-ActBWP-AllCC>
+                            <totalNumberPortsSimultaneousNZP-CSI-RS-ActBWP-AllCC>64</totalNumberPortsSimultaneousNZP-CSI-RS-ActBWP-AllCC>
+                        </csi-RS-IM-ReceptionForFeedbackPerBandComb>
+                        <simultaneousCSI-ReportsAllCC>8</simultaneousCSI-ReportsAllCC>
+                    </ca-ParametersNR-v1540>
+                </BandCombination-v1540>
+            </supportedBandCombinationList-v1540>
+        </ext1>
+    </rf-Parameters>
+    <measAndMobParameters>
+        <measAndMobParametersCommon>
+            <ssb-RLM><supported/></ssb-RLM>
+            <ext1>
+                <eventB-MeasAndReport><supported/></eventB-MeasAndReport>
+                <handoverFDD-TDD><supported/></handoverFDD-TDD>
+            </ext1>
+            <ext2>
+                <periodicEUTRA-MeasAndReport><supported/></periodicEUTRA-MeasAndReport>
+            </ext2>
+        </measAndMobParametersCommon>
+        <measAndMobParametersXDD-Diff>
+            <intraAndInterF-MeasAndReport><supported/></intraAndInterF-MeasAndReport>
+            <eventA-MeasAndReport><supported/></eventA-MeasAndReport>
+            <ext1>
+                <handoverInterF><supported/></handoverInterF>
+                <handoverLTE-EPC><supported/></handoverLTE-EPC>
+            </ext1>
+        </measAndMobParametersXDD-Diff>
+        <measAndMobParametersFRX-Diff>
+            <ss-SINR-Meas><supported/></ss-SINR-Meas>
+            <ext1>
+                <handoverInterF><supported/></handoverInterF>
+                <handoverLTE-EPC><supported/></handoverLTE-EPC>
+            </ext1>
+            <ext3>
+                <simultaneousRxDataSSB-DiffNumerology><supported/></simultaneousRxDataSSB-DiffNumerology>
+            </ext3>
+        </measAndMobParametersFRX-Diff>
+    </measAndMobParameters>
+    <featureSets>
+        <featureSetsDownlink>
+            <FeatureSetDownlink>
+                <featureSetListPerDownlinkCC>
+                    <FeatureSetDownlinkPerCC-Id>1</FeatureSetDownlinkPerCC-Id>
+                </featureSetListPerDownlinkCC>
+                <ue-SpecificUL-DL-Assignment><supported/></ue-SpecificUL-DL-Assignment>
+            </FeatureSetDownlink>
+            <FeatureSetDownlink>
+                <featureSetListPerDownlinkCC>
+                    <FeatureSetDownlinkPerCC-Id>2</FeatureSetDownlinkPerCC-Id>
+                </featureSetListPerDownlinkCC>
+                <ue-SpecificUL-DL-Assignment><supported/></ue-SpecificUL-DL-Assignment>
+            </FeatureSetDownlink>
+            <FeatureSetDownlink>
+                <featureSetListPerDownlinkCC>
+                    <FeatureSetDownlinkPerCC-Id>3</FeatureSetDownlinkPerCC-Id>
+                </featureSetListPerDownlinkCC>
+                <ue-SpecificUL-DL-Assignment><supported/></ue-SpecificUL-DL-Assignment>
+            </FeatureSetDownlink>
+            <FeatureSetDownlink>
+                <featureSetListPerDownlinkCC>
+                    <FeatureSetDownlinkPerCC-Id>4</FeatureSetDownlinkPerCC-Id>
+                </featureSetListPerDownlinkCC>
+                <ue-SpecificUL-DL-Assignment><supported/></ue-SpecificUL-DL-Assignment>
+            </FeatureSetDownlink>
+            <FeatureSetDownlink>
+                <featureSetListPerDownlinkCC>
+                    <FeatureSetDownlinkPerCC-Id>5</FeatureSetDownlinkPerCC-Id>
+                </featureSetListPerDownlinkCC>
+                <ue-SpecificUL-DL-Assignment><supported/></ue-SpecificUL-DL-Assignment>
+            </FeatureSetDownlink>
+            <FeatureSetDownlink>
+                <featureSetListPerDownlinkCC>
+                    <FeatureSetDownlinkPerCC-Id>6</FeatureSetDownlinkPerCC-Id>
+                </featureSetListPerDownlinkCC>
+                <ue-SpecificUL-DL-Assignment><supported/></ue-SpecificUL-DL-Assignment>
+            </FeatureSetDownlink>
+            <FeatureSetDownlink>
+                <featureSetListPerDownlinkCC>
+                    <FeatureSetDownlinkPerCC-Id>7</FeatureSetDownlinkPerCC-Id>
+                </featureSetListPerDownlinkCC>
+                <ue-SpecificUL-DL-Assignment><supported/></ue-SpecificUL-DL-Assignment>
+            </FeatureSetDownlink>
+            <FeatureSetDownlink>
+                <featureSetListPerDownlinkCC>
+                    <FeatureSetDownlinkPerCC-Id>8</FeatureSetDownlinkPerCC-Id>
+                </featureSetListPerDownlinkCC>
+                <ue-SpecificUL-DL-Assignment><supported/></ue-SpecificUL-DL-Assignment>
+            </FeatureSetDownlink>
+            <FeatureSetDownlink>
+                <featureSetListPerDownlinkCC>
+                    <FeatureSetDownlinkPerCC-Id>9</FeatureSetDownlinkPerCC-Id>
+                </featureSetListPerDownlinkCC>
+                <ue-SpecificUL-DL-Assignment><supported/></ue-SpecificUL-DL-Assignment>
+            </FeatureSetDownlink>
+            <FeatureSetDownlink>
+                <featureSetListPerDownlinkCC>
+                    <FeatureSetDownlinkPerCC-Id>10</FeatureSetDownlinkPerCC-Id>
+                </featureSetListPerDownlinkCC>
+                <ue-SpecificUL-DL-Assignment><supported/></ue-SpecificUL-DL-Assignment>
+            </FeatureSetDownlink>
+            <FeatureSetDownlink>
+                <featureSetListPerDownlinkCC>
+                    <FeatureSetDownlinkPerCC-Id>11</FeatureSetDownlinkPerCC-Id>
+                </featureSetListPerDownlinkCC>
+                <ue-SpecificUL-DL-Assignment><supported/></ue-SpecificUL-DL-Assignment>
+            </FeatureSetDownlink>
+            <FeatureSetDownlink>
+                <featureSetListPerDownlinkCC>
+                    <FeatureSetDownlinkPerCC-Id>12</FeatureSetDownlinkPerCC-Id>
+                </featureSetListPerDownlinkCC>
+                <ue-SpecificUL-DL-Assignment><supported/></ue-SpecificUL-DL-Assignment>
+            </FeatureSetDownlink>
+        </featureSetsDownlink>
+        <featureSetsDownlinkPerCC>
+            <FeatureSetDownlinkPerCC>
+                <supportedSubcarrierSpacingDL><kHz30/></supportedSubcarrierSpacingDL>
+                <supportedBandwidthDL>
+                    <fr1><mhz100/></fr1>
+                </supportedBandwidthDL>
+                <maxNumberMIMO-LayersPDSCH><fourLayers/></maxNumberMIMO-LayersPDSCH>
+                <supportedModulationOrderDL><qam256/></supportedModulationOrderDL>
+            </FeatureSetDownlinkPerCC>
+            <FeatureSetDownlinkPerCC>
+                <supportedSubcarrierSpacingDL><kHz30/></supportedSubcarrierSpacingDL>
+                <supportedBandwidthDL>
+                    <fr1><mhz100/></fr1>
+                </supportedBandwidthDL>
+                <channelBW-90mhz><supported/></channelBW-90mhz>
+                <maxNumberMIMO-LayersPDSCH><fourLayers/></maxNumberMIMO-LayersPDSCH>
+                <supportedModulationOrderDL><qam256/></supportedModulationOrderDL>
+            </FeatureSetDownlinkPerCC>
+            <FeatureSetDownlinkPerCC>
+                <supportedSubcarrierSpacingDL><kHz15/></supportedSubcarrierSpacingDL>
+                <supportedBandwidthDL>
+                    <fr1><mhz20/></fr1>
+                </supportedBandwidthDL>
+                <maxNumberMIMO-LayersPDSCH><twoLayers/></maxNumberMIMO-LayersPDSCH>
+                <supportedModulationOrderDL><qam256/></supportedModulationOrderDL>
+            </FeatureSetDownlinkPerCC>
+            <FeatureSetDownlinkPerCC>
+                <supportedSubcarrierSpacingDL><kHz15/></supportedSubcarrierSpacingDL>
+                <supportedBandwidthDL>
+                    <fr1><mhz40/></fr1>
+                </supportedBandwidthDL>
+                <maxNumberMIMO-LayersPDSCH><fourLayers/></maxNumberMIMO-LayersPDSCH>
+                <supportedModulationOrderDL><qam256/></supportedModulationOrderDL>
+            </FeatureSetDownlinkPerCC>
+            <FeatureSetDownlinkPerCC>
+                <supportedSubcarrierSpacingDL><kHz30/></supportedSubcarrierSpacingDL>
+                <supportedBandwidthDL>
+                    <fr1><mhz40/></fr1>
+                </supportedBandwidthDL>
+                <maxNumberMIMO-LayersPDSCH><fourLayers/></maxNumberMIMO-LayersPDSCH>
+                <supportedModulationOrderDL><qam256/></supportedModulationOrderDL>
+            </FeatureSetDownlinkPerCC>
+            <FeatureSetDownlinkPerCC>
+                <supportedSubcarrierSpacingDL><kHz30/></supportedSubcarrierSpacingDL>
+                <supportedBandwidthDL>
+                    <fr1><mhz80/></fr1>
+                </supportedBandwidthDL>
+                <maxNumberMIMO-LayersPDSCH><fourLayers/></maxNumberMIMO-LayersPDSCH>
+                <supportedModulationOrderDL><qam256/></supportedModulationOrderDL>
+            </FeatureSetDownlinkPerCC>
+            <FeatureSetDownlinkPerCC>
+                <supportedSubcarrierSpacingDL><kHz30/></supportedSubcarrierSpacingDL>
+                <supportedBandwidthDL>
+                    <fr1><mhz20/></fr1>
+                </supportedBandwidthDL>
+                <maxNumberMIMO-LayersPDSCH><fourLayers/></maxNumberMIMO-LayersPDSCH>
+                <supportedModulationOrderDL><qam256/></supportedModulationOrderDL>
+            </FeatureSetDownlinkPerCC>
+            <FeatureSetDownlinkPerCC>
+                <supportedSubcarrierSpacingDL><kHz15/></supportedSubcarrierSpacingDL>
+                <supportedBandwidthDL>
+                    <fr1><mhz30/></fr1>
+                </supportedBandwidthDL>
+                <maxNumberMIMO-LayersPDSCH><twoLayers/></maxNumberMIMO-LayersPDSCH>
+                <supportedModulationOrderDL><qam256/></supportedModulationOrderDL>
+            </FeatureSetDownlinkPerCC>
+            <FeatureSetDownlinkPerCC>
+                <supportedSubcarrierSpacingDL><kHz15/></supportedSubcarrierSpacingDL>
+                <supportedBandwidthDL>
+                    <fr1><mhz20/></fr1>
+                </supportedBandwidthDL>
+                <maxNumberMIMO-LayersPDSCH><fourLayers/></maxNumberMIMO-LayersPDSCH>
+                <supportedModulationOrderDL><qam256/></supportedModulationOrderDL>
+            </FeatureSetDownlinkPerCC>
+            <FeatureSetDownlinkPerCC>
+                <supportedSubcarrierSpacingDL><kHz15/></supportedSubcarrierSpacingDL>
+                <supportedBandwidthDL>
+                    <fr1><mhz15/></fr1>
+                </supportedBandwidthDL>
+                <maxNumberMIMO-LayersPDSCH><twoLayers/></maxNumberMIMO-LayersPDSCH>
+                <supportedModulationOrderDL><qam256/></supportedModulationOrderDL>
+            </FeatureSetDownlinkPerCC>
+            <FeatureSetDownlinkPerCC>
+                <supportedSubcarrierSpacingDL><kHz15/></supportedSubcarrierSpacingDL>
+                <supportedBandwidthDL>
+                    <fr1><mhz30/></fr1>
+                </supportedBandwidthDL>
+                <maxNumberMIMO-LayersPDSCH><fourLayers/></maxNumberMIMO-LayersPDSCH>
+                <supportedModulationOrderDL><qam256/></supportedModulationOrderDL>
+            </FeatureSetDownlinkPerCC>
+            <FeatureSetDownlinkPerCC>
+                <supportedSubcarrierSpacingDL><kHz30/></supportedSubcarrierSpacingDL>
+                <supportedBandwidthDL>
+                    <fr1><mhz60/></fr1>
+                </supportedBandwidthDL>
+                <maxNumberMIMO-LayersPDSCH><fourLayers/></maxNumberMIMO-LayersPDSCH>
+                <supportedModulationOrderDL><qam256/></supportedModulationOrderDL>
+            </FeatureSetDownlinkPerCC>
+        </featureSetsDownlinkPerCC>
+        <featureSetsUplink>
+            <FeatureSetUplink>
+                <featureSetListPerUplinkCC>
+                    <FeatureSetUplinkPerCC-Id>1</FeatureSetUplinkPerCC-Id>
+                </featureSetListPerUplinkCC>
+                <supportedSRS-Resources>
+                    <maxNumberAperiodicSRS-PerBWP><n16/></maxNumberAperiodicSRS-PerBWP>
+                    <maxNumberAperiodicSRS-PerBWP-PerSlot>6</maxNumberAperiodicSRS-PerBWP-PerSlot>
+                    <maxNumberPeriodicSRS-PerBWP><n16/></maxNumberPeriodicSRS-PerBWP>
+                    <maxNumberPeriodicSRS-PerBWP-PerSlot>6</maxNumberPeriodicSRS-PerBWP-PerSlot>
+                    <maxNumberSemiPersistentSRS-PerBWP><n2/></maxNumberSemiPersistentSRS-PerBWP>
+                    <maxNumberSemiPersistentSRS-PerBWP-PerSlot>2</maxNumberSemiPersistentSRS-PerBWP-PerSlot>
+                    <maxNumberSRS-Ports-PerResource><n2/></maxNumberSRS-Ports-PerResource>
+                </supportedSRS-Resources>
+            </FeatureSetUplink>
+            <FeatureSetUplink>
+                <featureSetListPerUplinkCC>
+                    <FeatureSetUplinkPerCC-Id>2</FeatureSetUplinkPerCC-Id>
+                </featureSetListPerUplinkCC>
+                <supportedSRS-Resources>
+                    <maxNumberAperiodicSRS-PerBWP><n16/></maxNumberAperiodicSRS-PerBWP>
+                    <maxNumberAperiodicSRS-PerBWP-PerSlot>6</maxNumberAperiodicSRS-PerBWP-PerSlot>
+                    <maxNumberPeriodicSRS-PerBWP><n16/></maxNumberPeriodicSRS-PerBWP>
+                    <maxNumberPeriodicSRS-PerBWP-PerSlot>6</maxNumberPeriodicSRS-PerBWP-PerSlot>
+                    <maxNumberSemiPersistentSRS-PerBWP><n2/></maxNumberSemiPersistentSRS-PerBWP>
+                    <maxNumberSemiPersistentSRS-PerBWP-PerSlot>2</maxNumberSemiPersistentSRS-PerBWP-PerSlot>
+                    <maxNumberSRS-Ports-PerResource><n2/></maxNumberSRS-Ports-PerResource>
+                </supportedSRS-Resources>
+            </FeatureSetUplink>
+            <FeatureSetUplink>
+                <featureSetListPerUplinkCC>
+                    <FeatureSetUplinkPerCC-Id>3</FeatureSetUplinkPerCC-Id>
+                </featureSetListPerUplinkCC>
+                <supportedSRS-Resources>
+                    <maxNumberAperiodicSRS-PerBWP><n16/></maxNumberAperiodicSRS-PerBWP>
+                    <maxNumberAperiodicSRS-PerBWP-PerSlot>6</maxNumberAperiodicSRS-PerBWP-PerSlot>
+                    <maxNumberPeriodicSRS-PerBWP><n16/></maxNumberPeriodicSRS-PerBWP>
+                    <maxNumberPeriodicSRS-PerBWP-PerSlot>6</maxNumberPeriodicSRS-PerBWP-PerSlot>
+                    <maxNumberSemiPersistentSRS-PerBWP><n2/></maxNumberSemiPersistentSRS-PerBWP>
+                    <maxNumberSemiPersistentSRS-PerBWP-PerSlot>2</maxNumberSemiPersistentSRS-PerBWP-PerSlot>
+                    <maxNumberSRS-Ports-PerResource><n1/></maxNumberSRS-Ports-PerResource>
+                </supportedSRS-Resources>
+            </FeatureSetUplink>
+            <FeatureSetUplink>
+                <featureSetListPerUplinkCC>
+                    <FeatureSetUplinkPerCC-Id>4</FeatureSetUplinkPerCC-Id>
+                </featureSetListPerUplinkCC>
+                <supportedSRS-Resources>
+                    <maxNumberAperiodicSRS-PerBWP><n16/></maxNumberAperiodicSRS-PerBWP>
+                    <maxNumberAperiodicSRS-PerBWP-PerSlot>6</maxNumberAperiodicSRS-PerBWP-PerSlot>
+                    <maxNumberPeriodicSRS-PerBWP><n16/></maxNumberPeriodicSRS-PerBWP>
+                    <maxNumberPeriodicSRS-PerBWP-PerSlot>6</maxNumberPeriodicSRS-PerBWP-PerSlot>
+                    <maxNumberSemiPersistentSRS-PerBWP><n2/></maxNumberSemiPersistentSRS-PerBWP>
+                    <maxNumberSemiPersistentSRS-PerBWP-PerSlot>2</maxNumberSemiPersistentSRS-PerBWP-PerSlot>
+                    <maxNumberSRS-Ports-PerResource><n1/></maxNumberSRS-Ports-PerResource>
+                </supportedSRS-Resources>
+            </FeatureSetUplink>
+            <FeatureSetUplink>
+                <featureSetListPerUplinkCC>
+                    <FeatureSetUplinkPerCC-Id>5</FeatureSetUplinkPerCC-Id>
+                </featureSetListPerUplinkCC>
+                <supportedSRS-Resources>
+                    <maxNumberAperiodicSRS-PerBWP><n16/></maxNumberAperiodicSRS-PerBWP>
+                    <maxNumberAperiodicSRS-PerBWP-PerSlot>6</maxNumberAperiodicSRS-PerBWP-PerSlot>
+                    <maxNumberPeriodicSRS-PerBWP><n16/></maxNumberPeriodicSRS-PerBWP>
+                    <maxNumberPeriodicSRS-PerBWP-PerSlot>6</maxNumberPeriodicSRS-PerBWP-PerSlot>
+                    <maxNumberSemiPersistentSRS-PerBWP><n2/></maxNumberSemiPersistentSRS-PerBWP>
+                    <maxNumberSemiPersistentSRS-PerBWP-PerSlot>2</maxNumberSemiPersistentSRS-PerBWP-PerSlot>
+                    <maxNumberSRS-Ports-PerResource><n1/></maxNumberSRS-Ports-PerResource>
+                </supportedSRS-Resources>
+            </FeatureSetUplink>
+            <FeatureSetUplink>
+                <featureSetListPerUplinkCC>
+                    <FeatureSetUplinkPerCC-Id>6</FeatureSetUplinkPerCC-Id>
+                </featureSetListPerUplinkCC>
+                <supportedSRS-Resources>
+                    <maxNumberAperiodicSRS-PerBWP><n16/></maxNumberAperiodicSRS-PerBWP>
+                    <maxNumberAperiodicSRS-PerBWP-PerSlot>6</maxNumberAperiodicSRS-PerBWP-PerSlot>
+                    <maxNumberPeriodicSRS-PerBWP><n16/></maxNumberPeriodicSRS-PerBWP>
+                    <maxNumberPeriodicSRS-PerBWP-PerSlot>6</maxNumberPeriodicSRS-PerBWP-PerSlot>
+                    <maxNumberSemiPersistentSRS-PerBWP><n2/></maxNumberSemiPersistentSRS-PerBWP>
+                    <maxNumberSemiPersistentSRS-PerBWP-PerSlot>2</maxNumberSemiPersistentSRS-PerBWP-PerSlot>
+                    <maxNumberSRS-Ports-PerResource><n1/></maxNumberSRS-Ports-PerResource>
+                </supportedSRS-Resources>
+            </FeatureSetUplink>
+            <FeatureSetUplink>
+                <featureSetListPerUplinkCC>
+                    <FeatureSetUplinkPerCC-Id>7</FeatureSetUplinkPerCC-Id>
+                </featureSetListPerUplinkCC>
+                <supportedSRS-Resources>
+                    <maxNumberAperiodicSRS-PerBWP><n16/></maxNumberAperiodicSRS-PerBWP>
+                    <maxNumberAperiodicSRS-PerBWP-PerSlot>6</maxNumberAperiodicSRS-PerBWP-PerSlot>
+                    <maxNumberPeriodicSRS-PerBWP><n16/></maxNumberPeriodicSRS-PerBWP>
+                    <maxNumberPeriodicSRS-PerBWP-PerSlot>6</maxNumberPeriodicSRS-PerBWP-PerSlot>
+                    <maxNumberSemiPersistentSRS-PerBWP><n2/></maxNumberSemiPersistentSRS-PerBWP>
+                    <maxNumberSemiPersistentSRS-PerBWP-PerSlot>2</maxNumberSemiPersistentSRS-PerBWP-PerSlot>
+                    <maxNumberSRS-Ports-PerResource><n1/></maxNumberSRS-Ports-PerResource>
+                </supportedSRS-Resources>
+            </FeatureSetUplink>
+            <FeatureSetUplink>
+                <featureSetListPerUplinkCC>
+                    <FeatureSetUplinkPerCC-Id>8</FeatureSetUplinkPerCC-Id>
+                </featureSetListPerUplinkCC>
+                <supportedSRS-Resources>
+                    <maxNumberAperiodicSRS-PerBWP><n16/></maxNumberAperiodicSRS-PerBWP>
+                    <maxNumberAperiodicSRS-PerBWP-PerSlot>6</maxNumberAperiodicSRS-PerBWP-PerSlot>
+                    <maxNumberPeriodicSRS-PerBWP><n16/></maxNumberPeriodicSRS-PerBWP>
+                    <maxNumberPeriodicSRS-PerBWP-PerSlot>6</maxNumberPeriodicSRS-PerBWP-PerSlot>
+                    <maxNumberSemiPersistentSRS-PerBWP><n2/></maxNumberSemiPersistentSRS-PerBWP>
+                    <maxNumberSemiPersistentSRS-PerBWP-PerSlot>2</maxNumberSemiPersistentSRS-PerBWP-PerSlot>
+                    <maxNumberSRS-Ports-PerResource><n1/></maxNumberSRS-Ports-PerResource>
+                </supportedSRS-Resources>
+            </FeatureSetUplink>
+            <FeatureSetUplink>
+                <featureSetListPerUplinkCC>
+                    <FeatureSetUplinkPerCC-Id>9</FeatureSetUplinkPerCC-Id>
+                </featureSetListPerUplinkCC>
+                <supportedSRS-Resources>
+                    <maxNumberAperiodicSRS-PerBWP><n16/></maxNumberAperiodicSRS-PerBWP>
+                    <maxNumberAperiodicSRS-PerBWP-PerSlot>6</maxNumberAperiodicSRS-PerBWP-PerSlot>
+                    <maxNumberPeriodicSRS-PerBWP><n16/></maxNumberPeriodicSRS-PerBWP>
+                    <maxNumberPeriodicSRS-PerBWP-PerSlot>6</maxNumberPeriodicSRS-PerBWP-PerSlot>
+                    <maxNumberSemiPersistentSRS-PerBWP><n2/></maxNumberSemiPersistentSRS-PerBWP>
+                    <maxNumberSemiPersistentSRS-PerBWP-PerSlot>2</maxNumberSemiPersistentSRS-PerBWP-PerSlot>
+                    <maxNumberSRS-Ports-PerResource><n1/></maxNumberSRS-Ports-PerResource>
+                </supportedSRS-Resources>
+            </FeatureSetUplink>
+            <FeatureSetUplink>
+                <featureSetListPerUplinkCC>
+                    <FeatureSetUplinkPerCC-Id>10</FeatureSetUplinkPerCC-Id>
+                </featureSetListPerUplinkCC>
+                <supportedSRS-Resources>
+                    <maxNumberAperiodicSRS-PerBWP><n16/></maxNumberAperiodicSRS-PerBWP>
+                    <maxNumberAperiodicSRS-PerBWP-PerSlot>6</maxNumberAperiodicSRS-PerBWP-PerSlot>
+                    <maxNumberPeriodicSRS-PerBWP><n16/></maxNumberPeriodicSRS-PerBWP>
+                    <maxNumberPeriodicSRS-PerBWP-PerSlot>6</maxNumberPeriodicSRS-PerBWP-PerSlot>
+                    <maxNumberSemiPersistentSRS-PerBWP><n2/></maxNumberSemiPersistentSRS-PerBWP>
+                    <maxNumberSemiPersistentSRS-PerBWP-PerSlot>2</maxNumberSemiPersistentSRS-PerBWP-PerSlot>
+                    <maxNumberSRS-Ports-PerResource><n1/></maxNumberSRS-Ports-PerResource>
+                </supportedSRS-Resources>
+            </FeatureSetUplink>
+            <FeatureSetUplink>
+                <featureSetListPerUplinkCC>
+                    <FeatureSetUplinkPerCC-Id>11</FeatureSetUplinkPerCC-Id>
+                </featureSetListPerUplinkCC>
+                <supportedSRS-Resources>
+                    <maxNumberAperiodicSRS-PerBWP><n16/></maxNumberAperiodicSRS-PerBWP>
+                    <maxNumberAperiodicSRS-PerBWP-PerSlot>6</maxNumberAperiodicSRS-PerBWP-PerSlot>
+                    <maxNumberPeriodicSRS-PerBWP><n16/></maxNumberPeriodicSRS-PerBWP>
+                    <maxNumberPeriodicSRS-PerBWP-PerSlot>6</maxNumberPeriodicSRS-PerBWP-PerSlot>
+                    <maxNumberSemiPersistentSRS-PerBWP><n2/></maxNumberSemiPersistentSRS-PerBWP>
+                    <maxNumberSemiPersistentSRS-PerBWP-PerSlot>2</maxNumberSemiPersistentSRS-PerBWP-PerSlot>
+                    <maxNumberSRS-Ports-PerResource><n1/></maxNumberSRS-Ports-PerResource>
+                </supportedSRS-Resources>
+            </FeatureSetUplink>
+            <FeatureSetUplink>
+                <featureSetListPerUplinkCC>
+                    <FeatureSetUplinkPerCC-Id>12</FeatureSetUplinkPerCC-Id>
+                </featureSetListPerUplinkCC>
+                <supportedSRS-Resources>
+                    <maxNumberAperiodicSRS-PerBWP><n16/></maxNumberAperiodicSRS-PerBWP>
+                    <maxNumberAperiodicSRS-PerBWP-PerSlot>6</maxNumberAperiodicSRS-PerBWP-PerSlot>
+                    <maxNumberPeriodicSRS-PerBWP><n16/></maxNumberPeriodicSRS-PerBWP>
+                    <maxNumberPeriodicSRS-PerBWP-PerSlot>6</maxNumberPeriodicSRS-PerBWP-PerSlot>
+                    <maxNumberSemiPersistentSRS-PerBWP><n2/></maxNumberSemiPersistentSRS-PerBWP>
+                    <maxNumberSemiPersistentSRS-PerBWP-PerSlot>2</maxNumberSemiPersistentSRS-PerBWP-PerSlot>
+                    <maxNumberSRS-Ports-PerResource><n1/></maxNumberSRS-Ports-PerResource>
+                </supportedSRS-Resources>
+            </FeatureSetUplink>
+            <FeatureSetUplink>
+                <featureSetListPerUplinkCC>
+                    <FeatureSetUplinkPerCC-Id>11</FeatureSetUplinkPerCC-Id>
+                </featureSetListPerUplinkCC>
+                <supportedSRS-Resources>
+                    <maxNumberAperiodicSRS-PerBWP><n1/></maxNumberAperiodicSRS-PerBWP>
+                    <maxNumberAperiodicSRS-PerBWP-PerSlot>6</maxNumberAperiodicSRS-PerBWP-PerSlot>
+                    <maxNumberPeriodicSRS-PerBWP><n16/></maxNumberPeriodicSRS-PerBWP>
+                    <maxNumberPeriodicSRS-PerBWP-PerSlot>6</maxNumberPeriodicSRS-PerBWP-PerSlot>
+                    <maxNumberSemiPersistentSRS-PerBWP><n2/></maxNumberSemiPersistentSRS-PerBWP>
+                    <maxNumberSemiPersistentSRS-PerBWP-PerSlot>2</maxNumberSemiPersistentSRS-PerBWP-PerSlot>
+                    <maxNumberSRS-Ports-PerResource><n1/></maxNumberSRS-Ports-PerResource>
+                </supportedSRS-Resources>
+            </FeatureSetUplink>
+        </featureSetsUplink>
+        <featureSetsUplinkPerCC>
+            <FeatureSetUplinkPerCC>
+                <supportedSubcarrierSpacingUL><kHz30/></supportedSubcarrierSpacingUL>
+                <supportedBandwidthUL>
+                    <fr1><mhz100/></fr1>
+                </supportedBandwidthUL>
+                <mimo-CB-PUSCH>
+                    <maxNumberMIMO-LayersCB-PUSCH><twoLayers/></maxNumberMIMO-LayersCB-PUSCH>
+                    <maxNumberSRS-ResourcePerSet>1</maxNumberSRS-ResourcePerSet>
+                </mimo-CB-PUSCH>
+                <supportedModulationOrderUL><qam256/></supportedModulationOrderUL>
+            </FeatureSetUplinkPerCC>
+            <FeatureSetUplinkPerCC>
+                <supportedSubcarrierSpacingUL><kHz30/></supportedSubcarrierSpacingUL>
+                <supportedBandwidthUL>
+                    <fr1><mhz100/></fr1>
+                </supportedBandwidthUL>
+                <channelBW-90mhz><supported/></channelBW-90mhz>
+                <mimo-CB-PUSCH>
+                    <maxNumberMIMO-LayersCB-PUSCH><twoLayers/></maxNumberMIMO-LayersCB-PUSCH>
+                    <maxNumberSRS-ResourcePerSet>1</maxNumberSRS-ResourcePerSet>
+                </mimo-CB-PUSCH>
+                <supportedModulationOrderUL><qam256/></supportedModulationOrderUL>
+            </FeatureSetUplinkPerCC>
+            <FeatureSetUplinkPerCC>
+                <supportedSubcarrierSpacingUL><kHz15/></supportedSubcarrierSpacingUL>
+                <supportedBandwidthUL>
+                    <fr1><mhz20/></fr1>
+                </supportedBandwidthUL>
+                <mimo-CB-PUSCH>
+                    <maxNumberMIMO-LayersCB-PUSCH><oneLayer/></maxNumberMIMO-LayersCB-PUSCH>
+                    <maxNumberSRS-ResourcePerSet>1</maxNumberSRS-ResourcePerSet>
+                </mimo-CB-PUSCH>
+                <supportedModulationOrderUL><qam256/></supportedModulationOrderUL>
+            </FeatureSetUplinkPerCC>
+            <FeatureSetUplinkPerCC>
+                <supportedSubcarrierSpacingUL><kHz15/></supportedSubcarrierSpacingUL>
+                <supportedBandwidthUL>
+                    <fr1><mhz40/></fr1>
+                </supportedBandwidthUL>
+                <mimo-CB-PUSCH>
+                    <maxNumberMIMO-LayersCB-PUSCH><oneLayer/></maxNumberMIMO-LayersCB-PUSCH>
+                    <maxNumberSRS-ResourcePerSet>1</maxNumberSRS-ResourcePerSet>
+                </mimo-CB-PUSCH>
+                <supportedModulationOrderUL><qam256/></supportedModulationOrderUL>
+            </FeatureSetUplinkPerCC>
+            <FeatureSetUplinkPerCC>
+                <supportedSubcarrierSpacingUL><kHz30/></supportedSubcarrierSpacingUL>
+                <supportedBandwidthUL>
+                    <fr1><mhz40/></fr1>
+                </supportedBandwidthUL>
+                <mimo-CB-PUSCH>
+                    <maxNumberMIMO-LayersCB-PUSCH><oneLayer/></maxNumberMIMO-LayersCB-PUSCH>
+                    <maxNumberSRS-ResourcePerSet>1</maxNumberSRS-ResourcePerSet>
+                </mimo-CB-PUSCH>
+                <supportedModulationOrderUL><qam256/></supportedModulationOrderUL>
+            </FeatureSetUplinkPerCC>
+            <FeatureSetUplinkPerCC>
+                <supportedSubcarrierSpacingUL><kHz30/></supportedSubcarrierSpacingUL>
+                <supportedBandwidthUL>
+                    <fr1><mhz80/></fr1>
+                </supportedBandwidthUL>
+                <mimo-CB-PUSCH>
+                    <maxNumberMIMO-LayersCB-PUSCH><oneLayer/></maxNumberMIMO-LayersCB-PUSCH>
+                    <maxNumberSRS-ResourcePerSet>1</maxNumberSRS-ResourcePerSet>
+                </mimo-CB-PUSCH>
+                <supportedModulationOrderUL><qam256/></supportedModulationOrderUL>
+            </FeatureSetUplinkPerCC>
+            <FeatureSetUplinkPerCC>
+                <supportedSubcarrierSpacingUL><kHz30/></supportedSubcarrierSpacingUL>
+                <supportedBandwidthUL>
+                    <fr1><mhz20/></fr1>
+                </supportedBandwidthUL>
+                <mimo-CB-PUSCH>
+                    <maxNumberMIMO-LayersCB-PUSCH><oneLayer/></maxNumberMIMO-LayersCB-PUSCH>
+                    <maxNumberSRS-ResourcePerSet>1</maxNumberSRS-ResourcePerSet>
+                </mimo-CB-PUSCH>
+                <supportedModulationOrderUL><qam256/></supportedModulationOrderUL>
+            </FeatureSetUplinkPerCC>
+            <FeatureSetUplinkPerCC>
+                <supportedSubcarrierSpacingUL><kHz15/></supportedSubcarrierSpacingUL>
+                <supportedBandwidthUL>
+                    <fr1><mhz30/></fr1>
+                </supportedBandwidthUL>
+                <mimo-CB-PUSCH>
+                    <maxNumberMIMO-LayersCB-PUSCH><oneLayer/></maxNumberMIMO-LayersCB-PUSCH>
+                    <maxNumberSRS-ResourcePerSet>1</maxNumberSRS-ResourcePerSet>
+                </mimo-CB-PUSCH>
+                <supportedModulationOrderUL><qam256/></supportedModulationOrderUL>
+            </FeatureSetUplinkPerCC>
+            <FeatureSetUplinkPerCC>
+                <supportedSubcarrierSpacingUL><kHz15/></supportedSubcarrierSpacingUL>
+                <supportedBandwidthUL>
+                    <fr1><mhz15/></fr1>
+                </supportedBandwidthUL>
+                <mimo-CB-PUSCH>
+                    <maxNumberMIMO-LayersCB-PUSCH><oneLayer/></maxNumberMIMO-LayersCB-PUSCH>
+                    <maxNumberSRS-ResourcePerSet>1</maxNumberSRS-ResourcePerSet>
+                </mimo-CB-PUSCH>
+                <supportedModulationOrderUL><qam256/></supportedModulationOrderUL>
+            </FeatureSetUplinkPerCC>
+            <FeatureSetUplinkPerCC>
+                <supportedSubcarrierSpacingUL><kHz30/></supportedSubcarrierSpacingUL>
+                <supportedBandwidthUL>
+                    <fr1><mhz100/></fr1>
+                </supportedBandwidthUL>
+                <mimo-CB-PUSCH>
+                    <maxNumberMIMO-LayersCB-PUSCH><oneLayer/></maxNumberMIMO-LayersCB-PUSCH>
+                    <maxNumberSRS-ResourcePerSet>1</maxNumberSRS-ResourcePerSet>
+                </mimo-CB-PUSCH>
+                <supportedModulationOrderUL><qam256/></supportedModulationOrderUL>
+            </FeatureSetUplinkPerCC>
+            <FeatureSetUplinkPerCC>
+                <supportedSubcarrierSpacingUL><kHz30/></supportedSubcarrierSpacingUL>
+                <supportedBandwidthUL>
+                    <fr1><mhz100/></fr1>
+                </supportedBandwidthUL>
+                <channelBW-90mhz><supported/></channelBW-90mhz>
+                <mimo-CB-PUSCH>
+                    <maxNumberMIMO-LayersCB-PUSCH><oneLayer/></maxNumberMIMO-LayersCB-PUSCH>
+                    <maxNumberSRS-ResourcePerSet>1</maxNumberSRS-ResourcePerSet>
+                </mimo-CB-PUSCH>
+                <supportedModulationOrderUL><qam256/></supportedModulationOrderUL>
+            </FeatureSetUplinkPerCC>
+            <FeatureSetUplinkPerCC>
+                <supportedSubcarrierSpacingUL><kHz30/></supportedSubcarrierSpacingUL>
+                <supportedBandwidthUL>
+                    <fr1><mhz60/></fr1>
+                </supportedBandwidthUL>
+                <mimo-CB-PUSCH>
+                    <maxNumberMIMO-LayersCB-PUSCH><oneLayer/></maxNumberMIMO-LayersCB-PUSCH>
+                    <maxNumberSRS-ResourcePerSet>1</maxNumberSRS-ResourcePerSet>
+                </mimo-CB-PUSCH>
+                <supportedModulationOrderUL><qam256/></supportedModulationOrderUL>
+            </FeatureSetUplinkPerCC>
+        </featureSetsUplinkPerCC>
+        <ext1>
+            <featureSetsDownlink-v1540>
+                <FeatureSetDownlink-v1540>
+                    <oneFL-DMRS-TwoAdditionalDMRS-DL><supported/></oneFL-DMRS-TwoAdditionalDMRS-DL>
+                    <twoFL-DMRS-TwoAdditionalDMRS-DL><supported/></twoFL-DMRS-TwoAdditionalDMRS-DL>
+                </FeatureSetDownlink-v1540>
+                <FeatureSetDownlink-v1540>
+                    <oneFL-DMRS-TwoAdditionalDMRS-DL><supported/></oneFL-DMRS-TwoAdditionalDMRS-DL>
+                    <twoFL-DMRS-TwoAdditionalDMRS-DL><supported/></twoFL-DMRS-TwoAdditionalDMRS-DL>
+                </FeatureSetDownlink-v1540>
+                <FeatureSetDownlink-v1540>
+                    <oneFL-DMRS-TwoAdditionalDMRS-DL><supported/></oneFL-DMRS-TwoAdditionalDMRS-DL>
+                    <twoFL-DMRS-TwoAdditionalDMRS-DL><supported/></twoFL-DMRS-TwoAdditionalDMRS-DL>
+                </FeatureSetDownlink-v1540>
+                <FeatureSetDownlink-v1540>
+                    <oneFL-DMRS-TwoAdditionalDMRS-DL><supported/></oneFL-DMRS-TwoAdditionalDMRS-DL>
+                    <twoFL-DMRS-TwoAdditionalDMRS-DL><supported/></twoFL-DMRS-TwoAdditionalDMRS-DL>
+                </FeatureSetDownlink-v1540>
+                <FeatureSetDownlink-v1540>
+                    <oneFL-DMRS-TwoAdditionalDMRS-DL><supported/></oneFL-DMRS-TwoAdditionalDMRS-DL>
+                    <twoFL-DMRS-TwoAdditionalDMRS-DL><supported/></twoFL-DMRS-TwoAdditionalDMRS-DL>
+                </FeatureSetDownlink-v1540>
+                <FeatureSetDownlink-v1540>
+                    <oneFL-DMRS-TwoAdditionalDMRS-DL><supported/></oneFL-DMRS-TwoAdditionalDMRS-DL>
+                    <twoFL-DMRS-TwoAdditionalDMRS-DL><supported/></twoFL-DMRS-TwoAdditionalDMRS-DL>
+                </FeatureSetDownlink-v1540>
+                <FeatureSetDownlink-v1540>
+                    <oneFL-DMRS-TwoAdditionalDMRS-DL><supported/></oneFL-DMRS-TwoAdditionalDMRS-DL>
+                    <twoFL-DMRS-TwoAdditionalDMRS-DL><supported/></twoFL-DMRS-TwoAdditionalDMRS-DL>
+                </FeatureSetDownlink-v1540>
+                <FeatureSetDownlink-v1540>
+                    <oneFL-DMRS-TwoAdditionalDMRS-DL><supported/></oneFL-DMRS-TwoAdditionalDMRS-DL>
+                    <twoFL-DMRS-TwoAdditionalDMRS-DL><supported/></twoFL-DMRS-TwoAdditionalDMRS-DL>
+                </FeatureSetDownlink-v1540>
+                <FeatureSetDownlink-v1540>
+                    <oneFL-DMRS-TwoAdditionalDMRS-DL><supported/></oneFL-DMRS-TwoAdditionalDMRS-DL>
+                    <twoFL-DMRS-TwoAdditionalDMRS-DL><supported/></twoFL-DMRS-TwoAdditionalDMRS-DL>
+                </FeatureSetDownlink-v1540>
+                <FeatureSetDownlink-v1540>
+                    <oneFL-DMRS-TwoAdditionalDMRS-DL><supported/></oneFL-DMRS-TwoAdditionalDMRS-DL>
+                    <twoFL-DMRS-TwoAdditionalDMRS-DL><supported/></twoFL-DMRS-TwoAdditionalDMRS-DL>
+                </FeatureSetDownlink-v1540>
+                <FeatureSetDownlink-v1540>
+                    <oneFL-DMRS-TwoAdditionalDMRS-DL><supported/></oneFL-DMRS-TwoAdditionalDMRS-DL>
+                    <twoFL-DMRS-TwoAdditionalDMRS-DL><supported/></twoFL-DMRS-TwoAdditionalDMRS-DL>
+                </FeatureSetDownlink-v1540>
+                <FeatureSetDownlink-v1540>
+                    <oneFL-DMRS-TwoAdditionalDMRS-DL><supported/></oneFL-DMRS-TwoAdditionalDMRS-DL>
+                    <twoFL-DMRS-TwoAdditionalDMRS-DL><supported/></twoFL-DMRS-TwoAdditionalDMRS-DL>
+                </FeatureSetDownlink-v1540>
+            </featureSetsDownlink-v1540>
+        </ext1>
+    </featureSets>
+    <featureSetCombinations>
+        <FeatureSetCombination>
+            <FeatureSetsPerBand>
+                    <nr>
+                        <downlinkSetNR>2</downlinkSetNR>
+                        <uplinkSetNR>2</uplinkSetNR>
+                    </nr>
+            </FeatureSetsPerBand>
+        </FeatureSetCombination>
+    </featureSetCombinations>
+    <nonCriticalExtension>
+        <interRAT-Parameters>
+            <eutra>
+                <supportedBandListEUTRA>
+                    <FreqBandIndicatorEUTRA>7</FreqBandIndicatorEUTRA>
+                    <FreqBandIndicatorEUTRA>38</FreqBandIndicatorEUTRA>
+                </supportedBandListEUTRA>
+                <eutra-ParametersCommon>
+                    <mfbi-EUTRA><supported/></mfbi-EUTRA>
+                </eutra-ParametersCommon>
+            </eutra>
+        </interRAT-Parameters>
+        <inactiveState><supported/></inactiveState>
+    </nonCriticalExtension>
+</UE-NR-Capability>