diff --git a/src/query.hpp b/src/query.hpp
index 61b1cff..157745e 100644
--- a/src/query.hpp
+++ b/src/query.hpp
@@ -22,6 +22,7 @@
 
 #include "rr.hpp"
 
+
 #include <ndn-cxx/name.hpp>
 
 namespace ndn {
@@ -31,43 +32,47 @@
 {
 public:
 
-  enum QueryType {
-    QUERY_DNS,
-    QUERY_DNS_R
+  enum QueryType
+  {
+    QUERY_DNS = 1,
+    QUERY_DNS_R,
+    QUERY_KEY,
+    QUERY_UNKNOWN
   };
 
-  static std::string
-  toString(const QueryType& qType)
+  static std::string toString(const QueryType& qType)
   {
     std::string label;
-    switch (qType)
-      {
-      case QUERY_DNS:
-        label = "DNS";
-        break;
-      case QUERY_DNS_R:
-        label = "DNS-R";
-        break;
-      default:
-        label = "Default";
-        break;
-      }
+    switch (qType) {
+    case QUERY_DNS:
+      label = "DNS";
+      break;
+    case QUERY_DNS_R:
+      label = "DNS-R";
+      break;
+    case QUERY_KEY:
+      label = "KEY";
+      break;
+    default:
+      label = "UNKNOWN";
+      break;
+    }
     return label;
 
   }
 
-  static const QueryType
-  toQueryType(const std::string& str)
+  static const QueryType toQueryType(const std::string& str)
   {
     QueryType atype;
     if (str == "DNS") {
       atype = QUERY_DNS;
-    }
-    else if (str == "DNS-R") {
+    } else if (str == "DNS-R") {
       atype = QUERY_DNS_R;
+    } else if (str == "KEY") {
+      atype = QUERY_KEY;
     }
     else {
-      atype = QUERY_DNS;
+      atype = QUERY_UNKNOWN;
     }
     return atype;
   }
@@ -76,47 +81,56 @@
 
   virtual ~Query();
 
-  const Name& getAuthorityZone() const {
+  const Name& getAuthorityZone() const
+  {
     return m_authorityZone;
   }
 
-  void setAuthorityZone(const Name& authorityZone) {
+  void setAuthorityZone(const Name& authorityZone)
+  {
     m_authorityZone = authorityZone;
   }
 
-  time::milliseconds getInterestLifetime() const {
+  time::milliseconds getInterestLifetime() const
+  {
     return m_interestLifetime;
   }
 
-  void setInterestLifetime(time::milliseconds interestLifetime) {
+  void setInterestLifetime(time::milliseconds interestLifetime)
+  {
     m_interestLifetime = interestLifetime;
   }
 
-  enum QueryType getQueryType() const {
+  enum QueryType getQueryType() const
+  {
     return m_queryType;
   }
 
-  void setQueryType(enum QueryType queryType) {
+  void setQueryType(enum QueryType queryType)
+  {
     m_queryType = queryType;
   }
 
-  const Name& getRrLabel() const {
+  const Name& getRrLabel() const
+  {
     return m_rrLabel;
   }
 
-  void setRrLabel(const Name& rrLabel) {
+  void setRrLabel(const Name& rrLabel)
+  {
     m_rrLabel = rrLabel;
   }
 
-  const RR::RRType& getRrType() const {
+  const RR::RRType& getRrType() const
+  {
     return m_rrType;
   }
 
-  void setRrType(const RR::RRType& rrType) {
+  void setRrType(const RR::RRType& rrType)
+  {
     m_rrType = rrType;
   }
 
-
 private:
   template<bool T>
   size_t
@@ -132,29 +146,40 @@
   bool
   fromInterest(const Interest& interest);
 
+  const Name& getFowardingHint() const
+  {
+    return m_forwardingHint;
+  }
+
+  void setFowardingHint(const Name& fowardingHint)
+  {
+    m_forwardingHint = fowardingHint;
+  }
 
 public:
+
   Name m_authorityZone;
+  Name m_forwardingHint;
+
   enum QueryType m_queryType;
   time::milliseconds m_interestLifetime;
   Name m_rrLabel;
   enum RR::RRType m_rrType;
 
+
   mutable Block m_wire;
 };
 
-
 inline std::ostream&
 operator<<(std::ostream& os, const Query& query)
 {
-  os<<"Query: authorityZone="<<query.getAuthorityZone().toUri()
-    <<" queryType="<<Query::toString(query.getQueryType())
-    <<" rrLabel="<<query.getRrLabel().toUri()
-    <<" rrType="<<RR::toString(query.getRrType());
+  os << "Query: authorityZone=" << query.getAuthorityZone().toUri()
+      << " queryType=" << Query::toString(query.getQueryType()) << " rrLabel="
+      << query.getRrLabel().toUri() << " rrType="
+      << RR::toString(query.getRrType());
   return os;
 }
 
-
 } // namespace ndns
 } // namespace ndn
 
