diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index 5577f707fb7a3f620a3c3dc2ade58b9883719f6b..707ffa1b5d4ab3869865f2e24bec8fed749639bd 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -2471,19 +2471,14 @@ class SSHConnection():
 		if (not os.path.isfile('./' + UElogFile)):
 			return -1
 		ue_log_file = open('./' + UElogFile, 'r')
-<<<<<<< HEAD
 		exitSignalReceived = False
-=======
->>>>>>> origin/develop-nr
 		foundAssertion = False
 		msgAssertion = ''
 		msgLine = 0
 		foundSegFault = False
 		foundRealTimeIssue = False
-<<<<<<< HEAD
 		uciStatMsgCount = 0
 		pdcpDataReqFailedCount = 0
-		badDciCount = 0
 		rrcConnectionRecfgComplete = 0
 		no_cell_sync_found = False
 		mib_found = False
@@ -2505,35 +2500,11 @@ class SSHConnection():
 				foundAssertion = True
 			result = re.search('LLL', str(line))
 			if result is not None and not exitSignalReceived:
-=======
-		rlcDiscardBuffer = 0
-		rachCanceledProcedure = 0
-		uciStatMsgCount = 0
-		pdcpFailure = 0
-		ulschFailure = 0
-		no_cell_sync_found = False
-		mib_found = False
-		frequency_found = False
-		self.htmlUEFailureMsg = ''
-		for line in ue_log_file.readlines():
-			result = re.search('[Ss]egmentation [Ff]ault', str(line))
-			if result is not None:
-				foundSegFault = True
-			result = re.search('[Cc]ore [dD]ump', str(line))
-			if result is not None:
-				foundSegFault = True
-			result = re.search('[Aa]ssertion', str(line))
-			if result is not None:
-				foundAssertion = True
-			result = re.search('LLL', str(line))
-			if result is not None:
->>>>>>> origin/develop-nr
 				foundRealTimeIssue = True
 			if foundAssertion and (msgLine < 3):
 				msgLine += 1
 				msgAssertion += str(line)
 			result = re.search('uci->stat', str(line))
-<<<<<<< HEAD
 			if result is not None and not exitSignalReceived:
 				uciStatMsgCount += 1
 			result = re.search('PDCP data request failed', str(line))
@@ -2545,10 +2516,6 @@ class SSHConnection():
 			result = re.search('Generating RRCConnectionReconfigurationComplete', str(line))
 			if result is not None:
 				rrcConnectionRecfgComplete += 1
-=======
-			if result is not None:
-				uciStatMsgCount += 1
->>>>>>> origin/develop-nr
 			# No cell synchronization found, abandoning
 			result = re.search('No cell synchronization found, abandoning', str(line))
 			if result is not None:
@@ -2586,7 +2553,6 @@ class SSHConnection():
 					frequency_found = True
 				except Exception as e:
 					logging.error('\033[91m' + "Measured Carrier Frequency not found" + '\033[0m')
-<<<<<<< HEAD
 			result = re.search("PLMN MCC (?P<mcc>\d{1,3}), MNC (?P<mnc>\d{1,3}), TAC", str(line))
 			if result is not None and (not plmn_found):
 				try:
@@ -2596,8 +2562,6 @@ class SSHConnection():
 					plmn_found = True
 				except Exception as e:
 					logging.error('\033[91m' + "PLMN not found" + '\033[0m')
-=======
->>>>>>> origin/develop-nr
 			result = re.search("Found (?P<operator>[\w,\s]{1,15}) \(name from internal table\)", str(line))
 			if result is not None:
 				try:
@@ -2633,18 +2597,14 @@ class SSHConnection():
 				except Exception as e:
 					logging.error('\033[91m' + "    AllowedMeasBandwidth not found" + '\033[0m')
 		ue_log_file.close()
-<<<<<<< HEAD
 		if rrcConnectionRecfgComplete > 0:
 			statMsg = 'UE connected to eNB (' + str(rrcConnectionRecfgComplete) + ' RRCConnectionReconfigurationComplete message(s) generated)'
 			logging.debug('\033[94m' + statMsg + '\033[0m')
 			self.htmlUEFailureMsg += statMsg + '\n'
-=======
->>>>>>> origin/develop-nr
 		if uciStatMsgCount > 0:
 			statMsg = 'UE showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)'
 			logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
 			self.htmlUEFailureMsg += statMsg + '\n'
-<<<<<<< HEAD
 		if pdcpDataReqFailedCount > 0:
 			statMsg = 'UE showed ' + str(pdcpDataReqFailedCount) + ' "PDCP data request failed" message(s)'
 			logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
@@ -2653,20 +2613,6 @@ class SSHConnection():
 			statMsg = 'UE showed ' + str(badDciCount) + ' "bad DCI 1A" message(s)'
 			logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
 			self.htmlUEFailureMsg += statMsg + '\n'
-=======
-		if pdcpFailure > 0:
-			statMsg = 'UE showed ' + str(pdcpFailure) + ' "PDCP Out of Resources" message(s)'
-			logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
-			self.htmlUEFailureMsg += statMsg + '\n'
-		if ulschFailure > 0:
-			statMsg = 'UE showed ' + str(ulschFailure) + ' "ULSCH in error in round" message(s)'
-			logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
-			self.htmlUEFailureMsg += statMsg + '\n'
-		if rachCanceledProcedure > 0:
-			rachMsg = 'UE cancelled ' + str(rachCanceledProcedure) + ' RA procedure(s)'
-			logging.debug('\u001B[1;30;43m ' + rachMsg + ' \u001B[0m')
-			self.htmlUEFailureMsg += rachMsg + '\n'
->>>>>>> origin/develop-nr
 		if foundSegFault:
 			logging.debug('\u001B[1;37;41m UE ended with a Segmentation Fault! \u001B[0m')
 			return ENB_PROCESS_SEG_FAULT
@@ -2684,48 +2630,22 @@ class SSHConnection():
 		if no_cell_sync_found and not mib_found:
 			logging.debug('\u001B[1;37;41m UE could not synchronize ! \u001B[0m')
 			self.htmlUEFailureMsg += 'UE could not synchronize!\n'
-<<<<<<< HEAD
-			return UE_PROCESS_COULD_NOT_SYNC
-=======
 			return UE_PROCESS_COULD_NOT_SYNC
-		if rlcDiscardBuffer > 0:
-			rlcMsg = 'UE RLC discarded ' + str(rlcDiscardBuffer) + ' buffer(s)'
-			logging.debug('\u001B[1;37;41m ' + rlcMsg + ' \u001B[0m')
-			self.htmlUEFailureMsg += rlcMsg + '\n'
-			return ENB_PROCESS_REALTIME_ISSUE
->>>>>>> origin/develop-nr
 		return 0
 
 	def TerminateeNB(self):
 		self.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword)
 		self.command('cd ' + self.eNBSourceCodePath + '/cmake_targets', '\$', 5)
-<<<<<<< HEAD
 		self.command('stdbuf -o0  ps -aux | grep --color=never softmodem | grep -v grep', '\$', 5)
