diff --git a/configure.ac b/configure.ac
index 2f4b1ef02ffd443abf11cfc7f9207282703666d9..31339b8ffb33bc2dcae331e89c4083f1b5c951fc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -16,7 +16,7 @@ dnl
 dnl Solaris pkgadd support definitions
 PKGADD_PKG="SFLPhone"
 PKGADD_NAME="SFLPhone - a SIP client"
-PKGADD_VENDOR="http://www.sflphone.org"
+PKGADD_VENDOR="http://www.sflphone.org/"
 AC_SUBST(PKGADD_PKG)
 AC_SUBST(PKGADD_NAME)
 AC_SUBST(PKGADD_VENDOR)
@@ -30,7 +30,7 @@ dnl AC_PATH_QT
 dnl KDE_USE_QT(3.3)
 AC_CANONICAL_SYSTEM
 AC_ARG_PROGRAM
-AM_INIT_AUTOMAKE(sflphone, $VERSION)
+AM_INIT_AUTOMAKE(sflphoned, $VERSION)
 AM_DISABLE_LIBRARIES
 AC_PROG_LIBTOOL
 AC_CHECK_COMPILERS
diff --git a/sflphone.spec.in b/sflphone.spec.in
index 8a85f06bbb569281e89b785481fdd2cdc3d41dcf..a397dc7d6a9196b620937c3ba5f5c2a64a9e8041 100644
--- a/sflphone.spec.in
+++ b/sflphone.spec.in
@@ -32,7 +32,7 @@ rm -rf $RPM_BUILD_ROOT
 
 %files
 %defattr(-, root, root)
