Replacing boost::multi_index to std::set for OutgoingFaces in PIT entry
diff --git a/bindings/modulegen__gcc_ILP32.py b/bindings/modulegen__gcc_ILP32.py
index c0a2ee1..c950b42 100644
--- a/bindings/modulegen__gcc_ILP32.py
+++ b/bindings/modulegen__gcc_ILP32.py
@@ -302,6 +302,7 @@
     module.add_class('UnknownHeaderException')
     ## ndn-app-face.h (module 'ndnSIM'): ns3::ndn::AppFace [class]
     module.add_class('AppFace', parent=root_module['ns3::ndn::Face'])
+    module.add_container('std::vector< ns3::Ptr< ns3::ndn::Face > >', 'ns3::Ptr< ns3::ndn::Face >', container_type='vector')
     module.add_container('std::list< boost::reference_wrapper< std::string const > >', 'boost::reference_wrapper< std::basic_string< char, std::char_traits< char >, std::allocator< char > > const >', container_type='list')
     module.add_container('std::list< std::string >', 'std::string', container_type='list')
     
@@ -358,13 +359,12 @@
     module.add_class('IncomingFace')
     ## ndn-pit-entry-outgoing-face.h (module 'ndnSIM'): ns3::ndn::pit::OutgoingFace [struct]
     module.add_class('OutgoingFace')
-    ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::pit::OutgoingFaceContainer [struct]
-    module.add_class('OutgoingFaceContainer')
     ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::pit::i_face [class]
     module.add_class('i_face')
     ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::pit::i_retx [class]
     module.add_class('i_retx')
     module.add_container('std::set< ns3::ndn::pit::IncomingFace >', 'ns3::ndn::pit::IncomingFace', container_type='set')
+    module.add_container('std::set< ns3::ndn::pit::OutgoingFace >', 'ns3::ndn::pit::OutgoingFace', container_type='set')
     module.add_container('std::set< unsigned int >', 'unsigned int', container_type='set')
 
 def register_methods(root_module):
@@ -494,7 +494,6 @@
     register_Ns3NdnPitEntry_methods(root_module, root_module['ns3::ndn::pit::Entry'])
     register_Ns3NdnPitIncomingFace_methods(root_module, root_module['ns3::ndn::pit::IncomingFace'])
     register_Ns3NdnPitOutgoingFace_methods(root_module, root_module['ns3::ndn::pit::OutgoingFace'])
-    register_Ns3NdnPitOutgoingFaceContainer_methods(root_module, root_module['ns3::ndn::pit::OutgoingFaceContainer'])
     register_Ns3NdnPitI_face_methods(root_module, root_module['ns3::ndn::pit::i_face'])
     register_Ns3NdnPitI_retx_methods(root_module, root_module['ns3::ndn::pit::i_retx'])
     return
@@ -4649,6 +4648,11 @@
                    'ns3::Ptr< ns3::ndn::Face >', 
                    [param('uint32_t', 'face')], 
                    is_const=True, is_virtual=True)
+    ## ndn-l3-protocol.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Face> ns3::ndn::L3Protocol::GetFaceById(uint32_t face) const [member function]
+    cls.add_method('GetFaceById', 
+                   'ns3::Ptr< ns3::ndn::Face >', 
+                   [param('uint32_t', 'face')], 
+                   is_const=True, is_virtual=True)
     ## ndn-l3-protocol.h (module 'ndnSIM'): void ns3::ndn::L3Protocol::RemoveFace(ns3::Ptr<ns3::ndn::Face> face) [member function]
     cls.add_method('RemoveFace', 
                    'void', 
@@ -4659,6 +4663,16 @@
                    'ns3::Ptr< ns3::ndn::Face >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'netDevice')], 
                    is_const=True, is_virtual=True)
