diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index f7c3f5829d6b9005d632dcc9b5866011b86c1ed0..2c3b88306a821b435d7d31da6364ee710395f6ee 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -352,17 +352,17 @@ schedule_SR(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
 	    ul_req =
 		&RC.mac[module_idP]->UL_req[CC_id].ul_config_request_body;
 
+	    // drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet
+	    if (mac_eNB_get_rrc_status
+		(module_idP, UE_RNTI(module_idP, UE_id)) < RRC_CONNECTED)
+		continue;
+
 	    AssertFatal(UE_list->
 			UE_template[CC_id][UE_id].physicalConfigDedicated
 			!= NULL,
 			"physicalConfigDedicated is null for UE %d\n",
 			UE_id);
 
-	    // drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet
-	    if (mac_eNB_get_rrc_status
-		(module_idP, UE_RNTI(module_idP, UE_id)) < RRC_CONNECTED)
-		continue;
-
 	    if ((SRconfig =
 		 UE_list->
 		 UE_template[CC_id][UE_id].physicalConfigDedicated->
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
index 8b88bef244078eba236f2d2d4224e39f8e0548ea..df84675dc1e3fc28dcc1f76061fa5b0e01cf862d 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
@@ -1349,9 +1349,14 @@ fill_nfapi_harq_information(module_id_t module_idP,
 
     AssertFatal(UE_id >= 0, "UE_id cannot be found, impossible\n");
     AssertFatal(UE_list != NULL, "UE_list is null\n");
+#if 0
+    /* TODO: revisit, don't use Assert, it's perfectly possible to
+     * have physicalConfigDedicated NULL here
+     */
     AssertFatal(UE_list->UE_template[CC_idP][UE_id].
 		physicalConfigDedicated != NULL,
 		"physicalConfigDedicated for rnti %x is null\n", rntiP);
+#endif
 
     harq_information->harq_information_rel11.num_ant_ports = 1;
 
@@ -3588,11 +3593,9 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id,
     uint8_t *pdu;
 
 #ifdef Rel14
-    AssertFatal(UE_list->
-		UE_template[pCCid][UE_id].physicalConfigDedicated->
-		pucch_ConfigDedicated != NULL,
-		"pucch_ConfigDedicated is null!\n");
-    if ((UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated->ext7)
+    if (UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated != NULL &&
+        UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated->pucch_ConfigDedicated != NULL &&
+        (UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated->ext7)
 	&& (UE_list->UE_template[pCCid][UE_id].
 	    physicalConfigDedicated->ext7->pucch_ConfigDedicated_r13)
 	&&
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
index 343d391538c27573a5cbbac883f519ee7bf34b99..421eab7cd768f9c64997b280eba1a780a85359ea 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
@@ -268,6 +268,9 @@ rx_sdu(const module_id_t enb_mod_idP,
 		      "[eNB %d] Frame %d, Subframe %d CC_id %d MAC CE_LCID %d (ce %d/%d): CRNTI %x (UE_id %d) in Msg3\n",
 		      enb_mod_idP, frameP, subframeP, CC_idP, rx_ces[i], i,
 		      num_ce, old_rnti, old_UE_id);
+		/* receiving CRNTI means that the current rnti has to go away */
+		cancel_ra_proc(enb_mod_idP, CC_idP, frameP,
+			       current_rnti);
 		if (old_UE_id != -1) {
 		    /* TODO: if the UE did random access (followed by a MAC uplink with
 		     * CRNTI) because none of its scheduling request was granted, then
@@ -288,9 +291,6 @@ rx_sdu(const module_id_t enb_mod_idP,
 			mac_eNB_rrc_ul_in_sync(enb_mod_idP, CC_idP, frameP,
 					       subframeP, old_rnti);
 		    }
-		    /* receiving CRNTI means that the current rnti has to go away */
-		    cancel_ra_proc(enb_mod_idP, CC_idP, frameP,
-				   current_rnti);
 		    current_rnti = old_rnti;
 		}
 		crnti_rx = 1;