diff --git a/ice_cxx.py b/ice_cxx.py
deleted file mode 100644
index a876fb8..0000000
--- a/ice_cxx.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
-#!/usr/bin/env python
-# encoding: utf-8
-# Alexander Afanasyev, 2013
-
-from waflib.Task import Task
-from waflib.TaskGen import extension 
-from waflib import Logs
-from waflib import Node
-
-"""
-A simple tool to integrate zeroc ICE into your build system.
-
-    def configure(conf):
-        conf.load('compiler_cxx cxx ice_cxx')
-
-    def build(bld):
-        bld(
-                features = 'cxx cxxprogram'
-                source   = 'main.cpp file1.ice', 
-                include  = '.',
-                target   = 'executable') 
-
-"""
-
-class ice_cxx(Task):
-        run_str = '${SLICE2CPP} --header-ext ice.h --source-ext ice.cc --output-dir ${SRC[0].parent.get_bld().abspath()}  ${SRC[0].abspath()}'
-	color   = 'BLUE'
-	ext_out = ['.ice.h', '.ice.cc']
-
-@extension('.ice')
-def process_protoc(self, node):
-	cpp_node = node.change_ext('.ice.cc')
-	hpp_node = node.change_ext('.ice.h')
-	self.create_task('ice_cxx', node, [cpp_node, hpp_node])
-	self.source.append(cpp_node)
-
-	use = getattr(self, 'use', '')
-	if not 'ICE' in use:
-		self.use = self.to_list(use) + ['ICE']
-
-ICE_PATHS = ['/usr', '/usr/local', '/opt/local', '/sw']
-
-def options(opt):
-        opt.add_option('--ice',action='store',dest='ICE_PATH',help='''path to ZeroC installation''')
-        
-
-def configure(conf):
-        # conf.check_cfg(package="", uselib_store="PROTOBUF", args=['--cflags', '--libs'])
-        if conf.options.ICE_PATH:
-                conf.find_program('slice2cpp', var='SLICE2CPP', path_list="%s/bin" % conf.options.ICE_PATH, mandatory=True)
-        else:
-                conf.find_program('slice2cpp', var='SLICE2CPP', path_list=["%s/bin" % path for path in ICE_PATHS], mandatory=True)
-        
-        ICE_PATH = conf.env.SLICE2CPP[:-14]
-        
-	conf.env['LIB_ICE'] = ["Ice", "ZeroCIce", "IceUtil"]
-	conf.env['INCLUDES_ICE']= '%s/include' % ICE_PATH
-	conf.env['LIBPATH_ICE'] = '%s/lib' % ICE_PATH
-
diff --git a/src/sync-log.cc b/src/sync-log.cc
index 99b652c..3e49c69 100644
--- a/src/sync-log.cc
+++ b/src/sync-log.cc
@@ -149,13 +149,13 @@
   sqlite3_finalize (stmt);
 }
 
-void
+SyncStateMsgPtr
 SyncLog::FindStateDifferences (const std::string &oldHash, const std::string &newHash)
 {
-  FindStateDifferences (*Hash::FromString (oldHash), *Hash::FromString (newHash));
+  return FindStateDifferences (*Hash::FromString (oldHash), *Hash::FromString (newHash));
 }
 
-void
+SyncStateMsgPtr
 SyncLog::FindStateDifferences (const Hash &oldHash, const Hash &newHash)
 {
   sqlite3_stmt *stmt;
@@ -208,12 +208,29 @@
   res += sqlite3_bind_blob  (stmt, 1, oldHash.GetHash (), oldHash.GetHashBytes (), SQLITE_STATIC);
   res += sqlite3_bind_blob  (stmt, 2, newHash.GetHash (), newHash.GetHashBytes (), SQLITE_STATIC);
 
+  SyncStateMsgPtr msg = make_shared<SyncStateMsg> ();
+  
   while (sqlite3_step (stmt) == SQLITE_ROW)
     {
-      std::cout << sqlite3_column_text (stmt, 0) <<
-        ": from "  << sqlite3_column_int64 (stmt, 1) <<
-        " to "     << sqlite3_column_int64 (stmt, 2) <<
-        std::endl;
+      SyncState *state = msg->add_state ();
+
+      state->set_name (reinterpret_cast<const char*> (sqlite3_column_text (stmt, 0)));
+
+      sqlite3_int64 newSeqNo = sqlite3_column_int64 (stmt, 2);
+      if (newSeqNo > 0)
+        {
+          state->set_type (SyncState::UPDATE);
+          state->set_seq (newSeqNo);
+        }
+      else
+        state->set_type (SyncState::DELETE);
+
+      // std::cout << sqlite3_column_text (stmt, 0) <<
+      //   ": from "  << sqlite3_column_int64 (stmt, 1) <<
+      //   " to "     << sqlite3_column_int64 (stmt, 2) <<
+      //   std::endl;
     }
-  sqlite3_finalize (stmt);  
+  sqlite3_finalize (stmt);
+
+  return msg;
 }
diff --git a/src/sync-log.h b/src/sync-log.h
index a597888..5705e45 100644
--- a/src/sync-log.h
+++ b/src/sync-log.h
@@ -23,6 +23,9 @@
 #define SYNC_LOG_H
 
 #include "db-helper.h"
+#include <sync-state.pb.h>
+
+typedef boost::shared_ptr<SyncStateMsg> SyncStateMsgPtr;
 
 class SyncLog : public DbHelper
 {
@@ -58,10 +61,10 @@
   LookupSyncLog (const Hash &stateHash);
 
   // How difference is exposed will be determined later by the actual protocol
-  void
+  SyncStateMsgPtr
   FindStateDifferences (const std::string &oldHash, const std::string &newHash);
 
-  void
+  SyncStateMsgPtr
   FindStateDifferences (const Hash &oldHash, const Hash &newHash);  
 };
 
diff --git a/src/sync-state.proto b/src/sync-state.proto
new file mode 100644
index 0000000..9ef5e33
--- /dev/null
+++ b/src/sync-state.proto
@@ -0,0 +1,24 @@
+// message Name
+// {
+//   repeated bytes comp = 1;
+// }
+
+message SyncState
+{
+  // required Name name = 1;
+  required string name = 1;
+
+  enum ActionType
+  {
+    UPDATE = 0;
+    DELETE = 1;
+  }
+  required ActionType type = 2;
+
+  optional uint64 seq = 3;
+}
+
+message SyncStateMsg
+{
+  repeated SyncState state = 1;
+}
diff --git a/waf b/waf
index 69fb819..a6859ac 100755
--- a/waf
+++ b/waf
Binary files differ
diff --git a/wscript b/wscript
index b37b9f4..7ca0fbd 100644
--- a/wscript
+++ b/wscript
@@ -11,8 +11,7 @@
     opt.add_option('--test', action='store_true',default=False,dest='_test',help='''build unit tests''')
     opt.add_option('--yes',action='store_true',default=False) # for autoconf/automake/make compatibility
 
-    opt.load('compiler_cxx boost ccnx protoc')
-    opt.load('ice_cxx', tooldir=["."])
+    opt.load('compiler_cxx boost ccnx protoc ice_cxx')
 
 def configure(conf):
     conf.load("compiler_cxx")
@@ -110,6 +109,7 @@
                   'src/db-helper.cc',
                   'src/sync-log.cc',
                   'src/action-log.cc',
+                  'src/sync-state.proto',
                   ],
         use = "BOOST CCNX SSL SQLITE3 ICE common",
         includes = ['include', 'src'],
