diff --git a/daemon/src/audio/audioloop.cpp b/daemon/src/audio/audioloop.cpp
index 38a6b7e9c5623803d21d8944fa3a3189c717d6e2..445060a62a1f07c24fa3b92d61e961fc337832f1 100644
--- a/daemon/src/audio/audioloop.cpp
+++ b/daemon/src/audio/audioloop.cpp
@@ -35,6 +35,7 @@
 #include "audioloop.h"
 #include <math.h>
 #include <cstring>
+#include <cassert>
 
 AudioLoop::AudioLoop() :_buffer (0),  _size (0), _pos (0), _sampleRate (0)
 {
@@ -46,9 +47,11 @@ AudioLoop::~AudioLoop()
 }
 
 void
-AudioLoop::getNext (SFLDataFormat* output, int total_samples, short volume)
+AudioLoop::getNext (SFLDataFormat* output, size_t total_samples, short volume)
 {
-    int pos = _pos;
+    size_t pos = _pos;
+
+    assert(_size);
 
     if(_size == 0) {
     	_error("AudioLoop: Error: Audio loop size is 0");
@@ -56,7 +59,7 @@ AudioLoop::getNext (SFLDataFormat* output, int total_samples, short volume)
     }
 
     while (total_samples) {
-        int samples = total_samples;
+        size_t samples = total_samples;
 
         if (samples > (_size-pos)) {
             samples = _size-pos;
@@ -65,7 +68,7 @@ AudioLoop::getNext (SFLDataFormat* output, int total_samples, short volume)
         memcpy(output, _buffer+pos, samples*sizeof (SFLDataFormat)); // short>char conversion
 
         if (volume!=100) {
-            for (int i=0; i<samples; i++) {
+            for (size_t i=0; i<samples; i++) {
                 *output = (*output * volume) /100;
                 output++;
             }
@@ -73,7 +76,6 @@ AudioLoop::getNext (SFLDataFormat* output, int total_samples, short volume)
             output += samples; // this is the destination...
         }
 
-        // should adjust sound here, in output???
         pos = (pos + samples) % _size;
 
         total_samples -= samples;
diff --git a/daemon/src/audio/audioloop.h b/daemon/src/audio/audioloop.h
index 5e6616e710c825fba5c2243adcdf642c84f89318..58e8f83c211561c92e0123d33c5d418d10d6e62c 100644
--- a/daemon/src/audio/audioloop.h
+++ b/daemon/src/audio/audioloop.h
@@ -61,7 +61,7 @@ class AudioLoop
          * @param nb of int16 to send
          * @param volume  The volume
          */
-        void getNext (SFLDataFormat* output, int samples, short volume=100);
+        void getNext (SFLDataFormat* output, size_t samples, short volume=100);
 
         /**
          * Reset the pointer position
@@ -74,7 +74,7 @@ class AudioLoop
          * Accessor to the size of the buffer
          * @return unsigned int The size
          */
-        unsigned int getSize() {
+        size_t getSize() {
             return _size;
         }
 
@@ -84,10 +84,10 @@ class AudioLoop
         SFLDataFormat* _buffer;
 
         /** Number of samples inside the buffer */
-        int _size;
+        size_t _size;
 
         /** current position, set to 0, when initialize */
-        int _pos;
+        size_t _pos;
 
         /** Sample rate */
         unsigned int _sampleRate;
diff --git a/daemon/src/audio/sound/tone.h b/daemon/src/audio/sound/tone.h
index c17d9d7a66d5f760f8b2174f60f0df423bf4ab6e..1cfa3348411298b0afef9b042ee6065202c06666 100644
--- a/daemon/src/audio/sound/tone.h
+++ b/daemon/src/audio/sound/tone.h
@@ -36,9 +36,6 @@
 #include <string>
 #include "audio/audioloop.h"
 
-#define TONE_NBTONE 4
-#define TONE_NBCOUNTRY 7
-
 #define TABLE_LENGTH 4096
 
 /**
diff --git a/daemon/src/audio/sound/tonelist.cpp b/daemon/src/audio/sound/tonelist.cpp
index 8f904cc10baf85281a9d96dbba7489758443024d..c08dba566f1c3653701a9466a8d262dc1629428b 100644
--- a/daemon/src/audio/sound/tonelist.cpp
+++ b/daemon/src/audio/sound/tonelist.cpp
@@ -32,120 +32,87 @@
  */
 #include "tonelist.h"
 
-ToneList::ToneList() : _nbTone (TONE_NBTONE) ,
-    _nbCountry (TONE_NBCOUNTRY),
-    _defaultCountryId (ZID_NORTH_AMERICA)
+static const char *toneZone[TelephoneTone::ZID_COUNTRIES][Tone::TONE_NULL] = {
+	{	// ZID_NORTH_AMERICA
+		"350+440",				//Tone::TONE_DIALTONE
+		"480+620/500,0/500",	//Tone::TONE_BUSY
+		"440+480/2000,0/4000",	//Tone::TONE_RINGTONE
+		"480+620/250,0/250",	//Tone::TONE_CONGESTION
+	},
+	{	//ZID_FRANCE
+		"440",
+		"440/500,0/500",
+		"440/1500,0/3500",
+		"440/250,0/250",
+	},
+	{	//ZID_AUSTRALIA
+		"413+438",
+		"425/375,0/375",
+		"413+438/400,0/200,413+438/400,0/2000",
+		"425/375,0/375,420/375,8/375",
+	},
+	{	//ZID_UNITED_KINGDOM
+		"350+440",
+		"400/375,0/375",
+		"400+450/400,0/200,400+450/400,0/2000",
+		"400/400,0/350,400/225,0/525",
+	},
+	{	//ZID_SPAIN
+		"425",
+		"425/200,0/200",
+		"425/1500,0/3000",
+		"425/200,0/200,425/200,0/200,425/200,0/600",
+	},
+	{	//ZID_ITALY
+		"425/600,0/1000,425/200,0/200",
+		"425/500,0/500",
+		"425/1000,0/4000",
+		"425/200,0/200",
+	},
+	{	//ZID_JAPAN
+		"400",
+		"400/500,0/500",
+		"400+15/1000,0/2000",
+		"400/500,0/500",
+	}
+};
+
+
+TelephoneTone::COUNTRYID
+TelephoneTone::getCountryId (const std::string& countryName)
 {
-    initToneDefinition();
-}
-
-ToneList::~ToneList()
-{
-}
-
-void
-ToneList::initToneDefinition()
-{
-    _toneZone[ZID_NORTH_AMERICA][Tone::TONE_DIALTONE] = "350+440";
-    _toneZone[ZID_NORTH_AMERICA][Tone::TONE_BUSY] = "480+620/500,0/500";
-    _toneZone[ZID_NORTH_AMERICA][Tone::TONE_RINGTONE] = "440+480/2000,0/4000";
-    _toneZone[ZID_NORTH_AMERICA][Tone::TONE_CONGESTION] = "480+620/250,0/250";
-
-    _toneZone[ZID_FRANCE][Tone::TONE_DIALTONE] = "440";
-    _toneZone[ZID_FRANCE][Tone::TONE_BUSY] = "440/500,0/500";
-    _toneZone[ZID_FRANCE][Tone::TONE_RINGTONE] = "440/1500,0/3500";
-    _toneZone[ZID_FRANCE][Tone::TONE_CONGESTION] = "440/250,0/250";
-
-    _toneZone[ZID_AUSTRALIA][Tone::TONE_DIALTONE] = "413+438";
-    _toneZone[ZID_AUSTRALIA][Tone::TONE_BUSY] = "425/375,0/375";
-    _toneZone[ZID_AUSTRALIA][Tone::TONE_RINGTONE] =
-        "413+438/400,0/200,413+438/400,0/2000";
-    _toneZone[ZID_AUSTRALIA][Tone::TONE_CONGESTION] = "425/375,0/375,420/375,8/375";
-
-    _toneZone[ZID_UNITED_KINGDOM][Tone::TONE_DIALTONE] = "350+440";
-    _toneZone[ZID_UNITED_KINGDOM][Tone::TONE_BUSY] = "400/375,0/375";
-    _toneZone[ZID_UNITED_KINGDOM][Tone::TONE_RINGTONE] =
-        "400+450/400,0/200,400+450/400,0/2000";
-    _toneZone[ZID_UNITED_KINGDOM][Tone::TONE_CONGESTION] =
-        "400/400,0/350,400/225,0/525";
-
-    _toneZone[ZID_SPAIN][Tone::TONE_DIALTONE] = "425";
-    _toneZone[ZID_SPAIN][Tone::TONE_BUSY] = "425/200,0/200";
-    _toneZone[ZID_SPAIN][Tone::TONE_RINGTONE] = "425/1500,0/3000";
-    _toneZone[ZID_SPAIN][Tone::TONE_CONGESTION] =
-        "425/200,0/200,425/200,0/200,425/200,0/600";
-
-    _toneZone[ZID_ITALY][Tone::TONE_DIALTONE] = "425/600,0/1000,425/200,0/200";
-    _toneZone[ZID_ITALY][Tone::TONE_BUSY] = "425/500,0/500";
-    _toneZone[ZID_ITALY][Tone::TONE_RINGTONE] = "425/1000,0/4000";
-    _toneZone[ZID_ITALY][Tone::TONE_CONGESTION] = "425/200,0/200";
-
-    _toneZone[ZID_JAPAN][Tone::TONE_DIALTONE] = "400";
-    _toneZone[ZID_JAPAN][Tone::TONE_BUSY] = "400/500,0/500";
-    _toneZone[ZID_JAPAN][Tone::TONE_RINGTONE] = "400+15/1000,0/2000";
-    _toneZone[ZID_JAPAN][Tone::TONE_CONGESTION] = "400/500,0/500";
-}
-
-std::string
-ToneList::getDefinition (COUNTRYID countryId, Tone::TONEID toneId)
-{
-    if (toneId == Tone::TONE_NULL) {
-        return "";
-    }
-
-    return _toneZone[countryId][toneId];
-}
-
-ToneList::COUNTRYID
-ToneList::getCountryId (const std::string& countryName)
-{
-    if (countryName.compare ("North America") == 0) {
-        return ZID_NORTH_AMERICA;
-    } else if (countryName.compare ("France") == 0) {
-        return ZID_FRANCE;
-    } else if (countryName.compare ("Australia") == 0) {
-        return ZID_AUSTRALIA;
-    } else if (countryName.compare ("United Kingdom") == 0) {
-        return ZID_UNITED_KINGDOM;
-    } else if (countryName.compare ("Spain") == 0) {
-        return ZID_SPAIN;
-    } else if (countryName.compare ("Italy") == 0) {
-        return ZID_ITALY;
-    } else if (countryName.compare ("Japan") == 0) {
-        return ZID_JAPAN;
-    } else {
-        return _defaultCountryId; // default, we don't want segmentation fault
-    }
+    if (countryName == "North America")		return ZID_NORTH_AMERICA;
+    if (countryName == "France")			return ZID_FRANCE;
+    if (countryName == "Australia")			return ZID_AUSTRALIA;
+    if (countryName == "United Kingdom") 	return ZID_UNITED_KINGDOM;
+    if (countryName == "Spain")				return ZID_SPAIN;
+    if (countryName == "Italy")				return ZID_ITALY;
+    if (countryName == "Japan")				return ZID_JAPAN;
+    return ZID_NORTH_AMERICA; // default
 }
 
 TelephoneTone::TelephoneTone (const std::string& countryName, unsigned int sampleRate) :
-    _currentTone (Tone::TONE_NULL),
-    _toneList()
+    _currentTone (Tone::TONE_NULL)
 {
-    _debug ("TelephoneTone: Generate new telephone tones at %u Hz", sampleRate);
-
-    ToneList::COUNTRYID countryId = _toneList.getCountryId (countryName);
-    _tone[Tone::TONE_DIALTONE] = new Tone (_toneList.getDefinition (countryId, Tone::TONE_DIALTONE), sampleRate);
-    _tone[Tone::TONE_BUSY] = new Tone (_toneList.getDefinition (countryId, Tone::TONE_BUSY), sampleRate);
-    _tone[Tone::TONE_RINGTONE] = new Tone (_toneList.getDefinition (countryId, Tone::TONE_RINGTONE), sampleRate);
-    _tone[Tone::TONE_CONGESTION] = new Tone (_toneList.getDefinition (countryId, Tone::TONE_CONGESTION), sampleRate);
+    TelephoneTone::COUNTRYID countryId = getCountryId (countryName);
 
+    _tone[Tone::TONE_DIALTONE] = new Tone (toneZone[countryId][Tone::TONE_DIALTONE], sampleRate);
+    _tone[Tone::TONE_BUSY] = new Tone (toneZone[countryId][Tone::TONE_BUSY], sampleRate);
+    _tone[Tone::TONE_RINGTONE] = new Tone (toneZone[countryId][Tone::TONE_RINGTONE], sampleRate);
+    _tone[Tone::TONE_CONGESTION] = new Tone (toneZone[countryId][Tone::TONE_CONGESTION], sampleRate);
 }
 
 TelephoneTone::~TelephoneTone()
 {
-    for (int i=0; i<_toneList.getNbTone(); i++) {
+    for (size_t i=0; i < Tone::TONE_NULL; i++)
         delete _tone[i];
-        _tone[i] = 0;
-    }
 }
 
 void
 TelephoneTone::setCurrentTone (Tone::TONEID toneId)
 {
-    if (toneId != Tone::TONE_NULL && _currentTone != toneId) {
+    if (toneId != Tone::TONE_NULL && _currentTone != toneId)
         _tone[toneId]->reset();
-    }
 
     _currentTone = toneId;
 }
@@ -153,17 +120,8 @@ TelephoneTone::setCurrentTone (Tone::TONEID toneId)
 Tone*
 TelephoneTone::getCurrentTone()
 {
-    if (_currentTone == Tone::TONE_NULL) {
-        return 0;
-    }
+    if (_currentTone == Tone::TONE_NULL)
+        return NULL;
 
     return _tone[_currentTone];
 }
-
-bool
-TelephoneTone::shouldPlay()
-{
-    return ( (_currentTone != Tone::TONE_NULL) ? true : false);
-}
-
-
diff --git a/daemon/src/audio/sound/tonelist.h b/daemon/src/audio/sound/tonelist.h
index e3feecc63b2aa3de9894b6fbfb80d1e16ef093e1..cc8f20e78ba17e38768717c9751696f8db70cd42 100644
--- a/daemon/src/audio/sound/tonelist.h
+++ b/daemon/src/audio/sound/tonelist.h
@@ -5,6 +5,7 @@
  *  Inspired by tonegenerator of
  *   Laurielle Lea <laurielle.lea@savoirfairelinux.com> (2004)
  *
+ *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
  *  the Free Software Foundation; either version 3 of the License, or
@@ -36,96 +37,28 @@
 
 #include "tone.h"
 
-/**
- * @file tonelist.h
- * @brief Manages the different kind of tones according to the country
- */
-class ToneList
+class TelephoneTone
 {
     public:
-        /**
-         * Constructor
-         */
-        ToneList();
-
-        /**
-         * Destructor
-         */
-        ~ToneList();
-
-
-        /** Countries */
-        enum COUNTRYID {
-            ZID_NORTH_AMERICA = 0,
-            ZID_FRANCE,
-            ZID_AUSTRALIA,
-            ZID_UNITED_KINGDOM,
-            ZID_SPAIN,
-            ZID_ITALY,
-            ZID_JAPAN
-        };
-
-        /**
-          * Get the string definition of a tone
-          * return the default country or default tone if id are invalid
-          * @param countryId	The country Id, see ToneList constructor for the list
-          * @param toneId  The toneId
-          * @return std::string A string definition of the tone
-          */
-        std::string getDefinition (COUNTRYID countryId, Tone::TONEID toneId);
-
-        /**
-         * Get the country id associate to a country name
-         * return the default country id if not found
-         * The default tone/country are set inside the ToneList constructor
-         * @param countryName countryName, see the ToneList constructor list
-         * @return COUNTRYID	Country Id or default Id
-         */
-        COUNTRYID getCountryId (const std::string& countryName);
-
-        /** @return int The number of tones */
-        int getNbTone() {
-            return _nbTone;
-        }
-
-    private:
-
-        // Copy Constructor
-        ToneList (const ToneList& rh);
-
-        // Assignment Operator
-        ToneList& operator= (const ToneList& rh);
 
-        void initToneDefinition();
-        std::string _toneZone[TONE_NBCOUNTRY][TONE_NBTONE];
-        int _nbTone;
-        int _nbCountry;
-        COUNTRYID _defaultCountryId;
-};
+		/** Countries */
+		enum COUNTRYID {
+			ZID_NORTH_AMERICA = 0,
+			ZID_FRANCE,
+			ZID_AUSTRALIA,
+			ZID_UNITED_KINGDOM,
+			ZID_SPAIN,
+			ZID_ITALY,
+			ZID_JAPAN,
+			ZID_COUNTRIES,
+		};
 
-/**
- * @author Yan Morin <yan.morin@savoirfairelinux.com>
- */
-class TelephoneTone
-{
-    public:
-        /** Initialize the toneList and set the current tone to null */
         TelephoneTone (const std::string& countryName, unsigned int sampleRate);
         ~TelephoneTone();
 
-
-        /** send TONE::ZT_TONE_NULL to stop the playing */
         void setCurrentTone (Tone::TONEID toneId);
-
-        /**
-          * @return the currentTone after setting it with setCurrentTone
-          *         0 if the current tone is null
-          */
         Tone* getCurrentTone();
 
-        /** @return true if you should play the tone (CurrentTone is not NULL) */
-        bool shouldPlay();
-
     private:
         // Copy Constructor
         TelephoneTone (const TelephoneTone& rh);
@@ -133,9 +66,10 @@ class TelephoneTone
         // Assignment Operator
         TelephoneTone& operator= (const TelephoneTone& rh);
 
-        Tone* _tone[TONE_NBTONE];
+		static COUNTRYID getCountryId (const std::string& countryName);
+
+        Tone* _tone[Tone::TONE_NULL];
         Tone::TONEID _currentTone;
-        ToneList _toneList;
 };
 
 #endif
diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp
index cf1fd4b41f047847ab147e2ad29a8d5a4259f77b..1724cba6b26af62fd42764aab36fbe67a3789afb 100644
--- a/daemon/src/managerimpl.cpp
+++ b/daemon/src/managerimpl.cpp
@@ -211,7 +211,8 @@ bool ManagerImpl::outgoingCall (const std::string& account_id,
 
     std::string to_cleaned(NumberCleaner::clean(to, prefix));
 
-    Call::CallConfiguration callConfig = checkCallConfiguration (call_id, to_cleaned);
+    Call::CallConfiguration callConfig = (to_cleaned.find (SIP_SCHEME) == 0 or to_cleaned.find (SIPS_SCHEME) == 0) ? Call::IPtoIP : Call::Classic;
+
     associateConfigToCall(call_id, callConfig);
 
     // in any cases we have to detach from current communication
@@ -2905,11 +2906,6 @@ void ManagerImpl::setHookSettings (const std::map<std::string, std::string>& set
     // saveConfig();
 }
 
-Call::CallConfiguration ManagerImpl::checkCallConfiguration (const std::string& id, const std::string &to)
-{
-    return (to.find (SIP_SCHEME) == 0 or to.find (SIPS_SCHEME) == 0) ? Call::IPtoIP : Call::Classic;
-}
-
 bool ManagerImpl::associateConfigToCall (const std::string& callID,
         Call::CallConfiguration config)
 {
diff --git a/daemon/src/managerimpl.h b/daemon/src/managerimpl.h
index 7917303b53d75f3cc9c7b2ff3f1dab1ce627dafe..616def92beddd00191c4882e52dcf60b41bca0bb 100644
--- a/daemon/src/managerimpl.h
+++ b/daemon/src/managerimpl.h
@@ -1224,11 +1224,6 @@ class ManagerImpl
          */
         sfl::InstantMessaging *_imModule;
 
-        /**
-         * Check if the call is a classic call or a direct IP-to-IP call
-         */
-        Call::CallConfiguration  checkCallConfiguration (const std::string& id, const std::string& to);
-
         Conf::YamlEmitter *emitter;
 };