-%{prefix}/bin/sflphone
+%{prefix}/bin/sflphoned
 %dir %{prefix}/share/sflphone/ringtones
 %{prefix}/share/sflphone/ringtones/*
 
diff --git a/src/Makefile.am b/src/Makefile.am
index cc53ed1b99ac4a0043f2dd4cbfea035a9c4b3a69..9438d91446011fe17bb4e91b3beeb255f67a4aa1 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,4 +1,4 @@
-bin_PROGRAMS = sflphone
+bin_PROGRAMS = sflphoned
 
 if USE_ZEROCONF
 ZEROCONFDIR = zeroconf
@@ -12,16 +12,16 @@ endif
 
 SUBDIRS = audio config gui $(ZEROCONFDIR)
 
-sflphone_SOURCES = call.cpp 	eventthread.cpp 	error.cpp 	main.cpp 	sipvoiplink.cpp 	voIPLink.cpp \
+sflphoned_SOURCES = call.cpp 	eventthread.cpp 	error.cpp 	main.cpp 	sipvoiplink.cpp 	voIPLink.cpp \
 		sipcall.cpp 	managerimpl.cpp 	managerimpl.h 	manager.h 	global.h \
 		eventthread.h 	error.h \
 		sipvoiplink.h 	user_cfg.h 	call.h 	voIPLink.h 	sipcall.h 	\
 		observer.cpp
 
-sflphone_CXXFLAGS = -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" $(ZEROCONFFLAGS)
+sflphoned_CXXFLAGS = -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" $(ZEROCONFFLAGS)
 
-sflphone_LDFLAGS = -static
-sflphone_LDADD =  gui/libguiframework.la audio/libaudio.la ../stund/libstun.la ../utilspp/libutilspp.la -lpthread $(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) config/libconfig.la 
+sflphoned_LDFLAGS = -static
+sflphoned_LDADD =  gui/libguiframework.la audio/libaudio.la ../stund/libstun.la ../utilspp/libutilspp.la -lpthread $(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) config/libconfig.la 
 KDE_CXXFLAGS = $(USE_EXCEPTIONS)
 AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)/audio/pacpp/include  $(libccext2_CFLAGS) $(libccgnu2_CFLAGS) $(portaudio_CFLAGS)
 
diff --git a/src/audio/audiolayer.cpp b/src/audio/audiolayer.cpp
index d6cf0f9cf2e7b7d57192fcd36d73419d3a59fc23..6fb0cedae8c74d780661778c6719a153541ba0be 100644
--- a/src/audio/audiolayer.cpp
+++ b/src/audio/audiolayer.cpp
@@ -54,6 +54,7 @@ AudioLayer::closeStream (void)
   if(_stream) {
     _stream->close();
     delete _stream;
+    _stream = 0;
   }
 }
 
diff --git a/src/audio/audiortp.cpp b/src/audio/audiortp.cpp
index d0928e80a6fee7e690c8a6a63bb13a716c4fff1f..36f8b357f15b02d04157d5d43bf6f5e46711095a 100644
--- a/src/audio/audiortp.cpp
+++ b/src/audio/audiortp.cpp
@@ -49,6 +49,7 @@ AudioRtp::AudioRtp () {
 
 AudioRtp::~AudioRtp (void) {
 	delete _RTXThread;
+  _RTXThread = NULL;
 }
 
 int 
@@ -84,15 +85,10 @@ AudioRtp::closeRtpSession (SipCall *ca) {
 		ca->enable_audio = -1;
 
 		if (_RTXThread != NULL) {
-      _debug("Thread: stop AudioRTP\n");
+      _debug("Thread: stop AudioRTP for sipcall: %d\n", ca->getId());
 			delete _RTXThread;
 			_RTXThread = NULL;
 		}
-		
-		// Stop portaudio and flush ringbuffer
-		Manager::instance().getAudioDriver()->stopStream();
-		Manager::instance().getAudioDriver()->mainSndRingBuffer().flush();
-    _debug("AudioRtp::closeRtpSession : flushing stream\n");
 	}
 }
 
@@ -121,17 +117,14 @@ AudioRtpRTX::AudioRtpRTX (SipCall *sipcall,
 }
 
 AudioRtpRTX::~AudioRtpRTX () {
-  _debug("Thread: stop session\n");
+  _debug("Thread: AudioRtpRTX stop session\n");
   if (!_sym) {
-    delete _sessionRecv;	
-    _sessionRecv = NULL;
-    delete _sessionSend;	
-    _sessionSend = NULL;
+    delete _sessionRecv; _sessionRecv = NULL;
+    delete _sessionSend; _sessionSend = NULL;
   } else {
-    delete _session;
-    _session = NULL;
+    delete _session;     _session = NULL;
   }
-  delete time;
+  delete time; time = NULL;
 }
 
 void
@@ -297,8 +290,11 @@ AudioRtpRTX::receiveSessionForSpkr (int16* data_for_speakers,
 	Manager::instance().getAudioDriver()->startStream();
 	
   delete ac;
+  ac = NULL;
 	delete cd;
+  cd = NULL;
 	delete adu;
+  adu = NULL;
 }
 
 void
@@ -366,15 +362,15 @@ AudioRtpRTX::run (void) {
 		TimerPort::incTimer(frameSize); // 'frameSize' ms
 	}
 
-	delete[] data_for_speakers_tmp;
-	delete[] data_for_speakers;
-	delete[] data_to_send;
-	delete[] data_from_mic_tmp;
-	delete[] data_from_mic;
+	delete [] data_for_speakers_tmp; data_for_speakers_tmp = 0;
+  delete [] data_for_speakers;     data_for_speakers     = 0;
+	delete [] data_to_send;          data_to_send          = 0;
+	delete [] data_from_mic_tmp;     data_from_mic_tmp     = 0;
+	delete [] data_from_mic;         data_from_mic         = 0;
 
+  audiolayer->stopStream();
   audiolayer->mainSndRingBuffer().flush();
   //audiolayer->urgentRingBuffer().flush();
-  audiolayer->stopStream();
 }
 
 
diff --git a/src/audio/dtmfgenerator.cpp b/src/audio/dtmfgenerator.cpp
index aaf2d68a40c87801b77eaf688dbb48b07c28aa00..84abbf717e57c927a985ca5a62e1d2ae1ecd89af 100644
--- a/src/audio/dtmfgenerator.cpp
+++ b/src/audio/dtmfgenerator.cpp
@@ -86,6 +86,7 @@ DTMFGenerator::DTMFGenerator(): ToneGenerator ()
 DTMFGenerator::~DTMFGenerator() {
 	for(int i = 0; i < NUM_TONES; i++) {
 		delete[] samples[i];
+    samples[i] = NULL;
 	}
 }
 
diff --git a/src/audio/ringbuffer.cpp b/src/audio/ringbuffer.cpp
index d5b9d9f5a5726bb71a136a537062aa6f964fa963..138ae2f24c2e03157e3114507f156827b8ec770a 100644
--- a/src/audio/ringbuffer.cpp
+++ b/src/audio/ringbuffer.cpp
@@ -36,16 +36,16 @@ RingBuffer::RingBuffer(int size) {
    mBufferSize = (size > MIN_BUFFER_SIZE ? size : MIN_BUFFER_SIZE);
    mStart = 0;
    mEnd = 0;
-   mBuffer = (samplePtr) malloc (mBufferSize);
-   mBlank = (samplePtr) malloc (MIN_BUFFER_SIZE);
+   mBuffer = new unsigned char[mBufferSize];
+   mBlank = new unsigned char[MIN_BUFFER_SIZE];
    bzero(mBlank, MIN_BUFFER_SIZE);
    assert (mBuffer != NULL);
 }
 
 // Free memory on object deletion
 RingBuffer::~RingBuffer() {
-   free (mBuffer);
-   free (mBlank);
+   delete[] mBlank;   mBlank  = 0;
+   delete[] mBuffer;  mBuffer = 0;
 }
  
 void
@@ -69,7 +69,7 @@ RingBuffer::AvailForPut() const {
    return (mBufferSize-4) - Len();
 } 
 
-int 
+void 
 RingBuffer::PutZero(int toZero)
 {
   unsigned char p[toZero];
diff --git a/src/audio/ringbuffer.h b/src/audio/ringbuffer.h
index e811e69488146d61f177b6670ecf3dbb09f06394..c18f82b08f614608ecc41018bee594c44ae0bfeb 100644
--- a/src/audio/ringbuffer.h
+++ b/src/audio/ringbuffer.h
@@ -43,7 +43,7 @@ class RingBuffer {
    //
    int AvailForPut (void) const;
    int Put (void*, int);
-   int PutZero(int);
+   void PutZero(int);
 
    //
    // For the reader only:
diff --git a/src/audio/tonegenerator.cpp b/src/audio/tonegenerator.cpp
index 3f5b191e03d7ff4487827f5b3984f3539d941f56..fc01b16d511230d1da1858b0b814e74adbd9dfe8 100644
--- a/src/audio/tonegenerator.cpp
+++ b/src/audio/tonegenerator.cpp
@@ -103,9 +103,13 @@ ToneGenerator::ToneGenerator () {
 
 ToneGenerator::~ToneGenerator (void) {
 	delete tonethread;
+  tonethread = 0;
   delete [] _dst;
+  _dst = 0;
   delete [] _src;
+  _src = 0;
   delete _ulaw;
+  _ulaw = 0;
 }
 
 /**
diff --git a/src/gui/guiframework.cpp b/src/gui/guiframework.cpp
index 19f122b96bfa752550e3e556f6430680344085b5..97e5af8ad6976579ea657d677b18c2f918775d00 100644
--- a/src/gui/guiframework.cpp
+++ b/src/gui/guiframework.cpp
@@ -29,16 +29,6 @@ GuiFramework::GuiFramework ()
 
 GuiFramework::~GuiFramework (void) {}
 
-/**
- * This function is only to not redeclare it in old qt-gui code
- * Since isn't not virtual
- */
-int
-GuiFramework::incomingCall(short id, const std::string& accountId, const std::string& from) 
-{
-  return incomingCall(id);
-} 
-
 int 
 GuiFramework::outgoingCall (const string& to)
 {
diff --git a/src/gui/guiframework.h b/src/gui/guiframework.h
index 2693a8b9379f211f82880b9497da6ee46bfaef4a..c4fc9f660d739cafe5e1bb2b7372d29336a370b5 100644
--- a/src/gui/guiframework.h
+++ b/src/gui/guiframework.h
@@ -33,8 +33,7 @@ public:
 	virtual ~GuiFramework (void);
 
 	/* Parent class to child class */
-	virtual int incomingCall (short id) = 0;
-	virtual int incomingCall (short id, const std::string& accountId, const std::string& from);
+	virtual int incomingCall (short id, const std::string& accountId, const std::string& from) = 0;
 	virtual void peerAnsweredCall (short id) = 0;
 	virtual int peerRingingCall (short id) = 0;
 	virtual int peerHungupCall (short id) = 0;
diff --git a/src/gui/server/guiserverimpl.cpp b/src/gui/server/guiserverimpl.cpp
index d84d011ab3cf0861b275d40646b2ebc6b60a57ad..7fbad6455f029a2dfa9c167a935f3068998cde86 100644
--- a/src/gui/server/guiserverimpl.cpp
+++ b/src/gui/server/guiserverimpl.cpp
@@ -264,13 +264,6 @@ GUIServerImpl::version()
 }
 
 
