diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn
index f02c7a8aafeed51f8824df5fce6d3e20b50119b1..f4db4159234e2f760ddb4adcaf0f4fb5147f45ab 100644
--- a/LibOneM2M/OneM2M_Functions.ttcn
+++ b/LibOneM2M/OneM2M_Functions.ttcn
@@ -7,7 +7,7 @@
  *  
  *  @author     ETSI
  *  @version    $URL: https://forge.etsi.org/svn/oneM2M/trunk/ttcn/LibOneM2M/OneM2M_Functions.ttcn $
- *              $Id: OneM2M_Functions.ttcn 145 2016-10-24 14:37:40Z reinaortega $
+ *              $Id: OneM2M_Functions.ttcn 149 2016-10-26 10:08:09Z reinaortega $
  *  @desc       Module containing functions for oneM2M
  *
  */
@@ -60,6 +60,22 @@ module OneM2M_Functions {
     						
 		} // end f_cf02Up
 		
+		function f_cf03Up() runs on CseTester {
+		
+			// Variables
+		
+			// Map
+			map(self:mcaPort, system:mcaPort);
+			map(self:acPort, system:acPort);
+			activate(a_default());
+			activate(a_cse_cf01());
+		
+			// Connect
+					
+			//Initialze the IUT
+					
+		} // end f_cf03Up
+		
 		/**
 		 * @desc Ports unmapping
 		 * @verdict 
@@ -110,7 +126,7 @@ module OneM2M_Functions {
     			var MsgIn v_response;
     			var integer v_aeAuxIndex := -1;
     			    			
-    			v_request := valueof(m_createAeAux(-, p_poaList));
+    			v_request := valueof(m_createAeAux(p_accessControlPolicyIDs, p_poaList));
     			v_request.to_ := f_addPrefix(f_getResourceAddress());
 				
 				mcaPort.send(m_request(v_request));
@@ -182,14 +198,14 @@ module OneM2M_Functions {
     			
     			if (PX_RUN_POSTAMBLE) {
     				
-    				for(i := 0; i < lengthof(vc_resourcesIndexToBeDeleted); i := i + 1) {
-    					
-    					v_resourceAddress := f_getResourceAddress(lengthof(vc_resourcesIndexToBeDeleted)-1 - i);
-    					
+    				for(i := lengthof(vc_resourcesIndexToBeDeleted) -1; i >=0; i := i - 1) {
+						
+    					v_resourceAddress := f_getResourceAddress(vc_resourcesIndexToBeDeleted[i]); 
+						
     					v_request := valueof(m_deleteRequest(v_resourceAddress));
     					
     					if(PX_FROM_IS_AE_ID){
-    						if(not(ischosen(vc_resourcesList[lengthof(vc_resourcesIndexToBeDeleted)-1 - i].resource.any_1[0].AccessControlPolicy_optional))) {
+    						if(not(ischosen(vc_resourcesList[vc_resourcesIndexToBeDeleted[i]].resource.any_1[0].AccessControlPolicy_optional))) {
 								v_request.from_ := vc_aeAux.aE_ID;
 							}
     					}
@@ -443,16 +459,15 @@ module OneM2M_Functions {
     		var integer p_locresourceIndex := p_parentIndex;
     		
 			p_request.from_ := f_getOriginator(p_parentIndex);
-                
 			p_request.to_ := f_addPrefix(f_getResourceAddress(p_parentIndex));
-                
+    		
 			if (p_resourceType == int1) {//AccessControlPolicy
-    			
 			} 
+			
 			if (p_resourceType == int9) {//group
 				p_request.primitiveContent.any_1[0].Group_optional.memberIDs := {f_getResourceAddress(p_parentIndex)};
 			}
-			//@Martin
+			
 			if(p_resourceType == int3){//container
 			  	//when a container is created by hosting cse for storing location information, the container is seen as a location container
 				if(PX_IS_LOC_CONTAINER){
@@ -460,10 +475,12 @@ module OneM2M_Functions {
 				}		  
 			}
 			
-    		
 			if (p_resourceType == int15) {//pollingChannel
 				p_request.from_ := vc_aeAux.aE_ID;
 			} 
+			
+			if (p_resourceType == int18) {//schedule
+			} 
     			
 			if (p_resourceType == int23) {//subscription
 				p_request.primitiveContent.any_1[0].Subscription_optional.notificationURI := {f_getResourceAddress(p_parentIndex)};
@@ -713,6 +730,37 @@ module OneM2M_Functions {
 			return lengthof(vc_resourcesList)-1;
     					
 		}
+		
+    				
+		/**
+		 * @desc Set Acpid into the requestPrimitive
+		 * @param p_requestPrimitive RequestPrimitive to be modified
+		 * @param p_accessControlPolicyIDs AcpId to be set
+		 * @return 
+		 * @verdict 
+		 */
+		function f_setAcpId(template RequestPrimitive p_requestPrimitive, template AcpType p_accessControlPolicyIDs) runs on CseTester return RequestPrimitive{
+	
+			if (ischosen(p_requestPrimitive.primitiveContent.any_1[0].AE_optional)){
+				p_requestPrimitive.primitiveContent.any_1[0].AE_optional.accessControlPolicyIDs := p_accessControlPolicyIDs;
+			}
+			else if (ischosen(p_requestPrimitive.primitiveContent.any_1[0].Container_optional)){
+				p_requestPrimitive.primitiveContent.any_1[0].Container_optional.accessControlPolicyIDs := p_accessControlPolicyIDs;
+			}
+			else if (ischosen(p_requestPrimitive.primitiveContent.any_1[0].Group_optional)){
+				p_requestPrimitive.primitiveContent.any_1[0].Group_optional.accessControlPolicyIDs := p_accessControlPolicyIDs;
+			}
+			else if (ischosen(p_requestPrimitive.primitiveContent.any_1[0].ServiceSubscribedAppRule_optional)){
+				p_requestPrimitive.primitiveContent.any_1[0].ServiceSubscribedAppRule_optional.accessControlPolicyIDs := p_accessControlPolicyIDs;
+			}
+			else if (ischosen(p_requestPrimitive.primitiveContent.any_1[0].Subscription_optional)){
+				p_requestPrimitive.primitiveContent.any_1[0].Subscription_optional.accessControlPolicyIDs := p_accessControlPolicyIDs;
+			}
+			else if (ischosen(p_requestPrimitive.primitiveContent.any_1[0].LocationPolicy_optional)){
+				p_requestPrimitive.primitiveContent.any_1[0].LocationPolicy_optional.accessControlPolicyIDs := p_accessControlPolicyIDs;
+			}
+			return valueof(p_requestPrimitive);					
+		}
     				
 	}//end group getSetFunctions
 	
