diff --git a/open-nfapi.oai.patch b/open-nfapi.oai.patch
index 48fad9e48e997abb4d2117ed5d2060e19b58b223..5faced650e3fde117f9d7984f8162b84aaa06455 100644
--- a/open-nfapi.oai.patch
+++ b/open-nfapi.oai.patch
@@ -289,7 +289,7 @@ index 74f29a0..7310fc0 100644
  	}
  
 diff --git a/pnf/src/pnf_p7.c b/pnf/src/pnf_p7.c
-index 0fd7828..c980086 100644
+index 0fd7828..5a87c6c 100644
 --- a/pnf/src/pnf_p7.c
 +++ b/pnf/src/pnf_p7.c
 @@ -25,12 +25,64 @@
@@ -374,7 +374,14 @@ index 0fd7828..c980086 100644
  	if(pnf_p7->_public.codec_config.deallocate)
  	{
  		(pnf_p7->_public.codec_config.deallocate)(req->dl_config_request_body.dl_config_pdu_list);
-@@ -83,11 +138,14 @@ void deallocate_nfapi_dl_config_request(nfapi_dl_config_request_t* req, pnf_p7_t
+@@ -77,17 +132,21 @@ void deallocate_nfapi_dl_config_request(nfapi_dl_config_request_t* req, pnf_p7_t
+ 	{
+ 		free(req->dl_config_request_body.dl_config_pdu_list);
+ 	}
++        req->dl_config_request_body.dl_config_pdu_list=0;
+ 
+ 	pnf_p7_free(pnf_p7, req);
+ }
  
  nfapi_ul_config_request_t* allocate_nfapi_ul_config_request(pnf_p7_t* pnf_p7) 
  { 
@@ -390,7 +397,15 @@ index 0fd7828..c980086 100644
  	if(pnf_p7->_public.codec_config.deallocate)
  	{
  		(pnf_p7->_public.codec_config.deallocate)(req->ul_config_request_body.ul_config_pdu_list);
-@@ -107,6 +165,7 @@ nfapi_hi_dci0_request_t* allocate_nfapi_hi_dci0_request(pnf_p7_t* pnf_p7)
+@@ -96,6 +155,7 @@ void deallocate_nfapi_ul_config_request(nfapi_ul_config_request_t* req, pnf_p7_t
+ 	{
+ 		free(req->ul_config_request_body.ul_config_pdu_list);
+ 	}
++        req->ul_config_request_body.ul_config_pdu_list=0;
+ 
+ 	pnf_p7_free(pnf_p7, req);
+ }
+@@ -107,6 +167,7 @@ nfapi_hi_dci0_request_t* allocate_nfapi_hi_dci0_request(pnf_p7_t* pnf_p7)
  
  void deallocate_nfapi_hi_dci0_request(nfapi_hi_dci0_request_t* req, pnf_p7_t* pnf_p7) 
  { 
@@ -398,7 +413,15 @@ index 0fd7828..c980086 100644
  	if(pnf_p7->_public.codec_config.deallocate)
  	{
  		(pnf_p7->_public.codec_config.deallocate)(req->hi_dci0_request_body.hi_dci0_pdu_list);
-@@ -127,6 +186,9 @@ nfapi_tx_request_t* allocate_nfapi_tx_request(pnf_p7_t* pnf_p7)
+@@ -115,6 +176,7 @@ void deallocate_nfapi_hi_dci0_request(nfapi_hi_dci0_request_t* req, pnf_p7_t* pn
+ 	{
+ 		free(req->hi_dci0_request_body.hi_dci0_pdu_list);
+ 	}
++        req->hi_dci0_request_body.hi_dci0_pdu_list=0;
+ 
+ 	pnf_p7_free(pnf_p7, req);
+ }
+@@ -127,6 +189,9 @@ nfapi_tx_request_t* allocate_nfapi_tx_request(pnf_p7_t* pnf_p7)
  void deallocate_nfapi_tx_request(nfapi_tx_request_t* req, pnf_p7_t* pnf_p7) 
  { 
  	int i = 0;
@@ -408,7 +431,31 @@ index 0fd7828..c980086 100644
  	for(i = 0; i < req->tx_request_body.number_of_pdus; ++i)
  	{
  		void* data = req->tx_request_body.tx_pdu_list[i].segments[0].segment_data;
-@@ -307,11 +369,11 @@ void pnf_p7_rx_reassembly_queue_remove_old_msgs(pnf_p7_t* pnf_p7, pnf_p7_rx_reas
+@@ -139,6 +204,7 @@ void deallocate_nfapi_tx_request(nfapi_tx_request_t* req, pnf_p7_t* pnf_p7)
+ 		{
+ 			free(data);
+ 		}
++                data=0;
+ 	}
+ 
+ 
+@@ -150,6 +216,7 @@ void deallocate_nfapi_tx_request(nfapi_tx_request_t* req, pnf_p7_t* pnf_p7)
+ 	{
+ 		free(req->tx_request_body.tx_pdu_list);
+ 	}
++        req->tx_request_body.tx_pdu_list=0;
+ 
+ 	pnf_p7_free(pnf_p7, req);
+ }
+@@ -169,6 +236,7 @@ void deallocate_nfapi_lbt_dl_config_request(nfapi_lbt_dl_config_request_t* req,
+ 	{
+ 		free(req->lbt_dl_config_request_body.lbt_dl_config_req_pdu_list);
+ 	}
++        req->lbt_dl_config_request_body.lbt_dl_config_req_pdu_list=0;
+ 
+ 	pnf_p7_free(pnf_p7, req);
+ }
+@@ -307,11 +375,11 @@ void pnf_p7_rx_reassembly_queue_remove_old_msgs(pnf_p7_t* pnf_p7, pnf_p7_rx_reas
  }
  
  
@@ -422,7 +469,7 @@ index 0fd7828..c980086 100644
  		return 0;
  	}
  	else
-@@ -482,29 +544,41 @@ void pnf_pack_and_send_timing_info(pnf_p7_t* pnf_p7)
+@@ -482,29 +550,41 @@ void pnf_pack_and_send_timing_info(pnf_p7_t* pnf_p7)
  
  void send_dummy_subframe(pnf_p7_t* pnf_p7, uint16_t sfn_sf)
  {
@@ -469,7 +516,7 @@ index 0fd7828..c980086 100644
  		(pnf_p7->_public.lbt_dl_config_req)(&pnf_p7->_public, pnf_p7->_public.dummy_subframe.lbt_dl_config_req);
  	}
  }
-@@ -526,10 +600,14 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
+@@ -526,10 +606,14 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
  		return -1;
  	}
  
@@ -485,7 +532,7 @@ index 0fd7828..c980086 100644
  	// If the subframe_buffer has been configured
  	if(pnf_p7->_public.subframe_buffer_size != 0)
  	{
-@@ -550,6 +628,10 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
+@@ -550,6 +634,10 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
  			NFAPI_TRACE(NFAPI_TRACE_INFO, "Applying shift %d to sfn/sf (%d -> %d)\n", pnf_p7->sfn_sf_shift, NFAPI_SFNSF2DEC(sfn_sf), shifted_sfn_sf);
  			sfn_sf = shifted_sfn_sf;
  
@@ -496,7 +543,7 @@ index 0fd7828..c980086 100644
  			pnf_p7->sfn_sf_shift = 0;
  		}
  
-@@ -558,77 +640,104 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
+@@ -558,77 +646,113 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
  
  		nfapi_pnf_p7_subframe_buffer_t* subframe_buffer = &(pnf_p7->subframe_buffer[buffer_index]);
  
@@ -595,11 +642,20 @@ index 0fd7828..c980086 100644
  
 -			if(subframe_buffer->tx_req != 0)
 +                        if(tx_subframe_buffer->dl_config_req != 0)
++                        {
 +                          deallocate_nfapi_dl_config_request(tx_subframe_buffer->dl_config_req, pnf_p7);
++                          tx_subframe_buffer->dl_config_req = 0;
++                        }
 +			if(tx_subframe_buffer->tx_req != 0)
++                        {
 +                          deallocate_nfapi_tx_request(tx_subframe_buffer->tx_req, pnf_p7);
++                          tx_subframe_buffer->tx_req = 0;
++                        }
 +                        if(tx_subframe_buffer->hi_dci0_req != 0)
++                        {
 +                          deallocate_nfapi_hi_dci0_request(tx_subframe_buffer->hi_dci0_req, pnf_p7);
++                          tx_subframe_buffer->hi_dci0_req = 0;
++                        }
 +                }
 +                else if(subframe_buffer->sfn_sf == sfn_sf)
 +		{
@@ -627,7 +683,7 @@ index 0fd7828..c980086 100644
  				}
  			}
  
-@@ -637,7 +746,7 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
+@@ -637,7 +761,7 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
  				if(pnf_p7->_public.lbt_dl_config_req)
  					(pnf_p7->_public.lbt_dl_config_req)(&(pnf_p7->_public), subframe_buffer->lbt_dl_config_req);
  
@@ -636,24 +692,31 @@ index 0fd7828..c980086 100644
  			}
  			else
  			{
-@@ -650,14 +759,31 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
+@@ -650,14 +774,42 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
  
  			}
  
+-			memset(&(pnf_p7->subframe_buffer[buffer_index]), 0, sizeof(nfapi_pnf_p7_subframe_buffer_t));
+-			pnf_p7->subframe_buffer[buffer_index].sfn_sf = -1;
+-		}
 +                        //if(subframe_buffer->dl_config_req != 0)
 +                          //deallocate_nfapi_dl_config_request(subframe_buffer->dl_config_req, pnf_p7);
 +			//if(subframe_buffer->tx_req != 0)
 +                          //deallocate_nfapi_tx_request(subframe_buffer->tx_req, pnf_p7);
 +                        if(subframe_buffer->ul_config_req != 0)