+    ## ndn-l3-protocol.h (module 'ndnSIM'): static uint64_t ns3::ndn::L3Protocol::GetInterestCounter() [member function]
+    cls.add_method('GetInterestCounter', 
+                   'uint64_t', 
+                   [], 
+                   is_static=True)
+    ## ndn-l3-protocol.h (module 'ndnSIM'): static uint64_t ns3::ndn::L3Protocol::GetDataCounter() [member function]
+    cls.add_method('GetDataCounter', 
+                   'uint64_t', 
+                   [], 
+                   is_static=True)
     ## ndn-l3-protocol.h (module 'ndnSIM'): void ns3::ndn::L3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -5113,9 +5127,9 @@
                    'std::_Rb_tree_const_iterator< ns3::ndn::pit::IncomingFace >', 
                    [param('ns3::Ptr< ns3::ndn::Face >', 'face')], 
                    is_virtual=True)
-    ## ndn-pit-entry.h (module 'ndnSIM'): boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<ns3::ndn::pit::OutgoingFace, std::allocator<ns3::ndn::pit::OutgoingFace> > > > > ns3::ndn::pit::Entry::AddOutgoing(ns3::Ptr<ns3::ndn::Face> face) [member function]
+    ## ndn-pit-entry.h (module 'ndnSIM'): std::_Rb_tree_const_iterator<ns3::ndn::pit::OutgoingFace> ns3::ndn::pit::Entry::AddOutgoing(ns3::Ptr<ns3::ndn::Face> face) [member function]
     cls.add_method('AddOutgoing', 
-                   'boost::multi_index::detail::bidir_node_iterator< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::index_node_base< ns3::ndn::pit::OutgoingFace, std::allocator< ns3::ndn::pit::OutgoingFace > > > > >', 
+                   'std::_Rb_tree_const_iterator< ns3::ndn::pit::OutgoingFace >', 
                    [param('ns3::Ptr< ns3::ndn::Face >', 'face')], 
                    is_virtual=True)
     ## ndn-pit-entry.h (module 'ndnSIM'): void ns3::ndn::pit::Entry::AddSeenNonce(uint32_t nonce) [member function]
@@ -5162,9 +5176,9 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## ndn-pit-entry.h (module 'ndnSIM'): boost::multi_index::multi_index_container<ns3::ndn::pit::OutgoingFace, boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::tag<ns3::ndn::pit::i_face, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::member<ns3::ndn::pit::OutgoingFace, ns3::Ptr<ns3::ndn::Face>, &(ns3::ndn::pit::OutgoingFace::m_face)>, mpl_::na>, boost::multi_index::ordered_non_unique<boost::multi_index::tag<ns3::ndn::pit::i_retx, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::member<ns3::ndn::pit::OutgoingFace, unsigned int, &(ns3::ndn::pit::OutgoingFace::m_retxCount)>, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::allocator<ns3::ndn::pit::OutgoingFace> > const & ns3::ndn::pit::Entry::GetOutgoing() const [member function]
+    ## ndn-pit-entry.h (module 'ndnSIM'): std::set<ns3::ndn::pit::OutgoingFace, std::less<ns3::ndn::pit::OutgoingFace>, std::allocator<ns3::ndn::pit::OutgoingFace> > const & ns3::ndn::pit::Entry::GetOutgoing() const [member function]
     cls.add_method('GetOutgoing', 
-                   'boost::multi_index::multi_index_container< ns3::ndn::pit::OutgoingFace, boost::multi_index::indexed_by< boost::multi_index::ordered_unique< boost::multi_index::tag< ns3::ndn::pit::i_face, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, boost::multi_index::member< ns3::ndn::pit::OutgoingFace, ns3::Ptr< ns3::ndn::Face >, & ( ns3::ndn::pit::OutgoingFace::m_face ) >, mpl_::na >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< ns3::ndn::pit::i_retx, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, boost::multi_index::member< ns3::ndn::pit::OutgoingFace, unsigned int, & ( ns3::ndn::pit::OutgoingFace::m_retxCount ) >, mpl_::na >, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, std::allocator< ns3::ndn::pit::OutgoingFace > > const &', 
+                   'std::set< ns3::ndn::pit::OutgoingFace > const &', 
                    [], 
                    is_const=True)
     ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::NameComponents const & ns3::ndn::pit::Entry::GetPrefix() const [member function]
