diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn
index cfa95dd9f9f2ac7888fb47b093bd3f583b850ed2..7332c1e930e5a1211800e99c927f740a53ed3fce 100644
--- a/LibOneM2M/OneM2M_Functions.ttcn
+++ b/LibOneM2M/OneM2M_Functions.ttcn
@@ -1051,6 +1051,7 @@ module OneM2M_Functions {
 							f_checkAttributesToBeSaved(int2, v_request, v_response.primitive.responsePrimitive);
 							
 							vc_aeIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent, int2);
+							vc_componentRegistered := true;
 							
 							if(ispresent(v_response.primitive.responsePrimitive.primitiveContent.aE.aE_ID)){
 								f_sendAcPrimitive("AE-ID_changed", vc_aeIndex);
@@ -1107,6 +1108,7 @@ module OneM2M_Functions {
 						if(ischosen(vc_response.primitive.responsePrimitive.primitiveContent.aE)) {
 							
 							vc_aeIndex := f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, int2);
+							vc_componentRegistered := true;
 							
 							if(ispresent(vc_response.primitive.responsePrimitive.primitiveContent.aE.aE_ID)){
 								f_sendAcPrimitive("AE-ID_changed", vc_aeIndex);
@@ -1428,6 +1430,7 @@ module OneM2M_Functions {
 						v_resourceIndex := f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, p_resourceType, p_parentIndex);
 						if(p_resourceType == int2) {
 							vc_aeIndex := v_resourceIndex;
+							vc_componentRegistered := true;
 							if(ispresent(vc_response.primitive.responsePrimitive.primitiveContent.aE.aE_ID)){
 								f_sendAcPrimitive("AE-ID_changed", vc_aeIndex);
 							}
@@ -2806,6 +2809,7 @@ module OneM2M_Functions {
 						setverdict(pass, __SCOPE__&":INFO: Resource type remoteCSE created successfuly");
 						f_checkAttributesToBeSaved(int16, v_request, v_response.primitive.responsePrimitive);
 						vc_remoteCseIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent, int16, -1);
+						vc_componentRegistered := true;
 						v_localRemoteCSEResource := f_generateLocalResource(valueof(m_primitiveContentRemoteCSE(m_contentLocalRemoteCSEResource(f_getLocalPoA(PX_TS_CSE1.mccPortIn, "")))), vc_cSEBaseIndex, int16); // FIXME To be review not sure we have to use CSE1
 						vc_localRemoteCseIndex := f_setLocalResource(v_localRemoteCSEResource, int16, vc_cSEBaseIndex);
 					}
@@ -2861,6 +2865,7 @@ module OneM2M_Functions {
 						f_send(e_mcc_in_port, m_response(v_response));
 						
 						vc_remoteCseIndex := f_setResource(valueof(m_primitiveContentRemoteCSE(m_contentMyRemoteCSEResource(f_getLocalPoA(PX_TS_CSE1.mcaPortIn, "")))), int16, -1, true);
+						vc_componentRegistered := true;
 						v_resourceIndex := vc_remoteCseIndex;
 						v_remoteCSERegistered:=true;
 						tc_ac.start(10.0);
@@ -3437,6 +3442,7 @@ module OneM2M_Functions {
 						v_resourceIndex := f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, p_resourceType, p_parentIndex);
 						if(p_resourceType == int16) {	//remoteCSE
 							vc_remoteCseIndex := v_resourceIndex;
+							vc_componentRegistered := true;
 						}
 					}
 					[] mccPort.receive(mw_response(mw_responsePrimitiveKO)) {
@@ -5651,6 +5657,12 @@ module OneM2M_Functions {
 							}
 						}
 					}
+					case ("MqttSetDefaultTopicToNotRegistration") {
+						acPort.send(AcRequestPrimitive:{p_event, {charstring := int2str(p_aeIndex)}});
+					}
+					case ("MqttSetDefaultTopicToRegistration") {
+						acPort.send(AcRequestPrimitive:{p_event, {charstring := int2str(p_aeIndex)}});
+					}
 				} 
 			}
 		}//end of group AcFunctions
@@ -5971,6 +5983,24 @@ module OneM2M_Functions {
 			if(ischosen(p_msgOut.primitive.requestPrimitive)){
 				p_msgOut.primitive.requestPrimitive.requestIdentifier := p_msgOut.primitive.requestPrimitive.requestIdentifier & f_rnd(1, 1000000);
 			}
+			if(not(vc_componentRegistered)) {
+				if(valueof(p_msgOut.protocolBinding) == "MQTT") {
+					if(ischosen(p_msgOut.primitive.requestPrimitive)) {
+						if(ispresent(p_msgOut.primitive.requestPrimitive.resourceType))	{
+							if(valueof(p_msgOut.primitive.requestPrimitive.resourceType) != int2){
+								//Modify default topic to publish a non-registration message
+								f_sendAcPrimitive("MqttSetDefaultTopicToNotRegistration", -1);
+								vc_myInterfaces[enum2int(p_interfaceIds)].myPort.send(p_msgOut);
+								f_sendAcPrimitive("MqttSetDefaultTopicToRegistration", -1);
+								return;
+							} //else {
+								//f_sendAcPrimitive("MqttSetDefaultTopicToRegistration", -1);
+							//}
+						}
+					}
+				} 
+			}
+			//TODO: Handle response to normal messages before CSE registration occurs
 			vc_myInterfaces[enum2int(p_interfaceIds)].myPort.send(p_msgOut);
 		}
 		
diff --git a/LibOneM2M/OneM2M_TestSystem.ttcn b/LibOneM2M/OneM2M_TestSystem.ttcn
index 02698923b09f1c8950fcd6622811acca3f357314..fe3b31aa6366f1aa0ec20a90e71b2d88fb9cb94a 100644
--- a/LibOneM2M/OneM2M_TestSystem.ttcn
+++ b/LibOneM2M/OneM2M_TestSystem.ttcn
@@ -49,6 +49,7 @@ module OneM2M_TestSystem {
 		//About configuration of the component
 		var Configurations vc_config;
 		var TestSystemRole vc_testSystemRole;
+		var boolean vc_componentRegistered := false;
 		//Default behaviour
 		var default vc_aeSimu := null;
 		var default vc_cseSimu := null;