diff --git a/.jenkins.d/10-build.sh b/.jenkins.d/10-build.sh
index 24e76e1..54756c7 100755
--- a/.jenkins.d/10-build.sh
+++ b/.jenkins.d/10-build.sh
@@ -2,21 +2,34 @@
 set -x
 set -e
 
-# Cleanup
-sudo ./waf distclean -j1 --color=yes
-
 COVERAGE=$( python -c "print '--with-coverage' if 'code-coverage' in '$JOB_NAME' else ''" )
 
 sudo rm -Rf /usr/local/include/ndn-cxx
 sudo rm -f /usr/local/lib/libndn-cxx*
 sudo rm -f /usr/local/lib/pkgconfig/libndn-cxx*
 
-# Configure
-CXXFLAGS="-std=c++03 -pedantic -Wall -Wno-long-long -O2 -g -Werror" \
-  ./waf -j1 configure --color=yes --with-tests --without-pch $COVERAGE
+# Cleanup
+sudo ./waf -j1 --color=yes distclean
 
-# Build
-./waf --color=yes -j1
+# Configure/build in debug mode
+./waf -j1 --color=yes configure --with-tests --without-pch --debug
+./waf -j1 --color=yes build
+
+# Cleanup
+sudo ./waf -j1 --color=yes distclean
+
+# Configure/build in optimized mode without tests with precompiled headers
+./waf -j1 --color=yes configure
+./waf -j1 --color=yes build
+
+# Cleanup
+sudo ./waf -j1 --color=yes distclean
+
+# Configure/build in optimized mode
+./waf -j1 --color=yes configure --with-tests --without-pch $COVERAGE
+./waf -j1 --color=yes build
+
+# (tests will be run against optimized version)
 
 # Install
 sudo ./waf -j1 --color=yes install
diff --git a/.waf-tools/default-compiler-flags.py b/.waf-tools/default-compiler-flags.py
index 96690b3..c8b11e0 100644
--- a/.waf-tools/default-compiler-flags.py
+++ b/.waf-tools/default-compiler-flags.py
@@ -4,20 +4,14 @@
 
 def options(opt):
     opt.add_option('--debug', '--with-debug', action='store_true', default=False, dest='debug',
-                   help='''Compile in debugging mode without all optimizations (-O0)''')
-    opt.add_option('--with-c++11', action='store_true', default=False, dest='use_cxx11',
-                   help='''Use C++ 11 features if available in the compiler''')
+                   help='''Compile in debugging mode without optimizations (-O0 or -Og)''')
 
 def configure(conf):
     areCustomCxxflagsPresent = (len(conf.env.CXXFLAGS) > 0)
-    defaultFlags = []
-
-    if conf.options.use_cxx11:
-        defaultFlags += ['-std=c++0x', '-std=c++11']
-    else:
-        defaultFlags += ['-std=c++03', '-Wno-variadic-macros', '-Wno-c99-extensions']
-
-    defaultFlags += ['-pedantic', '-Wall', '-Wno-long-long', '-Wno-unneeded-internal-declaration']
+    defaultFlags = ['-std=c++0x', '-std=c++11',
+                    '-stdlib=libc++',   # clang on OSX < 10.9 by default uses gcc's
+                                        # libstdc++, which is not C++11 compatible
+                    '-pedantic', '-Wall']
 
     if conf.options.debug:
         conf.define('_DEBUG', 1)
@@ -29,6 +23,7 @@
                          '-Werror',
                          '-Wno-error=deprecated-register',
                          '-Wno-error=maybe-uninitialized', # Bug #1615
+                         '-Wno-error=unneeded-internal-declaration', # Bug #1588
                         ]
         if areCustomCxxflagsPresent:
             missingFlags = [x for x in defaultFlags if x not in conf.env.CXXFLAGS]
@@ -43,12 +38,15 @@
         if not areCustomCxxflagsPresent:
             conf.add_supported_cxxflags(defaultFlags)
 
+    # clang on OSX < 10.9 by default uses gcc's libstdc++, which is not C++11 compatible
+    conf.add_supported_linkflags(['-stdlib=libc++'])
+
 @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')
+    self.start_msg('Checking supported CXXFLAGS')
 
     supportedFlags = []
     for flag in cxxflags:
@@ -57,3 +55,18 @@
 
     self.end_msg(' '.join(supportedFlags))
     self.env.CXXFLAGS = supportedFlags + self.env.CXXFLAGS
+
+@Configure.conf
+def add_supported_linkflags(self, linkflags):
+    """
+    Check which linkflags are supported by compiler and add them to env.LINKFLAGS variable
+    """
+    self.start_msg('Checking supported LINKFLAGS')
+
+    supportedFlags = []
+    for flag in linkflags:
+        if self.check_cxx(linkflags=['-Werror', flag], mandatory=False):
+            supportedFlags += [flag]
+
+    self.end_msg(' '.join(supportedFlags))
+    self.env.LINKFLAGS = supportedFlags + self.env.LINKFLAGS
diff --git a/src/common.hpp b/src/common.hpp
index e4d66b3..44a0dd8 100644
--- a/src/common.hpp
+++ b/src/common.hpp
@@ -38,46 +38,39 @@
 #define NDN_CXX_PROTECTED_WITH_TESTS_ELSE_PRIVATE private
 #endif
 