@@ -5240,13 +5254,6 @@
     cls.add_instance_attribute('m_waitingInVain', 'bool', is_const=False)
     return
 
-def register_Ns3NdnPitOutgoingFaceContainer_methods(root_module, cls):
-    ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::pit::OutgoingFaceContainer::OutgoingFaceContainer() [constructor]
-    cls.add_constructor([])
-    ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::pit::OutgoingFaceContainer::OutgoingFaceContainer(ns3::ndn::pit::OutgoingFaceContainer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ndn::pit::OutgoingFaceContainer const &', 'arg0')])
-    return
-
 def register_Ns3NdnPitI_face_methods(root_module, cls):
     ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::pit::i_face::i_face() [constructor]
     cls.add_constructor([])
diff --git a/bindings/modulegen__gcc_LP64.py b/bindings/modulegen__gcc_LP64.py
index c0a2ee1..c950b42 100644
--- a/bindings/modulegen__gcc_LP64.py
+++ b/bindings/modulegen__gcc_LP64.py
@@ -302,6 +302,7 @@
     module.add_class('UnknownHeaderException')
     ## ndn-app-face.h (module 'ndnSIM'): ns3::ndn::AppFace [class]
     module.add_class('AppFace', parent=root_module['ns3::ndn::Face'])
+    module.add_container('std::vector< ns3::Ptr< ns3::ndn::Face > >', 'ns3::Ptr< ns3::ndn::Face >', container_type='vector')
     module.add_container('std::list< boost::reference_wrapper< std::string const > >', 'boost::reference_wrapper< std::basic_string< char, std::char_traits< char >, std::allocator< char > > const >', container_type='list')
     module.add_container('std::list< std::string >', 'std::string', container_type='list')
     
@@ -358,13 +359,12 @@
     module.add_class('IncomingFace')
     ## ndn-pit-entry-outgoing-face.h (module 'ndnSIM'): ns3::ndn::pit::OutgoingFace [struct]
     module.add_class('OutgoingFace')
-    ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::pit::OutgoingFaceContainer [struct]
-    module.add_class('OutgoingFaceContainer')
     ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::pit::i_face [class]
     module.add_class('i_face')
     ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::pit::i_retx [class]
     module.add_class('i_retx')
     module.add_container('std::set< ns3::ndn::pit::IncomingFace >', 'ns3::ndn::pit::IncomingFace', container_type='set')
+    module.add_container('std::set< ns3::ndn::pit::OutgoingFace >', 'ns3::ndn::pit::OutgoingFace', container_type='set')
     module.add_container('std::set< unsigned int >', 'unsigned int', container_type='set')
 
 def register_methods(root_module):
@@ -494,7 +494,6 @@
     register_Ns3NdnPitEntry_methods(root_module, root_module['ns3::ndn::pit::Entry'])
     register_Ns3NdnPitIncomingFace_methods(root_module, root_module['ns3::ndn::pit::IncomingFace'])
     register_Ns3NdnPitOutgoingFace_methods(root_module, root_module['ns3::ndn::pit::OutgoingFace'])
-    register_Ns3NdnPitOutgoingFaceContainer_methods(root_module, root_module['ns3::ndn::pit::OutgoingFaceContainer'])
     register_Ns3NdnPitI_face_methods(root_module, root_module['ns3::ndn::pit::i_face'])
     register_Ns3NdnPitI_retx_methods(root_module, root_module['ns3::ndn::pit::i_retx'])
     return
@@ -4649,6 +4648,11 @@
                    'ns3::Ptr< ns3::ndn::Face >', 
                    [param('uint32_t', 'face')], 
                    is_const=True, is_virtual=True)
