All CCNx faces are now available through FaceList object attribute
diff --git a/model/ccnx-face.cc b/model/ccnx-face.cc
index ec35d8b..3e39384 100644
--- a/model/ccnx-face.cc
+++ b/model/ccnx-face.cc
@@ -25,6 +25,8 @@
 #include "ns3/log.h"
 #include "ns3/node.h"
 #include "ns3/assert.h"
+#include "ns3/uinteger.h"
+#include "ns3/double.h"
 
 #include <boost/ref.hpp>
 
@@ -38,6 +40,21 @@
   static TypeId tid = TypeId ("ns3::CcnxFace")
     .SetParent<Object> ()
     .SetGroupName ("Ccnx")
+    .AddAttribute ("Id", "Face id (unique integer for the CCNx stack on this node)",
+                   TypeId::ATTR_GET, // allow only getting it.
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&CcnxFace::m_id),
+                   MakeUintegerChecker<uint32_t> ())
+
+    .AddAttribute ("BucketMax", "Maximum size of leaky bucket",
+                   DoubleValue (-1.0),
+                   MakeDoubleAccessor (&CcnxFace::m_bucketMax),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("BucketLeak", "Normalized bucket leak size",
+                   DoubleValue (0.0),
+                   MakeDoubleAccessor (&CcnxFace::m_bucketLeak),
+                   MakeDoubleChecker<double> ())
+                   
     ;
   return tid;
 }
@@ -108,35 +125,6 @@
   return true;
 }
 
-void
-CcnxFace::LeakBucket (const Time &interval)
-{
-  const double leak = m_bucketLeak * interval.ToDouble (Time::S);
-  m_bucket = std::max (0.0, m_bucket - leak);
-
-  // NS_LOG_DEBUG ("max: " << m_bucketMax << ", Current bucket: " << m_bucket << ", leak size: " << leak << ", interval: " << interval << ", " << m_bucketLeak);
-}
-
-void
-CcnxFace::SetBucketMax (double bucket)
-{
-  NS_LOG_FUNCTION (this << bucket);
-  m_bucketMax = bucket;
-}
-
-void
-CcnxFace::SetBucketLeak (double leak)
-{
-  NS_LOG_FUNCTION (this << leak);
-  m_bucketLeak = leak;
-}
-
-void
-CcnxFace::LeakBucketByOnePacket ()
-{
-  m_bucket = std::max (0.0, m_bucket-1.0); 
-}
-
 bool
 CcnxFace::Send (Ptr<Packet> packet)
 {
@@ -166,6 +154,35 @@
   return true;
 }
 
+void
+CcnxFace::LeakBucket (const Time &interval)
+{
+  const double leak = m_bucketLeak * interval.ToDouble (Time::S);
+  m_bucket = std::max (0.0, m_bucket - leak);
+
+  // NS_LOG_DEBUG ("max: " << m_bucketMax << ", Current bucket: " << m_bucket << ", leak size: " << leak << ", interval: " << interval << ", " << m_bucketLeak);
+}
+
+void
+CcnxFace::SetBucketMax (double bucket)
+{
+  NS_LOG_FUNCTION (this << bucket);
+  m_bucketMax = bucket;
+}
+
+void
+CcnxFace::SetBucketLeak (double leak)
+{
+  NS_LOG_FUNCTION (this << leak);
+  m_bucketLeak = leak;
+}
+
+void
+CcnxFace::LeakBucketByOnePacket ()
+{
+  m_bucket = std::max (0.0, m_bucket-1.0); 
+}
+
 // void
 // CcnxFace::SetMetric (uint16_t metric)
 // {