diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h
index 4654c1d64daef088b509774f83fcd23b8e36eded..497c84cc7f5e3d0021388702636c781cb8d19036 100644
--- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h
+++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h
@@ -795,152 +795,6 @@ static inline void memcpy_printer(uint32_t* p_lut_cn2bn,int dest0,int M) {
   }
 }
 
-static inline void nrLDPC_prep_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut,  uint16_t Z)
-{
-    const uint32_t* lut_cn2bnProcBuf = p_lut->cn2bnProcBuf;
-    const uint32_t* lut_cn2bnProcBuf2 = p_lut->cn2bnProcBuf2;
-    const uint8_t*  lut_numCnInCnGroups = p_lut->numCnInCnGroups;
-    const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups;
-
-    uint32_t* p_lut_cn2bn;
-    uint32_t bitOffsetInGroup;
-    uint32_t i;
-    uint32_t j;
-    uint32_t M;
-
-    // For CN groups 3 to 19 no need to send the last BN back since it's single edge
-    // and BN processing does not change the value already in the CN proc buf
-
-    // =====================================================================
-    // CN group with 3 BNs
-
-    p_lut_cn2bn = &lut_cn2bnProcBuf[0];
-
-    M = lut_numCnInCnGroups[0]*Z;
-    bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX;
-
-    for (j=0;j<2; j++)
-    {
-      printf("******3 BN (%d): cNProcBuf output at %d\n",j,lut_startAddrCnGroups[0] + j*bitOffsetInGroup);
-
-	memcpy_printer(p_lut_cn2bn,lut_startAddrCnGroups[0] + j*bitOffsetInGroup,M);
-
-    }
-
-    // =====================================================================
-    // CN group with 4 BNs
-
-    p_lut_cn2bn += (M*3); // Number of elements of previous group
-    M = lut_numCnInCnGroups[1]*Z;
-    bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX;
-
-    for (j=0; j<3; j++)
-    {
-      printf("******4 BN (%d): cNProcBuf output at %d\n",j,lut_startAddrCnGroups[1] + j*bitOffsetInGroup);
-	memcpy_printer(p_lut_cn2bn,lut_startAddrCnGroups[0] + j*bitOffsetInGroup,M);
-    }
-
-    // =====================================================================
-    // CN group with 5 BNs
-
-//    p_lut_cn2bn += (M*4); // Number of elements of previous group
-    p_lut_cn2bn += M; // Number of elements of previous group
-    M = lut_numCnInCnGroups[2]*Z;
-    bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX;
-
-    for (j=0; j<4; j++)
-    {
-	printf("******5 BN (%d): cNProcBuf output at %d\n",j,lut_startAddrCnGroups[2] + j*bitOffsetInGroup);
-	memcpy_printer(p_lut_cn2bn,lut_startAddrCnGroups[0] + j*bitOffsetInGroup,M);
-    }
-
-    // =====================================================================
-    // CN group with 6 BNs
-
-    //    p_lut_cn2bn += (M*5); // Number of elements of previous group
-    p_lut_cn2bn += M; // Number of elements of previous group
-    M = lut_numCnInCnGroups[3]*Z;
-    bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX;
-
-    for (j=0; j<5; j++)
-    {
-	printf("******6 BN (%d): cNProcBuf output at %d\n",j,lut_startAddrCnGroups[3] + j*bitOffsetInGroup);
-
-    }
-
-    // =====================================================================
-    // CN group with 7 BNs
-
-    //    p_lut_cn2bn += (M*6); // Number of elements of previous group
-    p_lut_cn2bn += M; // Number of elements of previous group
-    M = lut_numCnInCnGroups[4]*Z;
-    bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX;
-
-    for (j=0; j<6; j++)
-    {
-	printf("******7 BN (%d): cNProcBuf output at %d\n",j,lut_startAddrCnGroups[4] + j*bitOffsetInGroup);
-    }
-
-    // =====================================================================
-    // CN group with 8 BNs
-
-    //    p_lut_cn2bn += (M*7); // Number of elements of previous group
-    p_lut_cn2bn += M; // Number of elements of previous group
-    M = lut_numCnInCnGroups[5]*Z;
-    bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX;
-
-    for (j=0; j<7; j++)
-    {
-	printf("******8 BN (%d): cNProcBuf output at %d\n",j,lut_startAddrCnGroups[5] + j*bitOffsetInGroup);
-
-    }
-
-    // =====================================================================
-    // CN group with 9 BNs
-
-    //    p_lut_cn2bn += (M*8); // Number of elements of previous group
-    p_lut_cn2bn += M; // Number of elements of previous group
-    M = lut_numCnInCnGroups[6]*Z;
-    bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX;
-
-    for (j=0; j<8; j++)
-    {
-	printf("******9 BN (%d): cNProcBuf output at %d\n",j,lut_startAddrCnGroups[6] + j*bitOffsetInGroup);
-    }
-
-    // =====================================================================
-    // CN group with 10 BNs
-
-    //    p_lut_cn2bn += (M*9); // Number of elements of previous group
-    p_lut_cn2bn += M; // Number of elements of previous group
-    M = lut_numCnInCnGroups[7]*Z;
-    bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX;
-
-    for (j=0; j<9; j++)
-    {
-        p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[7] + j*bitOffsetInGroup];
-	printf("******10 BN (%d): cNProcBuf output at %d\n",j,lut_startAddrCnGroups[7] + j*bitOffsetInGroup);
-    }
-
-    // =====================================================================
-    // CN group with 19 BNs
-
-    //    p_lut_cn2bn += (M*10); // Number of elements of previous group
-    p_lut_cn2bn += M; // Number of elements of previous group
-    M = lut_numCnInCnGroups[8]*Z;
-    bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX;
-
-    for (j=0; j<19; j++)
-    {
-
-	printf("******19 BN (%d): cNProcBuf output at %d\n",j,lut_startAddrCnGroups[8] + j*bitOffsetInGroup);
-
-    }
-
-}
-
-
-
 /**
    \brief Copies the values in the LLR results buffer to their corresponding place in the output LLR vector.
    \param p_lut Pointer to decoder LUTs
diff --git a/openair2/RRC/NR/nr_rrc_defs.h b/openair2/RRC/NR/nr_rrc_defs.h
index e8b4cf55408b4eb6c2a0db17944d2b3c317d6eea..8a54df828b9a1ec271d00daed89093b1f5c04b4c 100644
--- a/openair2/RRC/NR/nr_rrc_defs.h
+++ b/openair2/RRC/NR/nr_rrc_defs.h
@@ -269,6 +269,10 @@ typedef struct gNB_RRC_UE_s {
   NR_UE_NR_Capability_t*             UE_Capability_nr;
   NR_UE_MRDC_Capability_t*           UE_Capability_MRDC;
 
+  NR_CellGroupConfig_t               *secondaryCellGroup;
+  NR_RRCReconfiguration_t            *reconfig;
+  NR_RadioBearerConfig_t             *rb_config;
+
   ImsiMobileIdentity_t               imsi;
 
 #if defined(ENABLE_SECURITY)
@@ -376,8 +380,6 @@ typedef struct {
   int ssb_SubcarrierOffset;                  
   NR_ServingCellConfigCommon_t              *servingcellconfigcommon;
 
-  NR_RRCReconfiguration_t                   *reconfig[MAX_NR_RRC_UE_CONTEXTS];
-  NR_RadioBearerConfig_t                    *rb_config[MAX_NR_RRC_UE_CONTEXTS];
   NR_CellGroupConfig_t                      *secondaryCellGroup[MAX_NR_RRC_UE_CONTEXTS];
   NR_SRB_INFO                               SI;
   NR_SRB_INFO                               Srb0;
diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c
index 7af21da00c1acee294b0ec1ac5237eb7ced0a32b..34050ed580421baca8822eee4f60c4edf650c1e1 100644
--- a/openair2/RRC/NR/rrc_gNB.c
+++ b/openair2/RRC/NR/rrc_gNB.c
@@ -203,6 +203,8 @@ void rrc_gNB_generate_SgNBAdditionRequestAcknowledge(
 ///---------------------------------------------------------------------------------------------------------------///
 ///---------------------------------------------------------------------------------------------------------------///
 
+extern int phy_test;
+
 static void init_NR_SI(gNB_RRC_INST *rrc) {
 
 
@@ -221,6 +223,17 @@ static void init_NR_SI(gNB_RRC_INST *rrc) {
 			 rrc->carrier.ssb_SubcarrierOffset,
                          (NR_ServingCellConfigCommon_t *)rrc->carrier.servingcellconfigcommon
                          );
+
+
+  if (phy_test > 0) {
+    // This is for phytest only
+    
+    struct rrc_gNB_ue_context_s *ue_context_p = rrc_gNB_allocate_new_UE_context(rrc);
+
+    LOG_I(NR_RRC,"Adding new user\n");    
+    rrc_add_nsa_user(rrc,ue_context_p);
+  }
+
 }
 
 
diff --git a/openair2/RRC/NR/rrc_gNB_UE_context.c b/openair2/RRC/NR/rrc_gNB_UE_context.c
index 3a69e873428f9876a5df64b6d4f857d102995cf0..17cff1200fcda534574199a4b893a50ef5409fd9 100644
--- a/openair2/RRC/NR/rrc_gNB_UE_context.c
+++ b/openair2/RRC/NR/rrc_gNB_UE_context.c
@@ -39,8 +39,7 @@
 
 
 //------------------------------------------------------------------------------
-void
-uid_linear_allocator_init(
+void nr_uid_linear_allocator_init(
   nr_uid_allocator_t *const uid_pP
 )
 //------------------------------------------------------------------------------
@@ -49,10 +48,7 @@ uid_linear_allocator_init(
 }
 
 //------------------------------------------------------------------------------
-uid_nr_t
-uid_linear_allocator_new(
-  gNB_RRC_INST *const rrc_instance_pP
-)
+uid_nr_t nr_uid_linear_allocator_new(gNB_RRC_INST *const rrc_instance_pP)
 //------------------------------------------------------------------------------
 {
   unsigned int i;
@@ -135,7 +131,7 @@ rrc_gNB_allocate_new_UE_context(
   }
 
   memset(new_p, 0, sizeof(struct rrc_gNB_ue_context_s));
-  new_p->local_uid = uid_linear_allocator_new(rrc_instance_pP);
+  new_p->local_uid = nr_uid_linear_allocator_new(rrc_instance_pP);
 
   for(int i = 0; i < NB_RB_MAX; i++) {
     new_p->ue_context.e_rab[i].xid = -1;
@@ -172,6 +168,23 @@ rrc_gNB_get_ue_context(
   }
 }
 
+rrc_gNB_free_mem_UE_context(
+  const protocol_ctxt_t               *const ctxt_pP,
+  struct rrc_gNB_ue_context_s         *const ue_context_pP
+)
+//-----------------------------------------------------------------------------
+{
+  int i;
+  LOG_T(RRC,
+        PROTOCOL_RRC_CTXT_UE_FMT" Clearing UE context 0x%p (free internal structs)\n",
+        PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
+        ue_context_pP);
+
+  ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_LTE_SCellToAddMod_r10, &ue_context_pP->ue_context.sCell_config[0]);
+  ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_LTE_SCellToAddMod_r10, &ue_context_pP->ue_context.sCell_config[1]);
+
+  // empty the internal fields of the UE context here
+}
 
 //------------------------------------------------------------------------------
 void rrc_gNB_remove_ue_context(
diff --git a/openair2/RRC/NR/rrc_gNB_nsa.c b/openair2/RRC/NR/rrc_gNB_nsa.c
index 7c9f0eb89008acba4b5b365febaa4bdb07bddfe9..a963e73965310f4c02d8d574aefcc821ac6a4711 100644
--- a/openair2/RRC/NR/rrc_gNB_nsa.c
+++ b/openair2/RRC/NR/rrc_gNB_nsa.c
@@ -55,8 +55,8 @@ void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc,NR_UE_CapabilityRAT_ContainerLi
   AssertFatal(ueCapabilityRAT_Container_nr!=NULL,"ueCapabilityRAT_Container_nr is NULL\n");
   AssertFatal(ueCapabilityRAT_Container_MRDC!=NULL,"ueCapabilityRAT_Container_MRDC is NULL\n");
   // decode and store capabilities
-  ue_context_p = rrc_gNB_get_ue_context(rrc,
-					rnti);
+  ue_context_p = rrc_gNB_allocate_new_UE_context(rrc);
+  ue_context_p->ue_id_rnti = rnti;
   
   asn_dec_rval_t dec_rval = uper_decode(NULL,
 					&asn_DEF_NR_UE_NR_Capability,
@@ -107,27 +107,28 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
 
 // NR RRCReconfiguration
 
-  AssertFatal(carrier->reconfig[rrc->Nb_ue]==NULL,
-	      "carrier->reconfig[%d] isn't null\n",rrc->Nb_ue);
   AssertFatal(rrc->Nb_ue < MAX_NR_RRC_UE_CONTEXTS,"cannot add another UE\n");
 
-  carrier->reconfig[rrc->Nb_ue] = calloc(1,sizeof(NR_RRCReconfiguration_t));
-  carrier->secondaryCellGroup[rrc->Nb_ue] = calloc(1,sizeof(NR_CellGroupConfig_t));
-  memset((void*)carrier->reconfig[rrc->Nb_ue],0,sizeof(NR_RRCReconfiguration_t));
-  carrier->reconfig[rrc->Nb_ue]->rrc_TransactionIdentifier=0;
-  carrier->reconfig[rrc->Nb_ue]->criticalExtensions.present = NR_RRCReconfiguration__criticalExtensions_PR_rrcReconfiguration;
+  ue_context_p->ue_context.reconfig = calloc(1,sizeof(NR_RRCReconfiguration_t));
+  ue_context_p->ue_context.secondaryCellGroup = calloc(1,sizeof(NR_CellGroupConfig_t));
+  memset((void*)ue_context_p->ue_context.reconfig,0,sizeof(NR_RRCReconfiguration_t));
+  ue_context_p->ue_context.reconfig->rrc_TransactionIdentifier=0;
+  ue_context_p->ue_context.reconfig->criticalExtensions.present = NR_RRCReconfiguration__criticalExtensions_PR_rrcReconfiguration;
   NR_RRCReconfiguration_IEs_t *reconfig_ies=calloc(1,sizeof(NR_RRCReconfiguration_IEs_t));
-  carrier->reconfig[rrc->Nb_ue]->criticalExtensions.choice.rrcReconfiguration = reconfig_ies;
+  ue_context_p->ue_context.reconfig->criticalExtensions.choice.rrcReconfiguration = reconfig_ies;
   fill_default_reconfig(carrier->ServingCellConfigCommon,
 			reconfig_ies,
-			carrier->secondaryCellGroup[rrc->Nb_ue],
+			ue_context_p->ue_context.secondaryCellGroup,
 			carrier->n_physical_antenna_ports,
-			carrier->initial_csi_index[rrc->Nb_ue]);
-  carrier->rb_config[rrc->Nb_ue] = calloc(1,sizeof(NR_RadioBearerConfig_t));
-  fill_default_rbconfig(rrc,carrier->rb_config[rrc->Nb_ue]);
+			&carrier->initial_csi_index[rrc->Nb_ue]);
+
+  ue_context_p->ue_context.rb_config = calloc(1,sizeof(NR_RRCReconfiguration_t));
+
+  fill_default_rbconfig(ue_context_p->ue_context.rb_config);
+
   NR_CG_Config_t *CG_Config = calloc(1,sizeof(*CG_Config));
   memset((void*)CG_Config,0,sizeof(*CG_Config));
-  generate_CG_Config(rrc,CG_Config,carrier->reconfig[rrc->Nb_ue],carrier->rb_config[rrc->Nb_ue]);
+  generate_CG_Config(rrc,CG_Config,ue_context_p->ue_context.reconfig,ue_context_p->ue_context.rb_config);
   // Send to X2 entity to transport to MeNB
 
   rrc->Nb_ue++;
diff --git a/openair2/RRC/NR/rrc_gNB_reconfig.c b/openair2/RRC/NR/rrc_gNB_reconfig.c
index 6ebea57c0b119c6109ba56bd3530a2f68ed9cc2b..a7ee894fd24b78f9296bd7c8aee47f07f846bce2 100644
--- a/openair2/RRC/NR/rrc_gNB_reconfig.c
+++ b/openair2/RRC/NR/rrc_gNB_reconfig.c
@@ -2007,5 +2007,45 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon
   reconfig->nonCriticalExtension = NULL;
 }
 
-
+void fill_default_rbconfig(NR_RadioBearerConfig_t *rbconfig) {
+
+  rbconfig->srb_ToAddModList = NULL;
+  rbconfig->srb3_ToRelease = NULL;
+  rbconfig->drb_ToAddModList = calloc(1,sizeof(*rbconfig->drb_ToAddModList));
+  NR_DRB_ToAddMod_t *drb_ToAddMod = calloc(1,sizeof(*drb_ToAddMod));
+  drb_ToAddMod->cnAssociation = calloc(1,sizeof(*drb_ToAddMod->cnAssociation));
+  drb_ToAddMod->cnAssociation->present = NR_DRB_ToAddMod__cnAssociation_PR_eps_BearerIdentity;
+  drb_ToAddMod->cnAssociation->choice.eps_BearerIdentity=5;
+  drb_ToAddMod->drb_Identity = 4;
+  drb_ToAddMod->reestablishPDCP = NULL;
+  drb_ToAddMod->recoverPDCP = NULL;
+  drb_ToAddMod->pdcp_Config = calloc(1,sizeof(*drb_ToAddMod->pdcp_Config));
+  drb_ToAddMod->pdcp_Config->drb = calloc(1,sizeof(*drb_ToAddMod->pdcp_Config->drb));
+  drb_ToAddMod->pdcp_Config->drb->discardTimer = calloc(1,sizeof(*drb_ToAddMod->pdcp_Config->drb->discardTimer));
+  *drb_ToAddMod->pdcp_Config->drb->discardTimer=NR_PDCP_Config__drb__discardTimer_ms30;
+  drb_ToAddMod->pdcp_Config->drb->pdcp_SN_SizeUL = calloc(1,sizeof(*drb_ToAddMod->pdcp_Config->drb->pdcp_SN_SizeUL));
+  *drb_ToAddMod->pdcp_Config->drb->pdcp_SN_SizeUL = NR_PDCP_Config__drb__pdcp_SN_SizeUL_len18bits;
+  drb_ToAddMod->pdcp_Config->drb->pdcp_SN_SizeDL = calloc(1,sizeof(*drb_ToAddMod->pdcp_Config->drb->pdcp_SN_SizeDL));
+  *drb_ToAddMod->pdcp_Config->drb->pdcp_SN_SizeDL = NR_PDCP_Config__drb__pdcp_SN_SizeDL_len18bits;
+  drb_ToAddMod->pdcp_Config->drb->headerCompression.present = NR_PDCP_Config__drb__headerCompression_PR_notUsed;
+  drb_ToAddMod->pdcp_Config->drb->headerCompression.choice.notUsed = 0;
+
+  drb_ToAddMod->pdcp_Config->drb->integrityProtection=NULL;	
+  drb_ToAddMod->pdcp_Config->drb->statusReportRequired=NULL;	
+  drb_ToAddMod->pdcp_Config->drb->outOfOrderDelivery=NULL;
+  drb_ToAddMod->pdcp_Config->moreThanOneRLC = NULL;
+
+  drb_ToAddMod->pdcp_Config->t_Reordering = calloc(1,sizeof(*drb_ToAddMod->pdcp_Config->t_Reordering));
+  *drb_ToAddMod->pdcp_Config->t_Reordering = NR_PDCP_Config__t_Reordering_ms0;
+  drb_ToAddMod->pdcp_Config->ext1 = NULL;
+
+  rbconfig->drb_ToReleaseList = NULL;
+
+  rbconfig->securityConfig = calloc(1,sizeof(*rbconfig->securityConfig));
+  rbconfig->securityConfig->securityAlgorithmConfig = calloc(1,sizeof(*rbconfig->securityConfig->securityAlgorithmConfig));
+  rbconfig->securityConfig->securityAlgorithmConfig->cipheringAlgorithm = NR_CipheringAlgorithm_nea2;
+  rbconfig->securityConfig->securityAlgorithmConfig->integrityProtAlgorithm=NULL;
+  rbconfig->securityConfig->keyToUse = calloc(1,sizeof(*rbconfig->securityConfig->keyToUse));
+  *rbconfig->securityConfig->keyToUse = NR_SecurityConfig__keyToUse_master;
+}
 #endif