++                        {
 +                          deallocate_nfapi_ul_config_request(subframe_buffer->ul_config_req, pnf_p7);
++                          subframe_buffer->ul_config_req = 0;
++
++                        }
 +                        //if(subframe_buffer->hi_dci0_req != 0)
 +                          //deallocate_nfapi_hi_dci0_request(subframe_buffer->hi_dci0_req, pnf_p7);
 +			if(subframe_buffer->lbt_dl_config_req != 0)
++                        {
 +                          deallocate_nfapi_lbt_dl_config_request(subframe_buffer->lbt_dl_config_req, pnf_p7);
-+
- 			memset(&(pnf_p7->subframe_buffer[buffer_index]), 0, sizeof(nfapi_pnf_p7_subframe_buffer_t));
- 			pnf_p7->subframe_buffer[buffer_index].sfn_sf = -1;
- 		}
++                          subframe_buffer->lbt_dl_config_req = 0;
++                        }
++                } // sfn_sf match
  		else
  		{
 -			send_dummy_subframe(pnf_p7, sfn_sf);
@@ -662,6 +725,13 @@ index 0fd7828..c980086 100644
 +			send_dummy_subframe(pnf_p7, sfn_sf_tx);
  		}
  
++
++                if (subframe_buffer->dl_config_req == 0 && subframe_buffer->tx_req == 0 && subframe_buffer->ul_config_req == 0 && subframe_buffer->lbt_dl_config_req == 0)
++                {
++                  memset(&(pnf_p7->subframe_buffer[buffer_index]), 0, sizeof(nfapi_pnf_p7_subframe_buffer_t));
++                  pnf_p7->subframe_buffer[buffer_index].sfn_sf = -1;
++		}
++
 +                //printf("pnf_p7->_public.timing_info_mode_periodic:%d pnf_p7->timing_info_period_counter:%d pnf_p7->_public.timing_info_period:%d\n", pnf_p7->_public.timing_info_mode_periodic, pnf_p7->timing_info_period_counter, pnf_p7->_public.timing_info_period);
 +                //printf("pnf_p7->_public.timing_info_mode_aperiodic:%d pnf_p7->timing_info_aperiodic_send:%d\n", pnf_p7->_public.timing_info_mode_aperiodic, pnf_p7->timing_info_aperiodic_send);
 +                //printf("pnf_p7->timing_info_ms_counter:%d\n", pnf_p7->timing_info_ms_counter);