+    ## ndn-l3-protocol.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Face> ns3::ndn::L3Protocol::GetFaceById(uint32_t face) const [member function]
+    cls.add_method('GetFaceById', 
+                   'ns3::Ptr< ns3::ndn::Face >', 
+                   [param('uint32_t', 'face')], 
+                   is_const=True, is_virtual=True)
     ## ndn-l3-protocol.h (module 'ndnSIM'): void ns3::ndn::L3Protocol::RemoveFace(ns3::Ptr<ns3::ndn::Face> face) [member function]
     cls.add_method('RemoveFace', 
                    'void', 
@@ -4659,6 +4663,16 @@
                    'ns3::Ptr< ns3::ndn::Face >', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'netDevice')], 
                    is_const=True, is_virtual=True)
+    ## ndn-l3-protocol.h (module 'ndnSIM'): static uint64_t ns3::ndn::L3Protocol::GetInterestCounter() [member function]
+    cls.add_method('GetInterestCounter', 
+                   'uint64_t', 
+                   [], 
+                   is_static=True)
+    ## ndn-l3-protocol.h (module 'ndnSIM'): static uint64_t ns3::ndn::L3Protocol::GetDataCounter() [member function]
+    cls.add_method('GetDataCounter', 
+                   'uint64_t', 
+                   [], 
+                   is_static=True)
     ## ndn-l3-protocol.h (module 'ndnSIM'): void ns3::ndn::L3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -5113,9 +5127,9 @@
                    'std::_Rb_tree_const_iterator< ns3::ndn::pit::IncomingFace >', 
                    [param('ns3::Ptr< ns3::ndn::Face >', 'face')], 
                    is_virtual=True)
-    ## ndn-pit-entry.h (module 'ndnSIM'): boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<ns3::ndn::pit::OutgoingFace, std::allocator<ns3::ndn::pit::OutgoingFace> > > > > ns3::ndn::pit::Entry::AddOutgoing(ns3::Ptr<ns3::ndn::Face> face) [member function]
+    ## ndn-pit-entry.h (module 'ndnSIM'): std::_Rb_tree_const_iterator<ns3::ndn::pit::OutgoingFace> ns3::ndn::pit::Entry::AddOutgoing(ns3::Ptr<ns3::ndn::Face> face) [member function]
     cls.add_method('AddOutgoing', 
-                   'boost::multi_index::detail::bidir_node_iterator< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::index_node_base< ns3::ndn::pit::OutgoingFace, std::allocator< ns3::ndn::pit::OutgoingFace > > > > >', 
+                   'std::_Rb_tree_const_iterator< ns3::ndn::pit::OutgoingFace >', 
                    [param('ns3::Ptr< ns3::ndn::Face >', 'face')], 
                    is_virtual=True)
     ## ndn-pit-entry.h (module 'ndnSIM'): void ns3::ndn::pit::Entry::AddSeenNonce(uint32_t nonce) [member function]
