diff --git a/src/util/dummy-client-face.cpp b/src/util/dummy-client-face.cpp
index f6150b3..14a7631 100644
--- a/src/util/dummy-client-face.cpp
+++ b/src/util/dummy-client-face.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2016 Regents of the University of California.
+ * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -217,7 +217,7 @@
   });
 }
 
-template<typename Packet, typename Field, typename Tag>
+template<typename Field, typename Tag, typename Packet>
 static void
 addFieldFromTag(lp::Packet& lpPacket, const Packet& packet)
 {
@@ -227,36 +227,39 @@
   }
 }
 
-template<typename Packet>
 void
-DummyClientFace::receive(const Packet& packet)
+DummyClientFace::receive(const Interest& interest)
 {
-  lp::Packet lpPacket(packet.wireEncode());
+  lp::Packet lpPacket(interest.wireEncode());
 
-  addFieldFromTag<Packet, lp::IncomingFaceIdField, lp::IncomingFaceIdTag>(lpPacket, packet);
-  addFieldFromTag<Packet, lp::NextHopFaceIdField, lp::NextHopFaceIdTag>(lpPacket, packet);
-  addFieldFromTag<Packet, lp::CongestionMarkField, lp::CongestionMarkTag>(lpPacket, packet);
+  addFieldFromTag<lp::IncomingFaceIdField, lp::IncomingFaceIdTag>(lpPacket, interest);
+  addFieldFromTag<lp::NextHopFaceIdField, lp::NextHopFaceIdTag>(lpPacket, interest);
+  addFieldFromTag<lp::CongestionMarkField, lp::CongestionMarkTag>(lpPacket, interest);
 
   static_pointer_cast<Transport>(getTransport())->receive(lpPacket.wireEncode());
 }
 
-template void
-DummyClientFace::receive<Interest>(const Interest& packet);
-
-template void
-DummyClientFace::receive<Data>(const Data& packet);
-
-template<>
 void
-DummyClientFace::receive<lp::Nack>(const lp::Nack& nack)
+DummyClientFace::receive(const Data& data)
+{
+  lp::Packet lpPacket(data.wireEncode());
+
+  addFieldFromTag<lp::IncomingFaceIdField, lp::IncomingFaceIdTag>(lpPacket, data);
+  addFieldFromTag<lp::CongestionMarkField, lp::CongestionMarkTag>(lpPacket, data);
+
+  static_pointer_cast<Transport>(getTransport())->receive(lpPacket.wireEncode());
+}
+
+void
+DummyClientFace::receive(const lp::Nack& nack)
 {
   lp::Packet lpPacket;
   lpPacket.add<lp::NackField>(nack.getHeader());
   Block interest = nack.getInterest().wireEncode();
   lpPacket.add<lp::FragmentField>(make_pair(interest.begin(), interest.end()));
 
-  addFieldFromTag<lp::Nack, lp::IncomingFaceIdField, lp::IncomingFaceIdTag>(lpPacket, nack);
-  addFieldFromTag<lp::Nack, lp::CongestionMarkField, lp::CongestionMarkTag>(lpPacket, nack);
+  addFieldFromTag<lp::IncomingFaceIdField, lp::IncomingFaceIdTag>(lpPacket, nack);
+  addFieldFromTag<lp::CongestionMarkField, lp::CongestionMarkTag>(lpPacket, nack);
 
   static_pointer_cast<Transport>(getTransport())->receive(lpPacket.wireEncode());
 }
diff --git a/src/util/dummy-client-face.hpp b/src/util/dummy-client-face.hpp
index 41d843e..630913c 100644
--- a/src/util/dummy-client-face.hpp
+++ b/src/util/dummy-client-face.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2016 Regents of the University of California.
+ * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -92,12 +92,20 @@
   DummyClientFace(boost::asio::io_service& ioService, KeyChain& keyChain,
                   const Options& options = Options());
 
-  /** \brief cause the Face to receive a packet
-   *  \tparam Packet either Interest or Data
+  /** \brief cause the Face to receive an interest
    */
-  template<typename Packet>
   void
-  receive(const Packet& packet);
+  receive(const Interest& interest);
+
+  /** \brief cause the Face to receive a data
+   */
+  void
+  receive(const Data& data);
+
+  /** \brief cause the Face to receive a nack
+   */
+  void
+  receive(const lp::Nack& nack);
 
 private:
   class Transport;
@@ -163,10 +171,6 @@
   std::function<void(time::milliseconds)> m_processEventsOverride;
 };
 
-template<>
-void
-DummyClientFace::receive(const lp::Nack& nack);
-
 } // namespace util
 } // namespace ndn
 
