diff --git a/model/fw/ndn-forwarding-strategy.cc b/model/fw/ndn-forwarding-strategy.cc
index 6bfee78..9d72e74 100644
--- a/model/fw/ndn-forwarding-strategy.cc
+++ b/model/fw/ndn-forwarding-strategy.cc
@@ -84,6 +84,11 @@
 
     .AddTraceSource ("SatisfiedInterests",  "SatisfiedInterests",  MakeTraceSourceAccessor (&ForwardingStrategy::m_satisfiedInterests))
     .AddTraceSource ("TimedOutInterests",   "TimedOutInterests",   MakeTraceSourceAccessor (&ForwardingStrategy::m_timedOutInterests))
+
+    .AddAttribute ("CacheUnsolicitedDataFromApps", "Cache unsolicited data that has been pushed from applications",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&ForwardingStrategy::m_cacheUnsolicitedDataFromApps),
+                   MakeBooleanChecker ())
     
     .AddAttribute ("CacheUnsolicitedData", "Cache overheard data that have not been requested",
                    BooleanValue (false),
@@ -234,7 +239,7 @@
     {
       bool cached = false;
 
-      if (m_cacheUnsolicitedData)
+      if (m_cacheUnsolicitedData || (m_cacheUnsolicitedDataFromApps && (inFace->GetFlags () | Face::APPLICATION)))
         {
           FwHopCountTag hopCountTag;
 
diff --git a/model/fw/ndn-forwarding-strategy.h b/model/fw/ndn-forwarding-strategy.h
index a3fe5b5..f077332 100644
--- a/model/fw/ndn-forwarding-strategy.h
+++ b/model/fw/ndn-forwarding-strategy.h
@@ -476,6 +476,7 @@
   Ptr<Fib> m_fib; ///< \brief FIB
   Ptr<ContentStore> m_contentStore; ///< \brief Content store (for caching purposes only)
 
+  bool m_cacheUnsolicitedDataFromApps;
   bool m_cacheUnsolicitedData;
   bool m_detectRetransmissions;
 
diff --git a/model/ndn-app-face.cc b/model/ndn-app-face.cc
index 9f9265e..669f9a8 100644
--- a/model/ndn-app-face.cc
+++ b/model/ndn-app-face.cc
@@ -58,6 +58,7 @@
   NS_LOG_FUNCTION (this << app);
   
   NS_ASSERT (m_app != 0);
+  SetFlags (Face::APPLICATION);
 }
 
 AppFace::~AppFace ()
diff --git a/model/ndn-face.cc b/model/ndn-face.cc
index b3a43b0..625af55 100644
--- a/model/ndn-face.cc
+++ b/model/ndn-face.cc
@@ -76,6 +76,7 @@
   , m_ifup (false)
   , m_id ((uint32_t)-1)
   , m_metric (0)
+  , m_flags (0)
 {
   NS_LOG_FUNCTION (this);
 
@@ -194,6 +195,13 @@
   m_ifup = up;
 }
 
+void
+Face::SetFlags (uint32_t flags)
+{
+  m_flags = flags;
+}
+
+
 bool
 Face::operator== (const Face &face) const
 {
diff --git a/model/ndn-face.h b/model/ndn-face.h
index 730ce2a..97c75f9 100644
--- a/model/ndn-face.h
+++ b/model/ndn-face.h
@@ -58,7 +58,7 @@
 public:
   static TypeId
   GetTypeId ();
-  
+
   /**
    * \brief NDN protocol handler
    *
@@ -80,7 +80,7 @@
   GetNode () const;
 
   ////////////////////////////////////////////////////////////////////
-  
+
   /**
    * \brief Register callback to call when new packet arrives on the face
    *
@@ -97,7 +97,7 @@
    * \param p smart pointer to a packet to send
    *
    * @return false if either limit is reached
-   */ 
+   */
   bool
   Send (Ptr<Packet> p);
 
@@ -115,21 +115,23 @@
    *
    * \param metric configured routing metric (cost) of this face
    */
-  virtual void SetMetric (uint16_t metric);
+  virtual void
+  SetMetric (uint16_t metric);
 
   /**
    * \brief Get routing/forwarding metric assigned to the face
    *
    * \returns configured routing/forwarding metric (cost) of this face
    */
-  virtual uint16_t GetMetric (void) const;
+  virtual uint16_t
+  GetMetric (void) const;
 
   /**
    * These are face states and may be distinct from actual lower-layer
    * device states, such as found in real implementations (where the
    * device may be down but ndn face state is still up).
    */
-  
+
   /**
    * \brief Enable or disable this face
    */
@@ -143,6 +145,25 @@
   IsUp () const;
 
   /**
+   * @brief Get face flags
+   *
+   * Face flags may indicate various properties of the face.  For example, if the face is an application face,
+   * than the returned flags have Face::APPLICATION bit set.
+   *
+   * @see ndn::Face::Flags for the list of currently defined face flags
+   */
+  inline uint32_t
+  GetFlags () const;
+
+  /**
+   * @brief List of currently defined face flags
+   */
+  enum Flags
+    {
+      APPLICATION = 1 ///< @brief An application face
+    };
+  
+  /**
    * @brief Print information about the face into the stream
    * @param os stream to write information to
    */
@@ -184,7 +205,7 @@
    */
   inline bool
   operator!= (const Face &face) const;
-  
+
   /**
    * \brief Compare two faces. Only two faces on the same node could be compared.
    *
@@ -200,27 +221,38 @@
    * \param p smart pointer to a packet to send
    */
   virtual bool
-  SendImpl (Ptr<Packet> p) = 0;  
+  SendImpl (Ptr<Packet> p) = 0;
+
+  void
+  SetFlags (uint32_t flags);
 
 private:
   Face (const Face &); ///< \brief Disabled copy constructor
   Face& operator= (const Face &); ///< \brief Disabled copy operator
-  
+
 protected:
   Ptr<Node> m_node; ///< \brief Smart pointer to Node
-  
+
 private:
   ProtocolHandler m_protocolHandler; ///< Callback via which packets are getting send to Ndn stack
-  bool m_ifup; ///< \brief flag indicating that the interface is UP 
+  bool m_ifup; ///< \brief flag indicating that the interface is UP
   uint32_t m_id; ///< \brief id of the interface in NDN stack (per-node uniqueness)
   uint32_t m_metric; ///< \brief metric of the face
+  uint32_t m_flags;
 
   TracedCallback<Ptr<const Packet> > m_txTrace;
   TracedCallback<Ptr<const Packet> > m_rxTrace;
   TracedCallback<Ptr<const Packet> > m_dropTrace;
 };
 
-std::ostream& operator<< (std::ostream& os, const Face &face);
+std::ostream&
+operator<< (std::ostream& os, const Face &face);
+
+inline uint32_t
+Face::GetFlags () const
+{
+  return m_flags;
+}
 
 inline bool
 operator < (const Ptr<Face> &lhs, const Ptr<Face> &rhs)
