diff --git a/model/sync-ccnx-wrapper.cc b/model/sync-ccnx-wrapper.cc
index a4aea2e..0acde7f 100644
--- a/model/sync-ccnx-wrapper.cc
+++ b/model/sync-ccnx-wrapper.cc
@@ -53,12 +53,10 @@
 
 void CcnxWrapper::createKeyLocator()
 {
-  int res;
-
   m_keyLoactor = ccn_charbuf_create();
   ccn_charbuf_append_tt(m_keyLoactor, CCN_DTAG_KeyLocator, CCN_DTAG);
   ccn_charbuf_append_tt(m_keyLoactor, CCN_DTAG_Key, CCN_DTAG);
-  res = ccn_append_pubkey_blob(m_keyLoactor, ccn_keystore_public_key(m_keyStore));
+  int res = ccn_append_pubkey_blob(m_keyLoactor, ccn_keystore_public_key(m_keyStore));
   if (res >= 0)
     {
       ccn_charbuf_append_closer(m_keyLoactor); /* </Key> */
@@ -202,8 +200,9 @@
       size_t size;
       name += "/";
       ccn_name_comp_get(info->content_ccnb, info->content_comps, i, (const unsigned char **)&comp, &size);
-      name += comp;
+      name += comp; // this will also crash if name doesn't have \0 ending
     }
+  // this will crash when content doesn't have \0 ending
   f(name, (string)pcontent);
   return CCN_UPCALL_RESULT_OK;
 }
diff --git a/model/sync-ccnx-wrapper.h b/model/sync-ccnx-wrapper.h
index c7f2336..00b5cd5 100644
--- a/model/sync-ccnx-wrapper.h
+++ b/model/sync-ccnx-wrapper.h
@@ -95,6 +95,7 @@
   publishData(std::string name, std::string dataBuffer, int freshness);
 
 private:
+  /// @cond include_hidden 
   void
   createKeyLocator ();
 
@@ -112,7 +113,7 @@
 
   void
   ccnLoop ();
-
+  /// @endcond
 private:
   ccn* m_handle;
   ccn_keystore *m_keyStore;
@@ -123,6 +124,8 @@
   bool m_running;
 };
 
+typedef boost::shared_ptr<CcnxWrapper> CcnxWrapperPtr;
+
 } // Sync
 
 #endif // SYNC_CCNX_WRAPPER_H
diff --git a/model/sync-diff-leaf.cc b/model/sync-diff-leaf.cc
index 0790ec7..d2b7d7f 100644
--- a/model/sync-diff-leaf.cc
+++ b/model/sync-diff-leaf.cc
@@ -24,6 +24,8 @@
 #include <boost/throw_exception.hpp>
 typedef boost::error_info<struct tag_errmsg, std::string> errmsg_info; 
 
+using namespace Sync::Error;
+
 namespace Sync {
 
 DiffLeaf::DiffLeaf (NameInfoConstPtr info, const SeqNo &seq)
diff --git a/model/sync-diff-leaf.h b/model/sync-diff-leaf.h
index a4b6538..1e3143a 100644
--- a/model/sync-diff-leaf.h
+++ b/model/sync-diff-leaf.h
@@ -81,7 +81,9 @@
 std::istream &
 operator >> (std::istream &is, Operation &op);
 
+namespace Error {
 struct SyncDiffLeafOperationParseError : virtual boost::exception, virtual std::exception { };
+} // Error
 
 } // Sync
 
diff --git a/model/sync-diff-state-container.h b/model/sync-diff-state-container.h
index 8983ceb..56cb95c 100644
--- a/model/sync-diff-state-container.h
+++ b/model/sync-diff-state-container.h
@@ -23,8 +23,6 @@
 #ifndef SYNC_DIFF_STATE_CONTAINER_H
 #define SYNC_DIFF_STATE_CONTAINER_H
 
