diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h
index e2113f2cb234e7c97504355563786c7f48c1f161..cf49c886c05af2daa1542e0aa763dc660e133328 100644
--- a/sflphone-common/src/account.h
+++ b/sflphone-common/src/account.h
@@ -155,7 +155,7 @@ class Account : public Serializable{
          */
         virtual ~Account();
 
-	virtual void serialize(Engine *engine) = 0;
+	virtual void serialize(Conf::YamlEmitter *emitter) = 0;
 
 	virtual void unserialize(Conf::MappingNode *map) = 0;
 
diff --git a/sflphone-common/src/config/serializable.h b/sflphone-common/src/config/serializable.h
index 7b7cf657a4661592a19eec5e7e1df348c3b78c96..e9b88cc84c1059c1a917b0f86b971a6bcc401ab9 100755
--- a/sflphone-common/src/config/serializable.h
+++ b/sflphone-common/src/config/serializable.h
@@ -33,6 +33,7 @@
 
 
 #include "yamlparser.h"
+#include "yamlemitter.h"
 #include "yamlnode.h"
 
 class Engine;
@@ -42,7 +43,7 @@ class Serializable {
 
  public:
 
-  virtual void serialize(Engine *engine) = 0;
+  virtual void serialize(Conf::YamlEmitter *emitter) = 0;
 
   virtual void unserialize(Conf::MappingNode *map) = 0;
 
diff --git a/sflphone-common/src/config/yamlemitter.cpp b/sflphone-common/src/config/yamlemitter.cpp
index 3998e696708441ecc57fe3de79a1172f86c42205..7cd1eacba182d2c8d60746b1b01f301a03127f55 100755
--- a/sflphone-common/src/config/yamlemitter.cpp
+++ b/sflphone-common/src/config/yamlemitter.cpp
@@ -120,8 +120,30 @@ void YamlEmitter::writeAccount(MappingNode *map)
 
 }
 
+void YamlEmitter::writePreference(MappingNode *map)
+{
+  std::string preferencestr("preferences");
+
+  if(map->getType() == MAPPING)
+    throw YamlEmitterException("Node type is not a mapping while writing preferences");
+
+  int preferenceid = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE);
+  int preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE);
+
+  yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping);
+
+  Mapping *internalmap = map->getMapping();
+  Mapping::iterator iter = internalmap->begin();
+
+  while(iter != internalmap->end()) {
+    addMappingItem(preferencemapping, iter->first, iter->second);
+    iter++;
+  }
+
+}
+
 
-  void YamlEmitter::addMappingItem(int mappingid, Key key, YamlNode *node) 
+void YamlEmitter::addMappingItem(int mappingid, Key key, YamlNode *node) 
 {
 
   if(node->getType() == SCALAR) {
@@ -148,6 +170,8 @@ void YamlEmitter::writeAccount(MappingNode *map)
       iter++;
     }
   }
+  else
+    throw YamlEmitterException("Unknown node type while adding mapping node");
 }
 
 
diff --git a/sflphone-common/src/config/yamlemitter.h b/sflphone-common/src/config/yamlemitter.h
index 2bd0c24d0c8b14a51db3ed56eb8da494f0456d54..47bce14a5fb0b4cd04c68c51ec9166a7725e5d72 100755
--- a/sflphone-common/src/config/yamlemitter.h
+++ b/sflphone-common/src/config/yamlemitter.h
@@ -77,7 +77,7 @@ class YamlEmitter {
 
   void writeAccount(MappingNode *map);
 
-  void writePreference();
+  void writePreference(MappingNode *map);
 
   void writeAddressbook();
 
diff --git a/sflphone-common/src/iax/iaxaccount.cpp b/sflphone-common/src/iax/iaxaccount.cpp
index b94ca59623863b4ef4a9600e087754bd77d90d6d..bbf2bf02899c67b49f07f96680f7a772d3ccf986 100644
--- a/sflphone-common/src/iax/iaxaccount.cpp
+++ b/sflphone-common/src/iax/iaxaccount.cpp
@@ -47,7 +47,7 @@ IAXAccount::~IAXAccount()
     _link = NULL;
 }
 
-void IAXAccount::serialize(Engine *engine) 
+void IAXAccount::serialize(Conf::YamlEmitter *emitter) 
 {
   
 }