@@ -5162,9 +5176,9 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## ndn-pit-entry.h (module 'ndnSIM'): boost::multi_index::multi_index_container<ns3::ndn::pit::OutgoingFace, boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::tag<ns3::ndn::pit::i_face, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::member<ns3::ndn::pit::OutgoingFace, ns3::Ptr<ns3::ndn::Face>, &(ns3::ndn::pit::OutgoingFace::m_face)>, mpl_::na>, boost::multi_index::ordered_non_unique<boost::multi_index::tag<ns3::ndn::pit::i_retx, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::member<ns3::ndn::pit::OutgoingFace, unsigned int, &(ns3::ndn::pit::OutgoingFace::m_retxCount)>, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::allocator<ns3::ndn::pit::OutgoingFace> > const & ns3::ndn::pit::Entry::GetOutgoing() const [member function]
+    ## ndn-pit-entry.h (module 'ndnSIM'): std::set<ns3::ndn::pit::OutgoingFace, std::less<ns3::ndn::pit::OutgoingFace>, std::allocator<ns3::ndn::pit::OutgoingFace> > const & ns3::ndn::pit::Entry::GetOutgoing() const [member function]
     cls.add_method('GetOutgoing', 
-                   'boost::multi_index::multi_index_container< ns3::ndn::pit::OutgoingFace, boost::multi_index::indexed_by< boost::multi_index::ordered_unique< boost::multi_index::tag< ns3::ndn::pit::i_face, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, boost::multi_index::member< ns3::ndn::pit::OutgoingFace, ns3::Ptr< ns3::ndn::Face >, & ( ns3::ndn::pit::OutgoingFace::m_face ) >, mpl_::na >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< ns3::ndn::pit::i_retx, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, boost::multi_index::member< ns3::ndn::pit::OutgoingFace, unsigned int, & ( ns3::ndn::pit::OutgoingFace::m_retxCount ) >, mpl_::na >, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, std::allocator< ns3::ndn::pit::OutgoingFace > > const &', 
+                   'std::set< ns3::ndn::pit::OutgoingFace > const &', 
                    [], 
                    is_const=True)
     ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::NameComponents const & ns3::ndn::pit::Entry::GetPrefix() const [member function]
@@ -5240,13 +5254,6 @@
     cls.add_instance_attribute('m_waitingInVain', 'bool', is_const=False)
     return
 