diff --git a/LibOneM2M/OneM2M_Templates.ttcn b/LibOneM2M/OneM2M_Templates.ttcn
index a2199ae1d73244d2ec2774584fed9d08c31c7133..a7cd27492a0040c54c230aa8812451e914f0c6fd 100644
--- a/LibOneM2M/OneM2M_Templates.ttcn
+++ b/LibOneM2M/OneM2M_Templates.ttcn
@@ -7,7 +7,7 @@
  *  
  *  @author     ETSI
  *  @version    $URL: https://forge.etsi.org/svn/oneM2M/trunk/ttcn/LibOneM2M/OneM2M_Templates.ttcn $
- *              $Id: OneM2M_Templates.ttcn 144 2016-10-24 10:28:51Z reinaortega $
+ *              $Id: OneM2M_Templates.ttcn 147 2016-10-25 07:52:22Z carres $
  *  @desc       Module containing templates for oneM2M
  *
  */
@@ -387,12 +387,12 @@ module OneM2M_Templates {
 			};
 
 			//Added by @Naum
-			template (value) RequestPrimitive m_createAe(XSD.ID p_appId, template (omit) AcpType p_accessControlPolicyIDs := omit,template (omit) XSD.ID p_from := omit) modifies m_create := {
+			template (value) RequestPrimitive m_createAe(XSD.ID p_appId, template (omit) AcpType p_accessControlPolicyIDs := omit,template (omit) XSD.ID p_from := omit, template (omit) XSD.NCName p_resourceName :=  c_aeAuxName, in template (omit) PoaList p_poaList := omit) modifies m_create := {
 				from_ := p_from,//PX_AE_ID_STEM,//TODO We should use omit, "s", or "c"
 				requestIdentifier := "m_createAe" & f_rnd(1, 1000000),
 				resourceType := int2,
 				primitiveContent := {
-					any_1 := {{AE_optional := m_contentCreateAe(p_accessControlPolicyIDs, c_aeAuxName, p_appId, omit)}}	
+					any_1 := {{AE_optional := m_contentCreateAe(p_accessControlPolicyIDs,p_resourceName, p_appId, p_poaList)}}	
 				}
 			};
         	
@@ -611,7 +611,7 @@ module OneM2M_Templates {
         	  resultContent		:= int1 //default
         	  
         	};
-       
+        	
         	
     	}//end group Create
     	