-#include <stdint.h>
-#include <stddef.h>
+// require C++11
+#if __cplusplus < 201103L && !defined(__GXX_EXPERIMENTAL_CXX0X__)
+#  error "ndn-cxx applications must be compiled using the C++11 standard"
+#endif
+
+#include <cstddef>
+#include <cstdint>
+#include <cstring>
+#include <functional>
+#include <limits>
+#include <memory>
+#include <stdexcept>
+#include <string>
 #include <unistd.h>
 
 #if defined(__GNUC__) || defined(__clang__)
-#define DEPRECATED(func) func __attribute__ ((deprecated))
+#  define DEPRECATED(func) func __attribute__ ((deprecated))
 #elif defined(_MSC_VER)
-#define DEPRECATED(func) __declspec(deprecated) func
+#  define DEPRECATED(func) __declspec(deprecated) func
 #else
-#pragma message("DEPRECATED not implemented")
-#define DEPRECATED(func) func
+#  pragma message("DEPRECATED not implemented")
+#  define DEPRECATED(func) func
 #endif
 
 namespace ndn {
 
 const size_t MAX_NDN_PACKET_SIZE = 8800;
 
-} // namespace ndn
-
-#ifdef NDN_CXX_HAVE_CXX11
-
-#if defined(__GNUC__)
-#  if !defined(__GXX_EXPERIMENTAL_CXX0X__) && __cplusplus < 201103L
-#    error "NDN-CXX library is configured and compiled in C++11 mode, but the current compiler is not C++11 enabled"
-#  endif // !defined(__GXX_EXPERIMENTAL_CXX0X__) && __cplusplus < 201103L
-#endif // defined(__GNUC__)
-
-#if defined(__clang__) && __cplusplus < 201103L
-#  error "NDN-CXX library is configured and compiled in C++11 mode, but the current compiler is not C++11 enabled"
-#endif // defined(__clang__) && (__cplusplus < 201103L)
-
-#include <memory>
-#include <functional>
-
-namespace ndn {
-
 namespace ptr_lib = std;
 namespace func_lib = std;
 
 using std::shared_ptr;
+using std::unique_ptr;
 using std::weak_ptr;
 using std::bad_weak_ptr;
 using std::make_shared;
@@ -98,54 +91,16 @@
 using std::placeholders::_7;
 using std::placeholders::_8;
 using std::placeholders::_9;
-
 using std::ref;
 using std::cref;
 
 } // namespace ndn
 
-
-#else
-
-#include <boost/shared_ptr.hpp>
-#include <boost/weak_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include <boost/make_shared.hpp>
-
-#include <boost/function.hpp>
-#include <boost/bind.hpp>
+#include <boost/assert.hpp>
+#include <boost/noncopyable.hpp>
 
 namespace ndn {
-
-namespace ptr_lib = boost;
-namespace func_lib = boost;
-
-using boost::shared_ptr;
-using boost::weak_ptr;
-using boost::bad_weak_ptr;
-using boost::make_shared;
-using boost::enable_shared_from_this;
-
-using boost::static_pointer_cast;
-using boost::dynamic_pointer_cast;
-using boost::const_pointer_cast;
-
-using boost::function;
-using boost::bind;
-
-using boost::ref;
-using boost::cref;
-
-} // namespace ndn
-
-#endif // NDN_CXX_HAVE_CXX11
-
-#include <boost/utility.hpp>
-
-namespace ndn {
-
 using boost::noncopyable;
-
 }
 
 #endif // NDN_COMMON_HPP
diff --git a/src/detail/face-impl.hpp b/src/detail/face-impl.hpp
index cd1b3d8..155185d 100644
--- a/src/detail/face-impl.hpp
+++ b/src/detail/face-impl.hpp
@@ -217,12 +217,12 @@
     }
 
     RegisteredPrefix::Unregistrator bindedUnregistrator =
-      bind(unregistrator, m_face.m_nfdController, unregisterParameters, _1, _2,
-           signatureGenerator,
-           m_face.m_nfdController->getDefaultCommandTimeout());
+        ndn::bind(unregistrator, m_face.m_nfdController.get(), unregisterParameters, _1, _2,
+                  signatureGenerator,
+                  m_face.m_nfdController->getDefaultCommandTimeout());
 
     shared_ptr<RegisteredPrefix> prefixToRegister =