-		result = re.search('lte-softmodem', str(self.ssh.before))
-		if result is not None:
-			self.command('echo ' + self.eNBPassword + ' | sudo -S daemon --name=enb' + str(self.eNB_instance) + '_daemon --stop', '\$', 5)
-			self.command('echo ' + self.eNBPassword + ' | sudo -S killall --signal SIGINT lte-softmodem || true', '\$', 5)
-=======
-		#to use daemon on CentOS we need to source the function
-		#linux_distro = platform.linux_distribution()[0]		
-		#if re.match('(.*)CentOS(.*)', linux_distro, re.IGNORECASE):
-			#self.command('source /etc/init.d/functions', '\$', 5)
-		#use nohup instead of daemon
-		self.command('echo ' + self.eNBPassword + ' | sudo -S daemon --name=enb' + str(self.eNB_instance) + '_daemon --stop', '\$', 5)
-		self.command('rm -f my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
-		self.command('echo ' + self.eNBPassword + ' | sudo -S killall --signal SIGINT -r .*-softmodem || true', '\$', 5)
-		time.sleep(5)
-		self.command('stdbuf -o0  ps -aux | grep softmodem | grep -v grep', '\$', 5)
 		result = re.search('-softmodem', str(self.ssh.before))
 		if result is not None:
-			self.command('echo ' + self.eNBPassword + ' | sudo -S killall --signal SIGKILL -r .*-softmodem || true', '\$', 5)
->>>>>>> origin/develop-nr
+			self.command('echo ' + self.eNBPassword + ' | sudo -S daemon --name=enb' + str(self.eNB_instance) + '_daemon --stop', '\$', 5)
+			self.command('echo ' + self.eNBPassword + ' | sudo -S killall --signal SIGINT -r .*-softmodem || true', '\$', 5)
 			time.sleep(5)
-			self.command('stdbuf -o0  ps -aux | grep --color=never softmodem | grep -v grep', '\$', 5)
-			result = re.search('lte-softmodem', str(self.ssh.before))
+			self.command('stdbuf -o0  ps -aux | grep softmodem | grep -v grep', '\$', 5)
+			result = re.search('-softmodem', str(self.ssh.before))
 			if result is not None:
-				self.command('echo ' + self.eNBPassword + ' | sudo -S killall --signal SIGKILL lte-softmodem || true', '\$', 5)
-				time.sleep(2)
+				self.command('echo ' + self.eNBPassword + ' | sudo -S killall --signal SIGKILL -r .*-softmodem || true', '\$', 5)
 		self.command('rm -f my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
 		self.close()
 		# If tracer options is on, stopping tshark on EPC side
@@ -2871,52 +2791,29 @@ class SSHConnection():
 	def TerminateOAIUE(self):
 		self.open(self.UEIPAddress, self.UEUserName, self.UEPassword)
 		self.command('cd ' + self.UESourceCodePath + '/cmake_targets', '\$', 5)
-<<<<<<< HEAD
 		self.command('ps -aux | grep --color=never softmodem | grep -v grep', '\$', 5)
-		result = re.search('lte-uesoftmodem', str(self.ssh.before))
+		result = re.search('-uesoftmodem', str(self.ssh.before))
 		if result is not None:
-			self.command('echo ' + self.UEPassword + ' | sudo -S daemon --name=ue' + str(self.UE_instance) + '_daemon --stop', '\$', 5)
-			self.command('echo ' + self.UEPassword + ' | sudo -S killall --signal SIGINT lte-uesoftmodem || true', '\$', 5)
+			self.command('echo ' + self.UEPassword + ' | sudo -S killall --signal SIGINT -r .*-uesoftmodem || true', '\$', 5)
 			time.sleep(5)
-			self.command('ps -aux | grep --color=never softmodem | grep -v grep', '\$', 5)
-			result = re.search('lte-uesoftmodem', str(self.ssh.before))
+			self.command('stdbuf -o0  ps -aux | grep uesoftmodem | grep -v grep', '\$', 5)
+			result = re.search('-uesoftmodem', str(self.ssh.before))
 			if result is not None:
-				self.command('echo ' + self.UEPassword + ' | sudo -S killall --signal SIGKILL lte-uesoftmodem || true', '\$', 5)
-				time.sleep(2)
-		self.command('rm -f my-lte-uesoftmodem-run' + str(self.UE_instance) + '.sh', '\$', 5)
-=======
-		#to use daemon on CentOS we need to source the function
-		#linux_distro = platform.linux_distribution()[0]
-		#if re.match('(.*)CentOS(.*)', linux_distro, re.IGNORECASE):
-			#self.command('source /etc/init.d/functions', '\$', 5)
-		#self.command('echo ' + self.UEPassword + ' | sudo -S daemon --name=ue' + str(self.UE_instance) + '_daemon --stop', '\$', 5)
+				self.command('echo ' + self.UEPassword + ' | sudo -S killall --signal SIGKILL -r .*-uesoftmodem || true', '\$', 5)
+				time.sleep(5)
 		self.command('rm -f my-lte-uesoftmodem-run' + str(self.UE_instance) + '.sh', '\$', 5)
-		self.command('echo ' + self.UEPassword + ' | sudo -S killall --signal SIGINT -r .*-uesoftmodem || true', '\$', 5)
-		time.sleep(5)
-		self.command('stdbuf -o0  ps -aux | grep uesoftmodem | grep -v grep', '\$', 5)
-		result = re.search('-uesoftmodem', str(self.ssh.before))
-		if result is not None:
-			self.command('echo ' + self.UEPassword + ' | sudo -S killall --signal SIGKILL -r .*-uesoftmodem || true', '\$', 5)
-			time.sleep(5)
->>>>>>> origin/develop-nr
 		self.close()
 		result = re.search('ue_', str(self.UELogFile))
 		if result is not None:
 			copyin_res = self.copyin(self.UEIPAddress, self.UEUserName, self.UEPassword, self.UESourceCodePath + '/cmake_targets/' + self.UELogFile, '.')
 			if (copyin_res == -1):
 				logging.debug('\u001B[1;37;41m Could not copy UE logfile to analyze it! \u001B[0m')
-<<<<<<< HEAD
 				self.htmlUEFailureMsg = 'Could not copy UE logfile to analyze it!'
 				self.CreateHtmlTestRow('N/A', 'KO', UE_PROCESS_NOLOGFILE_TO_ANALYZE, 'UE')
-=======
-				optionsMsg = '<pre style="background-color:white">Could not copy UE logfile to analyze it!</pre>'
-				self.CreateHtmlTestRow(optionsMsg, 'KO', UE_PROCESS_NOLOGFILE_TO_ANALYZE, 'UE')
->>>>>>> origin/develop-nr
 				self.UELogFile = ''
 				return
 			logging.debug('\u001B[1m Analyzing UE logfile \u001B[0m')
 			logStatus = self.AnalyzeLogFile_UE(self.UELogFile)
-<<<<<<< HEAD
 			result = re.search('--no-L2-connect', str(self.Initialize_OAI_UE_args))
 			if result is not None:
 				ueAction = 'Sniffing'
@@ -2941,23 +2838,6 @@ class SSHConnection():
 		else:
 			self.htmlUEFailureMsg = 'No Log File to analyze!'
 			self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
-=======
-			if (logStatus < 0):
-				optionsMsg = '<pre style="background-color:white"><b>Sniffing Unsuccessful</b>\n'
-				optionsMsg += self.htmlUEFailureMsg
-				optionsMsg += '</pre>'
-				self.CreateHtmlTestRow(optionsMsg, 'KO', logStatus, 'UE')
-				self.CreateHtmlTabFooter(False)
-				sys.exit(1)
-			else:
-				optionsMsg = '<pre style="background-color:white"><b>Sniffing Successful</b>\n'
-				optionsMsg += self.htmlUEFailureMsg
-				optionsMsg += '</pre>'
-				self.CreateHtmlTestRow(optionsMsg, 'OK', ALL_PROCESSES_OK)
-			self.UELogFile = ''
-		else:
-			self.CreateHtmlTestRow('<pre style="background-color:white">No Log File to analyze</pre>', 'OK', ALL_PROCESSES_OK)
->>>>>>> origin/develop-nr
 
 	def AutoTerminateUEandeNB(self):
 		if (self.ADBIPAddress != 'none'):
diff --git a/openair1/PHY/defs_RU.h b/openair1/PHY/defs_RU.h
index 76769ed4db3866767b88eae7226f99eb94ec3fbb..e07b09d9fd563d82c9094c06bd10271f53e12337 100644
--- a/openair1/PHY/defs_RU.h
+++ b/openair1/PHY/defs_RU.h
@@ -35,6 +35,7 @@
 
 
 #define MAX_BANDS_PER_RRU 4
+#define MAX_RRU_CONFIG_SIZE 1024
 
 
 #ifdef OCP_FRAMEWORK
@@ -272,9 +273,9 @@ typedef struct RU_proc_t_s {
   /// symbol mask for IF4p5 reception per subframe
   uint32_t symbol_mask[10];
   /// number of slave threads
-  int                  num_slaves;
+  int num_slaves;
   /// array of pointers to slaves
-  struct RU_proc_t_s           **slave_proc;
+  struct RU_proc_t_s **slave_proc;
 #ifdef PHY_TX_THREAD
   /// pthread structure for PRACH thread
   pthread_t pthread_phy_tx;
@@ -323,7 +324,7 @@ typedef enum {
 typedef struct RU_t_s{
   /// index of this ru
   uint32_t idx;
- /// Pointer to configuration file
+  /// Pointer to configuration file
   char *rf_config_file;
   /// southbound interface
   RU_if_south_t if_south;
@@ -340,7 +341,7 @@ typedef struct RU_t_s{
   /// flag to indicate the RU is a slave to another source
   int is_slave;
   /// Total gain of receive chain
-  uint32_t             rx_total_gain_dB;
+  uint32_t rx_total_gain_dB;
   /// number of bands that this device can support
   int num_bands;
   /// band list
@@ -363,7 +364,11 @@ typedef struct RU_t_s{
   struct LTE_DL_FRAME_PARMS *frame_parms;
   struct NR_DL_FRAME_PARMS *nr_frame_parms;
   ///timing offset used in TDD
-  int              N_TA_offset; 
+  int N_TA_offset;
+  /// SF extension used in TDD (unit: number of samples at 30.72MHz) (this is an expert option)
+  int sf_extension;
+  /// "end of burst delay" used in TDD (unit: number of samples at 30.72MHz) (this is an expert option)
+  int end_of_burst_delay;
   /// RF device descriptor
   openair0_device rfdevice;
   /// HW configuration
@@ -373,49 +378,49 @@ typedef struct RU_t_s{
   int num_gNB;
   /// list of NBs using this RU
   struct PHY_VARS_eNB_s *eNB_list[NUMBER_OF_eNB_MAX];
-  struct PHY_VARS_gNB_s *gNB_list[NUMBER_OF_eNB_MAX];
+  struct PHY_VARS_gNB_s *gNB_list[NUMBER_OF_gNB_MAX];
   /// Mapping of antenna ports to RF chain index
-  openair0_rf_map      rf_map;
+  openair0_rf_map rf_map;
   /// IF device descriptor
   openair0_device ifdevice;
   /// Pointer for ifdevice buffer struct
   if_buffer_t ifbuffer;
   /// if prach processing is to be performed in RU
-  int                  do_prach;
+  int do_prach;
   /// function pointer to synchronous RX fronthaul function (RRU,3GPP_eNB/3GPP_gNB)
-  void                 (*fh_south_in)(struct RU_t_s *ru,int *frame, int *subframe);
+  void (*fh_south_in)(struct RU_t_s *ru,int *frame, int *subframe);
   /// function pointer to synchronous TX fronthaul function
-  void                 (*fh_south_out)(struct RU_t_s *ru);
+  void (*fh_south_out)(struct RU_t_s *ru);
   /// function pointer to synchronous RX fronthaul function (RRU)
-  void                 (*fh_north_in)(struct RU_t_s *ru,int *frame, int *subframe);
+  void (*fh_north_in)(struct RU_t_s *ru,int *frame, int *subframe);
   /// function pointer to synchronous RX fronthaul function (RRU)
-  void                 (*fh_north_out)(struct RU_t_s *ru);
+  void (*fh_north_out)(struct RU_t_s *ru);
   /// function pointer to asynchronous fronthaul interface
-  void                 (*fh_north_asynch_in)(struct RU_t_s *ru,int *frame, int *subframe);
+  void (*fh_north_asynch_in)(struct RU_t_s *ru,int *frame, int *subframe);
   /// function pointer to asynchronous fronthaul interface
-  void                 (*fh_south_asynch_in)(struct RU_t_s *ru,int *frame, int *subframe);
+  void (*fh_south_asynch_in)(struct RU_t_s *ru,int *frame, int *subframe);
   /// function pointer to initialization function for radio interface
-  int                  (*start_rf)(struct RU_t_s *ru);
+  int (*start_rf)(struct RU_t_s *ru);
   /// function pointer to release function for radio interface
-  int                  (*stop_rf)(struct RU_t_s *ru);
+  int (*stop_rf)(struct RU_t_s *ru);
   /// function pointer to initialization function for radio interface
-  int                  (*start_if)(struct RU_t_s *ru,struct PHY_VARS_gNB_s *gNB);
+  int (*start_if)(struct RU_t_s *ru, struct PHY_VARS_eNB_s *eNB);
+  int (*nr_start_if)(struct RU_t_s *ru, struct PHY_VARS_gNB_s *gNB);
   /// function pointer to RX front-end processing routine (DFTs/prefix removal or NULL)
-  void                 (*feprx)(struct RU_t_s *ru);
+  void (*feprx)(struct RU_t_s *ru);
   /// function pointer to TX front-end processing routine (IDFTs and prefix removal or NULL)
-  void                 (*feptx_ofdm)(struct RU_t_s *ru);
+  void (*feptx_ofdm)(struct RU_t_s *ru);
   /// function pointer to TX front-end processing routine (PRECODING)
-  void                 (*feptx_prec)(struct RU_t_s *ru);
+  void (*feptx_prec)(struct RU_t_s *ru);
   /// function pointer to wakeup routine in lte-enb/nr-gnb.
   int (*wakeup_rxtx)(struct PHY_VARS_eNB_s *eNB, struct RU_t_s *ru);
   int (*nr_wakeup_rxtx)(struct PHY_VARS_gNB_s *gNB, struct RU_t_s *ru);
   /// function pointer to wakeup routine in lte-enb/nr-gnb.
-  void (*wakeup_prach_eNB)(struct PHY_VARS_eNB_s *eNB,struct RU_t_s *ru,int frame,int subframe);
-
-  void (*wakeup_prach_gNB)(struct PHY_VARS_gNB_s *gNB,struct RU_t_s *ru,int frame,int subframe);
+  void (*wakeup_prach_eNB)(struct PHY_VARS_eNB_s *eNB, struct RU_t_s *ru, int frame, int subframe);
+  void (*wakeup_prach_gNB)(struct PHY_VARS_gNB_s *gNB, struct RU_t_s *ru, int frame, int subframe);
 #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
   /// function pointer to wakeup routine in lte-enb.
-  void (*wakeup_prach_eNB_br)(struct PHY_VARS_eNB_s *eNB,struct RU_t_s *ru,int frame,int subframe);
+  void (*wakeup_prach_eNB_br)(struct PHY_VARS_eNB_s *eNB, struct RU_t_s *ru, int frame, int subframe);
   #endif
 
   /// function pointer to NB entry routine
@@ -443,29 +448,25 @@ typedef struct RU_t_s{
   /// Timing statistics (Fronthaul transport)
   time_stats_t transport;
   /// RX and TX buffers for precoder output
-  RU_COMMON            common;
+  RU_COMMON common;
   /// beamforming weight vectors per eNB
   int32_t **beam_weights[NUMBER_OF_eNB_MAX+1][15];
-  /// beamforming weight vectors per eNB
+  /// beamforming weight vectors per gNB
   int32_t **nrbeam_weights[NUMBER_OF_gNB_MAX+1][16];
   /// received frequency-domain signal for PRACH (IF4p5 RRU) 
-  int16_t              **prach_rxsigF;
+  int16_t **prach_rxsigF;
   /// received frequency-domain signal for PRACH BR (IF4p5 RRU) 
-  int16_t              **prach_rxsigF_br[4];
+  int16_t **prach_rxsigF_br[4];
   /// sequence number for IF5
   uint8_t seqno;
   /// initial timestamp used as an offset make first real timestamp 0
-  openair0_timestamp   ts_offset;
+  openair0_timestamp ts_offset;
   /// process scheduling variables
-  RU_proc_t            proc;
+  RU_proc_t proc;
   /// stats thread pthread descriptor
-  pthread_t            ru_stats_thread;
-
+  pthread_t ru_stats_thread;
 } RU_t;
 
-
-
-#define MAX_RRU_CONFIG_SIZE 1024
 typedef enum {
   RAU_tick=0,
   RRU_capabilities=1,
@@ -487,8 +488,6 @@ typedef enum {
   MAX_FH_FMTs       =4
 } FH_fmt_options_t;
 
-#define MAX_BANDS_PER_RRU 4
-
 typedef struct RRU_capabilities_s {
   /// Fronthaul format
   FH_fmt_options_t FH_fmt;
@@ -513,7 +512,6 @@ typedef struct RRU_capabilities_s {
 } RRU_capabilities_t;
 
 typedef struct RRU_config_s {
-
   /// Fronthaul format
   RU_if_south_t FH_fmt;
   /// number of EUTRA bands (<=4) configured in RRU
diff --git a/openair1/PHY/defs_eNB.h b/openair1/PHY/defs_eNB.h
index 4d2ff771d0932a2416ba6fd13c6ec806f7d3562d..87b999d54ee0654c984944a680971d29c3712e65 100644
--- a/openair1/PHY/defs_eNB.h
+++ b/openair1/PHY/defs_eNB.h
@@ -34,30 +34,26 @@
 
 
 #define _GNU_SOURCE
+#include <execinfo.h>
+#include <getopt.h>
+#include <malloc.h>
+#include <math.h>
+#include <pthread.h>
 #include <sched.h>
+#include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <unistd.h>
 #include <string.h>
+#include <unistd.h>
+#include <linux/sched.h>
 #include <sys/ioctl.h>
-#include <sys/types.h>
 #include <sys/mman.h>
-#include <linux/sched.h>
-#include <signal.h>
-#include <execinfo.h>
-#include <getopt.h>
 #include <sys/sysinfo.h>
+#include <sys/types.h>
 
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <malloc.h>
-#include <string.h>
-#include <math.h>
 #include "common_lib.h"
 #include "msc.h"
-
-
 #include "defs_common.h"
 #include "impl_defs_top.h"
 #include "PHY/TOOLS/time_meas.h"
@@ -66,445 +62,19 @@
 #include "platform_types.h"
 #include "PHY/LTE_TRANSPORT/transport_common.h"
 #include "PHY/LTE_TRANSPORT/transport_eNB.h"
-#include <pthread.h>
-
-
 #include "openair2/PHY_INTERFACE/IF_Module.h"
-
-#define MAX_NUM_RU_PER_eNB 64 
-
-typedef struct RU_proc_t_s {
-  /// Pointer to associated RU descriptor
-  struct RU_t_s *ru;
-  /// timestamp received from HW
-  openair0_timestamp timestamp_rx;
-  /// timestamp to send to "slave rru"
-  openair0_timestamp timestamp_tx;
-  /// subframe to act upon for reception
-  int subframe_rx;
-  /// subframe to act upon for transmission
-  int subframe_tx;
-  /// subframe to act upon for reception of prach
-  int subframe_prach;
-#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  /// subframe to act upon for reception of prach BL/CE UEs
-  int subframe_prach_br;
-#endif
-  /// frame to act upon for reception
-  int frame_rx;
-  /// frame to act upon for transmission
-  int frame_tx;
-  /// unwrapped frame count
-  int frame_tx_unwrap;
-  /// frame to act upon for reception of prach
-  int frame_prach;
-#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  /// frame to act upon for reception of prach
-  int frame_prach_br;
-#endif
-  /// frame offset for slave RUs (to correct for frame asynchronism at startup)
-  int frame_offset;
-  /// \brief Instance count for FH processing thread.
-  /// \internal This variable is protected by \ref mutex_FH.
-  int instance_cnt_FH;
-  int instance_cnt_FH1;
-  /// \internal This variable is protected by \ref mutex_prach.
-  int instance_cnt_prach;
-#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  /// \internal This variable is protected by \ref mutex_prach.
-  int instance_cnt_prach_br;
-#endif
-  /// \internal This variable is protected by \ref mutex_synch.
-  int instance_cnt_synch;
-  /// \internal This variable is protected by \ref mutex_eNBs.
-  int instance_cnt_eNBs;
-  /// \brief Instance count for rx processing thread.
-  /// \internal This variable is protected by \ref mutex_asynch_rxtx.
-  int instance_cnt_asynch_rxtx;
-  /// \internal This variable is protected by \ref mutex_fep
-  int instance_cnt_fep;
-  /// \internal This variable is protected by \ref mutex_feptx
-  int instance_cnt_feptx;
-  /// This varible is protected by \ref mutex_emulatedRF
-  int instance_cnt_emulateRF;
-  /// pthread structure for RU FH processing thread
-  pthread_t pthread_FH;
-  pthread_t pthread_FH1;
-  /// pthread structure for RU prach processing thread
-  pthread_t pthread_prach;
-#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  /// pthread structure for RU prach processing thread BL/CE UEs
-  pthread_t pthread_prach_br;
-#endif
-  /// pthread struct for RU synch thread
-  pthread_t pthread_synch;
-  /// pthread struct for RU RX FEP worker thread
-  pthread_t pthread_fep;
-  /// pthread struct for RU TX FEP worker thread
-  pthread_t pthread_feptx;
-  /// pthread struct for emulated RF
-  pthread_t pthread_emulateRF;
-  /// pthread structure for asychronous RX/TX processing thread
-  pthread_t pthread_asynch_rxtx;
-  /// flag to indicate first RX acquisition
-  int first_rx;
-  /// flag to indicate first TX transmission
-  int first_tx;
-  /// pthread attributes for RU FH processing thread
-  pthread_attr_t attr_FH;
-  pthread_attr_t attr_FH1;
-  /// pthread attributes for RU prach
-  pthread_attr_t attr_prach;
-#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  /// pthread attributes for RU prach BL/CE UEs
-  pthread_attr_t attr_prach_br;
-#endif
-  /// pthread attributes for RU synch thread
-  pthread_attr_t attr_synch;
-  /// pthread attributes for asynchronous RX thread
-  pthread_attr_t attr_asynch_rxtx;
-  /// pthread attributes for worker fep thread
-  pthread_attr_t attr_fep;
-  /// pthread attributes for worker feptx thread
-  pthread_attr_t attr_feptx;
-  /// pthread attributes for emulated RF
-  pthread_attr_t attr_emulateRF;
-  /// scheduling parameters for RU FH thread
-  struct sched_param sched_param_FH;
-  struct sched_param sched_param_FH1;
-  /// scheduling parameters for RU prach thread
-  struct sched_param sched_param_prach;
-#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  /// scheduling parameters for RU prach thread BL/CE UEs
-  struct sched_param sched_param_prach_br;
-#endif
-  /// scheduling parameters for RU synch thread
-  struct sched_param sched_param_synch;
-  /// scheduling parameters for asynch_rxtx thread
-  struct sched_param sched_param_asynch_rxtx;
-  /// condition variable for RU FH thread
-  pthread_cond_t cond_FH;
-  pthread_cond_t cond_FH1;
-  /// condition variable for RU prach thread
-  pthread_cond_t cond_prach;
-#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  /// condition variable for RU prach thread BL/CE UEs
-  pthread_cond_t cond_prach_br;
-#endif
-  /// condition variable for RU synch thread
-  pthread_cond_t cond_synch;
-  /// condition variable for asynch RX/TX thread
-  pthread_cond_t cond_asynch_rxtx;
-  /// condition variable for RU RX FEP thread
-  pthread_cond_t cond_fep;
-  /// condition variable for RU TX FEP thread
-  pthread_cond_t cond_feptx;
-  /// condition variable for emulated RF
-  pthread_cond_t cond_emulateRF;
-  /// condition variable for eNB signal
-  pthread_cond_t cond_eNBs;
-  /// mutex for RU FH
-  pthread_mutex_t mutex_FH;
-  pthread_mutex_t mutex_FH1;
-  /// mutex for RU prach
-  pthread_mutex_t mutex_prach;
-#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  /// mutex for RU prach BL/CE UEs
-  pthread_mutex_t mutex_prach_br;
-#endif
-  /// mutex for RU synch
-  pthread_mutex_t mutex_synch;
-  /// mutex for eNB signal
-  pthread_mutex_t mutex_eNBs;
-  /// mutex for asynch RX/TX thread
-  pthread_mutex_t mutex_asynch_rxtx;
-  /// mutex for fep RX worker thread
-  pthread_mutex_t mutex_fep;
-  /// mutex for fep TX worker thread
-  pthread_mutex_t mutex_feptx;
-  /// mutex for emulated RF thread
-  pthread_mutex_t mutex_emulateRF;
-  /// symbol mask for IF4p5 reception per subframe
-  uint32_t symbol_mask[10];
-  /// number of slave threads
-  int                  num_slaves;
-  /// array of pointers to slaves
-  struct RU_proc_t_s           **slave_proc;
-#ifdef PHY_TX_THREAD
-  /// pthread structure for PRACH thread
-  pthread_t pthread_phy_tx;
-  pthread_mutex_t mutex_phy_tx;
-  pthread_cond_t cond_phy_tx;
-  /// \internal This variable is protected by \ref mutex_phy_tx.
-  int instance_cnt_phy_tx;
-  /// frame to act upon for transmission
-  int frame_phy_tx;
-  /// subframe to act upon for transmission
-  int subframe_phy_tx;
-  /// timestamp to send to "slave rru"
-  openair0_timestamp timestamp_phy_tx;
-  /// pthread structure for RF TX thread
-  pthread_t pthread_rf_tx;
-  pthread_mutex_t mutex_rf_tx;
-  pthread_cond_t cond_rf_tx;
-  /// \internal This variable is protected by \ref mutex_rf_tx.
-  int instance_cnt_rf_tx;
-#endif
-#if defined(PRE_SCD_THREAD)
-  pthread_t pthread_pre_scd;
-  /// condition variable for time processing thread
-  pthread_cond_t cond_pre_scd;
-  /// mutex for time thread
-  pthread_mutex_t mutex_pre_scd;
-  int instance_pre_scd;
-#endif
-  int emulate_rf_busy;
-} RU_proc_t;
-
-typedef enum {
-  LOCAL_RF        =0,
-  REMOTE_IF5      =1,
-  REMOTE_MBP_IF5  =2,
-  REMOTE_IF4p5    =3,
-  REMOTE_IF1pp    =4,
-  MAX_RU_IF_TYPES =5
-} RU_if_south_t;
-
-typedef struct RU_t_s{
-  /// index of this ru
-  uint32_t idx;
- /// Pointer to configuration file
-  char *rf_config_file;
-  /// southbound interface
-  RU_if_south_t if_south;
-  /// timing
-  node_timing_t if_timing;
-  /// function
-  node_function_t function;
-  /// Ethernet parameters for fronthaul interface
-  eth_params_t eth_params;
-  /// flag to indicate the RU is in synch with a master reference
-  int in_synch;
-  /// timing offset
-  int rx_offset;        
-  /// flag to indicate the RU is a slave to another source
-  int is_slave;
-  /// Total gain of receive chain
-  uint32_t             rx_total_gain_dB;
-  /// number of bands that this device can support
-  int num_bands;
-  /// band list
-  int band[MAX_BANDS_PER_RRU];
-  /// number of RX paths on device
-  int nb_rx;
-  /// number of TX paths on device
-  int nb_tx;
-  /// maximum PDSCH RS EPRE
-  int max_pdschReferenceSignalPower;
-  /// maximum RX gain
-  int max_rxgain;
-  /// Attenuation of RX paths on device
-  int att_rx;
-  /// Attenuation of TX paths on device
-  int att_tx;
-  /// flag to indicate precoding operation in RU
-  int do_precoding;
-  /// Frame parameters
-  LTE_DL_FRAME_PARMS frame_parms;
-  ///timing offset used in TDD
-  int              N_TA_offset; 
-  /// SF extension used in TDD (unit: number of samples at 30.72MHz) (this is an expert option)
-  int              sf_extension;
-  /// "end of burst delay" used in TDD (unit: number of samples at 30.72MHz) (this is an expert option)
-  int              end_of_burst_delay;
-  /// RF device descriptor
-  openair0_device rfdevice;
-  /// HW configuration
-  openair0_config_t openair0_cfg;
-  /// Number of eNBs using this RU
-  int num_eNB;
-  /// list of eNBs using this RU
-  struct PHY_VARS_eNB_s *eNB_list[NUMBER_OF_eNB_MAX];
-  /// Mapping of antenna ports to RF chain index
-  openair0_rf_map      rf_map;
-  /// IF device descriptor
-  openair0_device ifdevice;
-  /// Pointer for ifdevice buffer struct
-  if_buffer_t ifbuffer;
-  /// if prach processing is to be performed in RU
-  int                  do_prach;
-  /// function pointer to synchronous RX fronthaul function (RRU,3GPP_eNB)
-  void                 (*fh_south_in)(struct RU_t_s *ru,int *frame, int *subframe);
-  /// function pointer to synchronous TX fronthaul function
-  void                 (*fh_south_out)(struct RU_t_s *ru);
-  /// function pointer to synchronous RX fronthaul function (RRU)
-  void                 (*fh_north_in)(struct RU_t_s *ru,int *frame, int *subframe);
-  /// function pointer to synchronous RX fronthaul function (RRU)
-  void                 (*fh_north_out)(struct RU_t_s *ru);
-  /// function pointer to asynchronous fronthaul interface
-  void                 (*fh_north_asynch_in)(struct RU_t_s *ru,int *frame, int *subframe);
-  /// function pointer to asynchronous fronthaul interface
-  void                 (*fh_south_asynch_in)(struct RU_t_s *ru,int *frame, int *subframe);
-  /// function pointer to initialization function for radio interface
-  int                  (*start_rf)(struct RU_t_s *ru);
-  /// function pointer to release function for radio interface
-  int                  (*stop_rf)(struct RU_t_s *ru);
-  /// function pointer to initialization function for radio interface
-  int                  (*start_if)(struct RU_t_s *ru,struct PHY_VARS_eNB_s *eNB);
-  /// function pointer to RX front-end processing routine (DFTs/prefix removal or NULL)
-  void                 (*feprx)(struct RU_t_s *ru);
-  /// function pointer to TX front-end processing routine (IDFTs and prefix removal or NULL)
-  void                 (*feptx_ofdm)(struct RU_t_s *ru);
-  /// function pointer to TX front-end processing routine (PRECODING)
-  void                 (*feptx_prec)(struct RU_t_s *ru);
-  /// function pointer to wakeup routine in lte-enb.
-  int (*wakeup_rxtx)(struct PHY_VARS_eNB_s *eNB, struct RU_t_s *ru);
-  /// function pointer to wakeup routine in lte-enb.
-  void (*wakeup_prach_eNB)(struct PHY_VARS_eNB_s *eNB,struct RU_t_s *ru,int frame,int subframe);
-#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  /// function pointer to wakeup routine in lte-enb.
-  void (*wakeup_prach_eNB_br)(struct PHY_VARS_eNB_s *eNB,struct RU_t_s *ru,int frame,int subframe);
-#endif
-  /// function pointer to eNB entry routine
-  void (*eNB_top)(struct PHY_VARS_eNB_s *eNB, int frame_rx, int subframe_rx, char *string, struct RU_t_s *ru);
-  /// Timing statistics
-  time_stats_t ofdm_demod_stats;
-  /// Timing statistics (TX)
-  time_stats_t ofdm_mod_stats;
-  /// Timing wait statistics
-  time_stats_t ofdm_demod_wait_stats;
-  /// Timing wakeup statistics
-  time_stats_t ofdm_demod_wakeup_stats;
-  /// Timing wait statistics (TX)
-  time_stats_t ofdm_mod_wait_stats;
-  /// Timing wakeup statistics (TX)
-  time_stats_t ofdm_mod_wakeup_stats;
-  /// Timing statistics (RX Fronthaul + Compression)
-  time_stats_t rx_fhaul;
-  /// Timing statistics (TX Fronthaul + Compression)
-  time_stats_t tx_fhaul; 
-  /// Timong statistics (Compression)
-  time_stats_t compression;
-  /// Timing statistics (Fronthaul transport)
-  time_stats_t transport;
-  /// RX and TX buffers for precoder output
-  RU_COMMON            common;
-  /// beamforming weight vectors per eNB
-  int32_t **beam_weights[NUMBER_OF_eNB_MAX+1][15];
-
-  /// received frequency-domain signal for PRACH (IF4p5 RRU) 
-  int16_t              **prach_rxsigF;
-  /// received frequency-domain signal for PRACH BR (IF4p5 RRU) 
-  int16_t              **prach_rxsigF_br[4];
-  /// sequence number for IF5
-  uint8_t seqno;
-  /// initial timestamp used as an offset make first real timestamp 0
-  openair0_timestamp   ts_offset;
-  /// process scheduling variables
-  RU_proc_t            proc;
-  /// stats thread pthread descriptor
-  pthread_t            ru_stats_thread;
-
-} RU_t;
-
-
-
-#define MAX_RRU_CONFIG_SIZE 1024
-typedef enum {
-  RAU_tick=0,
-  RRU_capabilities=1,
-  RRU_config=2,
-  RRU_MSG_max_num=3
-} rru_config_msg_type_t;
-
-typedef struct RRU_CONFIG_msg_s {
-  rru_config_msg_type_t type;
-  ssize_t len;
-  uint8_t msg[MAX_RRU_CONFIG_SIZE];
-} RRU_CONFIG_msg_t;
-
-typedef enum {
-  OAI_IF5_only      =0,
-  OAI_IF4p5_only    =1,
-  OAI_IF5_and_IF4p5 =2,
-  MBP_IF5           =3,
-  MAX_FH_FMTs       =4
-} FH_fmt_options_t;
-
-#define MAX_BANDS_PER_RRU 4
-
-typedef struct RRU_capabilities_s {
-  /// Fronthaul format
-  FH_fmt_options_t FH_fmt;
-  /// number of EUTRA bands (<=4) supported by RRU
-  uint8_t          num_bands;
-  /// EUTRA band list supported by RRU
-  uint8_t          band_list[MAX_BANDS_PER_RRU];
-  /// Number of concurrent bands (component carriers)
-  uint8_t          num_concurrent_bands;
-  /// Maximum TX EPRE of each band
-  int8_t           max_pdschReferenceSignalPower[MAX_BANDS_PER_RRU];
-  /// Maximum RX gain of each band
-  uint8_t          max_rxgain[MAX_BANDS_PER_RRU];
-  /// Number of RX ports of each band
-  uint8_t          nb_rx[MAX_BANDS_PER_RRU];
-  /// Number of TX ports of each band
-  uint8_t          nb_tx[MAX_BANDS_PER_RRU]; 
-  /// max DL bandwidth (1,6,15,25,50,75,100)
-  uint8_t          N_RB_DL[MAX_BANDS_PER_RRU];
-  /// max UL bandwidth (1,6,15,25,50,75,100)
-  uint8_t          N_RB_UL[MAX_BANDS_PER_RRU];
-} RRU_capabilities_t;
-
-typedef struct RRU_config_s {
-
-  /// Fronthaul format
-  RU_if_south_t FH_fmt;
-  /// number of EUTRA bands (<=4) configured in RRU
-  uint8_t num_bands;
-  /// EUTRA band list configured in RRU
-  uint8_t band_list[MAX_BANDS_PER_RRU];
-  /// TDD configuration (0-6)
-  uint8_t tdd_config[MAX_BANDS_PER_RRU];
-  /// TDD special subframe configuration (0-10)
-  uint8_t tdd_config_S[MAX_BANDS_PER_RRU];
-  /// TX frequency
-  uint32_t tx_freq[MAX_BANDS_PER_RRU];
-  /// RX frequency
-  uint32_t rx_freq[MAX_BANDS_PER_RRU];
-  /// TX attenation w.r.t. max
-  uint8_t att_tx[MAX_BANDS_PER_RRU];
-  /// RX attenuation w.r.t. max
-  uint8_t att_rx[MAX_BANDS_PER_RRU];
-  /// DL bandwidth
-  uint8_t N_RB_DL[MAX_BANDS_PER_RRU];
-  /// UL bandwidth
-  uint8_t N_RB_UL[MAX_BANDS_PER_RRU];
-  /// 3/4 sampling rate
-  uint8_t threequarter_fs[MAX_BANDS_PER_RRU];
-  /// prach_FreqOffset for IF4p5
-  int prach_FreqOffset[MAX_BANDS_PER_RRU];
-  /// prach_ConfigIndex for IF4p5
-  int prach_ConfigIndex[MAX_BANDS_PER_RRU];
-#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  int emtc_prach_CElevel_enable[MAX_BANDS_PER_RRU][4];
-  /// emtc_prach_FreqOffset for IF4p5 per CE Level
-  int emtc_prach_FreqOffset[MAX_BANDS_PER_RRU][4];
-  /// emtc_prach_ConfigIndex for IF4p5 per CE Level
-  int emtc_prach_ConfigIndex[MAX_BANDS_PER_RRU][4];
-#endif
-} RRU_config_t;
-
-#include <pthread.h>
-
-#include "common_lib.h"
 #include "openairinterface5g_limits.h"
 
 
+#define PBCH_A 24
 #define NUMBER_OF_SUBBANDS_MAX 13
 #define NUMBER_OF_HARQ_PID_MAX 8
-
+#define MAX_BANDS_PER_RRU 4
 #define MAX_FRAME_NUMBER 0x400
+#define MAX_NUM_RU_PER_eNB 64
+#define MAX_NUM_RX_PRACH_PREAMBLES 4
+#define MAX_RRU_CONFIG_SIZE 1024
+
 
 typedef struct {
   /// \brief Pointers (dynamic) to the received data in the time domain.
@@ -606,14 +176,13 @@ typedef struct {
   int16_t *llr;
 } LTE_eNB_PUSCH;
 
-#define PBCH_A 24
+
 typedef struct {
   uint8_t pbch_d[96+(3*(16+PBCH_A))];
   uint8_t pbch_w[3*3*(16+PBCH_A)];
   uint8_t pbch_e[1920];
 } LTE_eNB_PBCH;
 
-#define MAX_NUM_RX_PRACH_PREAMBLES 4
 
 typedef struct {
   /// \brief ?.
@@ -639,11 +208,6 @@ typedef struct {
 #endif
 } LTE_eNB_PRACH;
 
-#include "PHY/TOOLS/time_meas.h"
-#include "PHY/CODING/coding_defs.h"
-#include "PHY/TOOLS/tools_defs.h"
-#include "PHY/LTE_TRANSPORT/transport_eNB.h"
-
 /// Context data structure for RX/TX portion of subframe processing
 typedef struct {
   /// Component Carrier index
diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h
index 24be9688dc08039c2df802b1e234b5568288dd29..61d39a12525d2220c58b916b2a3b262c32d24c3e 100644
--- a/openair1/PHY/defs_gNB.h
+++ b/openair1/PHY/defs_gNB.h
@@ -531,7 +531,7 @@ typedef struct PHY_VARS_gNB_s {
   module_id_t          Mod_id;
   uint8_t              CC_id;
   uint8_t              configured;
-  gNB_L1_proc_t           proc;
+  gNB_L1_proc_t        proc;
   int                  single_thread_flag;
   int                  abstraction_flag;
   int                  num_RU;
@@ -541,13 +541,13 @@ typedef struct PHY_VARS_gNB_s {
   /// Ethernet parameters for fronthaul interface
   eth_params_t         eth_params;
   int                  rx_total_gain_dB;
-  int                  (*start_if)(struct RU_t_s *ru,struct PHY_VARS_gNB_s *gNB);
+  int                  (*nr_start_if)(struct RU_t_s *ru, struct PHY_VARS_gNB_s *gNB);
   uint8_t              local_flag;
   nfapi_nr_config_request_t  gNB_config;
-  NR_DL_FRAME_PARMS   frame_parms;
+  NR_DL_FRAME_PARMS    frame_parms;
   PHY_MEASUREMENTS_gNB measurements;
-  NR_IF_Module_t          *if_inst;
-  NR_UL_IND_t             UL_INFO;
+  NR_IF_Module_t       *if_inst;
+  NR_UL_IND_t          UL_INFO;
   pthread_mutex_t      UL_INFO_mutex;
   /// NFAPI RX ULSCH information
   nfapi_rx_indication_pdu_t  rx_pdu_list[NFAPI_RX_IND_MAX_PDU];
@@ -564,24 +564,24 @@ typedef struct PHY_VARS_gNB_s {
   /// NFAPI PRACH information
   nfapi_preamble_pdu_t preamble_list[MAX_NUM_RX_PRACH_PREAMBLES];
 
-  Sched_Rsp_t         Sched_INFO;
-  NR_gNB_PDCCH        pdcch_vars;
-  NR_gNB_PBCH         pbch;
-  LTE_eNB_PHICH       phich_vars[2];
-
-  NR_gNB_COMMON       common_vars;
-  LTE_eNB_UCI         uci_vars[NUMBER_OF_UE_MAX];
-  LTE_eNB_SRS         srs_vars[NUMBER_OF_UE_MAX];
-  LTE_eNB_PUSCH      *pusch_vars[NUMBER_OF_UE_MAX];
-  LTE_eNB_PRACH       prach_vars;
-  NR_gNB_DLSCH_t     *dlsch[NUMBER_OF_UE_MAX][2];    // Nusers times two spatial streams
-  NR_gNB_ULSCH_t     *ulsch[NUMBER_OF_UE_MAX+1][2];  // [Nusers times + number of RA][2 codewords], index 0 in [NUMBER_OF_UE_MAX+1] is for RA
+  Sched_Rsp_t          Sched_INFO;
+  NR_gNB_PDCCH         pdcch_vars;
+  NR_gNB_PBCH          pbch;
+  LTE_eNB_PHICH        phich_vars[2];
+
+  NR_gNB_COMMON        common_vars;
+  LTE_eNB_UCI          uci_vars[NUMBER_OF_UE_MAX];
+  LTE_eNB_SRS          srs_vars[NUMBER_OF_UE_MAX];
+  LTE_eNB_PUSCH        *pusch_vars[NUMBER_OF_UE_MAX];
+  LTE_eNB_PRACH        prach_vars;
+  NR_gNB_DLSCH_t       *dlsch[NUMBER_OF_UE_MAX][2];    // Nusers times two spatial streams
+  NR_gNB_ULSCH_t       *ulsch[NUMBER_OF_UE_MAX+1][2];  // [Nusers times + number of RA][2 codewords], index 0 in [NUMBER_OF_UE_MAX+1] is for RA
   // LTE_eNB_ULSCH_t     *ulsch[NUMBER_OF_UE_MAX+1];     // Nusers + number of RA
-  NR_gNB_DLSCH_t     *dlsch_SI,*dlsch_ra,*dlsch_p;
-  NR_gNB_DLSCH_t     *dlsch_MCH;
-  NR_gNB_DLSCH_t     *dlsch_PCH;
-  LTE_eNB_UE_stats    UE_stats[NUMBER_OF_UE_MAX];
-  LTE_eNB_UE_stats   *UE_stats_ptr[NUMBER_OF_UE_MAX];
+  NR_gNB_DLSCH_t       *dlsch_SI,*dlsch_ra,*dlsch_p;
+  NR_gNB_DLSCH_t       *dlsch_MCH;
+  NR_gNB_DLSCH_t       *dlsch_PCH;
+  LTE_eNB_UE_stats     UE_stats[NUMBER_OF_UE_MAX];
+  LTE_eNB_UE_stats     *UE_stats_ptr[NUMBER_OF_UE_MAX];
 
   uint8_t pbch_configured;
   uint8_t pbch_pdu[4]; //PBCH_PDU_SIZE
diff --git a/targets/RT/USER/nr-ru.c b/targets/RT/USER/nr-ru.c
index c0598b9144d188bce1fd9ba3d7ab1029c1227204..5506e4841cddd216e44e11c6c5be7f9991f634d6 100644
--- a/targets/RT/USER/nr-ru.c
+++ b/targets/RT/USER/nr-ru.c
@@ -1428,9 +1428,9 @@ static void* ru_thread( void* param ) {
   }
   else{
     // Start IF device if any
-    if (ru->start_if) {
+    if (ru->nr_start_if) {
       LOG_I(PHY,"Starting IF interface for RU %d\n",ru->idx);
-      AssertFatal(ru->start_if(ru,NULL) == 0, "Could not start the IF device\n");
+      AssertFatal(ru->nr_start_if(ru,NULL) == 0, "Could not start the IF device\n");
       if (ru->if_south == LOCAL_RF) ret = connect_rau(ru);
       else ret = attach_rru(ru);
       AssertFatal(ret==0,"Cannot connect to remote radio\n");
@@ -1671,7 +1671,7 @@ void *ru_thread_synch(void *arg) {
 }
 */
  
-int start_if(struct RU_t_s *ru,struct PHY_VARS_gNB_s *gNB) {
+int nr_start_if(struct RU_t_s *ru,struct PHY_VARS_gNB_s *gNB) {
   return(ru->ifdevice.trx_start_func(&ru->ifdevice));
 }
 
@@ -2067,7 +2067,7 @@ void set_function_spec_param(RU_t *ru)
       ru->feprx                 = NULL;                   // nothing (this is a time-domain signal)
       ru->feptx_ofdm            = NULL;                   // nothing (this is a time-domain signal)
       ru->feptx_prec            = NULL;                   // nothing (this is a time-domain signal)
-      ru->start_if              = start_if;               // need to start the if interface for if5
+      ru->nr_start_if           = nr_start_if;            // need to start the if interface for if5
       ru->ifdevice.host_type    = RRU_HOST;
       ru->rfdevice.host_type    = RRU_HOST;
       ru->ifdevice.eth_params   = &ru->eth_params;
@@ -2092,7 +2092,7 @@ void set_function_spec_param(RU_t *ru)
       ru->feprx                 = (get_nprocs()<=2) ? fep_full :ru_fep_full_2thread;                 // RX DFTs
       ru->feptx_ofdm            = (get_nprocs()<=2) ? nr_feptx_ofdm : nr_feptx_ofdm_2thread;               // this is fep with idft only (no precoding in RRU)
       ru->feptx_prec            = NULL;
-      ru->start_if              = start_if;                 // need to start the if interface for if4p5
+      ru->nr_start_if           = nr_start_if;              // need to start the if interface for if4p5
       ru->ifdevice.host_type    = RRU_HOST;
       ru->rfdevice.host_type    = RRU_HOST;
       ru->ifdevice.eth_params   = &ru->eth_params;
@@ -2116,7 +2116,7 @@ void set_function_spec_param(RU_t *ru)
       ru->feptx_prec           = feptx_prec;              // this is fep with idft and precoding
       ru->fh_north_in          = NULL;                    // no incoming fronthaul from north
       ru->fh_north_out         = NULL;                    // no outgoing fronthaul to north
-      ru->start_if             = NULL;                    // no if interface
+      ru->nr_start_if          = NULL;                    // no if interface
       ru->rfdevice.host_type   = RAU_HOST;
     }
     ru->fh_south_in            = rx_rf;                               // local synchronous RF RX
@@ -2149,7 +2149,7 @@ void set_function_spec_param(RU_t *ru)
     ru->fh_south_asynch_in   = NULL;                // no asynchronous UL
     ru->start_rf               = NULL;                 // no local RF
     ru->stop_rf                = NULL;
-    ru->start_if               = start_if;             // need to start if interface for IF5
+    ru->nr_start_if            = nr_start_if;          // need to start if interface for IF5
     ru->ifdevice.host_type     = RAU_HOST;
     ru->ifdevice.eth_params    = &ru->eth_params;
     ru->ifdevice.configure_rru = configure_ru;
@@ -2174,7 +2174,7 @@ void set_function_spec_param(RU_t *ru)
     ru->fh_north_asynch_in     = NULL;
     ru->start_rf               = NULL;                // no local RF
     ru->stop_rf                = NULL;
-    ru->start_if               = start_if;            // need to start if interface for IF4p5
+    ru->nr_start_if            = nr_start_if;         // need to start if interface for IF4p5
     ru->ifdevice.host_type     = RAU_HOST;
     ru->ifdevice.eth_params    = &ru->eth_params;
     ru->ifdevice.configure_rru = configure_ru;