@@ -621,7 +621,7 @@ module OneM2M_Templates {
         		operation := int4,
         		to_ := f_addPrefix(p_resourceAddress),
         		from_ := PX_SUPER_USER,
-        		requestIdentifier := "m_deleteAe" & f_rnd(1, 1000000),
+        		requestIdentifier := "m_deleteResource" & f_rnd(1, 1000000),
         		resourceType := omit,
         		primitiveContent := omit, 
 				roleIDs := {"1234abcd@role-issuer.com"},//TODO Find a correct value 
diff --git a/LibOneM2M/OneM2M_TypesAndValues.ttcn b/LibOneM2M/OneM2M_TypesAndValues.ttcn
index a2b3713aca438674ad566a1989a998db04a49741..c51652e2f3d25402bc88a53eda431849e0b8a8ee 100644
--- a/LibOneM2M/OneM2M_TypesAndValues.ttcn
+++ b/LibOneM2M/OneM2M_TypesAndValues.ttcn
@@ -7,7 +7,7 @@
  *  
  *  @author     ETSI
  *  @version    $URL: https://forge.etsi.org/svn/oneM2M/trunk/ttcn/LibOneM2M/OneM2M_TypesAndValues.ttcn $
- *              $Id: OneM2M_TypesAndValues.ttcn 134 2016-10-11 09:33:13Z reinaortega $
+ *              $Id: OneM2M_TypesAndValues.ttcn 147 2016-10-25 07:52:22Z carres $
  *  @desc       Module containing types and values for oneM2M
  *
  */
@@ -90,6 +90,7 @@ module OneM2M_TypesAndValues {
 	const XSD.Integer c_CRUDNDi   := 63;
 	
 	type NhURI ParentID;
-
+	type record length(0 .. infinity) of RequestPrimitive RequestPrimitiveList;
+	type record length(1 .. infinity) of RequestPrimitiveList RequestPrimitiveMatrix;
 } 
 // end of module
diff --git a/OneM2M_Testcases.ttcn b/OneM2M_Testcases.ttcn
index 9b6f187cc539f22d2501453e1ae009f2a5cb08db..647df0f81db4321e31e1909bb462860237868e5d 100644
--- a/OneM2M_Testcases.ttcn
+++ b/OneM2M_Testcases.ttcn
@@ -7,7 +7,7 @@
  *  
  *  @author     ETSI
  *  @version    $URL: https://forge.etsi.org/svn/oneM2M/trunk/ttcn/OneM2M_Testcases.ttcn $
- *              $Id: OneM2M_Testcases.ttcn 146 2016-10-24 16:11:32Z reinaortega $
+ *              $Id: OneM2M_Testcases.ttcn 152 2016-10-26 13:44:06Z carres $
  *  @desc       Module containing test cases for oneM2M
  *
  */
@@ -1084,32 +1084,54 @@ module OneM2M_Testcases {
 						// Local variables
 						var template RequestPrimitive v_createRequest := m_createContainerBase;
 						var ResponsePrimitive v_responsePrimitive;
+						var integer v_sizeResourceTypeList;
+						var integer i;
+						var RequestPrimitiveMatrix v_requestPrimitivematrix;
+						
+						v_requestPrimitivematrix := {
+							{},
+							{m_createAeAux(omit,omit)},
+							{m_createContainerBase}
+						}
+						v_sizeResourceTypeList := lengthof(v_requestPrimitivematrix);
 						
 						v_createRequest.primitiveContent.any_1[0].Container_optional.resourceName := omit;
-                        
-						v_responsePrimitive := f_CSE_DMR_CRE_BV_001(int3, v_createRequest);//Container
 						
-						log(v_responsePrimitive);
-                        
-                        if(getverdict == pass){
-                            if(not ispresent(v_responsePrimitive.primitiveContent.any_1[0].Container_optional.resourceName)){
-                            	setverdict(fail, testcasename(), ": Error, resourceName attribute not provided");
-                            }
-                        }
+						for (i := 0; i<v_sizeResourceTypeList; i := i+1){
+							v_responsePrimitive := f_CSE_DMR_CRE_BV_001(int3, v_createRequest, v_requestPrimitivematrix[i]);
+							log(v_responsePrimitive);
+							if(getverdict == pass){
+								if(not ispresent(v_responsePrimitive.primitiveContent.any_1[0].Container_optional.resourceName)){
+									setverdict(fail, testcasename(), ": Error, resourceName attribute not provided");
+								}
+							}
+						}  
 					}
 
 					testcase TC_CSE_DMR_CRE_BV_001_02() runs on CseTester system CseSystem {
 						// Local variables
 						var template RequestPrimitive v_createRequest := m_createGroupBase;
 						var ResponsePrimitive v_responsePrimitive;
+						var RequestPrimitiveMatrix v_requestPrimitivematrix;
+						var integer v_sizeResourceTypeList;
+						var integer i;
 						
-						v_createRequest.primitiveContent.any_1[0].Group_optional.resourceName := omit;
+						//CSEBase int5, remoteCSE int16, AE int2
+						v_requestPrimitivematrix := {
+							{},
+							{m_createAeAux(omit,omit)}
+						}
+						v_sizeResourceTypeList := sizeof(v_requestPrimitivematrix);
 						
-						v_responsePrimitive := f_CSE_DMR_CRE_BV_001(int9, v_createRequest);//Group
+						v_createRequest.primitiveContent.any_1[0].Group_optional.resourceName := omit;
 						
-						if(getverdict == pass){
-							if(not ispresent(v_responsePrimitive.primitiveContent.any_1[0].Group_optional.resourceName)){
-								setverdict(fail, testcasename(), ": Error, resourceName attribute not provided");
+						for (i := 0; i<v_sizeResourceTypeList; i := i+1){
+							v_responsePrimitive := f_CSE_DMR_CRE_BV_001(int3, v_createRequest, v_requestPrimitivematrix[i]);
+							log(v_responsePrimitive);
+							if(getverdict == pass){
+								if(not ispresent(v_responsePrimitive.primitiveContent.any_1[0].Group_optional.resourceName)){
+									setverdict(fail, testcasename(), ": Error, resourceName attribute not provided");
+								}
 							}
 						}
 					}
@@ -1118,14 +1140,25 @@ module OneM2M_Testcases {
 						// Local variables
 						var template RequestPrimitive v_createRequest := m_createAcpBase;
 						var ResponsePrimitive v_responsePrimitive;
+						var integer v_sizeResourceTypeList;
+						var integer i;
+						var RequestPrimitiveMatrix v_requestPrimitivematrix;
+
+						//CSEBase int5, remoteCSE int16, AE int2
+						v_requestPrimitivematrix := {
+							{},
+							{m_createAeAux(omit,omit)}
+						}
+						v_sizeResourceTypeList := lengthof(v_requestPrimitivematrix);
 						
 						v_createRequest.primitiveContent.any_1[0].AccessControlPolicy_optional.resourceName := omit;
-	
-						v_responsePrimitive := f_CSE_DMR_CRE_BV_001(int1, v_createRequest);//AccessControlPolicy
-						
-						if(getverdict == pass){
-							if(not ispresent(v_responsePrimitive.primitiveContent.any_1[0].AccessControlPolicy_optional.resourceName)){
-								setverdict(fail, testcasename(), ": Error, resourceName attribute not provided");
+
+						for (i := 0; i<v_sizeResourceTypeList; i := i+1){
+							v_responsePrimitive := f_CSE_DMR_CRE_BV_001(int1, v_createRequest, v_requestPrimitivematrix[i]);//AccessControlPolicy
+							if(getverdict == pass){
+								if(not ispresent(v_responsePrimitive.primitiveContent.any_1[0].AccessControlPolicy_optional.resourceName)){
+									setverdict(fail, testcasename(), ": Error, resourceName attribute not provided");
+								}
 							}
 						}
 					}
@@ -1134,14 +1167,27 @@ module OneM2M_Testcases {
 						// Local variables
 						var template RequestPrimitive v_createRequest := m_createScheduleBase;
 						var ResponsePrimitive v_responsePrimitive;
+						var integer v_sizeResourceTypeList;
+						var integer i;
+						var RequestPrimitiveMatrix v_requestPrimitivematrix;
+						
+//						CSEBase int5, remoteCSE int16, AE int2, subscription int23 
+    					v_requestPrimitivematrix := {
+    						{},
+    						{m_createAeAux(omit,omit)},
+    						{m_createSubscriptionBase}
+    					}
+    					v_sizeResourceTypeList := lengthof(v_requestPrimitivematrix);
 						
 						v_createRequest.primitiveContent.any_1[0].Schedule_optional.resourceName := omit;
-	
-						v_responsePrimitive := f_CSE_DMR_CRE_BV_001(int18, v_createRequest);//Schedule
+
+						for (i := 0; i<v_sizeResourceTypeList; i := i+1){
+							v_responsePrimitive := f_CSE_DMR_CRE_BV_001(int18, v_createRequest, v_requestPrimitivematrix[i]);//Schedule
 						
-						if(getverdict == pass){
-							if(not ispresent(v_responsePrimitive.primitiveContent.any_1[0].Schedule_optional.resourceName)){
-								setverdict(fail, testcasename(), ": Error, resourceName attribute not provided");
+							if(getverdict == pass){
+								if(not ispresent(v_responsePrimitive.primitiveContent.any_1[0].Schedule_optional.resourceName)){
+									setverdict(fail, testcasename(), ": Error, resourceName attribute not provided");
+								}
 							}
 						}
 					}
@@ -1150,14 +1196,24 @@ module OneM2M_Testcases {
 						// Local variables
 						var template RequestPrimitive v_createRequest := m_createPollingChannelBase;
 						var ResponsePrimitive v_responsePrimitive;
+						var integer v_sizeResourceTypeList;
+						var integer i;
+						var RequestPrimitiveMatrix v_requestPrimitivematrix;
 						
-						v_createRequest.primitiveContent.any_1[0].PollingChannel_optional.resourceName := omit;
-	
-						v_responsePrimitive := f_CSE_DMR_CRE_BV_001(int15, v_createRequest);//PollingChannel
+						//remoteCSE int16, AE int2
+						v_requestPrimitivematrix := {
+							{m_createAeAux(omit,omit)}
+						}
+						v_sizeResourceTypeList := lengthof(v_requestPrimitivematrix);
 						
-						if(getverdict == pass){
-							if(not ispresent(v_responsePrimitive.primitiveContent.any_1[0].PollingChannel_optional.resourceName)){
-								setverdict(fail, testcasename(), ": Error, resourceName attribute not provided");
+						v_createRequest.primitiveContent.any_1[0].PollingChannel_optional.resourceName := omit;
+
+						for (i := 0; i<v_sizeResourceTypeList; i := i+1){
+							v_responsePrimitive := f_CSE_DMR_CRE_BV_001(int15, v_createRequest, v_requestPrimitivematrix[i]);//PollingChannel
+							if(getverdict == pass){
+								if(not ispresent(v_responsePrimitive.primitiveContent.any_1[0].PollingChannel_optional.resourceName)){
+									setverdict(fail, testcasename(), ": Error, resourceName attribute not provided");
+								}
 							}
 						}
 					}
@@ -1166,25 +1222,48 @@ module OneM2M_Testcases {
 						// Local variables
 						var template RequestPrimitive v_createRequest := m_createSubscriptionBase;
 						var ResponsePrimitive v_responsePrimitive;
+						var integer v_sizeResourceTypeList;
+						var integer i;
+						var RequestPrimitiveMatrix v_requestPrimitivematrix;
+						
+						//accessControlPolicy int1, CSEBase int5, remoteCSE int16, AE int2, container int, schedule int, locationPolicy int, delivery int, request int, group int, mgmtCmd int,
+						// node int, m2mServiceSubscriptionProfile int, statsConfig int, statsCollect int, serviceSubscribedAppRule int
+	
+						// mgmtObj int, execInstance int, serviceSubscribedNode int, pollingChannelURI int (doesn't exist in Release2), eventConfig int, 
+    					v_requestPrimitivematrix := {
+    						{},
+    						{m_createAeAux(omit,omit)},
+    						{m_createContainerBase},
+    						{m_createAcpBase},
+    						{m_createScheduleBase},
+    						{m_createGroupBase},
+    						{m_createLocationPolicy(int1,omit,omit,omit,omit)}
+    						//{m_createServiceSubscribedAppRule()} //TODO set correct parameters
+    					}
+    					v_sizeResourceTypeList := lengthof(v_requestPrimitivematrix);
 						
 						v_createRequest.primitiveContent.any_1[0].Subscription_optional.resourceName := omit;
 
-						v_responsePrimitive := f_CSE_DMR_CRE_BV_001(int23, v_createRequest);//Subscription
-						
-						if(getverdict == pass){
-							if(not ispresent(v_responsePrimitive.primitiveContent.any_1[0].Subscription_optional.resourceName)){
-								setverdict(fail, testcasename(), ": Error, resourceName attribute not provided");
-							}
+						for (i := 0; i<v_sizeResourceTypeList; i := i+1){
+						v_responsePrimitive := f_CSE_DMR_CRE_BV_001(int23, v_createRequest, v_requestPrimitivematrix[i]);//Subscription
+    						if(getverdict == pass){
+    							if(not ispresent(v_responsePrimitive.primitiveContent.any_1[0].Subscription_optional.resourceName)){
+    								setverdict(fail, testcasename(), ": Error, resourceName attribute not provided");
+    							}
+    						}
 						}
 					}
 					
-    				function f_CSE_DMR_CRE_BV_001(ResourceType p_resourceType, template RequestPrimitive p_requestPrimitive) runs on CseTester return ResponsePrimitive {
+    				function f_CSE_DMR_CRE_BV_001(ResourceType p_resourceType, template RequestPrimitive p_requestPrimitive, in RequestPrimitiveList p_requestPrimitiveList) runs on CseTester return ResponsePrimitive {
     				
     					// Local variables
     					var MsgIn v_response;
     					var RequestPrimitive v_request;
-    					
-						var integer v_aeIndex := -1;
+						var integer v_sizeResourceTypeList := lengthof(p_requestPrimitiveList);
+						var integer i;
+						var integer v_parentIndex := -1;
+    					var integer v_aeAuxIndex := -1;
+    					var integer v_resourceIndex := -1;
     										   
     					// Test control
     				
@@ -1194,13 +1273,23 @@ module OneM2M_Testcases {
     					// Test adapter configuration
     				
     					// Preamble
-						v_aeIndex := f_cse_preamble_registerAe();//c_CRUDNDi); 	
+						v_aeAuxIndex := f_cse_preamble_registerAe();//c_CRUDNDi); 	
 						
-								
+						for (i := 0; i<v_sizeResourceTypeList; i := i+1){
+							if(match(p_requestPrimitiveList[i].resourceType, int2)){
+								v_parentIndex := v_aeAuxIndex;
+							}
+							else{
+								v_parentIndex := f_cse_createResource(p_requestPrimitiveList[i].resourceType, p_requestPrimitiveList[i], v_parentIndex);
+								if (i == 0){
+										vc_resourcesIndexToBeDeleted := vc_resourcesIndexToBeDeleted & {v_parentIndex};
+								}
+							}
+						}										
     									
     					// Test Body
     					
-    					v_request := f_getCreateRequestPrimitive(p_resourceType, p_requestPrimitive, v_aeIndex);
+    					v_request := f_getCreateRequestPrimitive(p_resourceType, p_requestPrimitive, v_parentIndex);
 						
     					mcaPort.send(m_request(v_request));
     					tc_ac.start;
@@ -1208,6 +1297,10 @@ module OneM2M_Testcases {
     						[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response {
     							tc_ac.stop;
     							setverdict(pass, testcasename() & ": Resource type " & int2str(enum2int(p_resourceType)) & " created successfuly");
+								v_resourceIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent, v_parentIndex);
+								if (v_sizeResourceTypeList == 0){
+										vc_resourcesIndexToBeDeleted := vc_resourcesIndexToBeDeleted & {v_resourceIndex};
+								}
     						}
     						[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value v_response {
     							tc_ac.stop;
@@ -1220,6 +1313,7 @@ module OneM2M_Testcases {
     								
     					// Postamble
     					f_cse_postamble_deleteResources();
+						vc_resourcesIndexToBeDeleted := {};
     					
 						// Tear down
 						f_cf01Down();
@@ -1237,6 +1331,8 @@ module OneM2M_Testcases {
 						// Local variables
                         var ResponsePrimitive v_responsePrimitive;
                         
+                        //CSEBase int5, remoteCSE int16, AE int2, container int3,
+                        
 						v_responsePrimitive := f_CSE_DMR_CRE_BV_002(int3, m_createContainerBase);//container
 						
 						if(getverdict == pass){
@@ -1254,6 +1350,8 @@ module OneM2M_Testcases {
 						// Local variables
 						var ResponsePrimitive v_responsePrimitive;
 						
+						// CSEBase int5, remoteCSE int16, AE int2
+						
 						v_responsePrimitive := f_CSE_DMR_CRE_BV_002(int9, m_createGroupBase);//group
 						
 						if(getverdict == pass){
@@ -3342,9 +3440,9 @@ module OneM2M_Testcases {
     				
 				} // end g_CSE_DMR_UPD_BV_004
 				
-				group g_CSE_DMR_UPD_BO_005{
+				group g_CSE_DMR_UPD_BI_005{
 					
-					testcase TC_CSE_DMR_UPD_BO_005_01() runs on CseTester system CseSystem {
+					testcase TC_CSE_DMR_UPD_BI_005_01() runs on CseTester system CseSystem {
 						// Local variables
 						var XSD.PositiveInteger v_expirationCounter := 1;
 						var template RequestPrimitive v_updateRequest := m_updateContainerBase;
@@ -3353,10 +3451,10 @@ module OneM2M_Testcases {
 
 						v_updateRequest.primitiveContent.any_1[0].Container_update_invalid.expirationCounter := v_expirationCounter;
 						
-						f_CSE_DMR_UPD_BO_005(int3, m_createContainerBase, v_updateRequest);//Container
+						f_CSE_DMR_UPD_BI_005(int3, m_createContainerBase, v_updateRequest);//Container
 					}
 
-					testcase TC_CSE_DMR_UPD_BO_005_02() runs on CseTester system CseSystem {
+					testcase TC_CSE_DMR_UPD_BI_005_02() runs on CseTester system CseSystem {
 						// Local variables
 						var XSD.PositiveInteger v_expirationCounter := 1;
 						var template RequestPrimitive v_updateRequest := m_updateGroupBase;
@@ -3365,10 +3463,10 @@ module OneM2M_Testcases {
 						
 						v_updateRequest.primitiveContent.any_1[0].Group_update_invalid.expirationCounter := v_expirationCounter;
 						
-						f_CSE_DMR_UPD_BO_005(int9, m_createGroupBase, v_updateRequest);//Group
+						f_CSE_DMR_UPD_BI_005(int9, m_createGroupBase, v_updateRequest);//Group
 					}
 					
-					testcase TC_CSE_DMR_UPD_BO_005_03() runs on CseTester system CseSystem {
+					testcase TC_CSE_DMR_UPD_BI_005_03() runs on CseTester system CseSystem {
 						// Local variables
 						var XSD.PositiveInteger v_expirationCounter := 1;
 						var template RequestPrimitive v_updateRequest := m_updateAcpBase;
@@ -3377,10 +3475,10 @@ module OneM2M_Testcases {
 						
 						v_updateRequest.primitiveContent.any_1[0].ACP_update_invalid.expirationCounter := v_expirationCounter;
 								
-						f_CSE_DMR_UPD_BO_005(int1, m_createAcpBase, v_updateRequest);//AccessControlPolicy
+						f_CSE_DMR_UPD_BI_005(int1, m_createAcpBase, v_updateRequest);//AccessControlPolicy
 					}
 				
-					testcase TC_CSE_DMR_UPD_BO_005_04() runs on CseTester system CseSystem {
+					testcase TC_CSE_DMR_UPD_BI_005_04() runs on CseTester system CseSystem {
 						// Local variables
 						var XSD.PositiveInteger v_expirationCounter := 1;
 						var template RequestPrimitive v_updateRequest := m_updateScheduleBase;
@@ -3389,10 +3487,10 @@ module OneM2M_Testcases {
 
 						v_updateRequest.primitiveContent.any_1[0].Schedule_update_invalid.expirationCounter := v_expirationCounter;
 										
-						f_CSE_DMR_UPD_BO_005(int18, m_createScheduleBase, v_updateRequest);//Schedule
+						f_CSE_DMR_UPD_BI_005(int18, m_createScheduleBase, v_updateRequest);//Schedule
 					}
 					
-					testcase TC_CSE_DMR_UPD_BO_005_05() runs on CseTester system CseSystem {
+					testcase TC_CSE_DMR_UPD_BI_005_05() runs on CseTester system CseSystem {
 						// Local variables
 						var XSD.PositiveInteger v_expirationCounter := 1;
 						var template RequestPrimitive v_updateRequest := m_updatePollingChannelBase;
@@ -3401,10 +3499,10 @@ module OneM2M_Testcases {
 						
 						v_updateRequest.primitiveContent.any_1[0].PollingChannel_update_invalid.expirationCounter := v_expirationCounter;
 							
-						f_CSE_DMR_UPD_BO_005(int15, m_createPollingChannelBase, v_updateRequest);//PollingChannel
+						f_CSE_DMR_UPD_BI_005(int15, m_createPollingChannelBase, v_updateRequest);//PollingChannel
 					}
 					
-					testcase TC_CSE_DMR_UPD_BO_005_06() runs on CseTester system CseSystem {
+					testcase TC_CSE_DMR_UPD_BI_005_06() runs on CseTester system CseSystem {
 						// Local variables
 						var XSD.NonNegativeInteger v_maxNrOfInstances := 5;
 						var template RequestPrimitive v_updateRequest := m_updateSubscriptionBase;
@@ -3413,10 +3511,10 @@ module OneM2M_Testcases {
 						
 						v_updateRequest.primitiveContent.any_1[0].Subscription_update_invalid.maxNrOfInstances := v_maxNrOfInstances;
 								
-						f_CSE_DMR_UPD_BO_005(int23, m_createSubscriptionBase, v_updateRequest);//Subscription
-						}
+						f_CSE_DMR_UPD_BI_005(int23, m_createSubscriptionBase, v_updateRequest);//Subscription
+					}
 					
-					function f_CSE_DMR_UPD_BO_005(ResourceType p_resourceType, template RequestPrimitive p_createRequestPrimitive, template RequestPrimitive p_updateRequestPrimitive) runs on CseTester {
+					function f_CSE_DMR_UPD_BI_005(ResourceType p_resourceType, template RequestPrimitive p_createRequestPrimitive, template RequestPrimitive p_updateRequestPrimitive) runs on CseTester {
     				
 						// Local variables
 						var MsgIn v_response;
@@ -3441,7 +3539,7 @@ module OneM2M_Testcases {
 						mcaPort.send(m_request(v_request));
 						tc_ac.start;
 						alt {
-							[] mcaPort.receive(mw_response(mw_responsePrimitive(int4004))) -> value v_response {
+							[] mcaPort.receive(mw_response(mw_responsePrimitive(int4005))) -> value v_response {
 								tc_ac.stop;
 								setverdict(pass, testcasename() & ": Resource " & c_defaultResourceName & " of type " & int2str(enum2int(p_resourceType)) & " not found");
 							}
@@ -3464,9 +3562,9 @@ module OneM2M_Testcases {
 						// Tear down
 						f_cf01Down();
     					    				
-					}//end f_CSE_DMR_UPD_BO_005
+					}//end f_CSE_DMR_UPD_BI_005
     				
-				} // end g_CSE_DMR_UPD_BO_005
+				} // end g_CSE_DMR_UPD_BI_005
 				
 				group g_CSE_DMR_UPD_BO_006{
 					
@@ -7102,38 +7200,80 @@ module OneM2M_Testcases {
 				
 				testcase TC_CSE_SUB_BV_004() runs on CseTester system CseSystem {
 					// Local variables
+					var CseTester notifyHandler := CseTester.create;
 					var MsgIn v_response;
 					var integer v_aeIndex := -1;
+					var integer v_ae2Index := -1;
 					var template RequestPrimitive v_createRequest := m_createSubscriptionBase;
 					var RequestPrimitive v_request;
 					var ResponsePrimitive v_responsePrimitive;
-					var template PrimitiveContent v_contentResponse;
 					var template Notification v_notificationRequest := mw_contentNotificationBase;
 					var Notification v_notificationResponse := valueof(mw_contentNotificationAllOmit);
 					
+    				v_responsePrimitive := valueof(m_responseNotification(int4101, v_notificationResponse));	
+					
+					
 					// Test control
 
 					// Test component configuration
 					f_cf01Up();
-
+										
 					// Test adapter configuration
 
 					// Preamble
-					v_aeIndex := f_cse_preamble_registerAe();//c_CUDNDi);
+					v_aeIndex := f_cse_preamble_registerAe(omit,omit);//c_CUDNDi); // set poa to MTC adress
+					v_ae2Index := f_cse_createResource(int2, m_createAe(PX_APP_ID, -, PX_AE_ID_STEM, "MyAe2", omit), -1); // set poa to NotifyComponent address
 					
-					//TODO verify if it is a AE or a CSE who receives the notification request see 7.5.1.2.3 TS0004
 					v_notificationRequest.verificationRequest := true;
 					v_notificationResponse.creator := f_getResourceAddress(v_aeIndex);
-					v_notificationResponse.subscriptionReference := "I Don't know which URI is expected"; // TODO set it attribute to the correct value
-					v_responsePrimitive := valueof(m_responseNotification(int4101, v_notificationResponse));		
-		
+					v_notificationResponse.subscriptionReference := "I Don't know which URI is expected"; // TODO mandatory parameter
+					
+					// here appID AE1 == appID AE2
+					
 					v_request := f_getCreateRequestPrimitive(int23, v_createRequest, v_aeIndex);//Subscription 
-					v_request.primitiveContent.any_1[0].Subscription_optional.notificationURI := {"Not Initialized"};// TODO set notificationURI to AE2 URI
+					v_request.primitiveContent.any_1[0].Subscription_optional.notificationURI := {f_getResourceAddress(v_ae2Index)};
+					
+					notifyHandler.start(f_CSE_SUB_BV_004(v_notificationRequest, v_responsePrimitive));
 		
 					mcaPort.send(m_request(v_request));
 					
+					tc_ac.start;
 					alt {
-						[] mcaPort.receive(mw_request(mw_notify_2(v_notificationRequest))) -> value v_response {
+						[] mcaPort.receive(mw_response(mw_responsePrimitive(int4101))) -> value v_response { //SUBSCRIPTION_CREATOR_HAS_NO_PRIVILEGE 
+							tc_ac.stop;
+							setverdict(pass, testcasename() & ": OK : Subscription creator has no privilege");
+						}
+						[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value v_response {
+							tc_ac.stop;
+							setverdict(fail, testcasename() & ": Error while subscribing a ressource");
+						}
+						[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response {
+							tc_ac.stop;
+							setverdict(fail, testcasename() & ": Subsciption successful whereas subsciption creator has no privilege");
+						}
+						[] tc_ac.timeout {
+							setverdict(inconc, testcasename() & ": No answer while creating resource");
+						}
+					}
+
+					//Postamble
+					f_cse_postamble_deleteResources();
+
+					//Tear down
+					f_cf01Down();
+
+				} // end TC_CSE_SUB_BV_004
+				
+				function f_CSE_SUB_BV_004(in template Notification p_notificationRequest, in ResponsePrimitive p_responsePrimitive) runs on CseTester {
+					// Local variables
+					var MsgIn v_response;
+					
+					map(self:mcaPort, system:mcaPort);
+					map(self:acPort, system:acPort);
+										
+					tc_ac.start;
+					alt {
+						[] mcaPort.receive(mw_request(mw_notify_2(p_notificationRequest))) -> value v_response {
 							tc_ac.stop;
 							setverdict(pass, testcasename() & ": Notification received");							
 						}
@@ -7149,35 +7289,65 @@ module OneM2M_Testcases {
 							setverdict(inconc, testcasename() & ": No answer while deleting resource type int3 (Container) or None notification received");
 						}
 					}	
+
+					mcaPort.send(m_response(p_responsePrimitive)); // AE2 shall send a response to CSE with responseStatusCode = SUBSCRIPTION_CREATOR_HAS_NO_PRIVILEGE
 					
-					mcaPort.send(m_response(v_responsePrimitive)); // AE2 shall send a response to CSE with responseStatusCode = SUBSCRIPTION_CREATOR_HAS_NO_PRIVILEGE 
-					
+					unmap(self:mcaPort, system:mcaPort);
+					unmap(self:acPort, system:acPort); 
+
+				}// end f_CSE_SUB_BV_004
+				
+				function f_registerAe(in template (omit) PoaList p_poaList := omit) runs on CseTester return integer {//c_CRUDNDi
+					var RequestPrimitive v_request;
+					var MsgIn v_response;
+					var integer v_aeIndex := -1;
+	
+					if(vc_acpAuxIndex != -1) {
+						v_request := valueof(m_createAe(PX_APP_ID, {f_getResourceId(vc_resourcesList[vc_acpAuxIndex].resource)}, PX_AE_ID_STEM, "MyAe2", p_poaList));
+						//mcaPort.send(m_request(m_createAeAux(p_name, {PX_URI_CSE & PX_CSE_NAME & "/" & PX_ACPAUX_NAME})));
+					} else {
+						v_request := valueof(m_createAe(PX_APP_ID, -, PX_AE_ID_STEM, "MyAe2", p_poaList));
+					}
+	
+					v_request.to_ := f_addPrefix(f_getResourceAddress());
+					mcaPort.send(m_request(v_request));
+	
 					tc_ac.start;
 					alt {
-						[] mcaPort.receive(mw_response(mw_responsePrimitive(int4101))) -> value v_response { //SUBSCRIPTION_CREATOR_HAS_NO_PRIVILEGE 
+						[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response {
 							tc_ac.stop;
-							setverdict(pass, testcasename() & ": OK : Subscription creator has no privilege");
+							log("Preamble: Application registered successfuly");
+							if(ischosen(v_response.primitive.responsePrimitive.primitiveContent.any_1[0].AE_optional)) {
+				
+								v_aeIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent);
+								vc_resourcesIndexToBeDeleted := vc_resourcesIndexToBeDeleted & {v_aeIndex};
+				
+								if(ispresent(v_response.primitive.responsePrimitive.primitiveContent.any_1[0].AE_optional.aE_ID)){
+									f_sendAcPrimitive("AE-ID_changed", oct2char(unichar2oct(v_response.primitive.responsePrimitive.primitiveContent.any_1[0].AE_optional.aE_ID)));
+								} else {
+									f_sendAcPrimitive("AE-ID_changed", "0");
+								}	
+							};
 						}
-						[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value v_response {
+						[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
 							tc_ac.stop;
-							setverdict(fail, testcasename() & ": Error while subscribing a ressource");
+							setverdict(inconc, "Preamble: Error while registering application");
+							stop;
 						}
-						[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response {
+						[] mcaPort.receive {
 							tc_ac.stop;
-							setverdict(fail, testcasename() & ": Subsciption successful whereas subsciption creator has no privilege");
+							setverdict(inconc, "Preamble: Unexpected message received");
+							stop;
 						}
 						[] tc_ac.timeout {
-							setverdict(inconc, testcasename() & ": No answer while creating resource");
+							setverdict(inconc, "Preamble: No answer while registering resource");
+							stop;
 						}
-					}
-
-					//Postamble
-					f_cse_postamble_deleteResources();
-
-					//Tear down
-					f_cf01Down();
+					}	
+	
+					return v_aeIndex;
 
-				} // end TC_CSE_SUB_BV_004
+				}// end function 
 
 			}//end group g_CSE_SUB_BV_004