diff --git a/src/gui/guiframework.cpp b/src/gui/guiframework.cpp
index c927faf0831816f95dd991c64143f0d8b95bfaee..a85784c95b1a2bfba6df0f068b09a25bc2a67a94 100644
--- a/src/gui/guiframework.cpp
+++ b/src/gui/guiframework.cpp
@@ -253,3 +253,29 @@ GuiFramework::hasLoadedSetup()
 {
   return Manager::instance().hasLoadedSetup();
 }
+
+bool 
+GuiFramework::getRegistrationState(std::string& stateCode, std::string& stateMessage) {
+  ManagerImpl::REGISTRATION_STATE state = Manager::instance().getRegistrationState();
+  bool returnValue = false;
+  switch( state ) {
+    case ManagerImpl::REGISTERED:
+      returnValue = true;
+      stateCode    = "103";
+      stateMessage = "Registration succeed";
+    break;
+
+    case ManagerImpl::FAILED:
+      returnValue = true;
+      stateCode    = "104";
+      stateMessage = "Registration failed";
+    break;
+
+    case ManagerImpl::UNREGISTERED:
+      returnValue = false;
+      stateCode    = "";
+      stateMessage = "";
+    break;
+  }
+  return returnValue;
+}
diff --git a/src/gui/guiframework.h b/src/gui/guiframework.h
index ce3e7bc670f1bdfead747cd3546da5132d14aa1a..47407e3ed7eba89f49e605d109cd24169c9595ab 100644
--- a/src/gui/guiframework.h
+++ b/src/gui/guiframework.h
@@ -91,9 +91,10 @@ public:
 
   bool hasLoadedSetup();
   CALLID getCurrentId();
+  bool getRegistrationState(std::string& stateCode, std::string& stateMessage);
 
 protected:
-	std::string _message;
+  std::string _message;
 };
 
 #endif // __GUI_FRAMEWORK_H__
diff --git a/src/gui/server/guiserverimpl.cpp b/src/gui/server/guiserverimpl.cpp
index 3d31da7a4f2ea2056e3acf5a4b9b38c9675b892a..2e17299d9f62ba7fe58d0e677a7a07c01fab9306 100644
--- a/src/gui/server/guiserverimpl.cpp
+++ b/src/gui/server/guiserverimpl.cpp
@@ -132,7 +132,14 @@ GUIServerImpl::getEvents(const std::string& sequenceId)
   percentMic << GuiFramework::getMicVolume();
   tk.push_back(percentMic.str());
   tk.push_back("Microphone volume changed");
-  _requestManager.sendResponse(ResponseMessage("022", sequenceId,tk));
+  _requestManager.sendResponse(ResponseMessage("022", sequenceId, tk));
+
+  std::string stateCode;
+  std::string stateMessage;
+  if (GuiFramework::getRegistrationState(stateCode,stateMessage)) {
+    _requestManager.sendResponse(ResponseMessage(stateCode, sequenceId, stateMessage));
+  }
+
 
   return true;
 }
diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp
index 9f0b0e64bd687cf55d3e4df77f5a169f3200c137..45bbce69f97e8ed556f2c458a6831b78d0ed9e38 100644
--- a/src/managerimpl.cpp
+++ b/src/managerimpl.cpp
@@ -90,6 +90,8 @@ ManagerImpl::ManagerImpl (void)
   _nbIncomingWaitingCall=0;
 
   _codecMap = CodecDescriptorMap().getMap();
+
+  _registerState = UNREGISTERED;
 }
 
 // never call if we use only the singleton...
@@ -448,9 +450,13 @@ ManagerImpl::registerVoIPLink (void)
   if ( !useStun() ) {
     if (_voIPLinkVector.at(DFT_VOIP_LINK)->setRegister() >= 0) {
       returnValue = true;
+      _registerState = REGISTERED;
     } else {
       _debug("ManagerImpl::registerVoIPLink: Registration failed\n");
+      _registerState = FAILED;
     }
+  } else {
+    _registerState = UNREGISTERED;
   }
   return returnValue;
 }
diff --git a/src/managerimpl.h b/src/managerimpl.h
index cc5050bbf1b7d0fa52007c37c26d1e02591f97e5..0efb6d458f6a267fdc264f8d7197ba8bb0559f86 100644
--- a/src/managerimpl.h
+++ b/src/managerimpl.h
@@ -228,19 +228,15 @@ name);
    * Write by main thread only
    */
   unsigned short getSpkrVolume(void) { 
-    //ost::MutexLock m(_mutex); 
     return _spkr_volume; 
   }
   void setSpkrVolume(unsigned short spkr_vol) { 
-    //ost::MutexLock m(_mutex); 
     _spkr_volume = spkr_vol;
   }
   unsigned short getMicVolume(void) { 
-    //ost::MutexLock m(_mutex); 
     return _mic_volume;
   }
   void setMicVolume(unsigned short mic_vol) { 
-    //ost::MutexLock m(_mutex); 
     _mic_volume = _mic_volume_before_mute = mic_vol; 
   }
 
@@ -259,19 +255,19 @@ name);
 	inline bool isDriverLoaded (void) const { return _loaded; }
 	inline void loaded (bool l) { _loaded = l; }
 
-	/* 
-	 * Functions about audio device
-	 */
-/*
-	AudioDevice deviceList (int);
-	int deviceCount (void);
-	bool defaultDevice (int);
-*/	
 	/*
 	 * Init default values for the different fields
 	 */
 	void initConfigFile (void);
 
+  enum REGISTRATION_STATE {
+    UNREGISTERED,
+    REGISTERED,
+    FAILED
+  };
+
+  REGISTRATION_STATE getRegistrationState() { return _registerState; }
+
 private:
 
   
@@ -378,6 +374,9 @@ private:
   // Current callid 
 	CALLID _currentCallId;
 
+  // Register state
+  REGISTRATION_STATE _registerState;
+
 	/*
 	 * For the call timer
 	 */