@@ -669,7 +739,7 @@ index 0fd7828..c980086 100644
  		// send the periodic timing info if configured
  		if(pnf_p7->_public.timing_info_mode_periodic && (pnf_p7->timing_info_period_counter++) == pnf_p7->_public.timing_info_period)
  		{
-@@ -678,14 +804,15 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
+@@ -678,14 +830,15 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
  	}
  	else
  	{
@@ -687,7 +757,7 @@ index 0fd7828..c980086 100644
  					pnf_p7->stats.dl_conf_ontime, pnf_p7->stats.dl_conf_late, 
  					pnf_p7->stats.ul_conf_ontime, pnf_p7->stats.ul_conf_late, 
  					pnf_p7->stats.hi_dci0_ontime, pnf_p7->stats.hi_dci0_late, 
-@@ -694,6 +821,7 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
+@@ -694,6 +847,7 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
  		memset(&pnf_p7->stats, 0, sizeof(pnf_p7->stats));
  	}
  	pnf_p7->tick++;
@@ -695,7 +765,7 @@ index 0fd7828..c980086 100644
  
  	if(pthread_mutex_unlock(&(pnf_p7->mutex)) != 0)
  	{
-@@ -724,7 +852,7 @@ uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
+@@ -724,7 +878,7 @@ uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
  			if(recv_sfn_sf_dec > ((current_sfn_sf_dec + timing_window) % NFAPI_MAX_SFNSFDEC))
  			{
  				// out of window
@@ -704,7 +774,7 @@ index 0fd7828..c980086 100644
  			}
  			else
  			{
-@@ -736,7 +864,7 @@ uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
+@@ -736,7 +890,7 @@ uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
  		else
  		{
  			// too late
@@ -713,7 +783,7 @@ index 0fd7828..c980086 100644
  		}
  
  	}
-@@ -751,8 +879,8 @@ uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
+@@ -751,8 +905,8 @@ uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
  		}
  		else
  		{
@@ -724,7 +794,7 @@ index 0fd7828..c980086 100644
  		}
  
  	}
