diff --git a/include/ndnboost/algorithm/string/compare.hpp b/include/ndnboost/algorithm/string/compare.hpp
index e963120..4bebc21 100644
--- a/include/ndnboost/algorithm/string/compare.hpp
+++ b/include/ndnboost/algorithm/string/compare.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_COMPARE_HPP
-#define BOOST_STRING_COMPARE_HPP
+#ifndef NDNBOOST_STRING_COMPARE_HPP
+#define NDNBOOST_STRING_COMPARE_HPP
 
 #include <ndnboost/algorithm/string/config.hpp>
 #include <locale>
@@ -196,4 +196,4 @@
 } // namespace ndnboost
 
 
-#endif  // BOOST_STRING_COMPARE_HPP
+#endif  // NDNBOOST_STRING_COMPARE_HPP
diff --git a/include/ndnboost/algorithm/string/concept.hpp b/include/ndnboost/algorithm/string/concept.hpp
index 31faa80..86698d3 100644
--- a/include/ndnboost/algorithm/string/concept.hpp
+++ b/include/ndnboost/algorithm/string/concept.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_CONCEPT_HPP
-#define BOOST_STRING_CONCEPT_HPP
+#ifndef NDNBOOST_STRING_CONCEPT_HPP
+#define NDNBOOST_STRING_CONCEPT_HPP
 
 #include <ndnboost/concept_check.hpp>
 #include <ndnboost/range/iterator_range.hpp>
@@ -80,4 +80,4 @@
 
 
 
-#endif  // BOOST_STRING_CONCEPT_HPP
+#endif  // NDNBOOST_STRING_CONCEPT_HPP
diff --git a/include/ndnboost/algorithm/string/config.hpp b/include/ndnboost/algorithm/string/config.hpp
index 4ed3d05..0659c1f 100644
--- a/include/ndnboost/algorithm/string/config.hpp
+++ b/include/ndnboost/algorithm/string/config.hpp
@@ -8,21 +8,21 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_CONFIG_HPP
-#define BOOST_STRING_CONFIG_HPP
+#ifndef NDNBOOST_STRING_CONFIG_HPP
+#define NDNBOOST_STRING_CONFIG_HPP
 
 #include <ndnboost/config.hpp>
 #include <ndnboost/detail/workaround.hpp>
 
-#ifdef BOOST_STRING_DEDUCED_TYPENAME
+#ifdef NDNBOOST_STRING_DEDUCED_TYPENAME
 #   error "macro already defined!"
 #endif
 
-#define BOOST_STRING_TYPENAME BOOST_DEDUCED_TYPENAME
+#define NDNBOOST_STRING_TYPENAME NDNBOOST_DEDUCED_TYPENAME
 
 // Metrowerks workaround
-#if BOOST_WORKAROUND(__MWERKS__, <= 0x3003) // 8.x
+#if NDNBOOST_WORKAROUND(__MWERKS__, <= 0x3003) // 8.x
 #pragma parse_func_templ off
 #endif
 
-#endif  // BOOST_STRING_CONFIG_HPP
+#endif  // NDNBOOST_STRING_CONFIG_HPP
diff --git a/include/ndnboost/algorithm/string/constants.hpp b/include/ndnboost/algorithm/string/constants.hpp
index 232d0d8..21fe158 100644
--- a/include/ndnboost/algorithm/string/constants.hpp
+++ b/include/ndnboost/algorithm/string/constants.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_CONSTANTS_HPP
-#define BOOST_STRING_CONSTANTS_HPP
+#ifndef NDNBOOST_STRING_CONSTANTS_HPP
+#define NDNBOOST_STRING_CONSTANTS_HPP
 
 namespace ndnboost {
     namespace algorithm {
@@ -32,5 +32,5 @@
 
 } // namespace ndnboost
 
-#endif  // BOOST_STRING_CONSTANTS_HPP
+#endif  // NDNBOOST_STRING_CONSTANTS_HPP
 
diff --git a/include/ndnboost/algorithm/string/detail/find_format.hpp b/include/ndnboost/algorithm/string/detail/find_format.hpp
index 395beaf..e59e40d 100644
--- a/include/ndnboost/algorithm/string/detail/find_format.hpp
+++ b/include/ndnboost/algorithm/string/detail/find_format.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_FIND_FORMAT_DETAIL_HPP
-#define BOOST_STRING_FIND_FORMAT_DETAIL_HPP
+#ifndef NDNBOOST_STRING_FIND_FORMAT_DETAIL_HPP
+#define NDNBOOST_STRING_FIND_FORMAT_DETAIL_HPP
 
 #include <ndnboost/algorithm/string/config.hpp>
 #include <ndnboost/range/iterator_range.hpp>
@@ -38,7 +38,7 @@
                 const FormatResultT& FormatResult )
             {       
                 typedef find_format_store<
-                    BOOST_STRING_TYPENAME 
+                    NDNBOOST_STRING_TYPENAME 
                         range_const_iterator<InputT>::type, 
                         FormatterT,
                         FormatResultT > store_type;
@@ -102,7 +102,7 @@
                 const FormatResultT& FormatResult)
             {
                 typedef find_format_store<
-                    BOOST_STRING_TYPENAME 
+                    NDNBOOST_STRING_TYPENAME 
                         range_const_iterator<InputT>::type, 
                         FormatterT,
                         FormatResultT > store_type;
@@ -161,7 +161,7 @@
                 const FormatResultT& FormatResult)
             {
                 typedef find_format_store<
-                    BOOST_STRING_TYPENAME 
+                    NDNBOOST_STRING_TYPENAME 
                         range_iterator<InputT>::type, 
                         FormatterT,
                         FormatResultT > store_type;
@@ -201,4 +201,4 @@
     } // namespace algorithm
 } // namespace ndnboost
 
