diff --git a/wscript b/wscript
index a4cea8b..ea47f7f 100644
--- a/wscript
+++ b/wscript
@@ -3,59 +3,42 @@
 VERSION='0.0.1'
 APPNAME='sync'
 
-from waflib import Build, Logs
+from waflib import Configure, Build, Logs
 
 def options(opt):
-    opt.add_option('--debug',action='store_true',default=False,dest='debug',help='''debugging mode''')
-    opt.add_option('--log4cxx', action='store_true',default=False,dest='log4cxx',help='''Compile with log4cxx/native NS3 logging support''')
-    opt.add_option('--ns3',     action='store_true',default=False,dest='ns3_enable',help='''Compile as NS-3 module''')
-    opt.add_option('--ns3-debug', action='store_true',default=False,dest='ns3_debug',help='''Link against debug NS3 libraries. Optimized version will be used otherwise''')
-    opt.add_option('--test', action='store_true',default=False,dest='_test',help='''build unit tests''')
-    opt.load('compiler_c')
-    opt.load('compiler_cxx')
-    opt.load('boost')
-    opt.load('doxygen')
-    opt.load('gnu_dirs')
-    opt.load('ccnx ns3 protobuf', tooldir=["waf-tools"])
+    opt.load('compiler_c compiler_cxx boost doxygen gnu_dirs protoc')
+    opt.load('ndnx', tooldir=["waf-tools"])
+
+    syncopt = opt.add_option_group ("ChronoSync Options")
+
+    syncopt.add_option('--debug',action='store_true',default=False,dest='debug',help='''debugging mode''')
+    syncopt.add_option('--log4cxx', action='store_true',default=False,dest='log4cxx',help='''Compile with log4cxx''')
+    syncopt.add_option('--test', action='store_true',default=False,dest='_test',help='''build unit tests''')
 
 def configure(conf):
-    conf.load("compiler_cxx")
-    conf.load('gnu_dirs')
-
-    if not conf.check_cfg(package='openssl', args=['--cflags', '--libs'], uselib_store='SSL', mandatory=False):
-      libcrypto = conf.check_cc(lib='crypto',
-                                header_name='openssl/crypto.h',
-                                define_name='HAVE_SSL',
-                                uselib_store='SSL')
-    if not conf.get_define ("HAVE_SSL"):
-        conf.fatal ("Cannot find SSL libraries")
-
-    conf.load('boost')
-
-    if conf.options.ns3_enable:
-        conf.load('ns3')
-        conf.define('NS3_MODULE', 1)
-        conf.check_modules(['core', 'network', 'internet'], mandatory = True)
-        conf.check_modules(['NDNabstraction'], mandatory = True)
-        conf.check_modules(['point-to-point'], mandatory = False)
-        conf.check_modules(['point-to-point-layout'], mandatory = False)
-
-        conf.check_boost(lib='system iostreams thread')
-        conf.define ('NS3_LOG_ENABLE', 1)
-    else:
-        conf.check_boost(lib='system iostreams test thread')
-
-        conf.load ('ccnx')
-        conf.check_ccnx (path=conf.options.ccnx_dir)
-
-        if conf.options.log4cxx:
-            conf.check_cfg(package='liblog4cxx', args=['--cflags', '--libs'], uselib_store='LOG4CXX', mandatory=True)
+    conf.load('compiler_c compiler_cxx gnu_dirs boost')
+    conf.load('ndnx')
 
     if conf.options.debug:
         conf.define ('_DEBUG', 1)
-        conf.env.append_value('CXXFLAGS', ['-O0', '-g3'])
+        conf.add_supported_cxxflags (cxxflags = ['-O0',
+                                                 '-Wall',
+                                                 '-Wno-unused-variable',
+                                                 '-g3',
+                                                 '-Wno-unused-private-field', # only clang supports
+                                                 '-fcolor-diagnostics',       # only clang supports
+                                                 '-Qunused-arguments'         # only clang supports
+                                                 ])
     else:
