diff --git a/helper/ccnx-face-container.h b/helper/ccnx-face-container.h
index 8bbbbc3..4426449 100644
--- a/helper/ccnx-face-container.h
+++ b/helper/ccnx-face-container.h
@@ -1,4 +1,22 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/* -*- 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
 
 #ifndef CCNX_FACE_CONTAINER_H
 #define CCNX_FACE_CONTAINER_H
@@ -10,170 +28,101 @@
 namespace ns3 {
 
 /**
- * \brief holds a vector of std::pair of Ptr<Ccnx> and face index.
+ * \ingroup ccnx
+ * \brief A pool for CCNx faces
+ * 
+ * Provides tools to perform basic manipulation on faces, such as
+ * setting metrics and states on faces
  *
- * Typically ns-3 CcnxFaces are installed on devices using an Ccnx address
- * helper.  The helper's Assign() method takes a NetDeviceContainer which holds 
- * some number of Ptr<NetDevice>.  For each of the NetDevices in the 
- * NetDeviceContainer the helper will find the associated Ptr<Node> and
- * Ptr<Ccnx>.  It makes sure that an face exists on the node for the 
- * device and then adds an CcnxAddress according to the address helper settings
- * (incrementing the CcnxAddress somehow as it goes).  The helper then converts
- * the Ptr<Ccnx> and the face index to a std::pair and adds them to a 
- * container -- a container of this type.
- *
- * The point is then to be able to implicitly associate an index into the 
- * original NetDeviceContainer (that identifies a particular net device) with
- * an identical index into the CcnxFaceContainer that has a std::pair with
- * the Ptr<Ccnx> and face index you need to play with the face.
- *
- * @see CcnxAddressHelper
- * @see Ccnx
+ * \see Ccnx
  */
 class CcnxFaceContainer
 {
+private:
+  typedef std::vector<Ptr<CcnxFace> > FaceContainer;
 public:
-  typedef std::vector<std::pair<Ptr<Ccnx>, uint32_t> >::const_iterator Iterator;
+  typedef FaceContainer::const_iterator Iterator; ///< \brief Iterator over CcnxFaceContainer
 
   /**
-   * Create an empty CcnxFaceContainer.
+   * \brief Create an empty CcnxFaceContainer.
    */
   CcnxFaceContainer ();
 
   /**
-   * Concatenate the entries in the other container with ours.
-   * \param other container
+   * \brief Copy constructor for CcnxFaceContainer. Calls AddAll method
+   *
+   * \see CcnxFaceContainer::AddAll
    */
-  void Add (CcnxFaceContainer other);
+  CcnxFaceContainer (const CcnxFaceContainer &other);
 
   /**
-   * \brief Get an iterator which refers to the first pair in the 
+   * \brief Copy operator for CcnxFaceContainer. Empties vector and calls AddAll method
+   *
+   * All previously obtained iterators (Begin() and End()) will be invalidated
+   *
+   * \see CcnxFaceContainer::AddAll
+   */
+  CcnxFaceContainer& operator= (const CcnxFaceContainer &other);
+  
+  /**
+   * \brief Add all entries from other container
+   *
+   * \param other container
+   */
+  void AddAll (const CcnxFaceContainer &other);
+
+  /**
+   * \brief Get an iterator which refers to the first pair in the
    * container.
    *
-   * Pairs can be retrieved from the container in two ways.  First,
-   * directly by an index into the container, and second, using an iterator.
-   * This method is used in the iterator method and is typically used in a 
-   * for-loop to run through the pairs
-   *
-   * \code
-   *   ccnxFaceContainer::Iterator i;
-   *   for (i = container.Begin (); i != container.End (); ++i)
-   *     {
-   *       std::pair<Ptr<Ccnx>, uint32_t> pair = *i;
-   *       method (pair.first, pair.second);  // use the pair
-   *     }
-   * \endcode
-   *
    * \returns an iterator which refers to the first pair in the container.
    */
-  Iterator Begin (void) const;
+  Iterator Begin () const;
 
   /**
    * \brief Get an iterator which indicates past-the-last Node in the 
    * container.
    *
-   * Nodes can be retrieved from the container in two ways.  First,
-   * directly by an index into the container, and second, using an iterator.
-   * This method is used in the iterator method and is typically used in a 
-   * for-loop to run through the Nodes
-   *
-   * \code
-   *   NodeContainer::Iterator i;
-   *   for (i = container.Begin (); i != container.End (); ++i)
-   *     {
-   *       std::pair<Ptr<Ccnx>, uint32_t> pair = *i;
-   *       method (pair.first, pair.second);  // use the pair
-   *     }
-   * \endcode
-   *
    * \returns an iterator which indicates an ending condition for a loop.
    */
-  Iterator End (void) const;
+  Iterator End () const;
 
   /**
-   * \returns the number of Ptr<Ccnx> and face pairs stored in this 
-   * ccnxFaceContainer.
+   * \brief Get the number of faces stored in this container
    *
-   * Pairs can be retrieved from the container in two ways.  First,
-   * directly by an index into the container, and second, using an iterator.
-   * This method is used in the direct method and is typically used to
-   * define an ending condition in a for-loop that runs through the stored
-   * Nodes
-   *
-   * \code
-   *   uint32_t nNodes = container.GetN ();
-   *   for (uint32_t i = 0 i < nNodes; ++i)
-   *     {
-   *       std::pair<Ptr<Ccnx>, uint32_t> pair = container.Get (i);
-   *       method (pair.first, pair.second);  // use the pair
-   *     }
-   * \endcode
-   *
-   * \returns the number of Ptr<Node> stored in this container.
+   * \returns the number of faces stored in this container
    */
-  uint32_t GetN (void) const;
+  uint32_t GetN () const;
 
   /**
-   * \param i index of ipfacePair in container
-   * \param j face address index (if face has multiple addresses)
-   * \returns the ccnx address of the j'th address of the face
-   *  corresponding to index i.
-   * 
-   * If the second parameter is omitted, the zeroth indexed address of 
-   * the face is returned.  Unless IP aliasing is being used on
-   * the face, the second parameter may typically be omitted.
+   * \brief Set a metric for all faces in the container
+   *
+   * \param metric value of metric to assign to all faces in the container
    */
-  // ccnxAddress GetAddress (uint32_t i, uint32_t j = 0) const;
-
-  void SetMetric (uint32_t i, uint16_t metric);
+  void SetMetricToAll (uint16_t metric);
 
   /**
-   * Manually add an entry to the container consisting of the individual parts
-   * of an entry std::pair.
+   * Add an entry to the container
    *
-   * \param ccnx pointer to ccnx object
-   * \param face face index of the ccnxface to add to the container
+   * \param face a smart pointer to a CcnxFace-derived object
    *
-   * @see ccnxfaceContainer
+   * @see CcnxFace
    */
-  void Add (Ptr<Ccnx> ccnx, uint32_t face);
+  void Add (const Ptr<CcnxFace> &face);
 
   /**
-   * Manually add an entry to the container consisting of a previously composed 
-   * entry std::pair.
+   * Get a smart pointer to CcnxFace-derived object stored in the container
    *
-   * \param ipfacePair the pair of a pointer to ccnx object and face index of the ccnxface to add to the container
+   * \param i the iterator corresponding to the requested object
    *
-   * @see ccnxfaceContainer
+   * This method is redundant and simple dereferencing of the iterator should be used instead
+   *
+   * @see CcnxFace
    */
-  void Add (std::pair<Ptr<Ccnx>, uint32_t> ipFacePair);
-
-  /**
-   * Manually add an entry to the container consisting of the individual parts
-   * of an entry std::pair.
-   *
-   * \param ccnxName std:string referring to the saved name of an ccnx Object that
-   *        has been previously named using the Object Name Service.
-   * \param face face index of the ccnxface to add to the container
-   *
-   * @see ccnxfaceContainer
-   */
-  void Add (std::string ccnxName, uint32_t face);
-
-  /**
-   * Get the std::pair of an Ptr<Ccnx> and face stored at the location 
-   * specified by the index.
-   *
-   * \param i the index of the entery to retrieve.
-   *
-   * @see ccnxfaceContainer
-   */
-  std::pair<Ptr<Ccnx>, uint32_t> Get (uint32_t i) const;
+  Ptr<CcnxFace> Get (Iterator i) const;
 
 private:
-
-  typedef std::vector<std::pair<Ptr<Ccnx>,uint32_t> > FaceVector;
-  FaceVector m_faces;
+  FaceContainer m_faces;
 };
 
 } // namespace ns3