-#endif  // BOOST_STRING_FIND_FORMAT_DETAIL_HPP
+#endif  // NDNBOOST_STRING_FIND_FORMAT_DETAIL_HPP
diff --git a/include/ndnboost/algorithm/string/detail/find_format_all.hpp b/include/ndnboost/algorithm/string/detail/find_format_all.hpp
index ee0312a..22d0768 100644
--- a/include/ndnboost/algorithm/string/detail/find_format_all.hpp
+++ b/include/ndnboost/algorithm/string/detail/find_format_all.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP
-#define BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP
+#ifndef NDNBOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP
+#define NDNBOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP
 
 #include <ndnboost/algorithm/string/config.hpp>
 #include <ndnboost/range/iterator_range.hpp>
@@ -39,7 +39,7 @@
                 const FindResultT& FindResult,
                 const FormatResultT& FormatResult )
             {       
-                typedef BOOST_STRING_TYPENAME 
+                typedef NDNBOOST_STRING_TYPENAME 
                     range_const_iterator<InputT>::type input_iterator_type; 
 
                 typedef find_format_store<
@@ -113,7 +113,7 @@
                 const FindResultT& FindResult,
                 const FormatResultT& FormatResult)
             {
-                typedef BOOST_STRING_TYPENAME 
+                typedef NDNBOOST_STRING_TYPENAME 
                     range_const_iterator<InputT>::type input_iterator_type; 
 
                 typedef find_format_store<
@@ -187,7 +187,7 @@
                 FindResultT FindResult,
                 FormatResultT FormatResult)
             {
-                typedef BOOST_STRING_TYPENAME 
+                typedef NDNBOOST_STRING_TYPENAME 
                     range_iterator<InputT>::type input_iterator_type; 
                 typedef find_format_store<
                         input_iterator_type, 
@@ -199,7 +199,7 @@
           
                 // Instantiate replacement storage
                 std::deque<
-                    BOOST_STRING_TYPENAME range_value<InputT>::type> Storage;
+                    NDNBOOST_STRING_TYPENAME range_value<InputT>::type> Storage;
 
                 // Initialize replacement iterators
                 input_iterator_type InsertIt=::ndnboost::begin(Input);
@@ -270,4 +270,4 @@
     } // namespace algorithm
 } // namespace ndnboost
 
-#endif  // BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP
+#endif  // NDNBOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP
diff --git a/include/ndnboost/algorithm/string/detail/find_format_store.hpp b/include/ndnboost/algorithm/string/detail/find_format_store.hpp
index d0d38bf..89c137f 100644
--- a/include/ndnboost/algorithm/string/detail/find_format_store.hpp
+++ b/include/ndnboost/algorithm/string/detail/find_format_store.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP
-#define BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP
+#ifndef NDNBOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP
+#define NDNBOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP
 
 #include <ndnboost/algorithm/string/config.hpp>
 #include <ndnboost/range/iterator_range.hpp>
@@ -20,7 +20,7 @@
 
 //  temporary format and find result storage --------------------------------//
 
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#if NDNBOOST_WORKAROUND(NDNBOOST_MSVC, >= 1400)
 #pragma warning(push)
 #pragma warning(disable:4512) //assignment operator could not be generated
 #endif
@@ -73,17 +73,17 @@
             template<typename InputT, typename FindResultT>
             bool check_find_result(InputT&, FindResultT& FindResult)
             {
-                typedef BOOST_STRING_TYPENAME 
+                typedef NDNBOOST_STRING_TYPENAME 
                     range_const_iterator<InputT>::type input_iterator_type; 
                 iterator_range<input_iterator_type> ResultRange(FindResult);
                 return !ResultRange.empty();
             }
 
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#if NDNBOOST_WORKAROUND(NDNBOOST_MSVC, >= 1400)
 #pragma warning(pop)
 #endif
         } // namespace detail
     } // namespace algorithm
 } // namespace ndnboost
 
-#endif  // BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP
+#endif  // NDNBOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP
diff --git a/include/ndnboost/algorithm/string/detail/finder.hpp b/include/ndnboost/algorithm/string/detail/finder.hpp
index 330c7a5..6446e92 100644
--- a/include/ndnboost/algorithm/string/detail/finder.hpp
+++ b/include/ndnboost/algorithm/string/detail/finder.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_FINDER_DETAIL_HPP
-#define BOOST_STRING_FINDER_DETAIL_HPP
+#ifndef NDNBOOST_STRING_FINDER_DETAIL_HPP
+#define NDNBOOST_STRING_FINDER_DETAIL_HPP
 
 #include <ndnboost/algorithm/string/config.hpp>
 #include <ndnboost/algorithm/string/constants.hpp>
