diff --git a/tools/dig.cpp b/tools/dig.cpp
index 104aac9..ef6bbf1 100644
--- a/tools/dig.cpp
+++ b/tools/dig.cpp
@@ -1,12 +1,22 @@
-/*
- *  NameServer.cpp
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014, Regents of the University of California.
  *
- *  Created on: 18 Jul, 2014
- *      Author: Xiaoke JIANG
+ * This file is part of NDNS (Named Data Networking Domain Name Service).
+ * See AUTHORS.md for complete list of NDNS authors and contributors.
  *
+ * NDNS is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NDNS 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
+ * NDNS, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-
 #include "app/name-dig.hpp"
 #include "boost/program_options.hpp"
 #include "boost/filesystem.hpp"
@@ -15,21 +25,6 @@
 using namespace ndn::ndns;
 using namespace std;
 
-void
-usage()
-{
-  cout<<"\n Usage: \n"
-      << "dig /name/to/be/resolved [options]\n"
-      <<"\t[-t seconds]         - set the maximal waiting time. default: 10\n"
-      <<"\t[-p prefix]          - set the routable prefix of caching resolver. default: / \n"
-      <<"\t[-n number]          - set the maximal tried time. default: 2\n"
-      <<"\t[-r rr_type]         - set the RR type. default: TXT\n"
-      <<"\t[-h]                 - set the help message\n"
-
-      <<"\ne.g.: dig /net/ndnsim/www -p /localhost -t 5 -n 2 -r TXT\n"
-      ;
-
-}
 
 int main(int argc, char * argv[])
 {
@@ -47,19 +42,6 @@
     namespace po = boost::program_options;
     po::variables_map vm;
 
-    /*
-    po::options_description desc("Generic Options");
-    desc.add_options()
-        ("help,h", "print help message")
-        ("name", po::value<string>(&dstLabel)->required()->composing(), "name to be resolved")
-        ("resolver", po::value<string>(&resolver)->composing(), "routable prefix of resolver")
-        ("waiting,w", po::value<int>(&waitingSeconds), "set waiting seconds for every Interest. default: 10")
-        ("rrtype", po::value<std::string>(), "set request RR Type. default: TXT")
-        ("try", po::value<int>(&tryMax), "set maximal Interest Tried Number. default: 2")
-        //("positional,p", po::value< vector<string> >(), "positional optionals")
-        ;
-
-    */
 
     po::options_description generic("Generic Options");
     generic.add_options()
@@ -70,14 +52,14 @@
     po::options_description config("Configuration");
     config.add_options()
              ("waiting,w", po::value<int>(&waitingSeconds), "set waiting seconds for every Interest. default: 10")
-             ("rrtype,t", po::value<std::string>(), "set request RR Type. default: TXT")
+             ("rrtype,t", po::value<std::string>(&rrType), "set request RR Type. default: TXT")
              ("trynum,n", po::value<int>(&tryMax), "set maximal Interest Tried Number. default: 2")
              ;
 
 
     po::options_description hidden("Hidden Options");
     hidden.add_options()
-            ("name", po::value<string>(&dstLabel)->required(), "name to be resolved")
+            ("name", po::value<string>(&dstLabel), "name to be resolved")
             ("resolver", po::value<string>(&resolver), "routable prefix of resolver")
             ;
 
@@ -105,19 +87,22 @@
 
     if (vm.count("help"))
     {
+      cout<<"E.g: dig /name/to/be/resolved /routable/prefix/of/resolver"<<endl;
       cout<<visible<<endl;
       return 0;
     }
 
-    cout<<"waiting="<<waitingSeconds<<"s RRType="<<rrType<<" tryMax="<<tryMax<<endl;
+    cout<<"name="<<dstLabel<<" resolver="<<resolver<<" waiting="<<waitingSeconds<<"s RRType="<<rrType<<" tryMax="<<tryMax<<endl;
   }
   catch(const std::exception& ex)
   {
           cout << "Parameter Error: " << ex.what() << endl;
+          return 0;
   }
   catch(...)
   {
           cout << "Parameter Unknown error" << endl;
+          return 0;
   }
 
 
@@ -139,10 +124,12 @@
     cout<<"Error: "<<dig.getErr()<<endl;
   } else
   {
+    Name re = dig.getResponse().getQueryName();
     if (dig.getRrs().size() == 0)
     {
       cout<<"Dig found no record(s) for Name "
           <<dig.getDstLabel().toUri()<<std::endl;
+      cout<<"Final Response Name: "<<re.toUri()<<std::endl;
     }
     else {
       cout<<"Success to the dig "<<dig.getDstLabel().toUri()<<" by Resolver "
@@ -155,7 +142,7 @@
         cout<<" "<<*iter<<"\n";
         iter ++;
       }
-
+      cout<<"Final Response Name: "<<re.toUri()<<std::endl;
     }
   }
 