-namespace Sync {
-
 #include "sync-diff-state.h"
 
 #include <boost/multi_index_container.hpp>
@@ -39,6 +37,8 @@
 
 namespace mi = boost::multi_index;
 
+namespace Sync {
+
 // struct DigestHash : public std::unary_function<Digest, std::size_t>
 // {
 //   std::size_t
@@ -48,13 +48,15 @@
 //   }
 // };
 
+/// @cond include_hidden 
 struct sequenced { };
- 
+/// @endcond
+
 /**
  * \ingroup sync
  * @brief Container for differential states
  */
-struct LeafContainer : public mi::multi_index_container<
+struct DiffStateContainer : public mi::multi_index_container<
     DiffStatePtr,
     // mi::indexed_by<
     //   // For fast access to elements using DiffState hashes
@@ -66,7 +68,7 @@
 
   // sequenced index to access older/newer element (like in list)
       mi::indexed_by<
-        mi::sequenced<mi::tag<seqenced> >
+        mi::sequenced<mi::tag<sequenced> >
     >
    >
 {
diff --git a/model/sync-digest.cc b/model/sync-digest.cc
index d8dda5c..9b1c536 100644
--- a/model/sync-digest.cc
+++ b/model/sync-digest.cc
@@ -88,7 +88,7 @@
     if ((unsigned)ch < 128)
       value = lookup_table [(unsigned)ch];
     if (value == -1)
-      BOOST_THROW_EXCEPTION (Sync::DigestCalculationError () << errmsg_info_int ((int)ch));
+      BOOST_THROW_EXCEPTION (Sync::Error::DigestCalculationError () << errmsg_info_int ((int)ch));
     
     return value;
   }
@@ -139,7 +139,7 @@
 
   int ok = EVP_DigestInit_ex (m_context, HASH_FUNCTION (), 0);
   if (!ok)
-    BOOST_THROW_EXCEPTION (DigestCalculationError ()
+    BOOST_THROW_EXCEPTION (Error::DigestCalculationError ()
                            << errmsg_info_str ("EVP_DigestInit_ex returned error")
                            << errmsg_info_int (ok));
 }
@@ -155,7 +155,7 @@
   int ok = EVP_DigestFinal_ex (m_context,
 			       m_buffer, &m_hashLength);
   if (!ok)
-    BOOST_THROW_EXCEPTION (DigestCalculationError ()
+    BOOST_THROW_EXCEPTION (Error::DigestCalculationError ()
                            << errmsg_info_str ("EVP_DigestFinal_ex returned error")
                            << errmsg_info_int (ok));
 }
@@ -167,7 +167,7 @@
     finalize ();
 
   if (sizeof (std::size_t) > m_hashLength)
-    BOOST_THROW_EXCEPTION (DigestCalculationError ()
+    BOOST_THROW_EXCEPTION (Error::DigestCalculationError ()
                            << errmsg_info_str ("Hash length is less than size_t")
                            << errmsg_info_int (m_hashLength));
   
@@ -180,15 +180,15 @@
 Digest::operator == (const Digest &digest) const
 {
   if (m_buffer == 0)
-    BOOST_THROW_EXCEPTION (DigestCalculationError ()
+    BOOST_THROW_EXCEPTION (Error::DigestCalculationError ()
                            << errmsg_info_str ("Digest1 is empty"));
 
   if (digest.m_buffer == 0)
-    BOOST_THROW_EXCEPTION (DigestCalculationError ()
+    BOOST_THROW_EXCEPTION (Error::DigestCalculationError ()
                            << errmsg_info_str ("Digest2 is empty"));
 
   if (m_hashLength != digest.m_hashLength)
-    BOOST_THROW_EXCEPTION (DigestCalculationError ()
+    BOOST_THROW_EXCEPTION (Error::DigestCalculationError ()
                            << errmsg_info_str ("Digest lengths are not the same")
                            << errmsg_info_int (m_hashLength)
                            << errmsg_info_int (digest.m_hashLength));
@@ -204,12 +204,12 @@
   
   // cannot update Digest when it has been finalized
   if (m_buffer != 0)
-    BOOST_THROW_EXCEPTION (DigestCalculationError ()
+    BOOST_THROW_EXCEPTION (Error::DigestCalculationError ()
                            << errmsg_info_str ("Digest has been already finalized"));
 
   bool ok = EVP_DigestUpdate (m_context, buffer, size);
   if (!ok)
-    BOOST_THROW_EXCEPTION (DigestCalculationError ()
+    BOOST_THROW_EXCEPTION (Error::DigestCalculationError ()
                            << errmsg_info_str ("EVP_DigestUpdate returned error")
                            << errmsg_info_int (ok));
 }
@@ -219,7 +219,7 @@
 Digest::operator << (const Digest &src)
 {
   if (src.m_buffer == 0) 
-    BOOST_THROW_EXCEPTION (DigestCalculationError ()
+    BOOST_THROW_EXCEPTION (Error::DigestCalculationError ()
                            << errmsg_info_str ("Digest has not been yet finalized"));
 
   update (src.m_buffer, src.m_hashLength);
@@ -248,7 +248,7 @@
   is >> str; // read string first
 
   if (str.size () == 0)
-    BOOST_THROW_EXCEPTION (DigestCalculationError ()
+    BOOST_THROW_EXCEPTION (Error::DigestCalculationError ()
                            << errmsg_info_str ("Input is empty"));
   
   // uint8_t padding = (3 - str.size () % 3) % 3;
@@ -256,7 +256,7 @@
 
   // only empty digest object can be used for reading
   if (digest.m_buffer != 0)
-    BOOST_THROW_EXCEPTION (DigestCalculationError ()
+    BOOST_THROW_EXCEPTION (Error::DigestCalculationError ()
                            << errmsg_info_str ("Digest has been already finalized"));
 
   digest.m_buffer = new uint8_t [EVP_MAX_MD_SIZE];
diff --git a/model/sync-digest.h b/model/sync-digest.h
index 04e6d13..528180d 100644
--- a/model/sync-digest.h
+++ b/model/sync-digest.h
@@ -130,7 +130,9 @@
   uint32_t m_hashLength;
 };
 
+namespace Error {
 struct DigestCalculationError : virtual boost::exception, virtual std::exception { };
+}
 
 typedef boost::shared_ptr<Digest> DigestPtr;
 typedef boost::shared_ptr<const Digest> DigestConstPtr;
diff --git a/model/sync-logic.cc b/model/sync-logic.cc
index a565003..f3c6aa2 100644
--- a/model/sync-logic.cc
+++ b/model/sync-logic.cc
@@ -28,33 +28,36 @@
 namespace Sync
 {
 
-SyncLogic::SyncLogic(string syncPrefix,
-			       function<void (string, uint32_t, uint32_t)> fetch,
-			       shared_ptr<CcnxWrapper> ccnxHandle)
+SyncLogic::SyncLogic (const string &syncPrefix,
+                      SyncCallback fetch,
+                      CcnxWrapperPtr ccnxHandle)
+  : m_syncPrefix (syncPrefix)
+  , m_fetch (fetch)
+  , m_ccnxHandle (ccnxHandle)
 {
-  m_syncPrefix = syncPrefix;
-  m_fetch = fetch;
-  m_ccnxHandle = ccnxHandle;
 }
 
-SyncLogic::~SyncLogic()
+SyncLogic::~SyncLogic ()
 {
 
 }
 
-void SyncLogic::processSyncData(string name, string dataBuffer)
+void
+SyncLogic::processSyncData (const string &name, const string &dataBuffer)
 {
 
 }
 
-void SyncLogic::addLocalNames(string prefix, uint32_t session, uint32_t seq)
+void
+SyncLogic::addLocalNames (const string &prefix, uint32_t session, uint32_t seq)
 {
   NameInfoConstPtr info = StdNameInfo::FindOrCreate(prefix);
   SeqNo seqN(session, seq);
   m_state.update(info, seqN);
 }
 
-void SyncLogic::respondSyncInterest(string interest)
+void
+SyncLogic::respondSyncInterest (const string &interest)
 {
   string hash = interest.substr(interest.find_last_of("/") + 1);
 
@@ -64,7 +67,8 @@
 
 }
 
-void SyncLogic::sendSyncInterest()
+void
+SyncLogic::sendSyncInterest ()
 {
   function<void (string, string)> f = bind(&SyncLogic::processSyncData, this, _1, _2);
   stringstream os;
@@ -74,7 +78,7 @@
   os << digest;
   string name;
   os >> name;
-  m_ccnxHandle->sendInterest(name, f);
+  m_ccnxHandle->sendInterest (name, f);
 }
 
-}
\ No newline at end of file
+}
diff --git a/model/sync-logic.h b/model/sync-logic.h
index 98adf17..62bf485 100644
--- a/model/sync-logic.h
+++ b/model/sync-logic.h
@@ -17,7 +17,7 @@
  *
  * Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
  *         卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
- *	   Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ *         Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
 #ifndef SYNC_LOGIC_H
@@ -30,6 +30,8 @@
 #include "sync-full-state.h"
 #include "sync-std-name-info.h"
 
+#include "sync-diff-state-container.h"
+
 namespace Sync {
 
 /**
@@ -40,42 +42,46 @@
 class SyncLogic
 {
 public:
-	/**
-	 * @brief constructor for this class;
-	 * @param syncPrefix the name prefix to use for the Sync Interest
-	 * @param fetch the fetch function, which will be called to actually fetch
-	 * the app data when new remote names are learned
-	 */
-	SyncLogic(std::string syncPrefix, boost::function<void (std::string,
-	uint32_t, uint32_t)> fetch, boost::shared_ptr<CcnxWrapper> ccnxHandle);
+  typedef boost::function<void (const std::string &,uint32_t, uint32_t)> SyncCallback;
+  
+  /**
+   * @brief constructor for this class;
+   * @param syncPrefix the name prefix to use for the Sync Interest
+   * @param fetch the fetch function, which will be called to actually fetch
+   * the app data when new remote names are learned
+   */
+  SyncLogic (const std::string &syncPrefix, SyncCallback fetch, CcnxWrapperPtr ccnxHandle);
 
-	~SyncLogic();
-	/**
-	 * a wrapper for the same func in SyncApp
-	 */
-	void addLocalNames(std::string prefix, uint32_t session, uint32_t seq);
+  ~SyncLogic ();
+  
+  /**
+   * a wrapper for the same func in SyncApp
+   */
+  void addLocalNames (const std::string &prefix, uint32_t session, uint32_t seq);
 
-	/**
-	 * @brief respond to the Sync Interest; a lot of logic needs to go in here
-	 * @param interest the Sync Interest in string format
-	 */
-	void respondSyncInterest(std::string interest);
+  /**
+   * @brief respond to the Sync Interest; a lot of logic needs to go in here
+   * @param interest the Sync Interest in string format
+   */
+  void respondSyncInterest (const std::string &interest);
 
-	/**
-	 * @brief process the fetched sync data
-	 * @param dataBuffer the sync data
-	 */
-	void processSyncData(std::string name, std::string dataBuffer);
+  /**
+   * @brief process the fetched sync data
+   * @param dataBuffer the sync data
+   */
+  void processSyncData (const std::string &name, const std::string &dataBuffer);
 
 private:
-	void sendSyncInterest();
+  void sendSyncInterest ();
 
 private:
-	boost::shared_ptr<CcnxWrapper> m_ccnxHandle;
-	FullState m_state;
-	boost::function<void (std::string, uint32_t, uint32_t)> m_fetch;
-	SyncInterestTable m_syncInterestTable;
-	std::string m_syncPrefix;
+  FullState m_state;
+  DiffStateContainer m_log;  
+  SyncInterestTable m_syncInterestTable;
+
+  std::string m_syncPrefix;
+  SyncCallback m_fetch;
+  CcnxWrapperPtr m_ccnxHandle;
 };
 
 
diff --git a/model/sync-state-leaf-container.h b/model/sync-state-leaf-container.h
index 2c7e8b9..98adb1b 100644
--- a/model/sync-state-leaf-container.h
+++ b/model/sync-state-leaf-container.h
@@ -48,8 +48,10 @@
   }
 };
 
+/// @cond include_hidden 
 struct hashed { };
 struct ordered { };
+/// @endcond
 
 /**
  * \ingroup sync
diff --git a/model/sync-state-manager.cc b/model/sync-state-manager.cc
deleted file mode 100644
index 2680859..0000000
--- a/model/sync-state-manager.cc
+++ /dev/null
@@ -1,21 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2012 University of California, Los Angeles
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
- *         卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
- *	   Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
diff --git a/model/sync-state-manager.h b/model/sync-state-manager.h
deleted file mode 100644
index cbd0b49..0000000
--- a/model/sync-state-manager.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2012 University of California, Los Angeles
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
- *         卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
- *	   Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef SYNC_STATE_MANAGER_H
-#define SYNC_STATE_MANAGER_H
-
-#include "sync-diff-state-container.h"
-
-namespace Sync {
-
-class StateManager
-{
-public:
-private:
-  FullState m_state;
-  FullState m_localState;
-  DiffStateContainer m_log;  
-};
-
-
-} // Sync
-
-#endif // SYNC_STATE_MANAGER_H
diff --git a/model/sync-state.cc b/model/sync-state.cc
index 5e09655..4befe62 100644
--- a/model/sync-state.cc
+++ b/model/sync-state.cc
@@ -38,6 +38,8 @@
 
 typedef error_info<struct tag_errmsg, string> info_str; 
 
+using namespace Sync::Error;
+
 namespace Sync {
 
 #ifdef _DEBUG
diff --git a/model/sync-state.h b/model/sync-state.h
index 26ea5f4..7c0b98e 100644
--- a/model/sync-state.h
+++ b/model/sync-state.h
@@ -88,10 +88,12 @@
 std::istream &
 operator >> (std::istream &in, State &state);
 
+namespace Error {
 /**
  * @brief Will be thrown when XML cannot be properly decoded to State
  */
 struct SyncXmlDecodingFailure : virtual boost::exception, virtual std::exception { };
+}
 
 } // Sync
 
