diff --git a/examples/trie.cc b/examples/trie.cc
index 2c35ac4..1b9fb5a 100644
--- a/examples/trie.cc
+++ b/examples/trie.cc
@@ -254,24 +254,6 @@
       {
         return this->container2_;
       }
-      // template<>
-      // inline typename policy_container::container1_type &
-      // get<1> ()
-      // {
-      //   return this->container1_;
-      // }
-      // inline void
-      // set_max_size (size_t max_size)
-      // {
-      //   this->container1_.set_max_size (max_size);
-      //   this->container2_.set_max_size (max_size);
-      // }
-
-      // inline size_t
-      // get_max_size () const
-      // {
-      //   return this->container1_.get_max_size ();
-      // }
     };
   };
 };
diff --git a/model/ccnx-content-store-impl.h b/model/ccnx-content-store-impl.h
index e2ee632..9619341 100644
--- a/model/ccnx-content-store-impl.h
+++ b/model/ccnx-content-store-impl.h
@@ -92,9 +92,12 @@
 void 
 CcnxContentStoreImpl<Container>::Print (std::ostream &os) const
 {
-  BOOST_FOREACH (const typename Container::parent_trie &item, this->getPolicy ())
+  for (typename Container::policy_container::const_iterator item = this->getPolicy ().begin ();
+       item != this->getPolicy ().end ();
+       item++)
+  // BOOST_FOREACH (const typename Container::parent_trie &item, this->getPolicy ())
     {
-      os << item.payload ()->GetName () << std::endl;
+      os << item->payload ()->GetName () << std::endl;
     }
 }
 
diff --git a/utils/trie.h b/utils/trie.h
index ebaa921..f65e242 100644
--- a/utils/trie.h
+++ b/utils/trie.h
@@ -345,9 +345,12 @@
     return this;
 
   typedef trie<FullKey, Payload, PayloadTraits, PolicyHook> trie;
-  BOOST_FOREACH (trie &subnode, children_)
+  for (typename trie::unordered_set::iterator subnode = children_.begin ();
+       subnode != children_.end ();
+       subnode++ )
+  // BOOST_FOREACH (trie &subnode, children_)
     {
-      iterator value = subnode.find ();
+      iterator value = subnode->find ();
       if (value != 0)
 	return value;
     }
@@ -365,11 +368,14 @@
     return this;
 
   typedef trie<FullKey, Payload, PayloadTraits, PolicyHook> trie;
-  BOOST_FOREACH (const trie &subnode, children_)
+  for (typename trie::unordered_set::iterator subnode = children_.begin ();
+       subnode != children_.end ();
+       subnode++ )
+  // BOOST_FOREACH (const trie &subnode, children_)
     {
-      iterator value = subnode.find ();
+      iterator value = subnode->find ();
       if (value != 0)
-	return value;
+        return value;
     }
   
   return 0;
@@ -407,13 +413,17 @@
 {
   os << "# " << trie_node.key_ << ((trie_node.payload_ != 0)?"*":"") << std::endl;
   typedef trie<FullKey, Payload, PayloadTraits, PolicyHook> trie;
-  BOOST_FOREACH (const trie &subnode, trie_node.children_)
+
+  for (typename trie::unordered_set::const_iterator subnode = trie_node.children_.begin ();
+       subnode != trie_node.children_.end ();
+       subnode++ )
+  // BOOST_FOREACH (const trie &subnode, trie_node.children_)
     {
       os << "\"" << &trie_node << "\"" << " [label=\"" << trie_node.key_ << ((trie_node.payload_ != 0)?"*":"") << "\"]\n";
-      os << "\"" << &subnode << "\"" << " [label=\"" << subnode.key_ << ((subnode.payload_ != 0)?"*":"") << "\"]""\n";
+      os << "\"" << &(*subnode) << "\"" << " [label=\"" << subnode->key_ << ((subnode->payload_ != 0)?"*":"") << "\"]""\n";
       
-      os << "\"" << &trie_node << "\"" << " -> " << "\"" << &subnode << "\"" << "\n";
-      os << subnode;
+      os << "\"" << &trie_node << "\"" << " -> " << "\"" << &(*subnode) << "\"" << "\n";
+      os << *subnode;
     }
 
   return os;
@@ -434,9 +444,12 @@
   os << "\n";
 
   typedef trie<FullKey, Payload, PayloadTraits, PolicyHook> trie;
-  BOOST_FOREACH (const trie &subnode, children_)
+  for (typename trie::unordered_set::const_iterator subnode = children_.begin ();
+       subnode != children_.end ();
+       subnode++ )
+  // BOOST_FOREACH (const trie &subnode, children_)
     {
-      subnode.PrintStat (os);
+      subnode->PrintStat (os);
     }
 }
 
