diff --git a/Packets/PacketInterpreter.hh b/Packets/PacketInterpreter.hh
index 80bb01662efae00bbd5de6587f708ef3690548ed..b42cb190f088248d4a9b75467d6e231f5729c85a 100644
--- a/Packets/PacketInterpreter.hh
+++ b/Packets/PacketInterpreter.hh
@@ -211,7 +211,7 @@ namespace senf {
         void releaseImpl();
 
         friend class detail::PacketImpl;
-        friend class intrusive_refcount_t<PacketInterpreterBase>;
+        friend class intrusive_refcount_base;
         template <class PacketType> friend class PacketInterpreter;
         friend class detail::packet::test::TestDriver;
         friend class PacketParserBase;
diff --git a/Utils/intrusive_refcount.cti b/Utils/intrusive_refcount.cti
index a8ba41e16c3547ebfd705fe75930b520785c12e2..3e729e0c8cee50eeba92db27acbf791e2ab18b9b 100644
--- a/Utils/intrusive_refcount.cti
+++ b/Utils/intrusive_refcount.cti
@@ -30,28 +30,28 @@
 #define prefix_ inline
 ///////////////////////////////cti.p///////////////////////////////////////
 
-template <class Self>
-prefix_ void senf::intrusive_refcount_t<Self>::intrusive_ptr_add_ref()
+template <class S>
+prefix_ void senf::intrusive_refcount_base::intrusive_ptr_add_ref()
 {
-    static_cast<Self*>(this)->add_ref();
+    static_cast<S*>(this)->add_ref();
 }
 
-template <class Self>
-prefix_ void senf::intrusive_refcount_t<Self>::intrusive_ptr_release()
+template <class S>
+prefix_ void senf::intrusive_refcount_base::intrusive_ptr_release()
 {
-    if (static_cast<Self*>(this)->release()) delete this;
+    if (static_cast<S*>(this)->release()) delete this;
 }
 
 template <class Self>
 prefix_ void senf::intrusive_ptr_add_ref(intrusive_refcount_t<Self>* p)
 {
-    p->intrusive_ptr_add_ref();
+    p->intrusive_ptr_add_ref<Self>();
 }
 
 template <class Self>
 prefix_ void senf::intrusive_ptr_release(intrusive_refcount_t<Self>* p)
 {
-    p->intrusive_ptr_release();
+    p->intrusive_ptr_release<Self>();
 }
 
 template <class Self>
diff --git a/Utils/intrusive_refcount.hh b/Utils/intrusive_refcount.hh
index 8ce578571c7ac6d1f1df12c0fff55150536cde4f..7fb8f189c73373edc6ca08abb680c09549220143 100644
--- a/Utils/intrusive_refcount.hh
+++ b/Utils/intrusive_refcount.hh
@@ -61,6 +61,13 @@ namespace senf {
     private:
         refcount_t refcount_;
         
+        template <class S> void intrusive_ptr_add_ref();
+        template <class S> void intrusive_ptr_release();
+        
+        template <class S>
+        friend void senf::intrusive_ptr_add_ref(intrusive_refcount_t<S> * p);
+        template <class S>
+        friend void senf::intrusive_ptr_release(intrusive_refcount_t<S> * p);
     };
 
     /** \brief Customizable reference count mixin for intrusive_ptr
@@ -115,15 +122,6 @@ namespace senf {
     {
     protected:
         intrusive_refcount_t();
-
-    private:
-        void intrusive_ptr_add_ref();
-        void intrusive_ptr_release();
-
-        template <class S>
-        friend void senf::intrusive_ptr_add_ref(intrusive_refcount_t<S> * p);
-        template <class S>
-        friend void senf::intrusive_ptr_release(intrusive_refcount_t<S> * p);
     };
 
     /** \brief Reference count mixin for intrusive_ptr