diff --git a/examples/consumer.cpp b/examples/consumer.cpp
index 9ef366a..bb4ab31 100644
--- a/examples/consumer.cpp
+++ b/examples/consumer.cpp
@@ -1,47 +1,63 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 /**
- * Copyright (C) 2013 Regents of the University of California.
+ * Copyright (c) 2013-2014 Regents of the University of California.
  * @author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- * See COPYING for copyright and distribution information.
+ * BSD License, see COPYING for copyright and distribution information.
  */
 
 // correct way to include NDN-CPP headers
 // #include <ndn-cpp-dev/face.hpp>
 #include "face.hpp"
 
+// Enclosing code in ndn simplifies coding (can also use `using namespace ndn`)
+namespace ndn {
+// Additional nested namespace could be used to prevent/limit name contentions
+namespace examples {
+
 void
-onData(ndn::Face &face,
-       const ndn::Interest& interest, ndn::Data& data)
+onData(Face& face,
+       const Interest& interest, Data& data)
 {
   std::cout << "I: " << interest.toUri() << std::endl;
   std::cout << "D: " << data.getName().toUri() << std::endl;
 }
 
 void
-onTimeout(ndn::Face &face,
-          const ndn::Interest& interest)
+onTimeout(Face& face,
+          const Interest& interest)
 {
   std::cout << "Timeout" << std::endl;
 }
 
-int main()
+int
+main(int argc, char** argv)
 {
   try {
-    ndn::Interest i(ndn::Name("/localhost/testApp/randomData"));
+    Interest i(Name("/localhost/testApp/randomData"));
     i.setScope(1);
-    i.setInterestLifetime(ndn::time::milliseconds(1000));
+    i.setInterestLifetime(time::milliseconds(1000));
     i.setMustBeFresh(true);
 
-    ndn::Face face;
+    Face face;
     face.expressInterest(i,
-                          ndn::bind(onData, boost::ref(face), _1, _2),
-                          ndn::bind(onTimeout, boost::ref(face), _1));
+                         bind(onData, boost::ref(face), _1, _2),
+                         bind(onTimeout, boost::ref(face), _1));
 
     // processEvents will block until the requested data received or timeout occurs
     face.processEvents();
   }
-  catch(std::exception &e) {
+  catch(std::exception& e) {
     std::cerr << "ERROR: " << e.what() << std::endl;
+    return 1;
   }
   return 0;
 }
+
+} // namespace examples
+} // namespace ndn
+
+int
+main(int argc, char** argv)
+{
+  return ndn::examples::main(argc, argv);
+}
