diff --git a/src/gui/guiframework.cpp b/src/gui/guiframework.cpp
index adafcec026004991d841941787ed93df5132770a..809d820779b0f389d754964b0964615285cdb366 100644
--- a/src/gui/guiframework.cpp
+++ b/src/gui/guiframework.cpp
@@ -94,6 +94,17 @@ GuiFramework::transferCall (short id, const string& to)
 	}
 }
 
+void
+GuiFramework::mute() 
+{
+  Manager::instance().mute();
+}
+void
+GuiFramework::unmute() 
+{
+  Manager::instance().unmute();
+}
+
 void
 GuiFramework::muteOn (short id)
 {
diff --git a/src/gui/guiframework.h b/src/gui/guiframework.h
index 851d4e397f74cf60dc914dcc0f53b694d6d9b86e..cbbb5d99a93f99ad325993da5740a6d760aa8164 100644
--- a/src/gui/guiframework.h
+++ b/src/gui/guiframework.h
@@ -55,6 +55,8 @@ public:
 	int onHoldCall (short id);
 	int offHoldCall (short id);
 	int transferCall (short id, const std::string& to);
+	void mute ();
+	void unmute ();
 	void muteOn (short id);
 	void muteOff (short id);
 	int refuseCall (short id);
diff --git a/src/gui/server/guiserverimpl.cpp b/src/gui/server/guiserverimpl.cpp
index 112b7c86b237b4bca3338e514641352c06ec8e92..c3d6ccfa9bd6ae1c4f4fad852e97fffc8f6ceb85 100644
--- a/src/gui/server/guiserverimpl.cpp
+++ b/src/gui/server/guiserverimpl.cpp
@@ -181,6 +181,16 @@ GUIServerImpl::dtmfCall(const std::string& callId, const std::string& dtmfKey)
 int 
 GUIServerImpl::incomingCall (short id) 
 {
+  std::ostringstream responseMessage, callId;
+  callId << "s" << id;
+  responseMessage << "acc1 " << callId.str() << " call";
+
+  SubCall subcall("seq0", callId.str());
+
+  insertSubCall(id, subcall);
+
+  _requestManager.sendResponse(ResponseMessage("001", "seq0", responseMessage.str()));
+
   return 0;
 }
 
@@ -228,7 +238,7 @@ GUIServerImpl::displayTextMessage (short id, const std::string& message)
 {
   std::ostringstream responseMessage;
   std::string seq = getSequenceIdFromId(id);
-  responseMessage <<"s" << id << "text message: " + message;
+  responseMessage << "s" << id << " text message: " + message;
   _requestManager.sendResponse(ResponseMessage("700", seq, responseMessage.str()));
 }
 
diff --git a/src/gui/server/request.cpp b/src/gui/server/request.cpp
index ddd84bf882731b9f5bac3df6e80675c1e07da994..ec8704996ec390e190346e0582b3fb4f5c5750c7 100644
--- a/src/gui/server/request.cpp
+++ b/src/gui/server/request.cpp
@@ -112,13 +112,15 @@ RequestDTMF::execute()
 ResponseMessage
 RequestMute::execute()
 {
-  return message("200","TODO");
+  GUI::instance().muteOn();
+  return message("200","OK");
 }
 
 ResponseMessage
 RequestUnmute::execute()
 {
-  return message("200","TODO");
+  GUI::instance().unmute();
+  return message("200","OK");
 }
 
 ResponseMessage
diff --git a/src/gui/server/request.h b/src/gui/server/request.h
index 12cc6dd879a29deb9e4b0d56b23ea09df8abd8b1..4851952e735639268f8ce3ebd2a39631eb8e2f4c 100644
--- a/src/gui/server/request.h
+++ b/src/gui/server/request.h
@@ -95,6 +95,7 @@ class RequestGlobalCall : public Request
 public:
   RequestGlobalCall(const std::string &sequenceId, const TokenList& argList) : Request(sequenceId, argList) {
     TokenList::iterator iter = _argList.begin();
+
     if (iter != _argList.end() && ((*iter)[0]=='c' || (*iter)[0]=='s') ) {
       _callId = *iter;
       _argList.pop_front();
diff --git a/src/gui/server/requestfactory.cpp b/src/gui/server/requestfactory.cpp
index 895c30bf0591281bee00085fd46de2f77689685f..20995e9c40f5e4001c8e1b5d7680a63125ba0a4a 100644
--- a/src/gui/server/requestfactory.cpp
+++ b/src/gui/server/requestfactory.cpp
@@ -87,12 +87,12 @@ RequestFactory::registerAll() {
   registerRequest<RequestSyntaxError> ("syntaxerror");
   registerRequest<RequestCall>     ("call");
   registerRequest<RequestQuit>     ("quit");
-  registerRequest<RequestAnswer>   ("anwser");
+  registerRequest<RequestAnswer>   ("answer");
   registerRequest<RequestRefuse>   ("refuse");
   registerRequest<RequestHold>     ("hold");
   registerRequest<RequestUnhold>   ("unhold");
   registerRequest<RequestHangup>   ("hangup");
-  registerRequest<RequestDTMF> ("dtmf");
+  registerRequest<RequestDTMF>     ("dtmf");
   registerRequest<RequestTransfer> ("transfer");
   registerRequest<RequestMute>     ("mute");
   registerRequest<RequestUnmute>   ("unmute");
diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp
index 7998a1ef69ecb634fc3ce2f5847b579cc2a4ffa7..342cb6e2b5d06caa0ecc8f56cc1f6aaa558152c0 100644
--- a/src/managerimpl.cpp
+++ b/src/managerimpl.cpp
@@ -87,7 +87,8 @@ ManagerImpl::ManagerImpl (void)
 
   // Initialize after by init() -> initVolume()
   _spkr_volume = 0;
-  _mic_volume  = 0;
+  _mic_volume  = 0; 
+  _mic_volume_before_mute = 0;
 }
 
 ManagerImpl::~ManagerImpl (void) 
@@ -430,6 +431,16 @@ ManagerImpl::transferCall (short id, const string& to)
 	call->setState(Transfered);
 	return call->transfer(to);
 }
+void
+ManagerImpl::mute() {
+  _mic_volume_before_mute = _mic_volume;
+  _mic_volume = 0;
+}
+
+void
+ManagerImpl::unmute() {
+  _mic_volume = _mic_volume_before_mute;
+}
 
 void 
 ManagerImpl::muteOn (short id)
@@ -559,7 +570,7 @@ ManagerImpl::incomingCall (short id)
 	call->setStatus(string(RINGING_STATUS));
 	call->setState(Progressing);
 	ringtone(true);
-	displayStatus(RINGING_STATUS);
+	//displayStatus(RINGING_STATUS);
 	return _gui->incomingCall(id);
 }
 
diff --git a/src/managerimpl.h b/src/managerimpl.h
index 05c7ae480b5cb87fb2a8b66eca82497f40b8e0d3..d369c104043bedc3bdb4415c214e154a03f0b348 100644
--- a/src/managerimpl.h
+++ b/src/managerimpl.h
@@ -149,6 +149,8 @@ public:
 	int onHoldCall (short id);
 	int offHoldCall (short id);
 	int transferCall (short id, const std::string& to);
+  void mute();
+  void unmute();
 	void muteOn (short id);
 	void muteOff (short id);
 	int refuseCall (short id);
@@ -220,7 +222,7 @@ public:
 	inline int getSpkrVolume 	(void) 			{ return _spkr_volume; }
 	inline void setSpkrVolume 	(int spkr_vol) 	{ _spkr_volume = spkr_vol; }
 	inline int getMicroVolume 	(void) 			{ return _mic_volume; }
-	inline void setMicroVolume 	(int mic_vol) 	{ _mic_volume = mic_vol; }
+	inline void setMicroVolume 	(int mic_vol) 	{ _mic_volume = _mic_volume_before_mute = mic_vol; }
 	
 	/*
 	 * Manage information about firewall
@@ -341,6 +343,7 @@ private:
 	// To handle volume control
 	int 		_spkr_volume;
 	int 		_mic_volume;
+  int 		_mic_volume_before_mute;
 
 	// To handle firewall
 	int			_firewallPort;
diff --git a/src/sipvoiplink.cpp b/src/sipvoiplink.cpp
index ca4bf71d1fbeb1643b112bb0d4decc2152b77a13..2d2e812765572a213e2e7d6570d0278d9022f2f2 100644
--- a/src/sipvoiplink.cpp
+++ b/src/sipvoiplink.cpp
@@ -526,9 +526,10 @@ SipVoIPLink::refuse (short id)
 	
   osip_message_t *answer = NULL;
   eXosip_lock();
-  i = eXosip_call_build_answer (getSipCall(id)->getTid(), BUSY_HERE, &answer);
+  // not BUSY.. where decline the invitation!
+  i = eXosip_call_build_answer (getSipCall(id)->getTid(), SIP_DECLINE, &answer);
   if (i == 0) {
-    i = eXosip_call_send_answer (getSipCall(id)->getTid(), BUSY_HERE, answer);
+    i = eXosip_call_send_answer (getSipCall(id)->getTid(), SIP_DECLINE, answer);
   }
   eXosip_unlock();
   return i;
@@ -570,7 +571,7 @@ SipVoIPLink::getEvent (void)
     // Generate id
     id = Manager::instance().generateNewCallId();
     Manager::instance().pushBackNewCall(id, Incoming);
-    _debug("Incoming Call with identifiant %d [cid = %d, did = %d]\n",
+    _debug("Incoming Call with id %d [cid = %d, did = %d]\n",
 	   id, event->cid, event->did);
     _debug("Local audio port: %d\n", _localPort);
 
@@ -737,6 +738,7 @@ SipVoIPLink::getEvent (void)
     default:
       break;
     }
+
     break; 
 
   case EXOSIP_CALL_SERVERFAILURE: