diff --git a/src/core/platform-helpers/ios-platform-helpers.mm b/src/core/platform-helpers/ios-platform-helpers.mm
index 0fcd4dc014dc28db36ed359afd5f9d30d2af2f1b..f624d149c10966eedb87a3487f977990dba9f946 100644
--- a/src/core/platform-helpers/ios-platform-helpers.mm
+++ b/src/core/platform-helpers/ios-platform-helpers.mm
@@ -58,10 +58,6 @@ class IosPlatformHelpers : public MacPlatformHelpers, public CoreListener {
 public:
 	IosPlatformHelpers (std::shared_ptr<LinphonePrivate::Core> core, void *systemContext);
 	~IosPlatformHelpers () {
-		try {
-            L_GET_PRIVATE(getCore())->unregisterListener(this);
-	    } catch (...) {
-	    }
 		[mAppDelegate dealloc];
 	}
 
@@ -139,7 +135,6 @@ IosPlatformHelpers::IosPlatformHelpers (std::shared_ptr<LinphonePrivate::Core> c
 	if (mUseAppDelgate) {
 		mAppDelegate = [[IosAppDelegate alloc] initWithCore:core];
 	}
-    L_GET_PRIVATE(core)->registerListener(this);
 	ms_message("IosPlatformHelpers is fully initialised");
 }
 
@@ -277,6 +272,9 @@ void IosPlatformHelpers::onLinphoneCoreStart(bool monitoringEnabled) {
 	} else {
 		ms_warning("[IosPlatformHelpers] Auto core.iterate() isn't enabled, ensure you do it in your application!");
 	}
+    
+    ms_message("[IosPlatformHelpers] Register onGlobalStateChanged listener to request push notification when finished starting");
+    L_GET_PRIVATE(getCore())->registerListener(this);
 }
 
 void IosPlatformHelpers::onLinphoneCoreStop() {
@@ -289,7 +287,12 @@ void IosPlatformHelpers::onLinphoneCoreStop() {
 	if (mUseAppDelgate && linphone_core_is_auto_iterate_enabled(getCore()->getCCore())) {
 		enableAutoIterate(FALSE);
 	}
-
+    
+    try {
+        L_GET_PRIVATE(getCore())->unregisterListener(this);
+    } catch (...) {
+        
+    }
 	// To avoid trigger callbacks of mHandler after linphone core stop
 	[mAppDelegate onStopAsyncEnd:true];
 	getSharedCoreHelpers()->onLinphoneCoreStop();