diff --git a/include/sync-logic.h b/include/sync-logic.h
index 34b2e79..ef63267 100644
--- a/include/sync-logic.h
+++ b/include/sync-logic.h
@@ -62,6 +62,7 @@
  * @brief A wrapper for SyncApp, which handles ccnx related things (process
  * interests and data)
  */
+
 class SyncLogic
 #ifdef NS3_MODULE
   : public ns3::Application
@@ -71,6 +72,7 @@
   //typedef boost::function< void ( const std::string &/*prefix*/, const SeqNo &/*newSeq*/, const SeqNo &/*oldSeq*/ ) > LogicUpdateCallback;
   typedef boost::function< void (const std::vector<MissingDataInfo> & ) > LogicUpdateCallback;
   typedef boost::function< void ( const std::string &/*prefix*/ ) > LogicRemoveCallback;
+  typedef boost::function< void (const std::string &)> LogicPerBranchCallback;
 
   /**
    * @brief Constructor
@@ -84,6 +86,9 @@
              LogicUpdateCallback onUpdate,
              LogicRemoveCallback onRemove);
 
+  SyncLogic (const std::string &syncPrefix,
+             LogicPerBranchCallback onUpdateBranch);
+
   ~SyncLogic ();
 
   /**
@@ -183,6 +188,8 @@
   std::string m_syncPrefix;
   LogicUpdateCallback m_onUpdate;
   LogicRemoveCallback m_onRemove;
+  LogicPerBranchCallback m_onUpdateBranch;
+  bool m_perBranch;
   CcnxWrapperPtr m_ccnxHandle;
 
   Scheduler m_scheduler;
diff --git a/model/sync-logic.cc b/model/sync-logic.cc
index 596ad94..f298768 100644
--- a/model/sync-logic.cc
+++ b/model/sync-logic.cc
@@ -64,6 +64,7 @@
   , m_syncInterestTable (TIME_SECONDS (m_syncInterestReexpress))
   , m_syncPrefix (syncPrefix)
   , m_onUpdate (onUpdate)
+  , m_perBranch (false)
   , m_onRemove (onRemove)
   , m_ccnxHandle(CcnxWrapper::Create ())
   , m_recoveryRetransmissionInterval (m_defaultRecoveryRetransmitInterval)
@@ -88,6 +89,36 @@
 #endif
 }
 
+SyncLogic::SyncLogic (const std::string &syncPrefix,
+                      LogicPerBranchCallback onUpdateBranch)
+  : m_state (new FullState)
+  , m_syncInterestTable (TIME_SECONDS (m_syncInterestReexpress))
+  , m_syncPrefix (syncPrefix)
+  , m_onUpdateBranch (onUpdateBranch)
+  , m_perBranch(true)
+  , m_ccnxHandle(CcnxWrapper::Create ())
+  , m_recoveryRetransmissionInterval (m_defaultRecoveryRetransmitInterval)
+#ifndef NS3_MODULE
+  , m_randomGenerator (static_cast<unsigned int> (std::time (0)))
+  , m_rangeUniformRandom (m_randomGenerator, uniform_int<> (200,1000))
+  , m_reexpressionJitter (m_randomGenerator, uniform_int<> (100,500))
+#else
+  , m_rangeUniformRandom (200,1000)
+  , m_reexpressionJitter (10,500)
+#endif
+{ 
+#ifndef NS3_MODULE
+  // In NS3 module these functions are moved to StartApplication method
+  
+  m_ccnxHandle->setInterestFilter (m_syncPrefix,
+                                   bind (&SyncLogic::respondSyncInterest, this, _1));
+
+  m_scheduler.schedule (TIME_SECONDS (0), // no need to add jitter
+                        bind (&SyncLogic::sendSyncInterest, this),
+                        REEXPRESSING_INTEREST);
+#endif
+}
+
 SyncLogic::~SyncLogic ()
 {
   m_ccnxHandle->clearInterestFilter (m_syncPrefix);
@@ -321,7 +352,6 @@
               if (inserted || updated)
                 {
                   diffLog->update (info, seq);
-                  //m_onUpdate (info->toString (), seq, oldSeq);
                   if (!oldSeq.isValid())
                   {
                     oldSeq = SeqNo(seq.getSession(), 0);
@@ -334,7 +364,16 @@
                   if (info->toString() != forwarderPrefix)
                   {
                     MissingDataInfo mdi = {info->toString(), oldSeq, seq};
-                    v.push_back(mdi);
+                    if (m_perBranch)
+                    {
+                       ostringstream interestName;
+                       interestName << mdi.prefix << "/" << mdi.high.getSession() << "/" << mdi.high.getSeq();
+                       m_onUpdateBranch(interestName.str());
+                    }
+                    else
+                    {
+                      v.push_back(mdi);
+                    }
                   }
                 }
             }
@@ -344,7 +383,10 @@
               if (m_state->remove (info))
                 {
                   diffLog->remove (info);
-                  m_onRemove (info->toString ());
+                  if (!m_perBranch)
+                  {
+                    m_onRemove (info->toString ());
+                  }
                 }
             }
           else
@@ -354,7 +396,10 @@
 
       if (!v.empty()) 
       {
-        m_onUpdate(v);
+        if (!m_perBranch)
+        {
+           m_onUpdate(v);
+        }
       }
 
       insertToDiffLog (diffLog);