@@ -127,7 +127,7 @@
                     if( ndnboost::empty(m_Search) )
                         return result_type( End, End );
 
-                    typedef BOOST_STRING_TYPENAME ndnboost::detail::
+                    typedef NDNBOOST_STRING_TYPENAME ndnboost::detail::
                         iterator_traits<ForwardIteratorT>::iterator_category category;
 
                     return findit( Begin, End, category() );
@@ -379,7 +379,7 @@
                 ForwardIteratorT End,
                 unsigned int N )
             {
-                typedef BOOST_STRING_TYPENAME ndnboost::detail::
+                typedef NDNBOOST_STRING_TYPENAME ndnboost::detail::
                     iterator_traits<ForwardIteratorT>::iterator_category category;
 
                 return ::ndnboost::algorithm::detail::find_head_impl( Begin, End, N, category() );
@@ -453,7 +453,7 @@
                 ForwardIteratorT End,
                 unsigned int N )
             {
-                typedef BOOST_STRING_TYPENAME ndnboost::detail::
+                typedef NDNBOOST_STRING_TYPENAME ndnboost::detail::
                     iterator_traits<ForwardIteratorT>::iterator_category category;
 
                 return ::ndnboost::algorithm::detail::find_tail_impl( Begin, End, N, category() );
@@ -625,9 +625,9 @@
                     ForwardIterator2T,
                     ForwardIterator2T ) const
                 {
-#if BOOST_WORKAROUND( __MWERKS__, <= 0x3003 ) 
+#if NDNBOOST_WORKAROUND( __MWERKS__, <= 0x3003 ) 
                     return iterator_range<const ForwardIterator2T>(this->m_Range);
-#elif BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+#elif NDNBOOST_WORKAROUND(NDNBOOST_MSVC, <= 1300)
                     return iterator_range<ForwardIterator2T>(m_Range.begin(), m_Range.end());
 #else
                     return m_Range;
@@ -643,4 +643,4 @@
     } // namespace algorithm
 } // namespace ndnboost
 
-#endif  // BOOST_STRING_FINDER_DETAIL_HPP
+#endif  // NDNBOOST_STRING_FINDER_DETAIL_HPP
diff --git a/include/ndnboost/algorithm/string/detail/formatter.hpp b/include/ndnboost/algorithm/string/detail/formatter.hpp
index 0307310..14e5dee 100644
--- a/include/ndnboost/algorithm/string/detail/formatter.hpp
+++ b/include/ndnboost/algorithm/string/detail/formatter.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_FORMATTER_DETAIL_HPP
-#define BOOST_STRING_FORMATTER_DETAIL_HPP
+#ifndef NDNBOOST_STRING_FORMATTER_DETAIL_HPP
+#define NDNBOOST_STRING_FORMATTER_DETAIL_HPP
 
 
 #include <ndnboost/range/iterator_range.hpp>
@@ -32,7 +32,7 @@
             struct const_formatF
             {
             private:
-                typedef BOOST_STRING_TYPENAME
+                typedef NDNBOOST_STRING_TYPENAME
                     range_const_iterator<RangeT>::type format_iterator;
                 typedef iterator_range<format_iterator> result_type;
             
@@ -42,7 +42,7 @@
                     m_Format(::ndnboost::begin(Format), ::ndnboost::end(Format)) {}
 
                 // Operation
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+#if NDNBOOST_WORKAROUND(__BORLANDC__, NDNBOOST_TESTED_AT(0x564))
                 template<typename Range2T>
                 result_type& operator()(const Range2T&)
                 {
@@ -101,7 +101,7 @@
                   // Operation
                   template<typename RangeT>
                   inline iterator_range< 
-                      BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
+                      NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
                   operator()(const RangeT& Replace) const
                   {
                       return m_Finder(::ndnboost::begin(Replace), ::ndnboost::end(Replace));
@@ -116,4 +116,4 @@
     } // namespace algorithm
 } // namespace ndnboost
 
-#endif  // BOOST_STRING_FORMATTER_DETAIL_HPP
+#endif  // NDNBOOST_STRING_FORMATTER_DETAIL_HPP
diff --git a/include/ndnboost/algorithm/string/detail/replace_storage.hpp b/include/ndnboost/algorithm/string/detail/replace_storage.hpp
index 6fb6c54..274d858 100644
--- a/include/ndnboost/algorithm/string/detail/replace_storage.hpp
+++ b/include/ndnboost/algorithm/string/detail/replace_storage.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP
-#define BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP
+#ifndef NDNBOOST_STRING_REPLACE_STORAGE_DETAIL_HPP
+#define NDNBOOST_STRING_REPLACE_STORAGE_DETAIL_HPP
 
 #include <ndnboost/algorithm/string/config.hpp>
 #include <algorithm>
@@ -156,4 +156,4 @@
     } // namespace algorithm
 } // namespace ndnboost
 