-      ndn::make_shared<RegisteredPrefix>(prefix, filter, bindedUnregistrator);
+      make_shared<RegisteredPrefix>(prefix, filter, bindedUnregistrator);
 
     ((*m_face.m_nfdController).*registrator)(registerParameters,
                                              bind(&Impl::afterPrefixRegistered, this,
diff --git a/src/encoding/tlv.hpp b/src/encoding/tlv.hpp
index 0fb4704..d74323b 100644
--- a/src/encoding/tlv.hpp
+++ b/src/encoding/tlv.hpp
@@ -25,6 +25,7 @@
 #include <stdexcept>
 #include <iostream>
 #include <iterator>
+#include <limits>
 
 #include "buffer.hpp"
 #include "endian.hpp"
diff --git a/src/name-component.cpp b/src/name-component.cpp
index 75d9cfa..9c97773 100644
--- a/src/name-component.cpp
+++ b/src/name-component.cpp
@@ -60,7 +60,7 @@
 }
 
 Component::Component(const char* str)
-  : Block(dataBlock(tlv::NameComponent, str, ::strlen(str)))
+  : Block(dataBlock(tlv::NameComponent, str, std::char_traits<char>::length(str)))
 {
 }
 
diff --git a/src/name-component.hpp b/src/name-component.hpp
index ea68084..b8023b1 100644
--- a/src/name-component.hpp
+++ b/src/name-component.hpp
@@ -189,7 +189,7 @@
   static Component
   fromEscapedString(const char* escapedString)
   {
-    return fromEscapedString(escapedString, 0, ::strlen(escapedString));
+    return fromEscapedString(escapedString, 0, std::char_traits<char>::length(escapedString));
   }
 
   /**
diff --git a/src/util/ethernet.cpp b/src/util/ethernet.cpp
index d5eb780..f68a27a 100644
--- a/src/util/ethernet.cpp
+++ b/src/util/ethernet.cpp
@@ -28,6 +28,7 @@
 #include "ethernet.hpp"
 
 #include <stdio.h>
+#include <ostream>
 
 namespace ndn {
 namespace util {
diff --git a/src/util/in-memory-storage.hpp b/src/util/in-memory-storage.hpp
index fb7ddb6..b9fb9da 100644
--- a/src/util/in-memory-storage.hpp
+++ b/src/util/in-memory-storage.hpp
@@ -37,7 +37,6 @@
 
 #include <stack>
 #include <iterator>
-#include <stdexcept>
 
 namespace ndn {
 namespace util {
diff --git a/src/util/io.hpp b/src/util/io.hpp
index 09ed90c..4c7caf9 100644
--- a/src/util/io.hpp
+++ b/src/util/io.hpp
@@ -27,7 +27,6 @@
 #include "../encoding/block.hpp"
 #include "../encoding/buffer-stream.hpp"
 
-#include <string>
 #include <iostream>
 #include <fstream>
 #include "../security/cryptopp.hpp"
diff --git a/tests/unit-tests/test-name.cpp b/tests/unit-tests/test-name.cpp
index 649bd6f..5bc6f6b 100644
--- a/tests/unit-tests/test-name.cpp
+++ b/tests/unit-tests/test-name.cpp
@@ -163,7 +163,8 @@
                                         bind(&name::Component::isSegmentOffset, _1)));
     dataset.push_back(boost::make_tuple(&name::Component::fromVersion,
                                         bind(&name::Component::toVersion, _1),
-                                        bind(&Name::appendVersion, _1, _2),
+                                        bind(static_cast<Name&(Name::*)(uint64_t)>(
+                                               &Name::appendVersion), _1, _2),
                                         Name("/%FD%00%0FB%40"),
                                         1000000,
                                         bind(&name::Component::isVersion, _1)));
@@ -193,7 +194,7 @@
                                         bind(&name::Component::toTimestamp, _1),
                                         bind(&Name::appendTimestamp, _1, _2),
                                         Name("/%FC%00%04%7BE%E3%1B%00%00"),
-                                        (time::getUnixEpoch() + time::days(14600/*40 years*/)),
+                                        time::getUnixEpoch() + time::days(14600/*40 years*/),
                                         bind(&name::Component::isTimestamp, _1)));
   }
 
diff --git a/wscript b/wscript
index 567d97d..7a3e7fc 100644
--- a/wscript
+++ b/wscript
@@ -58,15 +58,6 @@
     conf.check_sqlite3(mandatory=True)
     conf.check_cryptopp(mandatory=True, use='PTHREAD')
 
-    if conf.options.use_cxx11:
-        conf.check(msg='Checking for type std::shared_ptr',
-                   type_name="std::shared_ptr<int>", header_name="memory",
-                   define_name='HAVE_STD_SHARED_PTR', mandatory=True)
-        conf.check(msg='Checking for type std::function',
-                   type_name="std::function<void()>", header_name="functional",
-                   define_name='HAVE_STD_FUNCTION', mandatory=True)
-        conf.define('HAVE_CXX11', 1)
-
     USED_BOOST_LIBS = ['system', 'filesystem', 'date_time', 'iostreams',
                        'regex', 'program_options', 'chrono', 'random']
     if conf.env['WITH_TESTS']:
