diff --git a/src/action-log.hpp b/src/action-log.hpp
index 80f354c..99bcb0e 100644
--- a/src/action-log.hpp
+++ b/src/action-log.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2016, Regents of the University of California.
+ * Copyright (c) 2013-2017, Regents of the University of California.
  *
  * This file is part of ChronoShare, a decentralized file sharing application over NDN.
  *
@@ -18,34 +18,48 @@
  * See AUTHORS.md for complete list of ChronoShare authors and contributors.
  */
 
-#ifndef ACTION_LOG_H
-#define ACTION_LOG_H
+#ifndef CHRONOSHARE_SRC_ACTION_LOG_HPP
+#define CHRONOSHARE_SRC_ACTION_LOG_HPP
 
-#include "action-item.pb.hpp"
-#include "ccnx-pco.hpp"
-#include "ccnx-wrapper.hpp"
 #include "db-helper.hpp"
-#include "file-item.pb.hpp"
 #include "file-state.hpp"
 #include "sync-log.hpp"
+#include "core/chronoshare-common.hpp"
 
-#include <boost/tuple/tuple.hpp>
+#include "action-item.pb.h"
+#include "file-item.pb.h"
+
+#include <ndn-cxx/face.hpp>
+#include <ndn-cxx/security/key-chain.hpp>
+
+namespace ndn {
+namespace chronoshare {
 
 class ActionLog;
-typedef boost::shared_ptr<ActionLog> ActionLogPtr;
-typedef boost::shared_ptr<ActionItem> ActionItemPtr;
+typedef shared_ptr<ActionLog> ActionLogPtr;
+typedef shared_ptr<ActionItem> ActionItemPtr;
 
 class ActionLog : public DbHelper
 {
 public:
-  typedef boost::function<void(std::string /*filename*/, Ccnx::Name /*device_name*/, sqlite3_int64 /*seq_no*/,
-                               HashPtr /*hash*/, time_t /*m_time*/, int /*mode*/, int /*seg_num*/)>
+  class Error : public DbHelper::Error
+  {
+  public:
+    explicit Error(const std::string& what)
+      : DbHelper::Error(what)
+    {
+    }
+  };
+
+public:
+  typedef function<void(std::string /*filename*/, Name /*device_name*/, sqlite3_int64 /*seq_no*/,
+                        ConstBufferPtr /*hash*/, time_t /*m_time*/, int /*mode*/, int /*seg_num*/)>
     OnFileAddedOrChangedCallback;
 
   typedef boost::function<void(std::string /*filename*/)> OnFileRemovedCallback;
 
 public:
-  ActionLog(Ccnx::CcnxWrapperPtr ccnx, const boost::filesystem::path& path, SyncLogPtr syncLog,
+  ActionLog(Face& face, const boost::filesystem::path& path, SyncLogPtr syncLog,
             const std::string& sharedFolder, const std::string& appName,
             OnFileAddedOrChangedCallback onFileAddedOrChanged, OnFileRemovedCallback onFileRemoved);
 
@@ -57,14 +71,11 @@
   // Local operations     //
   //////////////////////////
   ActionItemPtr
-  AddLocalActionUpdate(const std::string& filename,
-                       const Hash& hash,
-                       time_t wtime,
-                       int mode,
+  AddLocalActionUpdate(const std::string& filename, const Buffer& hash, time_t wtime, int mode,
                        int seg_num);
 
   // void
-  // AddActionMove (const std::string &oldFile, const std::string &newFile);
+  // AddActionMove(const std::string &oldFile, const std::string &newFile);
 
   ActionItemPtr
   AddLocalActionDelete(const std::string& filename);
@@ -74,51 +85,52 @@
   //////////////////////////
 
   ActionItemPtr
-  AddRemoteAction(const Ccnx::Name& deviceName, sqlite3_int64 seqno, Ccnx::PcoPtr actionPco);
+  AddRemoteAction(const Name& deviceName, sqlite3_int64 seqno, shared_ptr<Data> actionData);
 
   /**
    * @brief Add remote action using just action's parsed content object
    *
-   * This function extracts device name and sequence number from the content object's and calls the overloaded method
+   * This function extracts device name and sequence number from the content object's and calls the
+   * overloaded method
    */
   ActionItemPtr
-  AddRemoteAction(Ccnx::PcoPtr actionPco);
+  AddRemoteAction(shared_ptr<Data> actionData);
 
   ///////////////////////////
   // General operations    //
   ///////////////////////////
 
-  Ccnx::PcoPtr
-  LookupActionPco(const Ccnx::Name& deviceName, sqlite3_int64 seqno);
+  shared_ptr<Data>
+  LookupActionData(const Name& deviceName, sqlite3_int64 seqno);
 
-  Ccnx::PcoPtr
-  LookupActionPco(const Ccnx::Name& actionName);
+  shared_ptr<Data>
+  LookupActionData(const Name& actionName);
 
   ActionItemPtr
-  LookupAction(const Ccnx::Name& deviceName, sqlite3_int64 seqno);
+  LookupAction(const Name& deviceName, sqlite3_int64 seqno);
 
   ActionItemPtr
-  LookupAction(const Ccnx::Name& actionName);
+  LookupAction(const Name& actionName);
 
   FileItemPtr
-  LookupAction(const std::string& filename, sqlite3_int64 version, const Hash& filehash);
+  LookupAction(const std::string& filename, sqlite3_int64 version, const Buffer& filehash);
 
   /**
-   * @brief Lookup up to [limit] actions starting [offset] in decreasing order (by timestamp) and calling visitor(device_name,seqno,action) for each action
+   * @brief Lookup up to [limit] actions starting [offset] in decreasing order(by timestamp) and
+   * calling visitor(device_name,seqno,action) for each action
    */
   bool
   LookupActionsInFolderRecursively(
-    const boost::function<void(const Ccnx::Name& name, sqlite3_int64 seq_no, const ActionItem&)>& visitor,
+    const function<void(const Name& name, sqlite3_int64 seq_no, const ActionItem&)>& visitor,
     const std::string& folder, int offset = 0, int limit = -1);
 
   bool
   LookupActionsForFile(
-    const boost::function<void(const Ccnx::Name& name, sqlite3_int64 seq_no, const ActionItem&)>& visitor,
+    const function<void(const Name& name, sqlite3_int64 seq_no, const ActionItem&)>& visitor,
     const std::string& file, int offset = 0, int limit = -1);
 
   void
-  LookupRecentFileActions(const boost::function<void(const std::string&, int, int)>& visitor,
-                          int limit = 5);
+  LookupRecentFileActions(const function<void(const std::string&, int, int)>& visitor, int limit = 5);
 
   //
   inline FileStatePtr
@@ -130,7 +142,7 @@
   LogSize();
 
 private:
-  boost::tuple<sqlite3_int64 /*version*/, Ccnx::CcnxCharbufPtr /*device name*/, sqlite3_int64 /*seq_no*/>
+  std::tuple<sqlite3_int64 /*version*/, BufferPtr /*device name*/, sqlite3_int64 /*seq_no*/>
   GetLatestActionForFile(const std::string& filename);
 
   static void
@@ -140,25 +152,22 @@
   SyncLogPtr m_syncLog;
   FileStatePtr m_fileState;
 
-  Ndnx::NdnxWrapperPtr m_ndnx;
+  // Face& m_face;
   std::string m_sharedFolderName;
   std::string m_appName;
 
   OnFileAddedOrChangedCallback m_onFileAddedOrChanged;
   OnFileRemovedCallback m_onFileRemoved;
+  KeyChain m_keyChain;
 };
 
-namespace Error {
-struct ActionLog : virtual boost::exception, virtual std::exception
-{
-};
-}
-
 inline FileStatePtr
 ActionLog::GetFileState()
 {
   return m_fileState;
 }
 
+} // namespace chronoshare
+} // namespace ndn
 
-#endif // ACTION_LOG_H
+#endif // CHRONOSHARE_SRC_ACTION_LOG_HPP
