diff --git a/sflphone-common/src/config/yamlnode.cpp b/sflphone-common/src/config/yamlnode.cpp
index 1eece93f91f55a42861eb31925b7f31d9867dac9..508adfce63db5a6664c677ecdbb17368ce3a505d 100644
--- a/sflphone-common/src/config/yamlnode.cpp
+++ b/sflphone-common/src/config/yamlnode.cpp
@@ -154,10 +154,12 @@ void MappingNode::getValue (std::string key, std::string *v)
 
 void MappingNode::deleteChildNodes()
 {
-    Mapping::iterator it = map.begin();
+    Mapping::iterator it;
 
-    while (it != map.end()) {
+    for (it = map.begin(); it != map.end(); ++it) {
         YamlNode *yamlNode = static_cast<YamlNode *> (it->second);
+        if (!yamlNode)
+            continue;
 
         switch (yamlNode->getType()) {
             case DOCUMENT:
@@ -185,8 +187,6 @@ void MappingNode::deleteChildNodes()
             default:
                 break;
         }
-
-        it++;
     }
 }
 
@@ -199,9 +199,8 @@ void SequenceNode::addNode (YamlNode *node)
 
 void SequenceNode::deleteChildNodes()
 {
-    Sequence::iterator it = seq.begin();
-
-    while (it != seq.end()) {
+    Sequence::iterator it;
+    for (it = seq.begin(); it != seq.end(); ++it) {
         YamlNode *yamlNode = static_cast<YamlNode *> (*it);
 
         switch (yamlNode->getType()) {
@@ -211,27 +210,22 @@ void SequenceNode::deleteChildNodes()
                 SequenceNode *sequence = static_cast<SequenceNode *> (yamlNode);
                 sequence->deleteChildNodes();
                 delete sequence;
-                sequence = NULL;
             }
             break;
             case MAPPING: {
                 MappingNode *mapping = static_cast<MappingNode *> (yamlNode);
                 mapping->deleteChildNodes();
                 delete mapping;
-                mapping = NULL;
             }
             break;
             case SCALAR: {
                 ScalarNode *scalar = static_cast<ScalarNode *> (yamlNode);
                 delete scalar;
-                scalar = NULL;
             }
             break;
             default:
                 break;
         }
-
-        it++;
     }
 }
 
diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp
index bbf92c49ce113de2dcb92b5573b5066fac03c32c..b4e7efa275f28053a7451cbc7d21d57696f90b8a 100644
--- a/sflphone-common/src/config/yamlparser.cpp
+++ b/sflphone-common/src/config/yamlparser.cpp
@@ -45,26 +45,13 @@ YamlParser::YamlParser (const char *file) : filename (file)
     , doc (NULL)
     , eventIndex (0)
     , accountSequence (NULL)
-    , preferenceSequence (NULL)
-    , addressbookSequence (NULL)
-    , audioSequence (NULL)
-    , hooksSequence (NULL)
-    , voiplinkSequence (NULL)
-    , shortcutSequence (NULL)
+    , preferenceNode (NULL)
+    , addressbookNode (NULL)
+    , audioNode (NULL)
+    , hooksNode (NULL)
+    , voiplinkNode (NULL)
+    , shortcutNode (NULL)
 {
-    memset (buffer, 0, PARSER_BUFFERSIZE);
-
-    open();
-}
-
-YamlParser::~YamlParser()
-{
-    close();
-}
-
-void YamlParser::open() throw(YamlParserException)
-{
-
     fd = fopen (filename.c_str(), "rb");
 
     if (!fd)
@@ -76,7 +63,7 @@ void YamlParser::open() throw(YamlParserException)
     yaml_parser_set_input_file (&parser, fd);
 }
 
-void YamlParser::close() throw(YamlParserException)
+YamlParser::~YamlParser()
 {
     if (!fd)
         throw YamlParserException ("File descriptor not valid");
@@ -486,46 +473,17 @@ void YamlParser::constructNativeData() throw(YamlParserException)
 }
 
 
-void YamlParser::mainNativeDataMapping (MappingNode *map) throw(YamlParserException)
+void YamlParser::mainNativeDataMapping (MappingNode *map)
 {
-
-	try {
-		Mapping::iterator iter = map->getMapping()->begin();
-
-		std::string accounts ("accounts");
-		std::string addressbook ("addressbook");
-		std::string audio ("audio");
-		std::string hooks ("hooks");
-		std::string preferences ("preferences");
-		std::string voiplink ("voipPreferences");
-		std::string shortcuts ("shortcuts");
-
-		while (iter != map->getMapping()->end()) {
-
-			if (accounts.compare (iter->first) == 0) {
-				accountSequence = (SequenceNode *) (iter->second);
-			} else if (addressbook.compare (iter->first) == 0) {
-				addressbookSequence = (SequenceNode *) (iter->second);
-			} else if (audio.compare (iter->first) == 0) {
-				audioSequence = (SequenceNode *) (iter->second);
-			} else if (hooks.compare (iter->first) == 0) {
-				hooksSequence = (SequenceNode *) (iter->second);
-			} else if (preferences.compare (iter->first) == 0) {
-				preferenceSequence = (SequenceNode *) (iter->second);
-			} else if (voiplink.compare (iter->first) == 0) {
-				voiplinkSequence = (SequenceNode *) (iter->second);
-			} else if (shortcuts.compare (iter->first) == 0) {
-				shortcutSequence = (SequenceNode *) (iter->second);
-			} else {
-				throw YamlParserException ("Unknown map key in configuration");
-			}
-
-			iter++;
-		}
-	}
-	catch(YamlParserException &e) {
-		throw;
-	}
+	Mapping *mapping = map->getMapping();
+
+	accountSequence	= (SequenceNode*)(*mapping)["accounts"];
+	addressbookNode = (MappingNode*)(*mapping)["addressbook"];
+	audioNode       = (MappingNode*)(*mapping)["audio"];
+	hooksNode       = (MappingNode*)(*mapping)["hooks"];
+	preferenceNode  = (MappingNode*)(*mapping)["preferences"];
+	voiplinkNode    = (MappingNode*)(*mapping)["voipPreferences"];
+	shortcutNode    = (MappingNode*)(*mapping)["shortcuts"];
 }
 
 }
