diff --git a/nfapi/README.md b/nfapi/README.md
index 50273b529b74357df677016520f584dd5a3e31fe..e10bb7bc92f391f865db9359a359a13a4ccab104 100644
--- a/nfapi/README.md
+++ b/nfapi/README.md
@@ -33,6 +33,10 @@ sudo <oai_codebase>/cmake_targets/ran_build/build/nr-softmodem -O <oai_codebase>
 
 ### Task-B [unpacking]
 * Modify `nfapi_p7_message_unpack()` in `nfapi_p7.c`
+    * `unpack_dl_tti_request`
+    * `unpack_ul_tti_request`
+    * `unpack_ul_dci_request`
+    * `unpack_tx_data_request`
 * Similarly change all the `unpack` functions within the switch-case block.
 * Modify the behaviour of `check_unpack_length()` for the new `TAGS`
 
diff --git a/nfapi/oai_integration/nfapi_vnf.c b/nfapi/oai_integration/nfapi_vnf.c
index ffc6fcbc018cfc857495ad7593140df3a1bad864..8fc616dc82d44e501dbebd958cac3943715b6f38 100644
--- a/nfapi/oai_integration/nfapi_vnf.c
+++ b/nfapi/oai_integration/nfapi_vnf.c
@@ -1305,7 +1305,7 @@ int oai_nfapi_dl_config_req(nfapi_dl_config_request_t *dl_config_req) {
 int oai_nfapi_nr_dl_config_req(nfapi_nr_dl_tti_request_t *dl_config_req)
 {
   nfapi_vnf_p7_config_t *p7_config = vnf.p7_vnfs[0].config;
-
+   dl_config_req->header.message_id= NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST;
   dl_config_req->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!!
 
   int retval = nfapi_vnf_p7_nr_dl_config_req(p7_config, dl_config_req);
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
index d8a77aa53e81594900f0f0b1314f34728ef0fbbc..075ab6e0f42514719377b18d8a3ec7e2593fe0cf 100644
--- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
+++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
@@ -24,7 +24,10 @@
 #define NFAPI_MAX_NUM_GROUPS 8
 #define NFAPI_MAX_NUM_CB 8
 
-#define DUMMY_TAG 0x55555
+#define NFAPI_NR_DL_TTI_CSI_RS_REL_IISC 0x5551
+#define NFAPI_NR_DL_TTI_PDCCH_REL_IISC 0x5552
+#define NFAPI_NR_DL_TTI_PDSCH_REL_IISC 0x5553
+#define NFAPI_NR_DL_TTI_SSB_REL_IISC 0x5554
 
 // Extension to the generic structures for single tlv values
 
diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c
index 8687095e0bd2836bba7dc9fbb985e3a88a9b16d3..0d5614b1815657c8a577186112ce64afa9f9d0ad 100755
--- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c
+++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c
@@ -736,7 +736,7 @@ static uint8_t pack_dl_tti_request_body_value(void* tlv, uint8_t **ppWritePacked
 			{
 				if( 
 					!(	pack_tlv(
-							DUMMY_TAG, 
+							NFAPI_NR_DL_TTI_CSI_RS_REL_IISC, 
 							&pdu->csi_rs_pdu.csi_rs_pdu_rel15, 
 							ppWritePackedMsg, end, 
 							&pack_dl_tti_csi_rs_pdu_rel15_value) 
@@ -752,7 +752,7 @@ static uint8_t pack_dl_tti_request_body_value(void* tlv, uint8_t **ppWritePacked
 			{
 				if( 
 					!(	pack_tlv(
-							DUMMY_TAG, 
+							NFAPI_NR_DL_TTI_PDCCH_REL_IISC, 
 							&pdu->pdcch_pdu.pdcch_pdu_rel15, 
 							ppWritePackedMsg, end, 
 							&pack_dl_tti_pdcch_pdu_rel15_value) 
@@ -768,7 +768,7 @@ static uint8_t pack_dl_tti_request_body_value(void* tlv, uint8_t **ppWritePacked
 			{
 				if( 
 					!(	pack_tlv(
-							DUMMY_TAG, 
+							NFAPI_NR_DL_TTI_PDSCH_REL_IISC, 
 							&pdu->pdsch_pdu.pdsch_pdu_rel15, 
 							ppWritePackedMsg, end, 
 							&pack_dl_tti_pdsch_pdu_rel15_value) 
@@ -784,7 +784,7 @@ static uint8_t pack_dl_tti_request_body_value(void* tlv, uint8_t **ppWritePacked
 			{
 				if( 
 					!(	pack_tlv(
-							DUMMY_TAG, 
+							NFAPI_NR_DL_TTI_SSB_REL_IISC, 
 							&pdu->ssb_pdu.ssb_pdu_rel15, 
 							ppWritePackedMsg, end, 
 							&pack_dl_tti_ssb_pdu_rel15_value) 
@@ -2974,11 +2974,15 @@ int nfapi_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBu
 	uint8_t result = 0;
 	switch (pMessageHeader->message_id)
 	{
+		case NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST:
+			result = pack_dl_tti_request(pMessageHeader, &pWritePackedMessage, end, config);
+			break;
+#if 0
 		case NFAPI_DL_CONFIG_REQUEST:
                   //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() NFAPI_DL_CONFIG_REQUEST\n", __FUNCTION__);
 			result = pack_dl_config_request(pMessageHeader, &pWritePackedMessage, end, config);
 			break;
-
+#endif
 		case NFAPI_UL_CONFIG_REQUEST:
 			result = pack_ul_config_request(pMessageHeader, &pWritePackedMessage, end, config);
 			break;
@@ -3121,7 +3125,152 @@ int nfapi_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBu
 
 
 // Unpack routines
+// NR:
+static uint8_t unpack_dl_tti_csi_rs_pdu_rel15_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
+{
+	nfapi_nr_dl_tti_csi_rs_pdu_rel15_t* value = (nfapi_nr_dl_tti_csi_rs_pdu_rel15_t*)tlv;
+
+	return(
+		pull16(value->bwp_size, ppWritePackedMsg, end) &&
+		pull16(value->bwp_start, ppWritePackedMsg, end) &&
+
+		pull8(value->subcarrier_spacing, ppWritePackedMsg, end) &&
+		pull8(value->cyclic_prefix, ppWritePackedMsg, end) &&
+
+		pull16(value->start_rb, ppWritePackedMsg, end) &&
+		pull16(value->nr_of_rbs, ppWritePackedMsg, end) &&
+
+		pull8(value->csi_type, ppWritePackedMsg, end) &&
+		pull8(value->row, ppWritePackedMsg, end) &&
+
+		pull16(value->freq_domain, ppWritePackedMsg, end) &&
+		pull8(value->symb_l0, ppWritePackedMsg, end) &&
+
+		push8(value->symb_l1, ppWritePackedMsg, end) &&
+		pull8(value->cdm_type, ppWritePackedMsg, end) &&
+
+		pull8(value->freq_density, ppWritePackedMsg, end) &&
+		pull16(value->scramb_id, ppWritePackedMsg, end) &&
+
+		pull8(value->power_control_offset, ppWritePackedMsg, end) &&
+		pull8(value->power_control_offset_ss, ppWritePackedMsg, end)
+	);
+
+}
+
+
+static uint8_t unpack_dl_tti_pdcch_pdu_rel15_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
+{
+	nfapi_nr_dl_tti_pdcch_pdu_rel15_t* value = (nfapi_nr_dl_tti_pdcch_pdu_rel15_t*)tlv;
+
+	// TODO: resolve the packaging of array (currently sending a single element)
+	return(
+		pull16(value->BWPSize, ppWritePackedMsg, end) &&
+		pull16(value->BWPStart, ppWritePackedMsg, end) &&
+		pull8(value->SubcarrierSpacing, ppWritePackedMsg, end) &&
+		pull8(value->CyclicPrefix, ppWritePackedMsg, end) &&
+
+		pull8(value->StartSymbolIndex, ppWritePackedMsg, end) &&
+		pull8(value->DurationSymbols, ppWritePackedMsg, end) &&
+		pullarray16(value->FreqDomainResource, 6, 1, ppWritePackedMsg, end) &&
+		pull8(value->CceRegMappingType, ppWritePackedMsg, end) &&
+
+		pull8(value->RegBundleSize, ppWritePackedMsg, end) &&
+		pull8(value->InterleaverSize, ppWritePackedMsg, end) &&
+		pull8(value->CoreSetType, ppWritePackedMsg, end) &&
+		pull16(value->ShiftIndex, ppWritePackedMsg, end) &&
+
+		pull8(value->precoderGranularity, ppWritePackedMsg, end) &&
+		pull16(value->numDlDci, ppWritePackedMsg, end) &&
+		pullarray16(value->RNTI, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
+		pullarray16(value->ScramblingId, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
+
+		pullarray16(value->ScramblingRNTI, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
+		pullarray8(value->CceIndex, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
+		pullarray8(value->AggregationLevel, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
+		pullarray8(value->beta_PDCCH_1_0, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
+
+		pullarray8(value->powerControlOffsetSS, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
+		pullarray16(value->PayloadSizeBits, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
+		pullarray8(value->Payload[0], MAX_DCI_CORESET*DCI_PAYLOAD_BYTE_LEN, 1, ppWritePackedMsg, end)		
+	);
+
+}
+
+
+static uint8_t unpack_dl_tti_pdsch_pdu_rel15_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
+{
+	nfapi_nr_dl_tti_pdsch_pdu_rel15_t* value = (nfapi_nr_dl_tti_pdsch_pdu_rel15_t*)tlv;
+
+	// TODO: resolve the packaging of array (currently sending a single element)
+	return(
+		pull16(value->pduBitmap, ppWritePackedMsg, end) &&
+		pull16(value->rnti, ppWritePackedMsg, end) &&
+		pull16(value->pduIndex, ppWritePackedMsg, end) &&
+		pull16(value->BWPSize, ppWritePackedMsg, end) &&
+		
+		pull16(value->BWPStart, ppWritePackedMsg, end) &&
+		pull8(value->SubcarrierSpacing, ppWritePackedMsg, end) &&
+		pull8(value->CyclicPrefix, ppWritePackedMsg, end) &&
+		pull8(value->NrOfCodewords, ppWritePackedMsg, end) &&
+		
+		pullarray16(value->targetCodeRate, 2, 1, ppWritePackedMsg, end) &&
+		pullarray8(value->qamModOrder, 2, 1, ppWritePackedMsg, end) &&
+		pullarray8(value->mcsIndex, 2, 1, ppWritePackedMsg, end) &&
+        pullarray8(value->mcsTable, 2, 1, ppWritePackedMsg, end) &&
+		
+		pullarray8(value->rvIndex, 2, 1, ppWritePackedMsg, end) &&
+	    pullarray32(value->TBSize, 2, 1, ppWritePackedMsg, end) &&
+	    pull16(value->dataScramblingId, ppWritePackedMsg, end) &&
+		pull8(value->nrOfLayers, ppWritePackedMsg, end) &&
+		
+		pull8(value->transmissionScheme, ppWritePackedMsg, end) &&
+		pull8(value->refPoint, ppWritePackedMsg, end) &&
+		pull16(value->dlDmrsSymbPos, ppWritePackedMsg, end) &&
+		pull8(value->dmrsConfigType, ppWritePackedMsg, end) &&
+		
+		pull16(value->dlDmrsScramblingId, ppWritePackedMsg, end) &&
+		pull8(value->SCID, ppWritePackedMsg, end) &&
+		pull8(value->numDmrsCdmGrpsNoData, ppWritePackedMsg, end) &&
+		pull16(value->dmrsPorts, ppWritePackedMsg, end) &&
+
+		pull8(value->resourceAlloc, ppWritePackedMsg, end) &&
+		pullarray8(value->rbBitmap, 36, 1, ppWritePackedMsg, end) &&
+		pull16(value->rbStart, ppWritePackedMsg, end) &&
+		pull16(value->rbSize, ppWritePackedMsg, end) &&
+
+		pull8(value->VRBtoPRBMapping, ppWritePackedMsg, end) &&
+		pull8(value->StartSymbolIndex, ppWritePackedMsg, end) &&
+		pull8(value->NrOfSymbols, ppWritePackedMsg, end) &&
+		pull8(value->PTRSPortIndex, ppWritePackedMsg, end) &&
+
+		pull8(value->PTRSTimeDensity, ppWritePackedMsg, end) &&
+		pull8(value->PTRSFreqDensity, ppWritePackedMsg, end) &&
+		pull8(value->PTRSReOffset, ppWritePackedMsg, end) 	
+	);
+
+}
+
+
+static uint8_t unpack_dl_tti_ssb_pdu_rel15_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
+{
+	nfapi_nr_dl_tti_ssb_pdu_rel15_t* value = (nfapi_nr_dl_tti_ssb_pdu_rel15_t*)tlv;
+
+	return(
+		pull16(value->PhysCellId, ppWritePackedMsg, end) &&
+		pull8(value->BetaPss, ppWritePackedMsg, end) &&
+		pull8(value->SsbBlockIndex, ppWritePackedMsg, end) &&
+		pull8(value->SsbSubcarrierOffset, ppWritePackedMsg, end) &&
+		pull16(value->ssbOffsetPointA, ppWritePackedMsg, end) &&
+		pull8(value->bchPayloadFlag, ppWritePackedMsg, end) &&
+		pull32(value->bchPayload, ppWritePackedMsg, end)	
+		// TODO: pack precoding_and_beamforming too
+	);
 
+}
+
+
+// LTE:
 static uint8_t unpack_dl_config_dci_dl_pdu_rel8_value(void *tlv, uint8_t **ppReadPackedMsg, uint8_t *end)
 {
 	nfapi_dl_config_dci_dl_pdu_rel8_t* dci_dl_pdu_rel8 = (nfapi_dl_config_dci_dl_pdu_rel8_t*)tlv; 
@@ -3563,7 +3712,265 @@ static uint8_t unpack_dl_config_ndlsch_pdu_rel13_value(void *tlv, uint8_t **ppRe
 			 pull8(ppReadPackedMsg, &ndlsch_params_rel13->scrambling_sequence_initialization_cinit, end) &&
 			 pull16(ppReadPackedMsg, &ndlsch_params_rel13->sf_idx, end) &&
 			 pull8(ppReadPackedMsg, &ndlsch_params_rel13->nrs_antenna_ports_assumed_by_the_ue, end));
-} 
+}
+
+
+static uint8_t unpack_dl_tti_request_body_value(void *tlv, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
+{
+	nfapi_nr_dl_tti_request_body_t* value = (nfapi_nr_dl_tti_request_body_t*)tlv;
+
+	if(!(pull8(ppReadPackedMsg, &value->nGroup, end) &&
+		 pull8(ppReadPackedMsg, &value->nPDUs, end) &&
+		 pull8(ppReadPackedMsg, &value->nUe, end) &&
+		 pull8(ppReadPackedMsg, &value->PduIdx, end)
+		 ))
+		return 0;
+
+	if(value->nPDUs > NFAPI_NR_MAX_DL_TTI_PDUS)
+	{
+		NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s number of dl tti pdu's exceed maxium (count:%d max:%d)\n", __FUNCTION__, value->nPDUs, NFAPI_NR_MAX_DL_TTI_PDUS);
+		return 0;		
+	}
+
+	if(value->nPDUs)
+	{
+		// value->dl_tti_pdu_list = (nfapi_nr_dl_tti_request_pdu_t*)nfapi_p7_allocate(sizeof(nfapi_nr_dl_tti_request_pdu_t) * value->nPDUs, config);
+		if(value->dl_tti_pdu_list == NULL)
+		{
+			NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate dl config pdu list (count:%d)\n", __FUNCTION__, value->nPDUs);
+			return 0;
+		}
+	}
+	else
+	{
+		//value->dl_tti_pdu_list = 0;
+	}
+
+	uint16_t i;
+	uint16_t total_number_of_pdus = value->nPDUs;
+	for(i = 0; i < total_number_of_pdus; ++i)
+	{
+		nfapi_nr_dl_tti_request_pdu_t* pdu = &(value->dl_tti_pdu_list[i]);
+		
+		if(!(pull8(ppReadPackedMsg, &pdu->PDUType, end) &&
+			 pull8(ppReadPackedMsg, &pdu->PDUSize, end)))
+			return 0;
+					
+		uint8_t *packedPduEnd = (*ppReadPackedMsg) + pdu->PDUSize - 2;
+
+		if(packedPduEnd > end)
+		{
+			// pdu end of beyond buffer end
+			return 0;
+		}
+		switch(pdu->PDUSize)
+		{
+			case NFAPI_NR_DL_TTI_CSI_RS_PDU_TYPE:
+			{
+				unpack_tlv_t unpack_fns[] =
+				{
+					{ NFAPI_NR_DL_TTI_CSI_RS_REL_IISC, &pdu->csi_rs_pdu.csi_rs_pdu_rel15, &unpack_dl_tti_csi_rs_pdu_rel15_value},
+				};
+
+				unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+			}
+			break;
+
+		    case NFAPI_NR_DL_TTI_PDCCH_PDU_TYPE:
+			{
+				unpack_tlv_t unpack_fns[] =
+				{
+					{ NFAPI_NR_DL_TTI_PDCCH_REL_IISC, &pdu->pdcch_pdu.pdcch_pdu_rel15, &unpack_dl_tti_pdcch_pdu_rel15_value},
+				};
+
+				unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+			}
+			break;
+			
+			case NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE:
+			{
+				unpack_tlv_t unpack_fns[] =
+				{
+					{ NFAPI_NR_DL_TTI_PDSCH_REL_IISC, &pdu->pdsch_pdu.pdsch_pdu_rel15, &unpack_dl_tti_pdsch_pdu_rel15_value},
+				};
+
+				unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+			}
+			break;
+
+			case NFAPI_NR_DL_TTI_SSB_PDU_TYPE:
+			{
+				unpack_tlv_t unpack_fns[] =
+				{
+					{ NFAPI_NR_DL_TTI_SSB_REL_IISC, &pdu->ssb_pdu.ssb_pdu_rel15, &pack_dl_tti_ssb_pdu_rel15_value},
+				};
+
+				unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+			}
+			break;
+
+
+			default:
+				// Need to log an error
+			break;
+		}
+	}
+
+
+#if 0
+		switch(pdu->PDUSize)
+		{
+			case NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE:
+				{
+					unpack_tlv_t unpack_fns[] =
+					{
+						{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel8, &unpack_dl_config_dci_dl_pdu_rel8_value},
+						{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL9_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel9, &unpack_dl_config_dci_dl_pdu_rel9_value},
+						{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL10_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel10, &unpack_dl_config_dci_dl_pdu_rel10_value},
+						{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL11_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel11, &unpack_dl_config_dci_dl_pdu_rel11_value},
+						{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL12_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel12, &unpack_dl_config_dci_dl_pdu_rel12_value},
+						{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL13_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel13, &unpack_dl_config_dci_dl_pdu_rel13_value},
+					};
+
+					unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+				}
+				break;
+			case NFAPI_DL_CONFIG_BCH_PDU_TYPE:
+				{
+					unpack_tlv_t unpack_fns[] =
+					{
+						{ NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG, &pdu->bch_pdu.bch_pdu_rel8, &unpack_dl_config_bch_pdu_rel8_value},
+					};
+
+					unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+				}
+				break;
+			case NFAPI_DL_CONFIG_MCH_PDU_TYPE:
+				{
+					unpack_tlv_t unpack_fns[] =
+					{
+						{ NFAPI_DL_CONFIG_REQUEST_MCH_PDU_REL8_TAG, &pdu->mch_pdu.mch_pdu_rel8, &unpack_dl_config_mch_pdu_rel8_value},
+					};
+
+					unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+				}
+				break;
+			case NFAPI_DL_CONFIG_DLSCH_PDU_TYPE:
+				{
+					unpack_tlv_t unpack_fns[] =
+					{
+						{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel8, &unpack_dl_config_dlsch_pdu_rel8_value},
+						{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL9_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel9, &unpack_dl_config_dlsch_pdu_rel9_value},
+						{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel10, &unpack_dl_config_dlsch_pdu_rel10_value},
+						{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL11_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel11, &unpack_dl_config_dlsch_pdu_rel11_value},
+						{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL12_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel12, &unpack_dl_config_dlsch_pdu_rel12_value},
+						{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel13, &unpack_dl_config_dlsch_pdu_rel13_value},
+					};
+
+					unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+				}
+				break;
+			case NFAPI_DL_CONFIG_PCH_PDU_TYPE:
+				{
+					unpack_tlv_t unpack_fns[] =
+					{
+						{ NFAPI_DL_CONFIG_REQUEST_PCH_PDU_REL8_TAG, &pdu->pch_pdu.pch_pdu_rel8, &unpack_dl_config_pch_pdu_rel8_value},
+						{ NFAPI_DL_CONFIG_REQUEST_PCH_PDU_REL13_TAG, &pdu->pch_pdu.pch_pdu_rel13, &unpack_dl_config_pch_pdu_rel13_value},
+					};
+
+					unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+				}
+				break;
+			case NFAPI_DL_CONFIG_PRS_PDU_TYPE:
+				{
+					unpack_tlv_t unpack_fns[] =
+					{
+						{ NFAPI_DL_CONFIG_REQUEST_PRS_PDU_REL9_TAG, &pdu->prs_pdu.prs_pdu_rel9, &unpack_dl_config_prs_pdu_rel9_value},
+					};
+
+					unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+				}
+				break;
+			case NFAPI_DL_CONFIG_CSI_RS_PDU_TYPE:
+				{
+					unpack_tlv_t unpack_fns[] =
+					{
+						{ NFAPI_DL_CONFIG_REQUEST_CSI_RS_PDU_REL10_TAG, &pdu->csi_rs_pdu.csi_rs_pdu_rel10, &unpack_dl_config_csi_rs_pdu_rel10_value},
+						{ NFAPI_DL_CONFIG_REQUEST_CSI_RS_PDU_REL13_TAG, &pdu->csi_rs_pdu.csi_rs_pdu_rel13, &unpack_dl_config_csi_rs_pdu_rel13_value},
+					};
+
+					unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+				}
+				break;
+			case NFAPI_DL_CONFIG_EPDCCH_DL_PDU_TYPE:
+				{
+					unpack_tlv_t unpack_fns[] =
+					{
+						{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL8_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel8, &unpack_dl_config_dci_dl_pdu_rel8_value},
+						{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL9_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel9, &unpack_dl_config_dci_dl_pdu_rel9_value},
+						{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL10_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel10, &unpack_dl_config_dci_dl_pdu_rel10_value},
+						{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL11_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel11, &unpack_dl_config_dci_dl_pdu_rel11_value},
+						{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL12_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel12, &unpack_dl_config_dci_dl_pdu_rel12_value},
+						{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL13_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel13, &unpack_dl_config_dci_dl_pdu_rel13_value},
+						{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PARAM_REL11_TAG, &pdu->epdcch_pdu.epdcch_params_rel11, &unpack_dl_config_epdcch_params_rel11_value},
+						{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PARAM_REL13_TAG, &pdu->epdcch_pdu.epdcch_params_rel13, &unpack_dl_config_epdcch_params_rel13_value},
+					};
+
+					unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+				}
+				break;
+			case NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE:
+				{
+					unpack_tlv_t unpack_fns[] =
+					{
+						{ NFAPI_DL_CONFIG_REQUEST_MPDCCH_PDU_REL13_TAG, &pdu->mpdcch_pdu.mpdcch_pdu_rel13, &unpack_dl_config_mpdcch_pdu_rel13_value},
+					};
+
+					unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+				}
+				break;
+			case NFAPI_DL_CONFIG_NBCH_PDU_TYPE:
+				{
+					unpack_tlv_t unpack_fns[] =
+					{
+						{ NFAPI_DL_CONFIG_REQUEST_NBCH_PDU_REL13_TAG, &pdu->nbch_pdu.nbch_pdu_rel13, &unpack_dl_config_nbch_pdu_rel13_value},
+					};
+
+					unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+				}
+				break;
+			case NFAPI_DL_CONFIG_NPDCCH_PDU_TYPE:
+				{
+					unpack_tlv_t unpack_fns[] =
+					{
+						{ NFAPI_DL_CONFIG_REQUEST_NPDCCH_PDU_REL13_TAG, &pdu->npdcch_pdu.npdcch_pdu_rel13, &unpack_dl_config_npdcch_pdu_rel13_value},
+					};
+
+					unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+				
+				}
+				break;
+			case NFAPI_DL_CONFIG_NDLSCH_PDU_TYPE:
+				{
+					unpack_tlv_t unpack_fns[] =
+					{
+						{ NFAPI_DL_CONFIG_REQUEST_NDLSCH_PDU_REL13_TAG, &pdu->ndlsch_pdu.ndlsch_pdu_rel13, &unpack_dl_config_ndlsch_pdu_rel13_value},
+					};
+
+					unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
+				
+				}
+				break;
+			default:
+				// Need to log an error
+				break;
+		}
+	}
+#endif
+	return 1;
+}
+
+
 
 
 static uint8_t unpack_dl_config_request_body_value(void *tlv, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
@@ -3767,6 +4174,22 @@ static uint8_t unpack_dl_config_request_body_value(void *tlv, uint8_t **ppReadPa
 	return 1;
 }
 
+
+static uint8_t unpack_dl_tti_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t* config)
+{
+	nfapi_nr_dl_tti_request_t *pNfapiMsg = (nfapi_nr_dl_tti_request_t*)msg;
+    //TODO: Check if we need to add a seperate tag for dl_tti_request_body
+	unpack_p7_tlv_t unpack_fns[] =
+	{
+		{ NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST, &pNfapiMsg->dl_tti_request_body, &unpack_dl_config_request_body_value},
+	};
+
+	return ( pull16(ppReadPackedMsg, &pNfapiMsg->SFN, end) &&
+		    pull16(ppReadPackedMsg, &pNfapiMsg->Slot, end) &&
+			 unpack_p7_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
+}
+
+
 static uint8_t unpack_dl_config_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t* config)
 {
 	nfapi_dl_config_request_t *pNfapiMsg = (nfapi_dl_config_request_t*)msg;
diff --git a/openair1/SCHED_NR/fapi_nr_l1.c b/openair1/SCHED_NR/fapi_nr_l1.c
index 5c145a32302575038f71d269950e8a2f2685a90d..3a9e12c590a8b6406e6a8e6d783bd6af2b709400 100644
--- a/openair1/SCHED_NR/fapi_nr_l1.c
+++ b/openair1/SCHED_NR/fapi_nr_l1.c
@@ -33,7 +33,9 @@
 #include "PHY/NR_TRANSPORT/nr_transport_proto.h"
 #include "PHY/NR_TRANSPORT/nr_dlsch.h"
 #include "PHY/NR_TRANSPORT/nr_dci.h"
+#include "nfapi/oai_integration/vendor_ext.h"
 
+int oai_nfapi_nr_dl_config_req(nfapi_nr_dl_tti_request_t *dl_config_req);
 
 extern uint8_t nfapi_mode;
 
@@ -202,5 +204,8 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO){
 			      &UL_dci_req->ul_dci_pdu_list[i]);
   }
 
+  if (NFAPI_MODE!=NFAPI_MONOLITHIC) {
+    oai_nfapi_nr_dl_config_req(Sched_INFO->DL_req);   
+  }
 
 }