diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py
index d933c1e143932217fca90f97497419867e4049fb..184bb7bdb336090364260c2560238dd832b9733e 100644
--- a/ci-scripts/cls_containerize.py
+++ b/ci-scripts/cls_containerize.py
@@ -773,22 +773,19 @@ class Containerize():
 			mySSH.command(f'sed -i -e "s#image: {image}:latest#image: {imageToUse}#" ci-docker-compose.yml', '\$', 2)
 		localMmeIpAddr = EPC.MmeIPAddress
 		mySSH.command('sed -i -e "s/CI_MME_IP_ADDR/' + localMmeIpAddr + '/" ci-docker-compose.yml', '\$', 2)
-#		if self.flexranCtrlDeployed:
-#			mySSH.command('sed -i -e "s/FLEXRAN_ENABLED:.*/FLEXRAN_ENABLED: \'yes\'/" ci-docker-compose.yml', '\$', 2)
-#			mySSH.command('sed -i -e "s/CI_FLEXRAN_CTL_IP_ADDR/' + self.flexranCtrlIpAddress + '/" ci-docker-compose.yml', '\$', 2)
-#		else:
-#			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:
-			svcName = result.group('svc_name')
-			mySSH.command('docker-compose --file ci-docker-compose.yml up -d ' + svcName, '\$', 15)
+		svcName = self.services[self.eNB_instance]
+		if svcName == '':
+			logging.warning('no service name given: starting all services in ci-docker-compose.yml!')
+
+		mySSH.command(f'docker-compose --file ci-docker-compose.yml up -d -- {svcName}', '\$', 30)
 
 		# Checking Status
-		mySSH.command('docker-compose --file ci-docker-compose.yml config', '\$', 5)
+		grep = ''
+		if svcName != '': grep = f' | grep -A3 {svcName}'
+		mySSH.command(f'docker-compose --file ci-docker-compose.yml config {grep}', '\$', 5)
 		result = re.search('container_name: (?P<container_name>[a-zA-Z0-9\-\_]+)', mySSH.getBefore())
 		unhealthyNb = 0
 		healthyNb = 0
@@ -848,8 +845,8 @@ class Containerize():
 		else:
 			# containers are unhealthy, so we won't start. However, logs are stored at the end
 			# in UndeployObject so we here store the logs of the unhealthy container to report it
-			logfilename = f'{lSourcePath}/cmake_targets/{self.eNB_logFile[self.eNB_instance]}'
-			mySSH.command('docker logs {containerName} > {logfilename}', '\$', 30)
+			logfilename = f'{lSourcePath}/cmake_targets/log/{self.eNB_logFile[self.eNB_instance]}'
+			mySSH.command(f'docker logs {containerName} > {logfilename}', '\$', 30)
 			mySSH.copyin(lIpAddr, lUserName, lPassWord, logfilename, '.')
 		mySSH.close()
 
@@ -896,58 +893,67 @@ class Containerize():
 		mySSH = SSH.SSHConnection()
 		mySSH.open(lIpAddr, lUserName, lPassWord)
 		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 kill --signal KILL ' + containerName, '\$', 30)
-			time.sleep(5)
-			mySSH.command('docker logs ' + containerName + ' > ' + lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '\$', 30)
-			mySSH.command('docker rm -f ' + containerName, '\$', 30)
-		# Forcing the down now to remove the networks and any artifacts
-		mySSH.command('docker-compose --file ci-docker-compose.yml down', '\$', 5)
+
+		svcName = self.services[self.eNB_instance]
+		forceDown = False
+		if svcName != '':
+			logging.warning(f'service name given, but will stop all services in ci-docker-compose.yml!')
+			svcName = ''
+
+		mySSH.command(f'docker-compose -f ci-docker-compose.yml config --services', '\$', 5)
+		# first line has command, last line has next command prompt
+		allServices = mySSH.getBefore().split('\r\n')[1:-1]
+		services = []
+		for s in allServices:
+			mySSH.command(f'docker-compose -f ci-docker-compose.yml ps --all -- {s}', '\$', 5, silent=False)
+			running = mySSH.getBefore().split('\r\n')[3:-1]
+			#logging.debug(f'running services: {running}')
+			if len(running) > 0: # something is running for that service
+				services.append(s)
+		logging.info(f'stopping services {services}')
+
+		mySSH.command(f'docker-compose -f ci-docker-compose.yml stop', '\$', 30)
+		time.sleep(5)  # give some time to running containers to stop
+		for svcName in services:
+			# head -n -1 suppresses the final "X exited with status code Y"
+			filename = f'{svcName}-{HTML.testCase_id}.log'
+			#mySSH.command(f'docker-compose -f ci-docker-compose.yml logs --no-log-prefix -- {svcName} | head -n -1 &> {lSourcePath}/cmake_targets/log/{filename}', '\$', 30)
+			mySSH.command(f'docker-compose -f ci-docker-compose.yml logs --no-log-prefix -- {svcName} &> {lSourcePath}/cmake_targets/log/{filename}', '\$', 30)
+
+		mySSH.command('docker-compose -f ci-docker-compose.yml down', '\$', 5)
 		# Cleaning any created tmp volume
