diff --git a/PPI/MonitorModule.cc b/PPI/MonitorModule.ct
similarity index 73%
rename from PPI/MonitorModule.cc
rename to PPI/MonitorModule.ct
index 2a5420a3ca165e024cb96d74738c529afff3804d..1945293d9156f2ff6f3b744d4d319971f5c74cbe 100644
--- a/PPI/MonitorModule.cc
+++ b/PPI/MonitorModule.ct
@@ -21,40 +21,40 @@
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 /** \file
-    \brief MonitorModule non-inline non-template implementation */
+    \brief MonitorModule non-inline template implementation  */
 
-#include "MonitorModule.hh"
 //#include "MonitorModule.ih"
 
 // Custom includes
 
-//#include "MonitorModule.mpp"
 #define prefix_
-///////////////////////////////cc.p////////////////////////////////////////
+///////////////////////////////ct.p////////////////////////////////////////
 
-prefix_ void senf::ppi::module::MonitorModule::request()
+template <class PacketType>
+prefix_ void senf::ppi::module::MonitorModule<PacketType>::request()
 {
-    Packet p (input());
+    PacketType p (input());
     v_handlePacket(p);
     if (output.connected())
         output(p);
 }
 
-prefix_ void senf::ppi::module::MonitorModule::throttle()
+template <class PacketType>
+prefix_ void senf::ppi::module::MonitorModule<PacketType>::throttle()
 {
     if (output.connected())
         input.throttle();
 }
 
-prefix_ void senf::ppi::module::MonitorModule::unthrottle()
+template <class PacketType>
+prefix_ void senf::ppi::module::MonitorModule<PacketType>::unthrottle()
 {
     if (output.connected())
         input.unthrottle();
 }
 
-///////////////////////////////cc.e////////////////////////////////////////
+///////////////////////////////ct.e////////////////////////////////////////
 #undef prefix_
-//#include "MonitorModule.mpp"
 
 
 // Local Variables:
diff --git a/PPI/MonitorModule.cci b/PPI/MonitorModule.cti
similarity index 83%
rename from PPI/MonitorModule.cci
rename to PPI/MonitorModule.cti
index 9c0e62c38be445f313752ccbbf81e5f4617acd8b..e2f101ad119ae15e79b3418a8fc8ec34109e352a 100644
--- a/PPI/MonitorModule.cci
+++ b/PPI/MonitorModule.cti
@@ -21,16 +21,17 @@
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 /** \file
-    \brief MonitorModule inline non-template implementation */
+    \brief MonitorModule inline template implementation */
 
 //#include "MonitorModule.ih"
 
 // Custom includes
 
 #define prefix_ inline
-///////////////////////////////cci.p///////////////////////////////////////
+///////////////////////////////cti.p///////////////////////////////////////
 
-prefix_ senf::ppi::module::MonitorModule::MonitorModule()
+template <class PacketType>
+prefix_ senf::ppi::module::MonitorModule<PacketType>::MonitorModule()
 {
     route(input, output).autoThrottling(false);
     input.onRequest(&MonitorModule::request);
@@ -38,7 +39,7 @@ prefix_ senf::ppi::module::MonitorModule::MonitorModule()
     output.onUnthrottle(&MonitorModule::unthrottle);
 }
 
-///////////////////////////////cci.e///////////////////////////////////////
+///////////////////////////////cti.e///////////////////////////////////////
 #undef prefix_
 
 
diff --git a/PPI/MonitorModule.hh b/PPI/MonitorModule.hh
index c5517eb807998692593b6a08111ae6d49611e205..30c8ff1d5462ec67eb78f8780868918a146f1abe 100644
--- a/PPI/MonitorModule.hh
+++ b/PPI/MonitorModule.hh
@@ -37,16 +37,17 @@ namespace senf {
 namespace ppi {
 namespace module {
 
+    template <class PacketType=Packet>
     class MonitorModule : public Module
     {
     public:
-        senf::ppi::connector::PassiveInput<> input;
-        senf::ppi::connector::ActiveOutput<> output;
+        senf::ppi::connector::PassiveInput<PacketType> input;
+        senf::ppi::connector::ActiveOutput<PacketType> output;
 
     protected:
         MonitorModule();
 
-        virtual void v_handlePacket(Packet const & p) = 0;
+        virtual void v_handlePacket(PacketType const & p) = 0;
 
     private:
         void request();
@@ -58,9 +59,9 @@ namespace module {
 }}}
 
 ///////////////////////////////hh.e////////////////////////////////////////
-#include "MonitorModule.cci"
-//#include "MonitorModule.ct"
-//#include "MonitorModule.cti"
+//#include "MonitorModule.cci"
+#include "MonitorModule.ct"
+#include "MonitorModule.cti"
 #endif
 
 
diff --git a/PPI/MonitorModule.test.cc b/PPI/MonitorModule.test.cc
index b0f47c21df3080594e2d8534e46e5fd0022a12ad..9fd3ee7b5e02b5e6786a5fa4f1fedd28bf0e10ec 100644
--- a/PPI/MonitorModule.test.cc
+++ b/PPI/MonitorModule.test.cc
@@ -38,7 +38,7 @@
 
 namespace {
     
-    class PacketCounter : public senf::ppi::module::MonitorModule
+    class PacketCounter : public senf::ppi::module::MonitorModule<>
     {
         SENF_PPI_MODULE(PacketCounter);
     public:
diff --git a/Packets/Packet.cti b/Packets/Packet.cti
index 0eb6ddcfb71fe4775fe08df5986607617cd1f35e..afae6069db5e853e17975d293110966a69f754b4 100644
--- a/Packets/Packet.cti
+++ b/Packets/Packet.cti
@@ -141,6 +141,13 @@ prefix_ Annotation & senf::Packet::annotation()
     return ptr()->annotation<Annotation>();
 }
 
+template <class Annotation>
+prefix_ Annotation const & senf::Packet::annotation()
+    const
+{
+    return ptr()->annotation<Annotation>();
+}
+
 ///////////////////////////////////////////////////////////////////////////
 // senf::ConcretePacket<PacketType>
 
diff --git a/Packets/Packet.hh b/Packets/Packet.hh
index d3b42a402eefb6e8bcb356cd25bcd266dd77afe4..4a25789f1ab03e5af69997261e913e8dbf4fc433 100644
--- a/Packets/Packet.hh
+++ b/Packets/Packet.hh
@@ -376,6 +376,10 @@ namespace senf {
 
         ///@}
 
+        template <class Annotation>
+        Annotation const & annotation() const; ///< Get packet annotation
+                                        /**< \see annotation() */
+
         ///\name Other methods
         ///@{