diff --git a/sflphone-common/src/iax/iaxaccount.h b/sflphone-common/src/iax/iaxaccount.h
index f6fb6414e30b42ec09eff029cd493f4cd52fab16..fc78a70de32deed7eceb6abafacb7ce645660fda 100644
--- a/sflphone-common/src/iax/iaxaccount.h
+++ b/sflphone-common/src/iax/iaxaccount.h
@@ -44,7 +44,7 @@ class IAXAccount : public Account
 
         ~IAXAccount();
 
-	virtual void serialize(Engine *engine);
+	virtual void serialize(Conf::YamlEmitter *emitter);
 
 	virtual void unserialize(Conf::MappingNode *map);
 
diff --git a/sflphone-common/src/preferences.cpp b/sflphone-common/src/preferences.cpp
index 30181d3c2b62d988a23e94db1b06ef5c06c5f736..f3de3357fdf2a2859e46d3f7a6c2a149bda09e9d 100644
--- a/sflphone-common/src/preferences.cpp
+++ b/sflphone-common/src/preferences.cpp
@@ -50,7 +50,7 @@ Preferences::Preferences() :  _accountOrder("")
 Preferences::~Preferences() {}
 
 
-void Preferences::serialize(Engine *engine) 
+void Preferences::serialize(Conf::YamlEmitter *emiter) 
 {
 
   Conf::MappingNode preferencemap(NULL);
@@ -86,6 +86,7 @@ void Preferences::serialize(Engine *engine)
   preferencemap.setKeyValue(zeroConfenableKey, &zeroConfenable);
   preferencemap.setKeyValue(md5HashKey, &md5Hash);
 
+  
 }
 
 void Preferences::unserialize(Conf::MappingNode *map)
@@ -118,4 +119,6 @@ void Preferences::unserialize(Conf::MappingNode *map)
   val = (Conf::ScalarNode *)(map->getValue(md5HashKey));
   if(val) { _md5Hash = (val->getValue().compare("true") == 0) ? true : false; val = NULL; }
 
+
+  
 }
diff --git a/sflphone-common/src/preferences.h b/sflphone-common/src/preferences.h
index 5ed97c082124a17219e8f9c107a1f4356b0121c1..0b8330ae36caf0e5d1436f398155fbdd2c5d9e2d 100755
--- a/sflphone-common/src/preferences.h
+++ b/sflphone-common/src/preferences.h
@@ -54,7 +54,7 @@ class Preferences : public Serializable {
 
   ~Preferences();
 
-  virtual void serialize(Engine *engine);
+  virtual void serialize(Conf::YamlEmitter *emitter);
 
   virtual void unserialize(Conf::MappingNode *map);
 
diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp
index e112421be22abccc6d900b01b2192a8dc5639461..699e21f2a677e1529a58db5249da1e696da00a15 100755
--- a/sflphone-common/src/sip/sipaccount.cpp
+++ b/sflphone-common/src/sip/sipaccount.cpp
@@ -40,7 +40,7 @@ Credentials::Credentials() : credentialCount(0) {}
 
 Credentials::~Credentials() {}
 
-void Credentials::serialize(Engine *engine)
+void Credentials::serialize(Conf::YamlEmitter *emitter)
 {
   
 }
@@ -132,7 +132,7 @@ SIPAccount::~SIPAccount()
     free (_tlsSetting);
 }
 
-void SIPAccount::serialize(Engine *engine) {
+void SIPAccount::serialize(Conf::YamlEmitter *emitter) {
 
 
   Conf::MappingNode accountmap(NULL);
diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h
index d4999329703f5eb1b1c4171eeb589b61f6b55560..b06c1e4bdd2b778fb76e743c30f38574a34cb320 100755
--- a/sflphone-common/src/sip/sipaccount.h
+++ b/sflphone-common/src/sip/sipaccount.h
@@ -134,7 +134,7 @@ class Credentials : public Serializable
 
   ~Credentials();
 
-  virtual void serialize(Engine *engine);
+  virtual void serialize(Conf::YamlEmitter *emitter);
 
   virtual void unserialize(Conf::MappingNode *map);
 
@@ -170,7 +170,7 @@ class SIPAccount : public Account
          */
         virtual ~SIPAccount();
 
-	virtual void serialize(Engine *engine);
+	virtual void serialize(Conf::YamlEmitter *emitter);
 
 	virtual void unserialize(Conf::MappingNode *map);