-        conf.env.append_value('CXXFLAGS', ['-O3', '-g'])
+        conf.add_supported_cxxflags (cxxflags = ['-O3', '-g'])
+
+    conf.check_ndnx ()
+    conf.check_openssl ()
+
+    conf.check_boost(lib='system iostreams test thread')
+
+    if conf.options.log4cxx:
+        conf.check_cfg(package='liblog4cxx', args=['--cflags', '--libs'], uselib_store='LOG4CXX', mandatory=True)
 
     if conf.options._test:
       conf.define('_TEST', 1)
@@ -65,134 +48,45 @@
     except:
         pass
 
-    conf.load('protobuf')
+    conf.load('protoc')
 
 def build (bld):
-    bld.post_mode = Build.POST_LAZY
-
-    bld.add_group ("protobuf")
-
-    x = bld (
-        features = ["protobuf"],
-        source = ["model/sync-state.proto"],
-        target = ["model/sync-state.pb"],
+    libsync = bld (
+        target=APPNAME,
+        features=['cxx', 'cxxshlib'],
+        source =  ant_glob (['src/**/*.cc', 'src/**/*.proto']),
+        use = 'BOOST BOOST_IOSTREAMS BOOST_THREAD SSL NDNX',
+        includes = ['include', 'src'],
         )
+    
+    # Unit tests
+    if bld.get_define("_TEST"):
+      unittests = bld.program (
+          target="unit-tests",
+          source = bld.path.ant_glob(['tests/**/*.cc']),
+          features=['cxx', 'cxxprogram'],
+          use = 'BOOST_TEST sync',
+          includes = ['include', 'src'],
+          )
 
-    bld.add_group ("code")
-
-    if bld.get_define ("NS3_MODULE"):
-        libsync = bld.shlib (
-            target = "sync-ns3",
-            features=['cxx', 'cxxshlib'],
-            source =  [
-                'ns3/sync-ccnx-wrapper.cc',
-                'ns3/sync-ns3-name-info.cc',
-                'ns3/sync-scheduler.cc',
-                'ns3/sync-logic-helper.cc',
-                
-                # 'model/sync-app-data-fetch.cc',
-                # 'model/sync-app-data-publish.cc',
-                # 'ns3/sync-app.cc',
-
-                'model/sync-diff-leaf.cc',
-                'model/sync-diff-state.cc',
-                'model/sync-digest.cc',
-                'model/sync-full-leaf.cc',
-                'model/sync-full-state.cc',
-                'model/sync-interest-table.cc',
-                'model/sync-leaf.cc',
-                'model/sync-logic.cc',
-                'model/sync-name-info.cc',
-                'model/sync-seq-no.cc',
-                'model/sync-state.cc',
-                'model/sync-std-name-info.cc',
-                ],
-            dynamic_source = [
-                'model/sync-state.pb.cc',
-                ],
-            use = 'BOOST BOOST_IOSTREAMS SSL PROTOBUF ' + ' '.join (['ns3_'+dep for dep in ['core', 'network', 'internet', 'NDNabstraction']]).upper (),
-            includes = ['include', 'model', 'include/ns3', 'helper'],
-            )
-
-        example = bld.program (
-            target = "sync-example",
-            features=['cxx', 'cxxprogram'],
-            source = ['examples/sync-example.cc'],
-            use = 'libsync',
-            includes = ['include', 'model', 'include/ns3', 'helper'],
-            )
-
-        sync_eval = bld.program (
-            target = "sync-eval",
-            features=['cxx', 'cxxprogram'],
-            source = ['evaluation/sync-eval.cc',
-                      'evaluation/standard-muc.cc',
-                      'evaluation/sync-muc.cc',
-                      ],
-            use = 'libsync',
-            includes = ['include', 'model', 'include/ns3', 'helper'],
-            )
-        # from waflib import Utils,Logs,Errors
-        # Logs.pprint ('CYAN', program.use)
-        
-    else:
-        libsync = bld (
-            target=APPNAME,
-            features=['cxx', 'cxxshlib'],
-            source =  [
-                'ccnx/sync-ccnx-wrapper.cc',
-                'ccnx/sync-scheduler.cc',
-                'ccnx/sync-log.cc',
-                'ccnx/sync-app-socket-c.cc',
-                'ccnx/sync-app-socket.cc',
-                'model/sync-diff-leaf.cc',
-                'model/sync-diff-state.cc',
-                'model/sync-digest.cc',
-                'model/sync-full-leaf.cc',
-                'model/sync-full-state.cc',
-                'model/sync-interest-table.cc',
-                'model/sync-leaf.cc',
-                'model/sync-logic.cc',
-                'model/sync-name-info.cc',
-                'model/sync-seq-no.cc',
-                'model/sync-state.cc',
-                'model/sync-std-name-info.cc',
-                ],
-            dynamic_source = [
-                'model/sync-state.pb.cc',
-                ],
-            use = 'BOOST BOOST_IOSTREAMS BOOST_THREAD SSL PROTOBUF CCNX',
-            includes = ['include', 'model', 'helper'],
-            )
-        
-        # Unit tests
+    if bld.get_define ("HAVE_LOG4CXX"):
+        libsync.use += ' LOG4CXX'
         if bld.get_define("_TEST"):
-          unittests = bld.program (
-              target="unit-tests",
-              source = bld.path.ant_glob(['test/**/*.cc']),
-              features=['cxx', 'cxxprogram'],
-              use = 'BOOST_TEST sync',
-              includes = ['include', 'model', 'helper'],
-              )
+            unittests.use += ' LOG4CXX'
 
-        if bld.get_define ("HAVE_LOG4CXX"):
-            libsync.use += ' LOG4CXX'
-            if bld.get_define("_TEST"):
-                unittests.use += ' LOG4CXX'
+    headers = bld.path.ant_glob(['include/*.h'])
+    headers.extend (bld.path.get_bld().ant_glob(['model/sync-state.pb.h']))
+    bld.install_files ("%s/sync" % bld.env['INCLUDEDIR'], headers)
 
-        headers = bld.path.ant_glob(['include/*.h'])
-        headers.extend (bld.path.get_bld().ant_glob(['model/sync-state.pb.h']))
-        bld.install_files ("%s/sync" % bld.env['INCLUDEDIR'], headers)
-
-        pc = bld (
-            features = "subst",
-            source='libsync.pc.in',
-            target='libsync.pc',
-            install_path = '${LIBDIR}/pkgconfig',
-            PREFIX       = bld.env['PREFIX'],
-            INCLUDEDIR   = "%s/sync" % bld.env['INCLUDEDIR'],
-            VERSION      = VERSION,
-            )
+    pc = bld (
+        features = "subst",
+        source='libsync.pc.in',
+        target='libsync.pc',
+        install_path = '${LIBDIR}/pkgconfig',
+        PREFIX       = bld.env['PREFIX'],
+        INCLUDEDIR   = "%s/sync" % bld.env['INCLUDEDIR'],
+        VERSION      = VERSION,
+        )
 
 # doxygen docs
 from waflib.Build import BuildContext
@@ -206,3 +100,18 @@
     bld (features="doxygen",
          doxyfile='doc/doxygen.conf',
          output_dir = 'doc')
+
+@Configure.conf
+def add_supported_cxxflags(self, cxxflags):
+    """
+    Check which cxxflags are supported by compiler and add them to env.CXXFLAGS variable
+    """
+    self.start_msg('Checking allowed flags for c++ compiler')
+
+    supportedFlags = []
+    for flag in cxxflags:
+        if self.check_cxx (cxxflags=[flag], mandatory=False):
+            supportedFlags += [flag]
+
+    self.end_msg (' '.join (supportedFlags))
+    self.env.CXXFLAGS += supportedFlags