-@@ -785,15 +913,32 @@ void pnf_handle_dl_config_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_
+@@ -785,15 +939,32 @@ void pnf_handle_dl_config_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_
  			return;
  		}
  
@@ -762,7 +832,7 @@ index 0fd7828..c980086 100644
  				//NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] Freeing dl_config_req at index %d (%d/%d)", 
  				//			pMyPhyInfo->sfnSf, bufferIdx,
  				//			SFNSF2SFN(dreq->sfn_sf), SFNSF2SF(dreq->sfn_sf));
-@@ -994,6 +1139,16 @@ void pnf_handle_tx_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
+@@ -994,6 +1165,16 @@ void pnf_handle_tx_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
  			uint32_t sfn_sf_dec = NFAPI_SFNSF2DEC(req->sfn_sf);
  			uint8_t buffer_index = sfn_sf_dec % pnf_p7->_public.subframe_buffer_size;
  
@@ -779,7 +849,7 @@ index 0fd7828..c980086 100644
  			if(pnf_p7->subframe_buffer[buffer_index].tx_req != 0)
  			{
  				//NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] Freeing tx_req at index %d (%d/%d)", 
-@@ -1010,6 +1165,8 @@ void pnf_handle_tx_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
+@@ -1010,6 +1191,8 @@ void pnf_handle_tx_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
  		}
  		else
  		{
@@ -788,7 +858,7 @@ index 0fd7828..c980086 100644
  			deallocate_nfapi_tx_request(req, pnf_p7);
  
  			if(pnf_p7->_public.timing_info_mode_aperiodic)
-@@ -1126,12 +1283,27 @@ uint32_t calculate_t2(uint32_t now_time_hr, uint16_t sfn_sf, uint32_t sf_start_t
+@@ -1126,12 +1309,27 @@ uint32_t calculate_t2(uint32_t now_time_hr, uint16_t sfn_sf, uint32_t sf_start_t
  	uint32_t sf_time_us = get_sf_time(now_time_hr, sf_start_time_hr);
  	uint32_t t2 = (NFAPI_SFNSF2DEC(sfn_sf) * 1000) + sf_time_us;
  
@@ -817,7 +887,7 @@ index 0fd7828..c980086 100644
  
  	uint32_t sf_time_us = get_sf_time(now_time_hr, sf_start_time_hr);
  
-@@ -1391,6 +1563,8 @@ void pnf_nfapi_p7_read_dispatch_message(pnf_p7_t* pnf_p7, uint32_t now_hr_time)
+@@ -1391,6 +1589,8 @@ void pnf_nfapi_p7_read_dispatch_message(pnf_p7_t* pnf_p7, uint32_t now_hr_time)
  			// read the segment
  			recvfrom_result = recvfrom(pnf_p7->p7_sock, pnf_p7->rx_message_buffer, header.message_length, MSG_DONTWAIT, (struct sockaddr*)&remote_addr, &remote_addr_size);
  
@@ -826,7 +896,7 @@ index 0fd7828..c980086 100644
  			if(recvfrom_result > 0)
  			{
  				pnf_handle_p7_message(pnf_p7->rx_message_buffer, recvfrom_result, pnf_p7, now_hr_time);
-@@ -1417,7 +1591,10 @@ void pnf_nfapi_p7_read_dispatch_message(pnf_p7_t* pnf_p7, uint32_t now_hr_time)
+@@ -1417,7 +1617,10 @@ void pnf_nfapi_p7_read_dispatch_message(pnf_p7_t* pnf_p7, uint32_t now_hr_time)
  
  		// need to update the time as we would only use the value from the
  		// select
@@ -838,7 +908,7 @@ index 0fd7828..c980086 100644
  	}
  	while(recvfrom_result > 0);
  }
-@@ -1512,7 +1689,7 @@ int pnf_p7_message_pump(pnf_p7_t* pnf_p7)
+@@ -1512,7 +1715,7 @@ int pnf_p7_message_pump(pnf_p7_t* pnf_p7)
  
  		selectRetval = select(pnf_p7->p7_sock+1, &rfds, NULL, NULL, &timeout);