-int 
-GUIServerImpl::incomingCall (short id) 
-{
-  _debug("ERROR: GUIServerImpl::incomingCall(%d) should not be call\n",id);
-  return 0;
-}
-
 int 
 GUIServerImpl::incomingCall (short id, const std::string& accountId, const std::string& from) 
 {
diff --git a/src/gui/server/requestfactory.cpp b/src/gui/server/requestfactory.cpp
index 4225bb82bf5322339ab46e41f38ea4547eb5cd87..1846dc704e50fbc17d13b6593f7fe5427c5c594b 100644
--- a/src/gui/server/requestfactory.cpp
+++ b/src/gui/server/requestfactory.cpp
@@ -70,6 +70,16 @@ RequestFactory::create(
   return pos->second->create(sequenceId, argList);
 }
 
+RequestFactory::~RequestFactory() 
+{
+  std::map< std::string, RequestCreatorBase * >::iterator iter = mRequests.begin();
+  while ( iter != mRequests.end() ) {
+    // delete RequestCreator< T >
+    delete iter->second;
+    iter++;
+  }
+}
+
 template< typename T >
 void 
 RequestFactory::registerRequest(const std::string &requestname)
@@ -113,6 +123,4 @@ RequestFactory::registerAll() {
   registerRequest<RequestConfigSet>   ("configset");
   registerRequest<RequestConfigSave>  ("configsave");
   registerRequest<RequestList>        ("list");
-
-
 } 
diff --git a/src/gui/server/requestfactory.h b/src/gui/server/requestfactory.h
index 39f74e024d09584950b782f9fbfd2634679f793a..7021171c1f1f38e6e7746b05b69f699eb668ce8c 100644
--- a/src/gui/server/requestfactory.h
+++ b/src/gui/server/requestfactory.h
@@ -54,6 +54,7 @@ public:
 class RequestFactory
 {
 public:
+  ~RequestFactory();
   Request *create(const std::string& requestLine);
   Request *create(
     const std::string& requestname, 
diff --git a/src/main.cpp b/src/main.cpp
index 6733d4837b401dbb016861bd1f5d1dafbc663832..718c2621caf29452397c12a7160b2e1650708adf 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -22,13 +22,24 @@
 #include "gui/server/guiserver.h"
 #include "gui/guiframework.h"
 #include "manager.h"
+#include "cstring"
+#include "iostream"
 
 int
 main (int argc, char **argv) {
   int exit_code = 0;
-  GuiFramework *GUI;
 
-  {
+  if (argc == 1 && strcmp(argv[0], "--help") == 0) {
+
+    std::cout << PROGNAME << " Deamon " << VERSION << ", by Savoir-Faire Linux 2004-2005" << std::endl << std::endl;
+    std::cout << "USAGE: sflphoned [--help]" << std::endl;
+    std::cout << "Parameters: " << std::endl;
+    std::cout << "  --help for this message" << std::endl << std::endl;
+    std::cout << "See http://www.sflphone.org/ for more information" << std::endl;
+
+  } else {
+
+    GuiFramework *GUI;
     bool initOK = false;
     try {
       Manager::instance().initConfigFile();
diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp
index 4088f131ac054ec558d58f951779eceb8bd103cb..14436a3fa00f4e24b29b760b9bcf5eaab4bc9982 100644
--- a/src/managerimpl.cpp
+++ b/src/managerimpl.cpp
@@ -99,36 +99,15 @@ ManagerImpl::ManagerImpl (void)
   _codecMap = CodecDescriptorMap().getMap();
 }
 
+// never call if we use only the singleton...
 ManagerImpl::~ManagerImpl (void) 
 {
   terminate();
-  for(VoIPLinkVector::iterator pos = _voIPLinkVector.begin();
-      pos != _voIPLinkVector.end();
-      pos++) {
-    delete *pos;
-  }
-
-  for(CallVector::iterator pos = _callVector.begin();
-      pos != _callVector.end();
-      pos++) {
-    delete *pos;
-  }
-
-  unloadAudioCodec();
-
-  delete _audiodriverPA;
-  delete _tone;
-  delete _error;
-
-#ifdef USE_ZEROCONF
-  delete _DNSService;
-#endif
 } 
 
 void 
 ManagerImpl::init (void) 
 {
-  terminate();
   initZeroconf();
   initVolume();
 
@@ -188,6 +167,33 @@ void ManagerImpl::terminate()
   }
 
   _voIPLinkVector.clear();
+
+  for(VoIPLinkVector::iterator pos = _voIPLinkVector.begin();
+      pos != _voIPLinkVector.end();
+      pos++) {
+    delete *pos;
+  }
+
+  for(CallVector::iterator pos = _callVector.begin();
+      pos != _callVector.end();
+      pos++) {
+    delete *pos;
+  }
+
+  unloadAudioCodec();
+
+  delete _audiodriverPA;
+  _audiodriverPA = 0;
+  delete _tone;
+  _tone = 0;
+  delete _error;
+  _error = 0;
+
+#ifdef USE_ZEROCONF
+  delete _DNSService;
+  _DNSService = 0;
+#endif
+  _debug("ManagerImpl::terminate() was called");
 }
 
 void
@@ -696,9 +702,11 @@ ManagerImpl::playDtmf(char code)
     _mutex.leaveMutex();
     //setZonetone(false);
     delete[] buf_ctrl_vol;
+    buf_ctrl_vol = 0;
     returnValue = true;
   }
   delete[] _buf;
+  _buf = 0;
   return returnValue;
 }
 
@@ -1016,7 +1024,9 @@ ManagerImpl::notificationIncomingCall (void) {
   getAudioDriver()->putUrgent(buf_ctrl_vol, SAMPLES_SIZE(FRAME_PER_BUFFER));
 
   delete[] buf_ctrl_vol;
+  buf_ctrl_vol = 0;
   delete[] buffer;
+  buffer = 0;
 }
 
 /**