diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn
index 7bd89e4b1ee692fae398866bf5e89ef1cd512152..3bb342aaf5555db36d6b2987b53892ee18a2d534 100644
--- a/LibOneM2M/OneM2M_Functions.ttcn
+++ b/LibOneM2M/OneM2M_Functions.ttcn
@@ -19,6 +19,7 @@ module OneM2M_Functions {
 	import from OneM2M_TestSystem all;
 	import from OneM2M_Pixits all;
 	import from OneM2M_Pics all;
+	import from LibCommon_Time all;
 	
 	group ConfigFunctions {
 		
@@ -2161,7 +2162,7 @@ module OneM2M_Functions {
 			}
 
 			
-			function f_cse_generateMissingDataPoint(in integer p_timeSeriesResourceIndex) runs on AeSimu{
+			function f_cse_generateMissingDataPoint(in integer p_timeSeriesResourceIndex, in integer p_timeSeriesInstanceNumber := 0) runs on AeSimu{
 			
 				var RequestPrimitive v_request;
 				var integer v_resourceIndex := -1;
@@ -2173,17 +2174,21 @@ module OneM2M_Functions {
 				//Activate defaults when running on a PTC
 				f_cse_activateDefaults_ae();		
 				i := 0;
-				while (i < 3) {			
+				while (i < 1) {			
 					v_request := valueof(m_createTimeSeriesInstanceBase);
-					v_request.primitiveContent.timeSeriesInstance.resourceName := "MyTimeSeriesInstance" & int2str(i);
+					v_request.primitiveContent.timeSeriesInstance.resourceName := "MyTimeSeriesInstance" & int2str(p_timeSeriesInstanceNumber);
+					v_request.primitiveContent.timeSeriesInstance.dataGenerationTime := {alt_ := fx_generateTimestamp()};
+					v_request.primitiveContent.timeSeriesInstance.dataGenerationTime.alt_ := v_request.primitiveContent.timeSeriesInstance.dataGenerationTime.alt_ & ",1234";
 					
 					v_resourceIndex := f_cse_createResource(int30, v_request, p_timeSeriesResourceIndex);
 					i := i + 1;
-					t_noAction.start(int2float(v_periodicInterval));
+					t_noAction.start(int2float(v_periodicInterval/1000+v_missingDataDetectTimer/1000));
+					t_noAction.timeout;
 				}
 				
+				//f_sleep(int2float(v_periodicInterval/1000));
 				//After missingDataTimerDetect, a missing data point should have been detected
-				t_noAction.start(int2float(v_missingDataDetectTimer));
+				//t_noAction.start(int2float(v_missingDataDetectTimer));
 		
 			}
 			
@@ -2306,12 +2311,49 @@ module OneM2M_Functions {
 							v_responsePrimitive.requestIdentifier := vc_request.primitive.requestPrimitive.requestIdentifier;
 							f_send(e_mcaPortIn, m_response(v_responsePrimitive));
 						}
+						[] mcaPortIn.receive(mw_request(mw_notifyNotification(?))) -> value vc_request {
+							tc_ac.stop;
+							setverdict(fail, __SCOPE__ & ":ERROR: Notification received but the content doesn't match");
+						}	
 						[] tc_ac.timeout {
 							setverdict(fail, __SCOPE__ & ":ERROR: No notification received");
 						}
 					}
 	    		    	
 				} //end f_cse_notifyProcedure_representationHandler
+
+				/**
+				 * @desc Handling message exchange for the notification procedure for timeSeries
+				 * @param p_timeSeriesNotification Expected timeSeriesNotification in the notification
+				 * @verdict 
+				 */
+				function f_cse_notifyProcedure_timeSeriesNotificationHandler(template TimeSeriesNotification p_timeSeriesNotification) runs on AeSimu {
+					// Local variables
+					var ResponsePrimitive v_responsePrimitive;
+					
+					//Activate defaults when running on a PTC
+					f_cse_activateDefaults_ae();							
+					
+					tc_ac.start;
+					alt {
+						[] mcaPortIn.receive(mw_request(mw_notifyNotification(mw_contentNotification({timeSeriesNotification := p_timeSeriesNotification})))) -> value vc_request {
+							tc_ac.stop;
+							setverdict(pass, __SCOPE__ & ":INFO: Notification received");
+							//Send response in any case
+							v_responsePrimitive := valueof(m_responseNotification(int2000, omit));
+							v_responsePrimitive.requestIdentifier := vc_request.primitive.requestPrimitive.requestIdentifier;
+							f_send(e_mcaPortIn, m_response(v_responsePrimitive));
+						}
+						[] mcaPortIn.receive(mw_request(mw_notifyNotification(?))) -> value vc_request {
+							tc_ac.stop;
+							setverdict(fail, __SCOPE__ & ":ERROR: Notification received but the content doesn't match");
+						}	
+						[] tc_ac.timeout {
+							setverdict(fail, __SCOPE__ & ":ERROR: No notification received");
+						}
+					}
+	    		    	
+				} //end f_cse_notifyProcedure_timeSeriesNotificationHandler
 				
 				/**
 				 * @desc Handling message exchange for the notification procedure
@@ -2443,14 +2485,14 @@ module OneM2M_Functions {
 				 * @desc Handling message exchange for the notification procedure (no notification expected)
 				 * @verdict 
 				 */
-				function f_cse_notifyProcedure_noNotificationHandler() runs on AeSimu {
+				function f_cse_notifyProcedure_noNotificationHandler(float p_waitingTime := 10.0) runs on AeSimu {
 					// Local variables
 					var ResponsePrimitive v_responsePrimitive;
 					
 					//Activate defaults when running on a PTC
 					f_cse_activateDefaults_ae();		
 							
-					tc_ac.start(10.0);
+					tc_ac.start(p_waitingTime);
 					alt {
 						[] mcaPortIn.receive(mw_request(mw_notifyNotification(mw_contentNotification(?)))) -> value vc_request {
 							tc_ac.stop;
diff --git a/LibOneM2M/OneM2M_Templates.ttcn b/LibOneM2M/OneM2M_Templates.ttcn
index d57807f7f5f89494986e5eb2381b57e651d12813..669b744655cd92c221873f54befccf8b8884e548 100644
--- a/LibOneM2M/OneM2M_Templates.ttcn
+++ b/LibOneM2M/OneM2M_Templates.ttcn
@@ -1386,8 +1386,8 @@ module OneM2M_Templates {
 				primitiveContent := {subscription := m_contentCreateSubscription ({"NotInitialized"})}
 			};
         	
-        	template (value) RequestPrimitive m_createSubscription(XSD.ID p_parentResourceAddress, in template (omit)  XSD.String p_name, in template (value) ListOfURIs p_notificationURI := {"NotInitialized"}) modifies m_create := {
-        		to_ := p_parentResourceAddress,
+        	template (value) RequestPrimitive m_createSubscription(template (omit) XSD.ID p_to := omit, in template (omit)  XSD.String p_name, in template (value) ListOfURIs p_notificationURI := {"NotInitialized"}) modifies m_create := {
+        		to_ := p_to,
 				requestIdentifier := testcasename() & "-m_createSubscription",
         		resourceType := int23,
         		primitiveContent := {subscription := m_contentCreateSubscription (p_notificationURI, p_name)}
@@ -1462,9 +1462,9 @@ module OneM2M_Templates {
 				primitiveContent := {semanticMashupResult := m_contentCreateSemanticMashupResult}
 			};
         	
-			template (value) RequestPrimitive m_createSubscriptionAdvanced(	XSD.ID p_parentResourceAddress, 
+			template (value) RequestPrimitive m_createSubscriptionAdvanced(	template (omit) XSD.ID p_to := "NotInitialized", 
 																		   in template (omit)  XSD.String p_name := omit,
-																		   in template (value) ListOfURIs p_notificationURI,
+																		   in template (value) ListOfURIs p_notificationURI := {"NotInitialized"},
 																		   in template (omit) EventNotificationCriteria p_eventNotificationCriteria := omit,
 																		   in template (omit) XSD.PositiveInteger p_expirationCounter := omit,
 																		   in template (omit) BatchNotify p_batchNotify := omit,
@@ -1562,7 +1562,7 @@ module OneM2M_Templates {
         	
 			template (value) RequestPrimitive m_createTimeSeries(in template (omit)  XSD.String p_name := c_defaultTimeSeriesResourceName,
 																 in XSD.Boolean p_missingDataDetect := true,
-																 in XSD.NonNegativeInteger p_periodicInterval := 5,
+																 in XSD.NonNegativeInteger p_periodicInterval := 5000,
 																 in XSD.NonNegativeInteger p_missingDataMaxNr := 5, 
 																 in XSD.NonNegativeInteger p_missingDataDetectTimer := 2000) modifies m_createTimeSeriesBase := {
 				primitiveContent := {timeSeries := m_contentCreateTimeSeriesAttributes (p_name, p_missingDataDetect, p_periodicInterval, p_missingDataMaxNr, p_missingDataDetectTimer)}
@@ -2638,9 +2638,9 @@ module OneM2M_Templates {
 		template (value) AccessControlRule m_createAcr (in template (value) ListOfURIs p_acor, in template (value) AccessControlOperations p_allowedOperations) := {
 			accessControlOriginators := p_acor,//{"*"},//{PX_AE_ID_STEM}, //{"admin:admin"},
 			accessControlOperations := p_allowedOperations,
-			accessControlContexts_list := {},
+			accessControlContexts_list := omit,
 			accessControlAuthenticationFlag := omit, 
-			accessControlObjectDetails_list := {}
+			accessControlObjectDetails_list := omit
 		}
     	
 		/*template (value) CSEBase_optional m_contentCreateCSEBase (in template (value) ServiceSubscribedAppRule p_serviceSubscribedAppRule) := {
@@ -3577,7 +3577,7 @@ module OneM2M_Templates {
 			expireAfter := omit,
 			sizeAbove := omit,
 			sizeBelow := omit,
-			operationMonitor_list := {},
+			operationMonitor_list := omit,
 			attribute := p_attribute_list, 
 			notificationEventType_list := p_notificationEventType_list,// TODO this list should be able to be omited see 9.6.8 (TS0001)
 			childResourceType := omit,
@@ -7050,6 +7050,10 @@ module OneM2M_Templates {
 			}
 		};
 		
+		template Representation mw_timeSeriesNotification (TimeSeriesNotification p_timeSeriesNotification) := {
+			timeSeriesNotification := p_timeSeriesNotification
+		}
+		
 		template (value) Node_optional m_contentNode_allOmit := {
 			
 			resourceName := omit,
@@ -7164,6 +7168,11 @@ module OneM2M_Templates {
 			missingDataList := p_missingDataList,
 			missingDataCurrentNr := p_missingDataCurrentNr
 		}
+
+		template TimeSeriesNotification mw_contentTimeSeriesNotification(in template MissingDataList p_missingDataList := *, in template XSD.NonNegativeInteger p_missingDataCurrentNr := *) := {
+			missingDataList := p_missingDataList,
+			missingDataCurrentNr := p_missingDataCurrentNr
+		}
 		
 		template TimeSeries_optional mw_contentTimeSeries_rc1 modifies mw_contentTimeSeriesBase := {
 			choice := omit	//O
diff --git a/OneM2M_Testcases_CSE_Release_3.ttcn b/OneM2M_Testcases_CSE_Release_3.ttcn
index 8b43aead780cce23d95ff31e1975790d309091fd..61ce1653479980f7c87bf6c5966104489fca8b30 100644
--- a/OneM2M_Testcases_CSE_Release_3.ttcn
+++ b/OneM2M_Testcases_CSE_Release_3.ttcn
@@ -21,6 +21,7 @@ module OneM2M_Testcases_CSE_Release_3 {
 	import from OneM2M_Pics all;
 	import from OneM2M_Functions all;
 	import from OneM2M_PermutationFunctions all;
+	import from LibCommon_Time all;
 	import from XSD all;
 	
 	//Demos used for validation purposes
@@ -12302,10 +12303,13 @@ module OneM2M_Testcases_CSE_Release_3 {
     					
 					v_aeIndex := f_cse_preamble_registerAe();
 					
-					v_resourceIndex := f_cse_createResource(int29, m_createTimeSeries(-, -, 5, -, 2000), v_aeIndex);
+					v_resourceIndex := f_cse_createResource(int29, m_createTimeSeries(-, -, 5000, -, 1000), v_aeIndex);
 									
 					//Create data points and force a missingDataPoint
 					f_cse_generateMissingDataPoint(v_resourceIndex);
+					
+					f_sleep(3.0);
+					
 					// Test Body
     				f_send(e_mcaPort, m_request(m_retrieve(f_getResourceAddress(v_resourceIndex), f_getOriginator(v_resourceIndex))));
 					tc_ac.start;
@@ -12371,6 +12375,7 @@ module OneM2M_Testcases_CSE_Release_3 {
 					var integer v_resourceIndex := -1;
 					var Timestamp v_missingDataPointTimestamp;
 					var XSD.Long v_missingDataPointRel;
+					var integer v_timeSeriesInstanceNumber := 0;
 											   
 					// Test control
     				
@@ -12383,10 +12388,12 @@ module OneM2M_Testcases_CSE_Release_3 {
     					
 					v_aeIndex := f_cse_preamble_registerAe();
 					
-					v_resourceIndex := f_cse_createResource(int29, m_createTimeSeries(-, -, 5, 1, 2000), v_aeIndex);
+					v_resourceIndex := f_cse_createResource(int29, m_createTimeSeries(-, -, 5000, 1, 1000), v_aeIndex);
 									
 					//Create data points and force a missingDataPoint
-					f_cse_generateMissingDataPoint(v_resourceIndex);
+					f_cse_generateMissingDataPoint(v_resourceIndex, v_timeSeriesInstanceNumber);
+					
+					f_sleep(3.0);
 					
 					//Retrieve first missing data point
     				f_send(e_mcaPort, m_request(m_retrieve(f_getResourceAddress(v_resourceIndex), f_getOriginator(v_resourceIndex))));
@@ -12430,7 +12437,8 @@ module OneM2M_Testcases_CSE_Release_3 {
 					
 					//Test body
 					//Create data points and force a second missingDataPoint
-					f_cse_generateMissingDataPoint(v_resourceIndex);
+					//f_cse_generateMissingDataPoint(v_resourceIndex, v_timeSeriesInstanceNumber + 1);
+					f_sleep(int2float(5000/1000));
 					
 					//Retrieve second missing data point
 					f_send(e_mcaPort, m_request(m_retrieve(f_getResourceAddress(v_resourceIndex), f_getOriginator(v_resourceIndex))));
@@ -12507,14 +12515,15 @@ module OneM2M_Testcases_CSE_Release_3 {
 					var integer v_aeIndex := -1;
 					var integer v_timeSeriesIndex := -1;
 					var integer v_subscriptionIndex := -1;
-					var EventNotificationCriteria v_eventNotificationCriteria := valueof(m_eventNotificationCriteria({int1}, -));
+					var EventNotificationCriteria v_eventNotificationCriteria := valueof(m_eventNotificationCriteria({int8}, -));
 					var template RequestPrimitive v_createRequest := omit;
 					var RequestPrimitive v_request;
 					var integer v_ae2Index := -1;
 					var XSD.NonNegativeInteger v_missingDataPointNumber := 1;
-					var template PrimitiveContent v_contentNotification := {timeSeries := mw_contentTimeSeries(?,v_missingDataPointNumber)}; 
+					var template TimeSeriesNotification v_contentNotification := mw_contentTimeSeriesNotification(?,v_missingDataPointNumber); 
 	
-					v_eventNotificationCriteria.missingData := valueof(m_missingData(v_missingDataPointNumber, "PT0H"));
+					v_eventNotificationCriteria.missingData := valueof(m_missingData(v_missingDataPointNumber, "PT1H"));
+					v_createRequest := m_createSubscriptionAdvanced(-, -, -, v_eventNotificationCriteria, omit, omit, omit, omit, omit, omit);
 
 					// Test control
 
@@ -12526,12 +12535,12 @@ module OneM2M_Testcases_CSE_Release_3 {
 					// Preamble
 					v_aeIndex := f_cse_preamble_registerAe();
 					
-					v_timeSeriesIndex := f_cse_createResource(int29, m_createTimeSeries(-, true, 5, -, 2000), v_aeIndex);
+					v_timeSeriesIndex := f_cse_createResource(int29, m_createTimeSeries(-, true, 5000, -, 1000), v_aeIndex);
 	
 					f_cse_preamble_subscriptionVerification(v_ae2Index, v_createRequest, int23);
 	
-					v_createRequest := m_createSubscriptionAdvanced(f_getResourceAddress(v_timeSeriesIndex), -, {f_getResourceAddress(v_aeIndex)}, v_eventNotificationCriteria, omit, omit, omit, omit, omit, omit);
-
+					//v_createRequest.primitiveContent.subscription.notificationURI := {"http://127.0.0.1:61617/"};
+					
 					v_subscriptionIndex := f_cse_createResource(int23, v_createRequest, v_timeSeriesIndex);
 	
 					if(vc_ae2.running) {
@@ -12539,12 +12548,12 @@ module OneM2M_Testcases_CSE_Release_3 {
 					};
 
 					// Test Body
+					vc_ae2.start(f_cse_notifyProcedure_timeSeriesNotificationHandler(v_contentNotification));
 					
 					//Create data points and force a missingDataPoint
-					vc_ae2.start(f_cse_generateMissingDataPoint(v_timeSeriesIndex)); 	
-					vc_ae2.done;				
-
-					f_cse_notifyProcedure_representationHandler(v_contentNotification);
+					f_cse_generateMissingDataPoint(v_timeSeriesIndex); 	
+					
+					f_aeSimu_checkComponentDoneAndGetVerdict(vc_ae2);
 
 					//Postamble
 					f_cse_postamble_deleteResources();
@@ -12574,14 +12583,16 @@ module OneM2M_Testcases_CSE_Release_3 {
 					var integer v_aeIndex := -1;
 					var integer v_timeSeriesIndex := -1;
 					var integer v_subscriptionIndex := -1;
-					var EventNotificationCriteria v_eventNotificationCriteria := valueof(m_eventNotificationCriteria({int1}, -));
+					var EventNotificationCriteria v_eventNotificationCriteria := valueof(m_eventNotificationCriteria({int8}, -));
 					var template RequestPrimitive v_createRequest := omit;
 					var ResponsePrimitive v_responsePrimitive;
 					var integer v_ae2Index := -1;
-					var XSD.NonNegativeInteger v_missingDataPointNumber := 100;
+					var XSD.NonNegativeInteger v_missingDataPointNumber := 1;
+					var template TimeSeriesNotification v_contentNotification := mw_contentTimeSeriesNotification(?,v_missingDataPointNumber); 
 					var template PrimitiveContent v_contentResponse;
 
-					v_eventNotificationCriteria.missingData := valueof(m_missingData(v_missingDataPointNumber, "PT0H"));
+					v_eventNotificationCriteria.missingData := valueof(m_missingData(v_missingDataPointNumber, "PT4S"));
+					v_createRequest := m_createSubscriptionAdvanced(-, -, -, v_eventNotificationCriteria, omit, omit, omit, omit, omit, omit);
 
 					// Test control
 
@@ -12593,68 +12604,32 @@ module OneM2M_Testcases_CSE_Release_3 {
 					// Preamble
 					v_aeIndex := f_cse_preamble_registerAe();
 	
-					v_timeSeriesIndex := f_cse_createResource(int29, m_createTimeSeries(-, true, 5, -, 2000), v_aeIndex);//TimeSeries
+					v_timeSeriesIndex := f_cse_createResource(int29, m_createTimeSeries(-, true, 5000, -, 1000), v_aeIndex);//TimeSeries
 
 					f_cse_preamble_subscriptionVerification(v_ae2Index, v_createRequest, int23);//AE2 registered
 
-					v_createRequest := m_createSubscriptionAdvanced(f_getResourceAddress(v_timeSeriesIndex), -, {f_getResourceAddress(v_aeIndex)}, v_eventNotificationCriteria, omit, omit, omit, omit, omit, omit);
+					//v_createRequest := m_createSubscriptionAdvanced(f_getResourceAddress(v_timeSeriesIndex), -, {f_getResourceAddress(v_aeIndex)}, v_eventNotificationCriteria, omit, omit, omit, omit, omit, omit);
 
 					v_subscriptionIndex := f_cse_createResource(int23, v_createRequest, v_timeSeriesIndex);//Subscription under TimeSeries
 
+					// Test Body
+	
 					if(vc_ae2.running) {
 						vc_ae2.stop;
 					};
 
 					// Test Body
-	
+					vc_ae2.start(f_cse_notifyProcedure_timeSeriesNotificationHandler(v_contentNotification));
+					
 					//Create data points and force a missingDataPoint
-					vc_ae2.start(f_cse_generateMissingDataPoint(v_timeSeriesIndex)); 	
-					vc_ae2.done;				
-
-					tc_ac.start;
-					alt {
-						[] mcaPortIn.receive(mw_request(mw_notifyNotification(?))){
-							tc_ac.stop;
-							setverdict(fail, __SCOPE__ & ":ERROR: Notification received");
-							//Send response in any case
-							v_responsePrimitive := valueof(m_responseNotification(int2000, omit));
-							v_responsePrimitive.requestIdentifier := vc_request.primitive.requestPrimitive.requestIdentifier;
-							f_send(e_mcaPortIn, m_response(v_responsePrimitive));
-						}
-						[] tc_ac.timeout {
-							setverdict(pass, __SCOPE__ & ": Notification not received");
-						}
-					}	
+					f_cse_generateMissingDataPoint(v_timeSeriesIndex); 	
 					
-					//Check if the IUT restarts missing data point counter and timer
-					f_send(e_mcaPort, m_request(m_retrieve(f_getResourceAddress(v_timeSeriesIndex), f_getOriginator(v_timeSeriesIndex))));
+					f_aeSimu_checkComponentDoneAndGetVerdict(vc_ae2);
+					
+					vc_ae2.start(f_cse_notifyProcedure_timeSeriesNotificationHandler(v_contentNotification));
+					
+					f_aeSimu_checkComponentDoneAndGetVerdict(vc_ae2);
 					
-					v_contentResponse.timeSeries := mw_contentTimeSeries_rc1;
-					v_contentResponse.timeSeries.missingDataCurrentNr := 0;
-
-					tc_ac.start;
-					alt {
-						[] mcaPort.receive(mw_response(mw_responsePrimitive(int2000, v_contentResponse))){
-							tc_ac.stop;
-							setverdict(pass, __SCOPE__ & ": Response OK for retrieving. MissingDataCurrentNr has been restarted");
-						}
-						[] mcaPort.receive(mw_response(mw_responsePrimitiveOK(v_contentResponse))){
-							tc_ac.stop;
-							setverdict(fail, __SCOPE__ & ": Wrong response status code");
-						}
-						[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)){
-							tc_ac.stop;
-							setverdict(fail, __SCOPE__ & ": Error, resource elements provided not matching expected resource elements");
-						}
-						[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)){
-							tc_ac.stop;
-							setverdict(fail, __SCOPE__ & ": Error while retrieving resource");
-						}
-						[] tc_ac.timeout {
-							setverdict(fail, __SCOPE__ & ": No answer while retrieving resource");
-						}
-					}					
-
 					//Postamble
 					f_cse_postamble_deleteResources();