-		mySSH.command('docker volume prune --force || true', '\$', 20)
+		mySSH.command('docker volume prune --force', '\$', 20)
 
 		mySSH.close()
 
 		# Analyzing log file!
-		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!'
+		files = ','.join([f'{s}-{HTML.testCase_id}' for s in services])
+		if len(services) > 1:
+			files = '{' + files + '}'
+		copyin_res = 0
+		if len(services) > 0:
+			copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, f'{lSourcePath}/cmake_targets/log/{files}.log', '.')
+		if copyin_res == -1:
+			HTML.htmleNBFailureMsg='Could not copy logfile to analyze it!'
 			HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
+			self.exitStatus = 1
 		else:
-			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, self.ran_checkers)
-			else:
-				logStatus = 0
-			if (logStatus < 0):
-				HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
-			else:
-				HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
+			for svcName in services:
+				filename = f'{svcName}-{HTML.testCase_id}.log'
+				logging.debug(f'\u001B[1m Analyzing logfile {filename}\u001B[0m')
+				logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers)
+				if (logStatus < 0):
+					HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
+					self.exitStatus = 1
+				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 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')
+			if self.eNB_serverId[self.eNB_instance] != '0':
+				mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, f'./{files}.log', f'{self.eNBSourceCodePath}/cmake_targets/')
+		if self.exitStatus == 0:
+			logging.info('\u001B[1m Undeploying OAI Object Pass\u001B[0m')
+		else:
+			logging.error('\u001B[1m Undeploying OAI Object Failed\u001B[0m')
 
 	def DeployGenObject(self, HTML, RAN, UE):
 		self.exitStatus = 0
diff --git a/ci-scripts/conf_files/gNB_SA_CU.conf b/ci-scripts/conf_files/gNB_SA_CU.conf
index 81635f7eb203bea1eca8f6292eb1a3d369df3997..a5036e354dfb25736fc81a51195b0a3f538ccfdb 100644
--- a/ci-scripts/conf_files/gNB_SA_CU.conf
+++ b/ci-scripts/conf_files/gNB_SA_CU.conf
@@ -19,6 +19,7 @@ gNBs =
 
 
     nr_cellid = 12345678L;
+    force_256qam_off = 1;
 
     tr_s_preference = "f1";
 
diff --git a/ci-scripts/conf_files/gNB_SA_DU.conf b/ci-scripts/conf_files/gNB_SA_DU.conf
index 2a2524cb8779bd3de3ce70240c47f6289788a246..ca5aba10c094c28f14f9c3724f08495a5c701d1b 100644
--- a/ci-scripts/conf_files/gNB_SA_DU.conf
+++ b/ci-scripts/conf_files/gNB_SA_DU.conf
@@ -22,6 +22,7 @@ gNBs =
     ////////// Physical parameters:
 
     min_rxtxtime                                              = 6;
