Another set of refactoring
diff --git a/model/ndn-l3-protocol.h b/model/ndn-l3-protocol.h
index 3b1897d..372ac6a 100644
--- a/model/ndn-l3-protocol.h
+++ b/model/ndn-l3-protocol.h
@@ -28,42 +28,43 @@
 #include "ns3/net-device.h"
 #include "ns3/nstime.h"
 
-// #include "ndn-content-store.h"
-// #include "ndn-pit.h"
-// #include "ndn-fib.h"
-
-#include "ndn.h"
-
 namespace ns3 {
 
 class Packet;
 class NetDevice;
 class Node;
-class NdnFace;
-class NdnRoute;
-class NdnForwardingStrategy;
 class Header;
-class NdnInterestHeader;
-class NdnContentObjectHeader;
 
-    
+namespace ndn {
+
+class Face;
+class ForwardingStrategy;
+class InterestHeader;
+class ContentObjectHeader;
+
+/**
+ * \defgroup ndn ndnSIM: NDN simulation module
+ *
+ * This is a simplified modular implementation of NDN protocol
+ */
 /**
  * \ingroup ndn
- * \brief Actual implementation of the Ndn network layer
- * 
- * \todo This description is incorrect. Should be changed accordingly
+ * \brief Implementation network-layer of NDN stack
  *
- * This class contains two distinct groups of trace sources.  The
- * trace sources 'Rx' and 'Tx' are called, respectively, immediately
- * after receiving from the NetDevice and immediately before sending
- * to a NetDevice for transmitting a packet.  These are low level
- * trace sources that include the NdnHeader already serialized into
- * the packet.  In contrast, the Drop, SendOutgoing, UnicastForward,
- * and LocalDeliver trace sources are slightly higher-level and pass
- * around the NdnHeader as an explicit parameter and not as part of
- * the packet.
+ * This class defines the API to manipulate the following aspects of
+ * the NDN stack implementation:
+ * -# register a face (Face-derived object) for use by the NDN
+ *    layer
+ * 
+ * Each Face-derived object has conceptually a single NDN
+ * interface associated with it.
+ *
+ * In addition, this class defines NDN packet coding constants
+ *
+ * \see Face, ForwardingStrategy
  */
-class NdnL3Protocol : public Ndn
+class L3Protocol :
+    public Object
 {
 public:
   /**
@@ -80,72 +81,52 @@
   /**
    * \brief Default constructor. Creates an empty stack without forwarding strategy set
    */
-  NdnL3Protocol();
-  virtual ~NdnL3Protocol ();
+  L3Protocol();
+  virtual ~L3Protocol ();
 
-  ////////////////////////////////////////////////////////////////////
-  // functions defined in base class Ndn
-
+  /**
+   * \brief Add face to Ndn stack
+   *
+   * \param face smart pointer to NdnFace-derived object
+   * (NdnLocalFace, NdnNetDeviceFace, NdnUdpFace) \returns the
+   * index of the Ndn interface added.
+   * 
+   * \see NdnLocalFace, NdnNetDeviceFace, NdnUdpFace
+   */
   virtual uint32_t
-  AddFace (const Ptr<NdnFace> &face);
+  AddFace (const Ptr<Face> &face);
   
+  /**
+   * \brief Get current number of faces added to Ndn stack
+   *
+   * \returns the number of faces
+   */
   virtual uint32_t
   GetNFaces () const;
   
-  virtual Ptr<NdnFace>
+  /**
+   * \brief Get face by face index
+   * \param face The face number of an Ndn interface.
+   * \returns The NdnFace associated with the Ndn face number.
+   */
+  virtual Ptr<Face>
   GetFace (uint32_t face) const;
 
+  /**
+   * \brief Remove face from ndn stack (remove callbacks)
+   */
   virtual void
-  RemoveFace (Ptr<NdnFace> face);
+  RemoveFace (Ptr<Face> face);
 
-  virtual Ptr<NdnFace>
+  /**
+   * \brief Get face for NetDevice
+   */
+  virtual Ptr<Face>
   GetFaceByNetDevice (Ptr<NetDevice> netDevice) const;
-  
-  // void ScheduleLeakage();
+
 private:
   void
-  Receive (const Ptr<NdnFace> &face, const Ptr<const Packet> &p);
-
-  // /**
-  //  * \brief Actual processing of incoming Ndn interests. Note, interests do not have payload
-  //  * 
-  //  * Processing Interest packets
-  //  * @param face    incoming face
-  //  * @param header  deserialized Interest header
-  //  * @param packet  original packet
-  //  */
-  // void
-  // OnInterest (const Ptr<NdnFace> &face,
-  //             Ptr<NdnInterestHeader> &header,
-  //             const Ptr<const Packet> &p);
-
-  // /**
-  //  * \brief Processing of incoming Ndn NACKs. Note, these packets, like interests, do not have payload
-  //  * 
-  //  * Processing NACK packets
-  //  * @param face    incoming face
-  //  * @param header  deserialized Interest header
-  //  * @param packet  original packet
-  //  */
-  // void
-  // OnNack (const Ptr<NdnFace> &face,
-  //         Ptr<NdnInterestHeader> &header,
-  //         const Ptr<const Packet> &p);
-  
-  // /**
-  //  * \brief Actual processing of incoming Ndn content objects
-  //  * 
-  //  * Processing ContentObject packets
-  //  * @param face    incoming face
-  //  * @param header  deserialized ContentObject header
-  //  * @param payload data packet payload
-  //  * @param packet  original packet
-  //  */
-  // void
-  // OnData (const Ptr<NdnFace> &face,
-  //         Ptr<NdnContentObjectHeader> &header,
-  //         Ptr<Packet> &payload,
-  //         const Ptr<const Packet> &packet);
+  Receive (const Ptr<Face> &face, const Ptr<const Packet> &p);
 
 protected:
   virtual void DoDispose (void); ///< @brief Do cleanup
@@ -157,31 +138,20 @@
   virtual void NotifyNewAggregate ();
 
 private:
-  NdnL3Protocol(const NdnL3Protocol &); ///< copy constructor is disabled
-  NdnL3Protocol &operator = (const NdnL3Protocol &); ///< copy operator is disabled
-
-  // void
-  // GiveUpInterest (Ptr<NdnPitEntry> pitEntry,
-  //                 Ptr<NdnInterestHeader> header);
-
-  // void
-  // OnDataDelayed (Ptr<const NdnContentObjectHeader> header,
-  //                Ptr<const Packet> payload,
-  //                const Ptr<const Packet> &packet);
+  L3Protocol(const L3Protocol &); ///< copy constructor is disabled
+  L3Protocol &operator = (const L3Protocol &); ///< copy operator is disabled
   
 private:
   uint32_t m_faceCounter; ///< \brief counter of faces. Increased every time a new face is added to the stack
-  typedef std::vector<Ptr<NdnFace> > NdnFaceList;
-  NdnFaceList m_faces; ///< \brief list of faces that belongs to ndn stack on this node
+  typedef std::vector<Ptr<Face> > FaceList;
+  FaceList m_faces; ///< \brief list of faces that belongs to ndn stack on this node
 
   // These objects are aggregated, but for optimization, get them here
   Ptr<Node> m_node; ///< \brief node on which ndn stack is installed
-  Ptr<NdnForwardingStrategy> m_forwardingStrategy; ///< \brief smart pointer to the selected forwarding strategy
-
-  // bool m_nacksEnabled;
-  // bool m_cacheUnsolicitedData;
+  Ptr<ForwardingStrategy> m_forwardingStrategy; ///< \brief smart pointer to the selected forwarding strategy
 };
-  
-} // Namespace ns3
+
+} // namespace ndn
+} // namespace ns3
 
 #endif /* NDN_L3_PROTOCOL_H */