diff --git a/model/ccnx-bestroute-strategy.cc b/model/ccnx-bestroute-strategy.cc
new file mode 100644
index 0000000..e27564e
--- /dev/null
+++ b/model/ccnx-bestroute-strategy.cc
@@ -0,0 +1,85 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+#include "ccnx-bestroute-strategy.h"
+#include "ns3/assert.h"
+
+#include "ccnx-route.h"
+
+
+NS_LOG_COMPONENT_DEFINE ("CcnxBestRouteStrategy");
+namespace __ccnx_private {
+    
+    struct CcnxFibFaceMetricByFace;
+}
+
+namespace ns3 
+{
+    
+using namespace __ccnx_private;
+    
+NS_OBJECT_ENSURE_REGISTERED (CcnxBestRouteStrategy);
+  
+TypeId CcnxBestRouteStrategy::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::CcnxBestRouteStrategy")
+  .SetGroupName ("Ccnx")
+  .SetParent<Object> ()
+  ;
+  return tid;
+}
+    
+CcnxBestRouteStrategy::CcnxBestRouteStrategy ()
+{
+}
+    
+    
+bool
+CcnxBestRouteStrategy::PropagateInterest (CcnxPitEntryContainer::type::iterator pitEntry, 
+                                          CcnxFibEntryContainer::type::iterator fibEntry,
+                                          const Ptr<CcnxFace> &incomingFace,
+                                          Ptr<CcnxInterestHeader> &header,
+                                          const Ptr<const Packet> &packet,
+                                          SendCallback ucb)
+{
+  NS_LOG_FUNCTION(this);
+  NS_LOG_INFO(*fibEntry);
+    
+  Ptr<CcnxFace> bestFace = fibEntry->FindBestCandidate(0);
+   
+  if( bestFace == NULL )
+    {
+      return false;
+    }
+  else
+    {
+      bool tryResult = GetPit ()->TryAddOutgoing (pitEntry, bestFace);
+      if (tryResult == false)
+      {
+        return false;
+      }
+          
+      ucb (bestFace, header, packet->Copy());
+    }
+     
+  return true;
+}
+    
+} //namespace ns3
diff --git a/model/ccnx-bestroute-strategy.h b/model/ccnx-bestroute-strategy.h
new file mode 100644
index 0000000..8abaae9
--- /dev/null
+++ b/model/ccnx-bestroute-strategy.h
@@ -0,0 +1,62 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+
+#ifndef CCNX_BESTROUTE_STRATEGY_H
+#define CCNX_BESTROUTE_STRATEGY_H
+
+#include "ns3/packet.h"
+#include "ns3/callback.h"
+#include "ns3/object.h"
+#include "ns3/log.h"
+
+#include "ccnx-forwarding-strategy.h"
+#include "ccnx.h"
+#include "ccnx-fib.h"
+
+namespace ns3 
+{
+    
+class CcnxFace;
+class CcnxInterestHeader;
+    
+/**
+ * \ingroup ccnx
+ * \brief Best route strategy
+ */
+    
+class CcnxBestRouteStrategy : public CcnxForwardingStrategy
+{
+public:
+    static TypeId GetTypeId (void);
+        
+    CcnxBestRouteStrategy ();
+        
+    bool PropagateInterest  (CcnxPitEntryContainer::type::iterator pitEntry,
+                             CcnxFibEntryContainer::type::iterator fibEntry,
+                             const Ptr<CcnxFace> &incomingFace,
+                             Ptr<CcnxInterestHeader> &header,
+                             const Ptr<const Packet> &packet,
+                             SendCallback ucb);
+};
+
+} //namespace ns3
+
+#endif /* CCNX_BESTROUTE_STRATEGY_H */
diff --git a/model/ccnx-fib.cc b/model/ccnx-fib.cc
index 38f0c65..164b46b 100644
--- a/model/ccnx-fib.cc
+++ b/model/ccnx-fib.cc
@@ -172,7 +172,7 @@
 }
     
 Ptr<CcnxFace>
-CcnxFibEntry::FindBestCandidate (int skip/* = 0*/)
+CcnxFibEntry::FindBestCandidate (int skip/* = 0*/) const
 {
   skip = skip % m_faces.size();
   return m_faces.get<i_nth> () [skip].GetFace ();
@@ -231,6 +231,7 @@
 
   return entry;
 }
+    
 
 std::ostream& operator<< (std::ostream& os, const CcnxFib &fib)
 {
diff --git a/model/ccnx-fib.h b/model/ccnx-fib.h
index 23e5323..afb86a3 100644
--- a/model/ccnx-fib.h
+++ b/model/ccnx-fib.h
@@ -216,7 +216,7 @@
    * \brief Find "best route" candidate, skipping `skip' first candidates (modulo # of faces)
    */
   Ptr<CcnxFace>
-  FindBestCandidate (int skip = 0);
+    FindBestCandidate (int skip = 0) const;
 	
 private:
   friend std::ostream& operator<< (std::ostream& os, const CcnxFibEntry &entry);