+    force_256qam_off = 1;
 
     pdcch_ConfigSIB1 = (
       {
@@ -57,7 +58,7 @@ gNBs =
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
         initialDLBWPsubcarrierSpacing                                           = 1;
       #pdcch-ConfigCommon
-        initialDLBWPcontrolResourceSetZero                              = 11;
+        initialDLBWPcontrolResourceSetZero                              = 12;
         initialDLBWPsearchSpaceZero                                             = 0;
 
   #uplinkConfigCommon 
@@ -181,7 +182,8 @@ MACRLCs = (
     local_n_portd   = 2152;
     remote_n_portc  = 501;
     remote_n_portd  = 2152;
-
+    pusch_TargetSNRx10          = 200;
+    pucch_TargetSNRx10          = 200;
   }
 );
 
diff --git a/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.usrpb210.conf b/ci-scripts/conf_files/gnb.sa.band78.fr1.51PRB.usrpb210.conf
similarity index 79%
rename from ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.usrpb210.conf
rename to ci-scripts/conf_files/gnb.sa.band78.fr1.51PRB.usrpb210.conf
index b82944805a12d714552a5295dbf3bcde9df86e75..6080ac58aa135bcb2c638ca14b65a3037181e2f3 100644
--- a/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/gnb.sa.band78.fr1.51PRB.usrpb210.conf
@@ -17,9 +17,8 @@ gNBs =
 
     ////////// Physical parameters:
 
-    min_rxtxtime                                              = 2;
-    do_CSIRS                                                  = 1;
-    do_SRS                                                    = 1;
+    do_CSIRS                                                  = 0;
+    do_SRS                                                    = 0;
 
      pdcch_ConfigSIB1 = (
       {
@@ -36,21 +35,21 @@ gNBs =
 
 #  downlinkConfigCommon
     #frequencyInfoDL
-      # this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
-      absoluteFrequencySSB                                             = 641280;
+      # this is 3300.30 MHz + (19 PRBs + 10 SCs)@30kHz SCS (GSCN: 7715)
+      absoluteFrequencySSB                                             = 620736;
       dl_frequencyBand                                                 = 78;
-      # this is 3600 MHz
-      dl_absoluteFrequencyPointA                                       = 640008;
+      # this is 3300.30 MHz
+      dl_absoluteFrequencyPointA                                       = 620020;
       #scs-SpecificCarrierList
         dl_offstToCarrier                                              = 0;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
         dl_subcarrierSpacing                                           = 1;
-        dl_carrierBandwidth                                            = 106;
+        dl_carrierBandwidth                                            = 51;
      #initialDownlinkBWP
       #genericParameters
         # this is RBstart=27,L=48 (275*(L-1))+RBstart
-        initialDLBWPlocationAndBandwidth                               = 28875; # 6366 12925 12956 28875 12952
+        initialDLBWPlocationAndBandwidth                               = 13750;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
         initialDLBWPsubcarrierSpacing                                   = 1;
@@ -66,11 +65,11 @@ gNBs =
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
       ul_subcarrierSpacing                                          = 1;
-      ul_carrierBandwidth                                           = 106;
+      ul_carrierBandwidth                                           = 51;
       pMax                                                          = 20;
      #initialUplinkBWP
       #genericParameters
-        initialULBWPlocationAndBandwidth                            = 28875;
+        initialULBWPlocationAndBandwidth                            = 13750;
 # subcarrierSpacing
 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
         initialULBWPsubcarrierSpacing                               = 1;
@@ -156,65 +155,6 @@ gNBs =
 
   );
 
-# Dedicated Serving Cell Configuration
-servingCellConfigDedicated = ({
-  # BWP-Downlink
-    # BWP 1 Configuration
-      dl_bwp-Id_1 = 1;
-      dl_bwp1_locationAndBandwidth = 28875; // RBstart=0, L=106 (40 MHz BW)
-      # subcarrierSpacing
-      # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
-      dl_bwp1_subcarrierSpacing = 1;
-
-    # BWP 2 Configuration
-      dl_bwp-Id_2 = 2;
-      dl_bwp2_locationAndBandwidth = 13750; // RBstart=0, L=51 (20 MHz BW)
-      # subcarrierSpacing
-      # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
-      dl_bwp2_subcarrierSpacing = 1;
-
-    # BWP 3 Configuration
-      dl_bwp-Id_3 = 3;
-      dl_bwp3_locationAndBandwidth = 6325; // RBstart=0, L=24 (10 MHz BW)
-      # subcarrierSpacing
-      # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
-      dl_bwp3_subcarrierSpacing = 1;
-
-    firstActiveDownlinkBWP-Id = 1;  #BWP-Id
-    defaultDownlinkBWP-Id     = 1;  #BWP-Id
-
-    # bwp-InactivityTimer                 ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30,
-    #                                                ms40,ms50, ms60, ms80,ms100, ms200,ms300, ms500,
-    #                                                ms750, ms1280, ms1920, ms2560, spare10, spare9, spare8,
-    #                                                spare7, spare6, spare5, spare4, spare3, spare2, spare1 }
-
-  # UplinkConfig
-    # BWP-Uplink
-      # BWP 1 Configuration
-        ul_bwp-Id_1 = 1;
-        ul_bwp1_locationAndBandwidth = 28875; // RBstart=0, L=106 (40 MHz BW)
-        # subcarrierSpacing
-        # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
-        ul_bwp1_subcarrierSpacing = 1;
-
-      # BWP 2 Configuration
-        ul_bwp-Id_2 = 2;
-        ul_bwp2_locationAndBandwidth = 13750; // RBstart=0, L=51 (20 MHz BW)
-        # subcarrierSpacing
-        # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
-        ul_bwp2_subcarrierSpacing = 1;
-
-      # BWP 3 Configuration
-        ul_bwp-Id_3 = 3;
-        ul_bwp3_locationAndBandwidth = 6325; // RBstart=0, L=24 (10 MHz BW)
-        # subcarrierSpacing
-        # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
-        ul_bwp3_subcarrierSpacing = 1;
-
-      firstActiveUplinkBWP-Id = 1;  #BWP-Id
-  }
-);
-
     # ------- SCTP definitions
     SCTP :
     {
@@ -252,6 +192,7 @@ MACRLCs = (
   tr_n_preference             = "local_RRC";
   pusch_TargetSNRx10          = 200;
   pucch_TargetSNRx10          = 200;
+  ul_prbblack_SNR_threshold   = 10;
   ulsch_max_frame_inactivity  = 0;
 }
 );
@@ -271,8 +212,8 @@ RUs = (
   local_rf       = "yes"
   nb_tx          = 1
   nb_rx          = 1
-  att_tx         = 10;
-  att_rx         = 10;
+  att_tx         = 14;
+  att_rx         = 14;
   bands          = [78];
   max_pdschReferenceSignalPower = -27;
   max_rxgain                    = 114;
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index d60477427e814a2a26b6a43d73ef5afb7f4803de..f1ec41a1e7beb7c461b35fcce1a94cf4555b452d 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -423,6 +423,9 @@ def GetParametersFromXML(action):
 		string_field=test.findtext('u_retx_th')
 		if (string_field is not None):
 			CONTAINERS.ran_checkers['u_retx_th'] = [float(x) for x in string_field.split(',')]
+		string_field = test.findtext('services')
+		if string_field is not None:
+			CONTAINERS.services[CONTAINERS.eNB_instance] = string_field
 
 	elif action == 'DeployGenObject' or action == 'UndeployGenObject' or action == 'StatsFromGenObject':
 		string_field=test.findtext('yaml_path')
@@ -986,6 +989,9 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
 						RAN.prematureExit = True
 				elif action == 'Undeploy_Object':
 					CONTAINERS.UndeployObject(HTML, RAN)
+					if CONTAINERS.exitStatus == 1:
+						CiTestObj.AutoTerminateeNB(HTML,RAN,EPC,CONTAINERS)
+						RAN.prematureExit = True
 				elif action == 'Cppcheck_Analysis':
 					SCA.CppCheckAnalysis(HTML)
 				elif action == 'LicenceAndFormattingCheck':
diff --git a/ci-scripts/ran.py b/ci-scripts/ran.py
index da2ac9a401b71fa622a430e6da4b892d853f0eaf..c758e620b7bfffe868469189f1526bc75089734c 100644
--- a/ci-scripts/ran.py
+++ b/ci-scripts/ran.py
@@ -748,7 +748,7 @@ 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 enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png ping*.log* iperf*.log log/*/*.log log/*/*.pcap', '\$', 60)
+		mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip *.log enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png ping*.log* iperf*.log 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
@@ -771,13 +771,13 @@ class RANManagement():
 			#case where numerator > denumerator with denum ==0 is disregarded, cannot hapen in principle, will lead to 0%
 			perc[i] = 0 if (retx_data[i] == 0) else 100 * retx_data[i + 1] / retx_data[i]
 			#treating % > 100 , % > requirement
-			stats[i] = perc[i] < 100 and perc[i] <= checkers[i]
+			stats[i] = perc[i] <= 100 and perc[i] <= checkers[i]
 		return stats
 
 	def AnalyzeLogFile_eNB(self, eNBlogFile, HTML, checkers={}):
-		if (not os.path.isfile('./' + eNBlogFile)):
+		if (not os.path.isfile(eNBlogFile)):
 			return -1
-		enb_log_file = open('./' + eNBlogFile, 'r')
+		enb_log_file = open(eNBlogFile, 'r')
 		exitSignalReceived = False
 		foundAssertion = False
 		msgAssertion = ''
@@ -1048,10 +1048,7 @@ class RANManagement():
 					gnb_markers[k].append(line_cnt)
 
 			# check whether e/gNB log finishes with "Bye." message
-			# Note that it is "=" not "|=" so not only is the regex
-			# asking for EOF (\Z) but we also only retain the last
-			# line's result
-			showedByeMsg = re.search(r'^Bye.\n\Z', str(line), re.MULTILINE) is not None
+			showedByeMsg |= re.search(r'^Bye.\n', str(line), re.MULTILINE) is not None
 
 		enb_log_file.close()
 
diff --git a/ci-scripts/xml_files/container_sa_b200_quectel.xml b/ci-scripts/xml_files/container_sa_b200_quectel.xml
index 016a3f34ec26c01f27d348d124f39152d8ee04e1..53cfbf80cb739d4f56fe5321b8311ac25e37b59c 100644
--- a/ci-scripts/xml_files/container_sa_b200_quectel.xml
+++ b/ci-scripts/xml_files/container_sa_b200_quectel.xml
@@ -22,7 +22,7 @@
 -->
 <testCaseList>
   <htmlTabRef>TEST-SA-FR1-B200</htmlTabRef>
-  <htmlTabName>SA SanityCheck with QUECTEL</htmlTabName>
+  <htmlTabName>40 MHz TDD SA</htmlTabName>
   <htmlTabIcon>tasks</htmlTabIcon>
   <repeatCount>1</repeatCount>
   <TestCaseRequestedList>
@@ -34,13 +34,13 @@
     000001
     050000
     050001
+    070001
+    070000
     010002
     000001
     030201
   </TestCaseRequestedList>
     <!--
- 070001
- 070000
  070002
  050002
  050003
@@ -126,8 +126,8 @@
 
   <testCase id="070000">
     <class>Iperf</class>
-    <desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
-    <iperf_args>-u -b 125M -t 60 -i 1 -fm</iperf_args>
+    <desc>iperf (DL/30Mbps/UDP)(30 sec)(single-ue profile)</desc>
+    <iperf_args>-u -b 30M -t 30 -i 1 -fm -l1400</iperf_args>
     <direction>DL</direction>
     <id>idefix</id>
     <iperf_packetloss_threshold>25</iperf_packetloss_threshold>
@@ -137,8 +137,8 @@
 
   <testCase id="070001">
     <class>Iperf</class>
-    <desc>iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile)</desc>
-    <iperf_args>-u -b 8M -t 60 -i 1 -fm</iperf_args>
+    <desc>iperf (UL/8Mbps/UDP)(30 sec)(single-ue profile)</desc>
+    <iperf_args>-u -b 8M -t 30 -i 1 -fm -l1400</iperf_args>
     <direction>UL</direction>
     <id>idefix</id>
     <iperf_packetloss_threshold>1</iperf_packetloss_threshold>
diff --git a/ci-scripts/xml_files/container_sa_b200_terminate.xml b/ci-scripts/xml_files/container_sa_b200_terminate.xml
index 8e7e0eff4487d786a8aa81ba7ad6b7774c1e242a..bddc94aedf03ead6cad98cdfd593e1be4460747b 100644
--- a/ci-scripts/xml_files/container_sa_b200_terminate.xml
+++ b/ci-scripts/xml_files/container_sa_b200_terminate.xml
@@ -22,12 +22,11 @@
 -->
 <testCaseList>
   <htmlTabRef>TEST-SA-FR1-B200-terminate</htmlTabRef>
-  <htmlTabName>SA tear-down in case of problem</htmlTabName>
+  <htmlTabName>Tear-down</htmlTabName>
   <htmlTabIcon>tasks</htmlTabIcon>
   <repeatCount>1</repeatCount>
   <TestCaseRequestedList>
   030201
-  222222
   </TestCaseRequestedList>
   <TestCaseExclusionList></TestCaseExclusionList>
 
@@ -35,15 +34,8 @@
     <class>Undeploy_Object</class>
     <desc>Undeploy gNB</desc>
     <yaml_path>ci-scripts/yaml_files/sa_b200_gnb</yaml_path>
-    <eNB_instance>1</eNB_instance>
-    <eNB_serverId>1</eNB_serverId>
-    <image_tag>sa-test</image_tag>
-  </testCase>
-
-  <testCase id="222222">
-    <class>Clean_Test_Server_Images</class>
-    <desc>Clean Test Images on Test Server</desc>
-    <test_svr_id>0</test_svr_id>
+    <eNB_instance>0</eNB_instance>
+    <eNB_serverId>0</eNB_serverId>
   </testCase>
 
 </testCaseList>
diff --git a/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml b/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..16081f906a353de900a525adcb78c164bdf7df07
--- /dev/null
+++ b/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml
@@ -0,0 +1,172 @@
+<!--
+
+ 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-SA-FR1-F1-B200</htmlTabRef>
+  <htmlTabName>40 MHz TDD F1 SA</htmlTabName>
+  <htmlTabIcon>tasks</htmlTabIcon>
+  <repeatCount>1</repeatCount>
+  <TestCaseRequestedList>
+    110002
+    130101
+    130102
+    100001
+    110000
+    100001
+    150000
+    150001
+    110002
+    100001
+    130201
+  </TestCaseRequestedList>
+    <!--
+ 070001
+ 070000
+ 070002
+ 050002
+ 050003
+    -->
+  <TestCaseExclusionList></TestCaseExclusionList>
+
+  <testCase id="110000">
+    <class>Initialize_UE</class>
+    <desc>Initialize Quectel</desc>
+    <id>idefix</id>
+  </testCase>
+
+
+  <testCase id="110002">
+    <class>Terminate_UE</class>
+    <desc>Terminate Quectel</desc>
+    <id>idefix</id>
+  </testCase>
+
+  <testCase id="130101">
+    <class>Deploy_Object</class>
+    <desc>Deploy gNB-CU in a container</desc>
+    <yaml_path>ci-scripts/yaml_files/sa_f1_b200_gnb</yaml_path>
+    <eNB_instance>0</eNB_instance>
+    <eNB_serverId>0</eNB_serverId>
+    <services>gnb_cu</services>
+  </testCase>
+
+  <testCase id="130102">
+    <class>Deploy_Object</class>
+    <desc>Deploy gNB-DU (TDD/Band78/40MHz/B200) in a container</desc>
+    <yaml_path>ci-scripts/yaml_files/sa_f1_b200_gnb</yaml_path>
+    <eNB_instance>0</eNB_instance>
+    <eNB_serverId>0</eNB_serverId>
+    <services>gnb_du_tdd</services>
+  </testCase>
+
+  <testCase id="100001">
+    <class>IdleSleep</class>
+    <desc>Sleep</desc>
+    <idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
+  </testCase>
+
+  <testCase id="100002">
+    <class>IdleSleep</class>
+    <desc>Sleep</desc>
+    <idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
+  </testCase>
+
+
+  <testCase id="150000">
+    <class>Ping</class>
+    <desc>Ping: 20pings in 20sec</desc>
+    <id>idefix</id>
+    <ping_args>-c 20</ping_args>
+    <ping_packetloss_threshold>1</ping_packetloss_threshold>
+    <ping_rttavg_threshold>25</ping_rttavg_threshold>
+  </testCase>
+
+  <testCase id="150001">
+    <class>Ping</class>
+    <desc>Ping: 100pings in 20sec</desc>
+    <id>idefix</id>
+    <ping_args>-c 100 -i 0.2</ping_args>
+    <ping_packetloss_threshold>1</ping_packetloss_threshold>
+    <ping_rttavg_threshold>110</ping_rttavg_threshold>
+  </testCase>
+
+  <testCase id="150002">
+    <class>Ping</class>
+    <desc>Ping: 20pings in 20sec</desc>
+    <id>idefix</id>
+    <ping_args>-c 20</ping_args>
+    <ping_packetloss_threshold>1</ping_packetloss_threshold>
+    <ping_rttavg_threshold>110</ping_rttavg_threshold>
+  </testCase>
+
+  <testCase id="150003">
+    <class>Ping</class>
+    <desc>Ping: 100pings in 20sec</desc>
+    <id>idefix</id>
+    <ping_args>-c 100 -i 0.2</ping_args>
+    <ping_packetloss_threshold>1</ping_packetloss_threshold>
+    <ping_rttavg_threshold>110</ping_rttavg_threshold>
+  </testCase>
+
+  <testCase id="170000">
+    <class>Iperf</class>
+    <desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
+    <iperf_args>-u -b 125M -t 60 -i 1 -fm</iperf_args>
+    <direction>DL</direction>
+    <id>idefix</id>
+    <iperf_packetloss_threshold>25</iperf_packetloss_threshold>
+    <iperf_bitrate_threshold>80</iperf_bitrate_threshold>
+    <iperf_profile>single-ue</iperf_profile>
+  </testCase>
+
+  <testCase id="170001">
+    <class>Iperf</class>
+    <desc>iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile)</desc>
+    <iperf_args>-u -b 8M -t 60 -i 1 -fm</iperf_args>
+    <direction>UL</direction>
+    <id>idefix</id>
+    <iperf_packetloss_threshold>1</iperf_packetloss_threshold>
+    <iperf_bitrate_threshold>95</iperf_bitrate_threshold>
+    <iperf_profile>single-ue</iperf_profile>
+  </testCase>
+
+  <testCase id="170002">
+    <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="130201">
+    <class>Undeploy_Object</class>
+    <desc>Undeploy CU-DU</desc>
+    <yaml_path>ci-scripts/yaml_files/sa_f1_b200_gnb</yaml_path>
+    <eNB_instance>0</eNB_instance>
+    <eNB_serverId>0</eNB_serverId>
+    <d_retx_th>1,100,100,100</d_retx_th>
+    <u_retx_th>1,100,100,100</u_retx_th>
+  </testCase>
+
+</testCaseList>
+
diff --git a/ci-scripts/xml_files/container_sa_f1_b200_terminate.xml b/ci-scripts/xml_files/container_sa_f1_b200_terminate.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cd8445f9ce8f3cda7a6e1a58289610340ffddfee
--- /dev/null
+++ b/ci-scripts/xml_files/container_sa_f1_b200_terminate.xml
@@ -0,0 +1,48 @@
+<!--
+
+ 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-SA-FR1-F1-B200-terminate</htmlTabRef>
+  <htmlTabName>Tear-down</htmlTabName>
+  <htmlTabIcon>tasks</htmlTabIcon>
+  <repeatCount>1</repeatCount>
+  <TestCaseRequestedList>
+  230201
+  222222
+  </TestCaseRequestedList>
+  <TestCaseExclusionList></TestCaseExclusionList>
+
+  <testCase id="230201">
+    <class>Undeploy_Object</class>
+    <desc>Undeploy CU-DU</desc>
+    <yaml_path>ci-scripts/yaml_files/sa_f1_b200_gnb</yaml_path>
+    <eNB_instance>0</eNB_instance>
+    <eNB_serverId>0</eNB_serverId>
+  </testCase>
+
+  <testCase id="222222">
+    <class>Clean_Test_Server_Images</class>
+    <desc>Clean Test Images on Test Server</desc>
+    <test_svr_id>0</test_svr_id>
+  </testCase>
+
+</testCaseList>
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 952732f22dd1c5c798fa20cd513eb7f5169d4f18..5765a33351ed8376d28e6d2c1a28beca4f15da0c 100644
--- a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
@@ -270,7 +270,7 @@ services:
         container_name: rfsim5g-oai-du
         environment: 
             RFSIMULATOR: server
-            USE_SA_TDD_CU: 'yes'
+            USE_SA_TDD_DU: 'yes'
             GNB_NAME: du-rfsim
             TAC: 1
             MCC: '208'
diff --git a/ci-scripts/yaml_files/sa_b200_gnb/docker-compose.yml b/ci-scripts/yaml_files/sa_b200_gnb/docker-compose.yml
index 9ea52c12477a8436cd1a12cb991222a0321e950d..32655ffe772a1850463ef3e7ce82cc16df41501a 100644
--- a/ci-scripts/yaml_files/sa_b200_gnb/docker-compose.yml
+++ b/ci-scripts/yaml_files/sa_b200_gnb/docker-compose.yml
@@ -20,7 +20,7 @@ services:
             GNB_NGA_IP_ADDRESS: 192.168.68.194
             GNB_NGU_IF_NAME: eth0
             GNB_NGU_IP_ADDRESS: 192.168.68.194
-            USE_ADDITIONAL_OPTIONS: --sa -E -q --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function
+            USE_ADDITIONAL_OPTIONS: --sa --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function
         volumes:
             - /dev:/dev
         networks:
diff --git a/ci-scripts/yaml_files/sa_f1_b200_gnb/docker-compose.yml b/ci-scripts/yaml_files/sa_f1_b200_gnb/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..05b6ee03bc4ac95749c2c3ae142d4370616e8a84
--- /dev/null
+++ b/ci-scripts/yaml_files/sa_f1_b200_gnb/docker-compose.yml
@@ -0,0 +1,89 @@
+version: '3.8'
+
+services:
+    gnb_cu:
+        image: oai-gnb:latest
+        privileged: true
+        container_name: sa-cu-gnb
+        environment:
+            USE_SA_CU: 'yes'
+            USE_B2XX: 'yes'
+            GNB_NAME: gNB-CU-in-docker
+            MCC: '222'
+            MNC: '01'
+            MNC_LENGTH: 2
+            TAC: 1
+            NSSAI_SST: 1
+            NSSAI_SD0: 1
+            NSSAI_SD1: 2
+            AMF_IP_ADDRESS: 172.21.16.136
+            GNB_NGA_IF_NAME: eth0
+            GNB_NGA_IP_ADDRESS: 192.168.68.194
+            GNB_NGU_IF_NAME: eth0
+            GNB_NGU_IP_ADDRESS: 192.168.68.194
+            F1_IF_NAME: eth0
+            F1_CU_IP_ADDRESS: 192.168.68.194
+            F1_DU_IP_ADDRESS: 192.168.68.195
+            F1_CU_D_PORT: 2153
+            F1_DU_D_PORT: 2153
+            USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time,line_num,function
+        volumes:
+            - /dev:/dev
+        networks:
+            public_net:
+                ipv4_address: 192.168.68.194
+        #entrypoint: /bin/bash -c "sleep infinity"
+        healthcheck:
+            # pgrep does NOT work
+            test: /bin/bash -c "ps aux | grep -v grep | grep -c softmodem"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    gnb_du_tdd:
+        image: oai-gnb:latest
+        privileged: true
+        container_name: sa-du-b200-gnb
+        environment:
+            USE_SA_TDD_DU: 'yes'
+            USE_B2XX: 'yes'
+            GNB_NAME: gNB-DU-in-docker
+            MCC: '222'
+            MNC: '01'
+            MNC_LENGTH: 2
+            TAC: 1
+            NSSAI_SST: 1
+            NSSAI_SD0: 1
+            NSSAI_SD1: 2
+            AMF_IP_ADDRESS: 172.21.16.136
+            GNB_NGA_IF_NAME: eth0
+            GNB_NGA_IP_ADDRESS: 192.168.68.194
+            GNB_NGU_IF_NAME: eth0
+            GNB_NGU_IP_ADDRESS: 192.168.68.194
+            F1_IF_NAME: eth0
+            F1_CU_IP_ADDRESS: 192.168.68.194
+            F1_DU_IP_ADDRESS: 192.168.68.195
+            F1_CU_D_PORT: 2153
+            F1_DU_D_PORT: 2153
+            USE_ADDITIONAL_OPTIONS: --sa --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx -E --log_config.global_log_options level,nocolor,time,line_num,function --gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 1 --RUs.[0].att_rx 14 --RUs.[0].att_tx 14
+        volumes:
+            - /dev:/dev
+        networks:
+            public_net:
+                ipv4_address: 192.168.68.195
+        #entrypoint: /bin/bash -c "sleep infinity"
+        healthcheck:
+            # pgrep does NOT work
+            test: /bin/bash -c "ps aux | grep -v grep | grep -c softmodem"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+networks:
+    public_net:
+        name: sa-b200-gnb-net
+        ipam:
+            config:
+                - subnet: 192.168.68.192/26
+        driver_opts:
+            com.docker.network.bridge.name: "sa-gnb-net"
diff --git a/docker/scripts/generateTemplate.py b/docker/scripts/generateTemplate.py
index 1d5dbb5cb5369b9fb6645688cfd8815e1af3e583..9ad4f3c5e66d0d3ba7fff75ccca03471284f87f8 100644
--- a/docker/scripts/generateTemplate.py
+++ b/docker/scripts/generateTemplate.py
@@ -60,7 +60,7 @@ def main():
                              "rcc.band40.tm1.25PRB": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
                              "gnb.band78.tm1.fr1.106PRB.usrpb210.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
                              "gnb.band78.sa.fr1.106PRB.usrpn310.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
-                             "gnb.sa.band78.fr1.106PRB.usrpb210.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
+                             "gnb.sa.band78.fr1.51PRB.usrpb210.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
                              "gnb.sa.band66.fr1.106PRB.usrpn300.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
                              "gNB_SA_CU.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
                              "gNB_SA_DU.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
diff --git a/docker/scripts/gnb_entrypoint.sh b/docker/scripts/gnb_entrypoint.sh
index c3c4ef0b2d3f251de5d0cd384428fd9a9c640034..bb1bd50555737e641f1ca91ae7c64bc00d423c20 100755
--- a/docker/scripts/gnb_entrypoint.sh
+++ b/docker/scripts/gnb_entrypoint.sh
@@ -13,7 +13,7 @@ if [[ -v USE_SA_TDD_MONO ]]; then cp $PREFIX/etc/gnb.sa.tdd.conf $PREFIX/etc/gnb
 if [[ -v USE_SA_TDD_MONO_B2XX ]]; then cp $PREFIX/etc/gnb.sa.tdd.b2xx.conf $PREFIX/etc/gnb.conf; fi
 if [[ -v USE_SA_FDD_MONO ]]; then cp $PREFIX/etc/gnb.sa.fdd.conf $PREFIX/etc/gnb.conf; fi
 if [[ -v USE_SA_CU ]]; then cp $PREFIX/etc/gnb.sa.cu.conf $PREFIX/etc/gnb.conf; fi
-if [[ -v USE_SA_TDD_CU ]]; then cp $PREFIX/etc/gnb.sa.du.tdd.conf $PREFIX/etc/gnb.conf; fi
+if [[ -v USE_SA_TDD_DU ]]; then cp $PREFIX/etc/gnb.sa.du.tdd.conf $PREFIX/etc/gnb.conf; fi
 if [[ -v USE_SA_NFAPI_VNF ]]; then cp $PREFIX/etc/gnb.sa.nfapi.vnf.conf $PREFIX/etc/gnb.conf; fi
 # Sometimes, the templates are not enough. We mount a conf file on $PREFIX/etc. It can be a template itself.
 if [[ -v USE_VOLUMED_CONF ]]; then cp $PREFIX/etc/mounted.conf $PREFIX/etc/gnb.conf; fi
diff --git a/docker/scripts/gnb_parameters.yaml b/docker/scripts/gnb_parameters.yaml
index 524c6fbb4230e9f9701330b2c5294b17893cedbb..0d1a02974b69501bb211fd8843bd61b67db7bd87 100644
--- a/docker/scripts/gnb_parameters.yaml
+++ b/docker/scripts/gnb_parameters.yaml
@@ -109,7 +109,7 @@
     - key: parallel_config
       env: "@THREAD_PARALLEL_CONFIG@"
 
-  - filePrefix: gnb.sa.band78.fr1.106PRB.usrpb210.conf
+  - filePrefix: gnb.sa.band78.fr1.51PRB.usrpb210.conf
     outputfilename: "gnb.sa.tdd.b2xx.conf"
     config:
     - key: gNB_ID
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb.conf
index 730b7e2832a84304b35c3aff38925d00cabb1bd2..5dcff74a6f103083ebacf7947c4752b044e6d287 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb.conf
@@ -18,6 +18,7 @@ gNBs =
     plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1 }) });
 
     nr_cellid = 12345678L;
+    force_256qam_off = 1;
 
     tr_s_preference = "f1";
 
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf b/targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf
index 257f487aa5dbf802f3a850b09bba8064f18c7b8b..bbce460a11d2f7f59244ccc70640cff3d5853c8a 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf
@@ -21,6 +21,7 @@ gNBs =
     ////////// Physical parameters:
 
     min_rxtxtime                                              = 6;
+    force_256qam_off = 1;
 
     pdcch_ConfigSIB1 = (
       {