-#endif  // BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP
+#endif  // NDNBOOST_STRING_REPLACE_STORAGE_DETAIL_HPP
diff --git a/include/ndnboost/algorithm/string/detail/sequence.hpp b/include/ndnboost/algorithm/string/detail/sequence.hpp
index 0b39a8b..be67f29 100644
--- a/include/ndnboost/algorithm/string/detail/sequence.hpp
+++ b/include/ndnboost/algorithm/string/detail/sequence.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_DETAIL_SEQUENCE_HPP
-#define BOOST_STRING_DETAIL_SEQUENCE_HPP
+#ifndef NDNBOOST_STRING_DETAIL_SEQUENCE_HPP
+#define NDNBOOST_STRING_DETAIL_SEQUENCE_HPP
 
 #include <ndnboost/algorithm/string/config.hpp>
 #include <ndnboost/mpl/bool.hpp>
@@ -28,7 +28,7 @@
             template< typename InputT, typename ForwardIteratorT >
             inline void insert(
                 InputT& Input,
-                BOOST_STRING_TYPENAME InputT::iterator At,
+                NDNBOOST_STRING_TYPENAME InputT::iterator At,
                 ForwardIteratorT Begin,
                 ForwardIteratorT End )
             {
@@ -38,7 +38,7 @@
             template< typename InputT, typename InsertT >
             inline void insert(
                 InputT& Input,
-                BOOST_STRING_TYPENAME InputT::iterator At,
+                NDNBOOST_STRING_TYPENAME InputT::iterator At,
                 const InsertT& Insert )
             {
                 ::ndnboost::algorithm::detail::insert( Input, At, ::ndnboost::begin(Insert), ::ndnboost::end(Insert) );
@@ -53,8 +53,8 @@
             template< typename InputT >
             inline typename InputT::iterator erase(
                 InputT& Input,
-                BOOST_STRING_TYPENAME InputT::iterator From,
-                BOOST_STRING_TYPENAME InputT::iterator To )
+                NDNBOOST_STRING_TYPENAME InputT::iterator From,
+                NDNBOOST_STRING_TYPENAME InputT::iterator To )
             {
                 return Input.erase( From, To );
             }
@@ -69,14 +69,14 @@
                 template< typename InputT, typename ForwardIteratorT >
                 void operator()(
                     InputT& Input,
-                    BOOST_STRING_TYPENAME InputT::iterator From,
-                    BOOST_STRING_TYPENAME InputT::iterator To,
+                    NDNBOOST_STRING_TYPENAME InputT::iterator From,
+                    NDNBOOST_STRING_TYPENAME InputT::iterator To,
                     ForwardIteratorT Begin,
                     ForwardIteratorT End )
                 {
                     // Copy data to the container ( as much as possible )
                     ForwardIteratorT InsertIt=Begin;
-                    BOOST_STRING_TYPENAME InputT::iterator InputIt=From;
+                    NDNBOOST_STRING_TYPENAME InputT::iterator InputIt=From;
                     for(; InsertIt!=End && InputIt!=To; InsertIt++, InputIt++ )
                     {
                         *InputIt=*InsertIt;
@@ -105,12 +105,12 @@
                 template< typename InputT, typename ForwardIteratorT >
                 void operator()(
                     InputT& Input,
-                    BOOST_STRING_TYPENAME InputT::iterator From,
-                    BOOST_STRING_TYPENAME InputT::iterator To,
+                    NDNBOOST_STRING_TYPENAME InputT::iterator From,
+                    NDNBOOST_STRING_TYPENAME InputT::iterator To,
                     ForwardIteratorT Begin,
                     ForwardIteratorT End ) 
                 {
-                    BOOST_STRING_TYPENAME InputT::iterator At=Input.erase( From, To );
+                    NDNBOOST_STRING_TYPENAME InputT::iterator At=Input.erase( From, To );
                     if ( Begin!=End )
                     {
                         if(!Input.empty())
@@ -132,8 +132,8 @@
                 template< typename InputT, typename ForwardIteratorT >
                 void operator()(
                     InputT& Input,
-                    BOOST_STRING_TYPENAME InputT::iterator From,
-                    BOOST_STRING_TYPENAME InputT::iterator To,
+                    NDNBOOST_STRING_TYPENAME InputT::iterator From,
+                    NDNBOOST_STRING_TYPENAME InputT::iterator To,
                     ForwardIteratorT Begin,
                     ForwardIteratorT End ) 
                 {
@@ -152,8 +152,8 @@
                 template< typename InputT, typename ForwardIteratorT >
                 void operator()(
                     InputT& Input,
-                    BOOST_STRING_TYPENAME InputT::iterator From,
-                    BOOST_STRING_TYPENAME InputT::iterator To,
+                    NDNBOOST_STRING_TYPENAME InputT::iterator From,
+                    NDNBOOST_STRING_TYPENAME InputT::iterator To,
                     ForwardIteratorT Begin,
                     ForwardIteratorT End )
                 {
@@ -166,8 +166,8 @@
             template< typename InputT, typename ForwardIteratorT >
             inline void replace(
                 InputT& Input,
-                BOOST_STRING_TYPENAME InputT::iterator From,
-                BOOST_STRING_TYPENAME InputT::iterator To,
+                NDNBOOST_STRING_TYPENAME InputT::iterator From,
+                NDNBOOST_STRING_TYPENAME InputT::iterator To,
                 ForwardIteratorT Begin,
                 ForwardIteratorT End )
             {
@@ -178,8 +178,8 @@
             template< typename InputT, typename InsertT >
             inline void replace(
                 InputT& Input,
-                BOOST_STRING_TYPENAME InputT::iterator From,
-                BOOST_STRING_TYPENAME InputT::iterator To,
+                NDNBOOST_STRING_TYPENAME InputT::iterator From,
+                NDNBOOST_STRING_TYPENAME InputT::iterator To,
                 const InsertT& Insert )
             {
                 if(From!=To)
@@ -197,4 +197,4 @@
 } // namespace ndnboost
 
 
-#endif  // BOOST_STRING_DETAIL_SEQUENCE_HPP
+#endif  // NDNBOOST_STRING_DETAIL_SEQUENCE_HPP
diff --git a/include/ndnboost/algorithm/string/detail/util.hpp b/include/ndnboost/algorithm/string/detail/util.hpp
index fa34548..c83893d 100644
--- a/include/ndnboost/algorithm/string/detail/util.hpp
+++ b/include/ndnboost/algorithm/string/detail/util.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_UTIL_DETAIL_HPP
-#define BOOST_STRING_UTIL_DETAIL_HPP
+#ifndef NDNBOOST_STRING_UTIL_DETAIL_HPP
+#define NDNBOOST_STRING_UTIL_DETAIL_HPP
 
 #include <ndnboost/algorithm/string/config.hpp>
 #include <functional>
@@ -88,7 +88,7 @@
             // copy range functor
             template< 
                 typename SeqT, 
-                typename IteratorT=BOOST_STRING_TYPENAME SeqT::const_iterator >
+                typename IteratorT=NDNBOOST_STRING_TYPENAME SeqT::const_iterator >
             struct copy_iterator_rangeF : 
                 public std::unary_function< iterator_range<IteratorT>, SeqT >
             {
@@ -103,4 +103,4 @@
 } // namespace ndnboost
 
 
-#endif  // BOOST_STRING_UTIL_DETAIL_HPP
+#endif  // NDNBOOST_STRING_UTIL_DETAIL_HPP
diff --git a/include/ndnboost/algorithm/string/find_format.hpp b/include/ndnboost/algorithm/string/find_format.hpp
index 5352eba..7b7dd3e 100644
--- a/include/ndnboost/algorithm/string/find_format.hpp
+++ b/include/ndnboost/algorithm/string/find_format.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_FIND_FORMAT_HPP
-#define BOOST_STRING_FIND_FORMAT_HPP
+#ifndef NDNBOOST_STRING_FIND_FORMAT_HPP
+#define NDNBOOST_STRING_FIND_FORMAT_HPP
 
 #include <deque>
 #include <ndnboost/detail/iterator.hpp>
@@ -62,18 +62,18 @@
             FormatterT Formatter )
         {
             // Concept check
-            BOOST_CONCEPT_ASSERT((
+            NDNBOOST_CONCEPT_ASSERT((
                 FinderConcept<
                     FinderT,
-                    BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
+                    NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
                 ));
-            BOOST_CONCEPT_ASSERT((
+            NDNBOOST_CONCEPT_ASSERT((
                 FormatterConcept<
                     FormatterT,
-                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
+                    FinderT,NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
                 ));
 
-            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(::ndnboost::as_literal(Input));
+            iterator_range<NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(::ndnboost::as_literal(Input));
 
             return detail::find_format_copy_impl(
                 Output,
@@ -96,15 +96,15 @@
             FormatterT Formatter )
         {
             // Concept check
-            BOOST_CONCEPT_ASSERT((
+            NDNBOOST_CONCEPT_ASSERT((
                 FinderConcept<
                     FinderT,
-                    BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
+                    NDNBOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
                 ));
-            BOOST_CONCEPT_ASSERT((
+            NDNBOOST_CONCEPT_ASSERT((
                 FormatterConcept<
                     FormatterT,
-                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
+                    FinderT,NDNBOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
                 ));
 
             return detail::find_format_copy_impl(
@@ -132,15 +132,15 @@
             FormatterT Formatter)
         {
             // Concept check
-            BOOST_CONCEPT_ASSERT((
+            NDNBOOST_CONCEPT_ASSERT((
                 FinderConcept<
                     FinderT,
-                    BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
+                    NDNBOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
                 ));
-            BOOST_CONCEPT_ASSERT(( 
+            NDNBOOST_CONCEPT_ASSERT(( 
                 FormatterConcept<
                     FormatterT,
-                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
+                    FinderT,NDNBOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
                 ));
 
             detail::find_format_impl(
@@ -181,18 +181,18 @@
             FormatterT Formatter)
         {
             // Concept check
-            BOOST_CONCEPT_ASSERT(( 
+            NDNBOOST_CONCEPT_ASSERT(( 
                 FinderConcept<
                     FinderT,
-                    BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
+                    NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
                 ));
-            BOOST_CONCEPT_ASSERT(( 
+            NDNBOOST_CONCEPT_ASSERT(( 
                 FormatterConcept<
                     FormatterT,
-                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
+                    FinderT,NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
                 ));
 
-            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(::ndnboost::as_literal(Input));
+            iterator_range<NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(::ndnboost::as_literal(Input));
 
             return detail::find_format_all_copy_impl(
                 Output,
@@ -216,15 +216,15 @@
             FormatterT Formatter )
         {
             // Concept check
-            BOOST_CONCEPT_ASSERT((
+            NDNBOOST_CONCEPT_ASSERT((
                 FinderConcept<
                     FinderT,
-                    BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
+                    NDNBOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
                 ));
-            BOOST_CONCEPT_ASSERT((
+            NDNBOOST_CONCEPT_ASSERT((
                 FormatterConcept<
                     FormatterT,
-                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
+                    FinderT,NDNBOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
                 ));
 
             return detail::find_format_all_copy_impl(
@@ -254,15 +254,15 @@
             FormatterT Formatter )
         {
             // Concept check
-            BOOST_CONCEPT_ASSERT((
+            NDNBOOST_CONCEPT_ASSERT((
                 FinderConcept<
                     FinderT,
-                    BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
+                    NDNBOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
                 ));
-            BOOST_CONCEPT_ASSERT((
+            NDNBOOST_CONCEPT_ASSERT((
                 FormatterConcept<
                     FormatterT,
-                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
+                    FinderT,NDNBOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>
                 ));
 
             detail::find_format_all_impl(
@@ -284,4 +284,4 @@
 } // namespace ndnboost
 
 
-#endif  // BOOST_STRING_FIND_FORMAT_HPP
+#endif  // NDNBOOST_STRING_FIND_FORMAT_HPP
diff --git a/include/ndnboost/algorithm/string/finder.hpp b/include/ndnboost/algorithm/string/finder.hpp
index 420e015..4bc64d2 100644
--- a/include/ndnboost/algorithm/string/finder.hpp
+++ b/include/ndnboost/algorithm/string/finder.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_FINDER_HPP
-#define BOOST_STRING_FINDER_HPP
+#ifndef NDNBOOST_STRING_FINDER_HPP
+#define NDNBOOST_STRING_FINDER_HPP
 
 #include <ndnboost/algorithm/string/config.hpp>
 
@@ -48,13 +48,13 @@
         */
         template<typename RangeT>
         inline detail::first_finderF<
-            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
+            NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
             is_equal>
         first_finder( const RangeT& Search )
         {
             return 
                 detail::first_finderF<
-                    BOOST_STRING_TYPENAME 
+                    NDNBOOST_STRING_TYPENAME 
                         range_const_iterator<RangeT>::type,
                         is_equal>( ::ndnboost::as_literal(Search), is_equal() ) ;
         }
@@ -65,14 +65,14 @@
         */
         template<typename RangeT,typename PredicateT>
         inline detail::first_finderF<
-            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
+            NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
             PredicateT>
         first_finder( 
             const RangeT& Search, PredicateT Comp )
         {
             return 
                 detail::first_finderF<
-                    BOOST_STRING_TYPENAME 
+                    NDNBOOST_STRING_TYPENAME 
                         range_const_iterator<RangeT>::type,
                     PredicateT>( ::ndnboost::as_literal(Search), Comp );
         }
@@ -89,13 +89,13 @@
         */
         template<typename RangeT>
         inline detail::last_finderF<
-            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
+            NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
             is_equal>
         last_finder( const RangeT& Search )
         {
             return 
                 detail::last_finderF<
-                    BOOST_STRING_TYPENAME 
+                    NDNBOOST_STRING_TYPENAME 
                         range_const_iterator<RangeT>::type,
                     is_equal>( ::ndnboost::as_literal(Search), is_equal() );
         }
@@ -105,13 +105,13 @@
         */
         template<typename RangeT, typename PredicateT>
         inline detail::last_finderF<
-            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
+            NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
             PredicateT>
         last_finder( const RangeT& Search, PredicateT Comp )
         {
             return 
                 detail::last_finderF<
-                    BOOST_STRING_TYPENAME 
+                    NDNBOOST_STRING_TYPENAME 
                         range_const_iterator<RangeT>::type,
                     PredicateT>( ::ndnboost::as_literal(Search), Comp ) ;
         }
@@ -129,7 +129,7 @@
         */
         template<typename RangeT>
         inline detail::nth_finderF<
-            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
+            NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
             is_equal>
         nth_finder( 
             const RangeT& Search, 
@@ -137,7 +137,7 @@
         {
             return 
                 detail::nth_finderF<
-                    BOOST_STRING_TYPENAME 
+                    NDNBOOST_STRING_TYPENAME 
                         range_const_iterator<RangeT>::type,
                     is_equal>( ::ndnboost::as_literal(Search), Nth, is_equal() ) ;
         }
@@ -147,7 +147,7 @@
         */
         template<typename RangeT, typename PredicateT>
         inline detail::nth_finderF<
-            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
+            NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
             PredicateT>
         nth_finder( 
             const RangeT& Search, 
@@ -156,7 +156,7 @@
         {
             return 
                 detail::nth_finderF<
-                    BOOST_STRING_TYPENAME 
+                    NDNBOOST_STRING_TYPENAME 
                         range_const_iterator<RangeT>::type,
                     PredicateT>( ::ndnboost::as_literal(Search), Nth, Comp );
         }
@@ -267,4 +267,4 @@
 } // namespace ndnboost
 
 
-#endif  // BOOST_STRING_FINDER_HPP
+#endif  // NDNBOOST_STRING_FINDER_HPP
diff --git a/include/ndnboost/algorithm/string/formatter.hpp b/include/ndnboost/algorithm/string/formatter.hpp
index 5739b40..746d268 100644
--- a/include/ndnboost/algorithm/string/formatter.hpp
+++ b/include/ndnboost/algorithm/string/formatter.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_FORMATTER_HPP
-#define BOOST_STRING_FORMATTER_HPP
+#ifndef NDNBOOST_STRING_FORMATTER_HPP
+#define NDNBOOST_STRING_FORMATTER_HPP
 
 #include <ndnboost/detail/iterator.hpp>
 #include <ndnboost/range/value_type.hpp>
@@ -45,12 +45,12 @@
         template<typename RangeT>
         inline detail::const_formatF<
             iterator_range<
-                BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >
+                NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >
         const_formatter(const RangeT& Format)
         {
             return detail::const_formatF<
                 iterator_range<
-                    BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >(::ndnboost::as_literal(Format));
+                    NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >(::ndnboost::as_literal(Format));
         }
 
         //! Identity formatter
@@ -63,12 +63,12 @@
         template<typename RangeT>
         inline detail::identity_formatF<
             iterator_range<
-                BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >
+                NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >
         identity_formatter()
         {
             return detail::identity_formatF<
                 iterator_range<
-                    BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
+                    NDNBOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
         }
 
         //! Empty formatter
@@ -82,11 +82,11 @@
         */
         template<typename RangeT>
         inline detail::empty_formatF< 
-            BOOST_STRING_TYPENAME range_value<RangeT>::type>
+            NDNBOOST_STRING_TYPENAME range_value<RangeT>::type>
         empty_formatter(const RangeT&)
         {
             return detail::empty_formatF<
-                BOOST_STRING_TYPENAME range_value<RangeT>::type>();
+                NDNBOOST_STRING_TYPENAME range_value<RangeT>::type>();
         }
 
         //! Empty formatter
@@ -117,4 +117,4 @@
 } // namespace ndnboost
 
 
-#endif  // BOOST_FORMATTER_HPP
+#endif  // NDNBOOST_FORMATTER_HPP
diff --git a/include/ndnboost/algorithm/string/replace.hpp b/include/ndnboost/algorithm/string/replace.hpp
index 11afce4..0d15e64 100644
--- a/include/ndnboost/algorithm/string/replace.hpp
+++ b/include/ndnboost/algorithm/string/replace.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_REPLACE_HPP
-#define BOOST_STRING_REPLACE_HPP
+#ifndef NDNBOOST_STRING_REPLACE_HPP
+#define NDNBOOST_STRING_REPLACE_HPP
 
 #include <ndnboost/algorithm/string/config.hpp>
 
@@ -57,7 +57,7 @@
             OutputIteratorT Output,
             const Range1T& Input,
             const iterator_range<
-                BOOST_STRING_TYPENAME 
+                NDNBOOST_STRING_TYPENAME 
                     range_const_iterator<Range1T>::type>& SearchRange,
             const Range2T& Format)
         {
@@ -76,7 +76,7 @@
         inline SequenceT replace_range_copy( 
             const SequenceT& Input,
             const iterator_range<
-                BOOST_STRING_TYPENAME 
+                NDNBOOST_STRING_TYPENAME 
                     range_const_iterator<SequenceT>::type>& SearchRange,
             const RangeT& Format)
         {
@@ -99,7 +99,7 @@
         inline void replace_range( 
             SequenceT& Input,
             const iterator_range<
-                BOOST_STRING_TYPENAME 
+                NDNBOOST_STRING_TYPENAME 
                     range_iterator<SequenceT>::type>& SearchRange,
             const RangeT& Format)
         {
@@ -925,4 +925,4 @@
 
 } // namespace ndnboost
 
-#endif  // BOOST_REPLACE_HPP
+#endif  // NDNBOOST_REPLACE_HPP
diff --git a/include/ndnboost/algorithm/string/sequence_traits.hpp b/include/ndnboost/algorithm/string/sequence_traits.hpp
index b0de2d7..a337fa3 100644
--- a/include/ndnboost/algorithm/string/sequence_traits.hpp
+++ b/include/ndnboost/algorithm/string/sequence_traits.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_SEQUENCE_TRAITS_HPP
-#define BOOST_STRING_SEQUENCE_TRAITS_HPP
+#ifndef NDNBOOST_STRING_SEQUENCE_TRAITS_HPP
+#define NDNBOOST_STRING_SEQUENCE_TRAITS_HPP
 
 #include <ndnboost/config.hpp>
 #include <ndnboost/mpl/bool.hpp>
@@ -36,7 +36,7 @@
 
 //  sequence traits  -----------------------------------------------//
 
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#ifdef NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
 
         //! Native replace tester
         /*!
@@ -76,7 +76,7 @@
         */
         no_type has_const_time_erase_tester(...);
 
-#endif //BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#endif //NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
 
         //! Native replace trait
         /*!
@@ -86,20 +86,20 @@
         class has_native_replace
         {
 
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#ifdef NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
         private:
             static T* t;
         public:
-            BOOST_STATIC_CONSTANT(bool, value=(
+            NDNBOOST_STATIC_CONSTANT(bool, value=(
                 sizeof(has_native_replace_tester(t))==sizeof(yes_type) ) );
-#else  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#else  // NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
         public:
-#    if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+#    if NDNBOOST_WORKAROUND( __IBMCPP__, <= 600 )
             enum { value = false };
 #    else
-            BOOST_STATIC_CONSTANT(bool, value=false);
-#    endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+            NDNBOOST_STATIC_CONSTANT(bool, value=false);
+#    endif // NDNBOOST_WORKAROUND( __IBMCPP__, <= 600 )
+#endif // NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
 
 
             typedef mpl::bool_<has_native_replace<T>::value> type;
@@ -114,20 +114,20 @@
         template< typename T >
         class has_stable_iterators
         {
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#ifdef NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
         private:
             static T* t;
         public:
-            BOOST_STATIC_CONSTANT(bool, value=(
+            NDNBOOST_STATIC_CONSTANT(bool, value=(
                 sizeof(has_stable_iterators_tester(t))==sizeof(yes_type) ) );
-#else  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#else  // NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
         public:
-#    if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+#    if NDNBOOST_WORKAROUND( __IBMCPP__, <= 600 )
             enum { value = false };
 #    else
-            BOOST_STATIC_CONSTANT(bool, value=false);
-#    endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+            NDNBOOST_STATIC_CONSTANT(bool, value=false);
+#    endif // NDNBOOST_WORKAROUND( __IBMCPP__, <= 600 )
+#endif // NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
 
             typedef mpl::bool_<has_stable_iterators<T>::value> type;
         };
@@ -141,20 +141,20 @@
         template< typename T >
         class has_const_time_insert
         {
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#ifdef NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
         private:
             static T* t;
         public:
-            BOOST_STATIC_CONSTANT(bool, value=(
+            NDNBOOST_STATIC_CONSTANT(bool, value=(
                 sizeof(has_const_time_insert_tester(t))==sizeof(yes_type) ) );
-#else  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#else  // NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
         public:
-#    if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+#    if NDNBOOST_WORKAROUND( __IBMCPP__, <= 600 )
             enum { value = false };
 #    else
-            BOOST_STATIC_CONSTANT(bool, value=false);
-#    endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+            NDNBOOST_STATIC_CONSTANT(bool, value=false);
+#    endif // NDNBOOST_WORKAROUND( __IBMCPP__, <= 600 )
+#endif // NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
 
             typedef mpl::bool_<has_const_time_insert<T>::value> type;
         };
@@ -168,20 +168,20 @@
         template< typename T >
         class has_const_time_erase
         {
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#ifdef NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
         private:
             static T* t;
         public:
-            BOOST_STATIC_CONSTANT(bool, value=(
+            NDNBOOST_STATIC_CONSTANT(bool, value=(
                 sizeof(has_const_time_erase_tester(t))==sizeof(yes_type) ) );
-#else  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#else  // NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
         public:
-#    if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+#    if NDNBOOST_WORKAROUND( __IBMCPP__, <= 600 )
             enum { value = false };
 #    else
-            BOOST_STATIC_CONSTANT(bool, value=false);
-#    endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+            NDNBOOST_STATIC_CONSTANT(bool, value=false);
+#    endif // NDNBOOST_WORKAROUND( __IBMCPP__, <= 600 )
+#endif // NDNBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
 
             typedef mpl::bool_<has_const_time_erase<T>::value> type;
         };
@@ -190,4 +190,4 @@
 } // namespace ndnboost
 
 
-#endif  // BOOST_STRING_SEQUENCE_TRAITS_HPP
+#endif  // NDNBOOST_STRING_SEQUENCE_TRAITS_HPP
diff --git a/include/ndnboost/algorithm/string/yes_no_type.hpp b/include/ndnboost/algorithm/string/yes_no_type.hpp
index 740c7b1..97f1d8d 100644
--- a/include/ndnboost/algorithm/string/yes_no_type.hpp
+++ b/include/ndnboost/algorithm/string/yes_no_type.hpp
@@ -8,8 +8,8 @@
 
 //  See http://www.boost.org/ for updates, documentation, and revision history.
 
-#ifndef BOOST_STRING_YES_NO_TYPE_DETAIL_HPP
-#define BOOST_STRING_YES_NO_TYPE_DETAIL_HPP
+#ifndef NDNBOOST_STRING_YES_NO_TYPE_DETAIL_HPP
+#define NDNBOOST_STRING_YES_NO_TYPE_DETAIL_HPP
 
 namespace ndnboost {
     namespace algorithm {
@@ -30,4 +30,4 @@
 } // namespace ndnboost
 
 
-#endif  // BOOST_STRING_YES_NO_TYPE_DETAIL_HPP
+#endif  // NDNBOOST_STRING_YES_NO_TYPE_DETAIL_HPP