-def register_Ns3NdnPitOutgoingFaceContainer_methods(root_module, cls):
-    ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::pit::OutgoingFaceContainer::OutgoingFaceContainer() [constructor]
-    cls.add_constructor([])
-    ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::pit::OutgoingFaceContainer::OutgoingFaceContainer(ns3::ndn::pit::OutgoingFaceContainer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ndn::pit::OutgoingFaceContainer const &', 'arg0')])
-    return
-
 def register_Ns3NdnPitI_face_methods(root_module, cls):
     ## ndn-pit-entry.h (module 'ndnSIM'): ns3::ndn::pit::i_face::i_face() [constructor]
     cls.add_constructor([])
diff --git a/model/pit/ndn-pit-entry-outgoing-face.cc b/model/pit/ndn-pit-entry-outgoing-face.cc
index 265529c..1ddf1d6 100644
--- a/model/pit/ndn-pit-entry-outgoing-face.cc
+++ b/model/pit/ndn-pit-entry-outgoing-face.cc
@@ -34,6 +34,26 @@
 {
 }
 
+OutgoingFace::OutgoingFace ()
+  : m_face (0)
+  , m_sendTime (0)
+  , m_retxCount (0)
+  , m_waitingInVain (false)
+{
+}
+
+OutgoingFace &
+OutgoingFace::operator = (const OutgoingFace &other)
+{
+  m_face = other.m_face;
+  m_sendTime = other.m_sendTime;
+  m_retxCount = other.m_retxCount;
+  m_waitingInVain = other.m_waitingInVain;
+
+  return *this;
+}
+
+
 void
 OutgoingFace::UpdateOnRetransmit ()
 {
diff --git a/model/pit/ndn-pit-entry-outgoing-face.h b/model/pit/ndn-pit-entry-outgoing-face.h
index 1a4d8b5..63c6378 100644
--- a/model/pit/ndn-pit-entry-outgoing-face.h
+++ b/model/pit/ndn-pit-entry-outgoing-face.h
@@ -51,6 +51,17 @@
   OutgoingFace (Ptr<Face> face);
 
   /**
+   * @brief Default constructor, necessary for Python bindings, but should not be used anywhere else.
+   */
+  OutgoingFace ();
+
+  /**
+   * @brie Copy operator
+   */
+  OutgoingFace &
+  operator = (const OutgoingFace &other);
+  
+  /**
    * @brief Update outgoing entry upon retransmission
    */
   void
diff --git a/model/pit/ndn-pit-entry.cc b/model/pit/ndn-pit-entry.cc
index b578c0e..765693f 100644
--- a/model/pit/ndn-pit-entry.cc
+++ b/model/pit/ndn-pit-entry.cc
@@ -90,8 +90,9 @@
 
   if (!ret.second)
     { // outgoing face already exists
-      m_outgoing.modify (ret.first,
-                         ll::bind (&OutgoingFace::UpdateOnRetransmit, ll::_1));
+      const_cast<OutgoingFace&>(*ret.first).UpdateOnRetransmit ();
+      // m_outgoing.modify (ret.first,
+      //                    ll::bind (&OutgoingFace::UpdateOnRetransmit, ll::_1));
     }
 
   return ret.first;
@@ -129,9 +130,10 @@
   out_iterator item = m_outgoing.find (face);
   if (item == m_outgoing.end ())
     return;
-  
-  m_outgoing.modify (item,
-                     (&ll::_1)->*&OutgoingFace::m_waitingInVain = true);
+
+  const_cast<OutgoingFace&>(*item).m_waitingInVain = true;
+  // m_outgoing.modify (item,
+  //                    (&ll::_1)->*&OutgoingFace::m_waitingInVain = true);
 }
 
 
diff --git a/model/pit/ndn-pit-entry.h b/model/pit/ndn-pit-entry.h
index 8dc5d24..55aa7de 100644
--- a/model/pit/ndn-pit-entry.h
+++ b/model/pit/ndn-pit-entry.h
@@ -57,25 +57,26 @@
  * Indexes:
  * - by face (may be it will be possible to replace with just the std::map)
  */
-struct OutgoingFaceContainer
-{
-  /// @cond include_hidden
-  typedef boost::multi_index::multi_index_container<
-    OutgoingFace,
-    boost::multi_index::indexed_by<
-      // For fast access to elements using NdnFace
-      boost::multi_index::ordered_unique<
-        boost::multi_index::tag<i_face>,
-        boost::multi_index::member<OutgoingFace, Ptr<Face>, &OutgoingFace::m_face>
-      >,
-      boost::multi_index::ordered_non_unique<
-        boost::multi_index::tag<i_retx>,
-        boost::multi_index::member<OutgoingFace, uint32_t, &OutgoingFace::m_retxCount>
-      >    
-    >
-   > type;
-  /// @endcond
-};
+// struct OutgoingFaceContainer
+// {
+//   /// @cond include_hidden
+//   typedef boost::multi_index::multi_index_container<
+//     OutgoingFace,
+//     boost::multi_index::indexed_by<
+//       // For fast access to elements using NdnFace
+//       boost::multi_index::ordered_unique<
+//         boost::multi_index::tag<i_face>,
+//         boost::multi_index::member<OutgoingFace, Ptr<Face>, &OutgoingFace::m_face>
+//       >
+//       // ,
+//       // boost::multi_index::ordered_non_unique<
+//       //   boost::multi_index::tag<i_retx>,
+//       //   boost::multi_index::member<OutgoingFace, uint32_t, &OutgoingFace::m_retxCount>
+//       // >    
+//     >
+//    > type;
+//   /// @endcond
+// };
 
 
 /**
@@ -90,7 +91,8 @@
   typedef std::set< IncomingFace > in_container; ///< @brief incoming faces container type
   typedef in_container::iterator in_iterator;                ///< @brief iterator to incoming faces
 
-  typedef OutgoingFaceContainer::type out_container; ///< @brief outgoing faces container type
+  // typedef OutgoingFaceContainer::type out_container; ///< @brief outgoing faces container type
+  typedef std::set< OutgoingFace > out_container; ///< @brief outgoing faces container type
   typedef out_container::iterator out_iterator;              ///< @brief iterator to outgoing faces
 
   typedef std::set< uint32_t > nonce_container;  ///< @brief nonce container type