diff --git a/daemon/face/datagram-transport.hpp b/daemon/face/datagram-transport.hpp
index 669b46e..501b590 100644
--- a/daemon/face/datagram-transport.hpp
+++ b/daemon/face/datagram-transport.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Regents of the University of California,
+ * Copyright (c) 2014-2019,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -260,7 +260,7 @@
 }
 
 template<class T, class U>
-Transport::EndpointId
+EndpointId
 DatagramTransport<T, U>::makeEndpointId(const typename protocol::endpoint&)
 {
   return 0;
diff --git a/daemon/face/face.hpp b/daemon/face/face.hpp
index a81a75e..f99bece 100644
--- a/daemon/face/face.hpp
+++ b/daemon/face/face.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Regents of the University of California,
+ * Copyright (c) 2014-2019,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -299,6 +299,7 @@
 
 } // namespace face
 
+using face::EndpointId;
 using face::FaceId;
 using face::Face;
 
diff --git a/daemon/face/lp-reassembler.cpp b/daemon/face/lp-reassembler.cpp
index cd6f873..905dc66 100644
--- a/daemon/face/lp-reassembler.cpp
+++ b/daemon/face/lp-reassembler.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Regents of the University of California,
+ * Copyright (c) 2014-2019,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -40,7 +40,7 @@
 }
 
 std::tuple<bool, Block, lp::Packet>
-LpReassembler::receiveFragment(Transport::EndpointId remoteEndpoint, const lp::Packet& packet)
+LpReassembler::receiveFragment(EndpointId remoteEndpoint, const lp::Packet& packet)
 {
   BOOST_ASSERT(packet.has<lp::FragmentField>());
 
diff --git a/daemon/face/lp-reassembler.hpp b/daemon/face/lp-reassembler.hpp
index f416b2c..21f4e1c 100644
--- a/daemon/face/lp-reassembler.hpp
+++ b/daemon/face/lp-reassembler.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Regents of the University of California,
+ * Copyright (c) 2014-2019,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -83,7 +83,7 @@
    *  \throw tlv::Error packet is malformed
    */
   std::tuple<bool, Block, lp::Packet>
-  receiveFragment(Transport::EndpointId remoteEndpoint, const lp::Packet& packet);
+  receiveFragment(EndpointId remoteEndpoint, const lp::Packet& packet);
 
   /** \brief count of partial packets
    */
@@ -97,7 +97,7 @@
    *  Before it's erased, this signal is emitted with the remote endpoint,
    *  and the number of fragments being dropped.
    */
-  signal::Signal<LpReassembler, Transport::EndpointId, size_t> beforeTimeout;
+  signal::Signal<LpReassembler, EndpointId, size_t> beforeTimeout;
 
 private:
   /** \brief holds all fragments of packet until reassembled
@@ -113,7 +113,7 @@
   /** \brief index key for PartialPackets
    */
   typedef std::tuple<
-    Transport::EndpointId, // remoteEndpoint
+    EndpointId, // remoteEndpoint
     lp::Sequence // message identifier (sequence of the first fragment)
   > Key;
 
diff --git a/daemon/face/multicast-udp-transport.cpp b/daemon/face/multicast-udp-transport.cpp
index 6e99a1c..ec50d7f 100644
--- a/daemon/face/multicast-udp-transport.cpp
+++ b/daemon/face/multicast-udp-transport.cpp
@@ -191,7 +191,7 @@
 }
 
 template<>
-Transport::EndpointId
+EndpointId
 DatagramTransport<boost::asio::ip::udp, Multicast>::makeEndpointId(const protocol::endpoint& ep)
 {
   if (ep.address().is_v4()) {
diff --git a/daemon/face/multicast-udp-transport.hpp b/daemon/face/multicast-udp-transport.hpp
index 72498d0..bea7cb4 100644
--- a/daemon/face/multicast-udp-transport.hpp
+++ b/daemon/face/multicast-udp-transport.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Regents of the University of California,
+ * Copyright (c) 2014-2019,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -40,7 +40,7 @@
 // that would cause an implicit instantiation to take place, in every translation
 // unit in which such a use occurs".
 template<>
-Transport::EndpointId
+EndpointId
 DatagramTransport<boost::asio::ip::udp, Multicast>::makeEndpointId(const protocol::endpoint& ep);
 
 /**
diff --git a/daemon/face/transport.hpp b/daemon/face/transport.hpp
index 3f00424..8bbfe86 100644
--- a/daemon/face/transport.hpp
+++ b/daemon/face/transport.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Regents of the University of California,
+ * Copyright (c) 2014-2019,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -37,6 +37,10 @@
 class Face;
 class LinkService;
 
+/** \brief identifies an endpoint on the link
+ */
+typedef uint64_t EndpointId;
+
 /** \brief indicates the state of a transport
  */
 enum class TransportState {
@@ -113,10 +117,6 @@
 class Transport : protected virtual TransportCounters, noncopyable
 {
 public:
-  /** \brief identifies an endpoint on the link
-   */
-  typedef uint64_t EndpointId;
-
   /** \brief stores a packet along with the remote endpoint
    */
   class Packet
