diff --git a/src/detail/lp-field-tag.hpp b/src/detail/lp-field-tag.hpp
index f8b2aa5..5c01f58 100644
--- a/src/detail/lp-field-tag.hpp
+++ b/src/detail/lp-field-tag.hpp
@@ -37,6 +37,15 @@
   }
 }
 
+template<typename Tag, typename Field, typename Packet>
+void
+addTagFromField(Packet& packet, const lp::Packet& lpPacket)
+{
+  if (lpPacket.has<Field>()) {
+    packet.setTag(make_shared<Tag>(lpPacket.get<Field>()));
+  }
+}
+
 } // namespace ndn
 
 #endif // NDN_DETAIL_LP_FIELD_TAG_HPP
diff --git a/src/face.cpp b/src/face.cpp
index 8e59ce9..8580720 100644
--- a/src/face.cpp
+++ b/src/face.cpp
@@ -376,13 +376,8 @@
 static void
 extractLpLocalFields(NetPkt& netPacket, const lp::Packet& lpPacket)
 {
-  if (lpPacket.has<lp::IncomingFaceIdField>()) {
-    netPacket.setTag(make_shared<lp::IncomingFaceIdTag>(lpPacket.get<lp::IncomingFaceIdField>()));
-  }
-
-  if (lpPacket.has<lp::CongestionMarkField>()) {
-    netPacket.setTag(make_shared<lp::CongestionMarkTag>(lpPacket.get<lp::CongestionMarkField>()));
-  }
+  addTagFromField<lp::IncomingFaceIdTag, lp::IncomingFaceIdField>(netPacket, lpPacket);
+  addTagFromField<lp::CongestionMarkTag, lp::CongestionMarkField>(netPacket, lpPacket);
 }
 
 void
diff --git a/src/util/dummy-client-face.cpp b/src/util/dummy-client-face.cpp
index 57a43b7..989b455 100644
--- a/src/util/dummy-client-face.cpp
+++ b/src/util/dummy-client-face.cpp
@@ -135,34 +135,19 @@
       if (lpPacket.has<lp::NackField>()) {
         shared_ptr<lp::Nack> nack = make_shared<lp::Nack>(std::move(*interest));
         nack->setHeader(lpPacket.get<lp::NackField>());
-        if (lpPacket.has<lp::NextHopFaceIdField>()) {
-          nack->setTag(make_shared<lp::NextHopFaceIdTag>(lpPacket.get<lp::NextHopFaceIdField>()));
-        }
-        if (lpPacket.has<lp::CongestionMarkField>()) {
-          nack->setTag(make_shared<lp::CongestionMarkTag>(lpPacket.get<lp::CongestionMarkField>()));
-        }
+        addTagFromField<lp::CongestionMarkTag, lp::CongestionMarkField>(*nack, lpPacket);
         onSendNack(*nack);
       }
       else {
-        if (lpPacket.has<lp::NextHopFaceIdField>()) {
-          interest->setTag(make_shared<lp::NextHopFaceIdTag>(lpPacket.get<lp::NextHopFaceIdField>()));
-        }
-        if (lpPacket.has<lp::CongestionMarkField>()) {
-          interest->setTag(make_shared<lp::CongestionMarkTag>(lpPacket.get<lp::CongestionMarkField>()));
-        }
+        addTagFromField<lp::NextHopFaceIdTag, lp::NextHopFaceIdField>(*interest, lpPacket);
+        addTagFromField<lp::CongestionMarkTag, lp::CongestionMarkField>(*interest, lpPacket);
         onSendInterest(*interest);
       }
     }
     else if (block.type() == tlv::Data) {
       shared_ptr<Data> data = make_shared<Data>(block);
-
-      if (lpPacket.has<lp::CachePolicyField>()) {
-        data->setTag(make_shared<lp::CachePolicyTag>(lpPacket.get<lp::CachePolicyField>()));
-      }
-      if (lpPacket.has<lp::CongestionMarkField>()) {
-        data->setTag(make_shared<lp::CongestionMarkTag>(lpPacket.get<lp::CongestionMarkField>()));
-      }
-
+      addTagFromField<lp::CachePolicyTag, lp::CachePolicyField>(*data, lpPacket);
+      addTagFromField<lp::CongestionMarkTag, lp::CongestionMarkField>(*data, lpPacket);
       onSendData(*data);
     }
   });