diff --git a/sflphone-common/src/config/yamlparser.h b/sflphone-common/src/config/yamlparser.h
index 2061d7e99f3f4fd4e91c392161c0e8797ee9d7dc..b4ebf0f9014d4d6fa9105e0ab41d3673e2ef841c 100644
--- a/sflphone-common/src/config/yamlparser.h
+++ b/sflphone-common/src/config/yamlparser.h
@@ -69,10 +69,6 @@ class YamlParser
 
         ~YamlParser();
 
-        void open() throw(YamlParserException);
-
-        void close() throw(YamlParserException);
-
         void serializeEvents() throw(YamlParserException);
 
         YamlDocument *composeEvents() throw(YamlParserException);
@@ -83,28 +79,28 @@ class YamlParser
             return accountSequence;
         };
 
-        SequenceNode *getPreferenceSequence (void) {
-            return preferenceSequence;
+        MappingNode *getPreferenceNode (void) {
+            return preferenceNode;
         }
 
-        SequenceNode *getAddressbookSequence (void) {
-            return addressbookSequence;
+        MappingNode *getAddressbookNode (void) {
+            return addressbookNode;
         }
 
-        SequenceNode *getAudioSequence (void) {
-            return audioSequence;
+        MappingNode *getAudioNode (void) {
+            return audioNode;
         }
 
-        SequenceNode *getHookSequence (void) {
-            return hooksSequence;
+        MappingNode *getHookNode (void) {
+            return hooksNode;
         }
 
-        SequenceNode *getVoipPreferenceSequence (void) {
-            return voiplinkSequence;
+        MappingNode *getVoipPreferenceNode (void) {
+            return voiplinkNode;
         }
 
-        SequenceNode *getShortcutSequence (void) {
-            return shortcutSequence;
+        MappingNode *getShortcutNode (void) {
+            return shortcutNode;
         }
 
     private:
@@ -124,7 +120,7 @@ class YamlParser
 
         void processMapping (YamlNode *topNode) throw(YamlParserException);
 
-        void mainNativeDataMapping (MappingNode *map) throw(YamlParserException);
+        void mainNativeDataMapping (MappingNode *map);
 
         /**
          * Configuration file name
@@ -146,11 +142,6 @@ class YamlParser
          */
         YamlEventVector events;
 
-        /**
-         *
-         */
-        unsigned char buffer[PARSER_BUFFERSIZE];
-
         /**
          * Number of event actually parsed
          */
@@ -162,18 +153,17 @@ class YamlParser
 
         SequenceNode *accountSequence;
 
-        SequenceNode *preferenceSequence;
-
-        SequenceNode *addressbookSequence;
+        MappingNode *preferenceNode;
 
-        SequenceNode *audioSequence;
+        MappingNode *addressbookNode;
 
-        SequenceNode *hooksSequence;
+        MappingNode *audioNode;
 
-        SequenceNode *voiplinkSequence;
+        MappingNode *hooksNode;
 
-        SequenceNode *shortcutSequence;
+        MappingNode *voiplinkNode;
 
+        MappingNode *shortcutNode;
 };
 
 }
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index fca0282250e4c46d6970f70b10a005d0bc5a07c9..ff03b7ff5f2efba0aab89886833a0a37bd4635b1 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -4249,7 +4249,6 @@ void ManagerImpl::loadIptoipProfile()
 
 short ManagerImpl::loadAccountMap()
 {
-
     _debug ("Manager: Load account map");
 
     // Conf::YamlParser *parser;
@@ -4261,23 +4260,18 @@ short ManagerImpl::loadAccountMap()
     }
 
     // build preferences
-    preferences.unserialize ( (Conf::MappingNode *) (parser->getPreferenceSequence()));
-    voipPreferences.unserialize ( (Conf::MappingNode *) (parser->getVoipPreferenceSequence()));
-    addressbookPreference.unserialize ( (Conf::MappingNode *) (parser->getAddressbookSequence()));
-    hookPreference.unserialize ( (Conf::MappingNode *) (parser->getHookSequence()));
-    audioPreference.unserialize ( (Conf::MappingNode *) (parser->getAudioSequence()));
-    shortcutPreferences.unserialize ( (Conf::MappingNode *) (parser->getShortcutSequence()));
+    preferences.unserialize (parser->getPreferenceNode());
+    voipPreferences.unserialize (parser->getVoipPreferenceNode());
+    addressbookPreference.unserialize (parser->getAddressbookNode());
+    hookPreference.unserialize (parser->getHookNode());
+    audioPreference.unserialize (parser->getAudioNode());
+    shortcutPreferences.unserialize (parser->getShortcutNode());
 
     Conf::SequenceNode *seq = parser->getAccountSequence();
 
     // Each element in sequence is a new account to create
-    Conf::Sequence::iterator iterSeq = seq->getSequence()->begin();
-
-    std::string accTypeKey ("type");
-    std::string accID ("id");
-    std::string alias ("alias");
-
-    while (iterSeq != seq->getSequence()->end()) {
+    Conf::Sequence::iterator iterSeq;
+    for (iterSeq = seq->getSequence()->begin(); iterSeq != seq->getSequence()->end(); ++iterSeq) {
 
         // Pointer to the account and account preferences map
         Account *tmpAccount = NULL;
@@ -4285,19 +4279,18 @@ short ManagerImpl::loadAccountMap()
 
         // Search for account types (IAX/IP2IP)
         std::string accountType = "SIP"; // Assume type is SIP if not specified
-        map->getValue (accTypeKey, &accountType);
+        map->getValue ("type", &accountType);
 
         // search for account id
         std::string accountid;
-        map->getValue (accID, &accountid);
+        map->getValue ("id", &accountid);
 
         // search for alias (to get rid of the "ghost" account)
         std::string accountAlias;
-        map->getValue (alias, &accountAlias);
+        map->getValue ("alias", &accountAlias);
 
         // do not insert in account map if id or alias is empty
         if (accountid.empty() || accountAlias.empty()) {
-            iterSeq++;
             continue;
         }
 
@@ -4323,8 +4316,6 @@ short ManagerImpl::loadAccountMap()
             tmpAccount->setVoIPLink();
             nbAccount++;
         }
-
-        iterSeq++;
     }
 
     try {
diff --git a/sflphone-common/src/preferences.cpp b/sflphone-common/src/preferences.cpp
index afcda7ab7a67f267243b9db303e9177aacdb4251..35bb3a8ae57abe3bc5c23244dcfb3bdda7826483 100644
--- a/sflphone-common/src/preferences.cpp
+++ b/sflphone-common/src/preferences.cpp
@@ -31,6 +31,7 @@
 #include "preferences.h"
 #include <sstream>
 #include "global.h"
+#include <cassert>
         
 const char * const Preferences::DFT_ZONE = "North America";
 
@@ -409,13 +410,7 @@ void AudioPreference::serialize (Conf::YamlEmitter *emitter)
 
 void AudioPreference::unserialize (Conf::MappingNode *map)
 {
-    if (map == NULL) {
-        _error ("AudioPreference: Error: Preference map is NULL");
-        return;
-    }
-
-    Conf::MappingNode *alsamap = NULL;
-    Conf::MappingNode *pulsemap = NULL;
+	assert(map);
 
     map->getValue (recordpathKey, &_recordpath);
     map->getValue (alwaysRecordingKey, &_alwaysRecording);
@@ -424,7 +419,7 @@ void AudioPreference::unserialize (Conf::MappingNode *map)
     map->getValue (noiseReduceKey, &_noisereduce);
     map->getValue(echoCancelKey, &_echocancel);
 
-    alsamap = (Conf::MappingNode *) (map->getValue ("alsa"));
+    Conf::MappingNode *alsamap = (Conf::MappingNode *) (map->getValue ("alsa"));
     if (alsamap) {
     	alsamap->getValue (cardinKey, &_cardin);
 		alsamap->getValue (cardoutKey, &_cardout);
@@ -434,8 +429,7 @@ void AudioPreference::unserialize (Conf::MappingNode *map)
 		alsamap->getValue (pluginKey, &_plugin);
     }
 
-
-    pulsemap = (Conf::MappingNode *) (map->getValue ("pulse"));
+    Conf::MappingNode *pulsemap = (Conf::MappingNode *) (map->getValue ("pulse"));
     if (pulsemap) {
     	pulsemap->getValue (devicePlaybackKey, &_devicePlayback);
     	pulsemap->getValue (deviceRecordKey, &_deviceRecord);