diff --git a/Console/Server.cc b/Console/Server.cc
index ac9f034c693a644d01ded11c9141dbc4163cb7aa..64b669e34f675077e6ffd85fd543d6b425f8a743 100644
--- a/Console/Server.cc
+++ b/Console/Server.cc
@@ -249,22 +249,26 @@ prefix_ void senf::console::Client::v_write(boost::posix_time::ptime timestamp,
 
 prefix_ std::ostream & senf::console::operator<<(std::ostream & os, Client const & client)
 {
-    //    typedef senf::ClientSocketHandle<MakeSocketPolicy<INet4AddressingPolicy>::policy > v4Socket;
-    if( senf::check_socket_cast<TCPv4ServerSocketHandle::ClientSocketHandle>( client.handle())) {
-        os<<senf::dynamic_socket_cast<TCPv4ServerSocketHandle::ClientSocketHandle>( client.handle()).peer();
-    }
-    else if( senf::check_socket_cast<TCPv6ServerSocketHandle::ClientSocketHandle>( client.handle())) {
-        os<<senf::dynamic_socket_cast<TCPv6ServerSocketHandle::ClientSocketHandle>( client.handle()).peer();
-    }
-    else{
-        os<<((void *)&client);
-    }
+    typedef ClientSocketHandle< MakeSocketPolicy<
+        INet4AddressingPolicy,ConnectedCommunicationPolicy>::policy > V4Socket;
+    typedef ClientSocketHandle< MakeSocketPolicy<
+        INet6AddressingPolicy,ConnectedCommunicationPolicy>::policy > V6Socket;
+
+    if (check_socket_cast<V4Socket>(client.handle()))
+        os << dynamic_socket_cast<V4Socket>(client.handle()).peer();
+    else if (check_socket_cast<V6Socket>(client.handle()))
+        os << dynamic_socket_cast<V6Socket>(client.handle()).peer();
+    else
+        os << static_cast<void const *>(&client);
+
     return os;
 }
+
 prefix_ std::ostream & senf::console::operator<<(std::ostream & os, Client * client)
 {
-    return os<<*client;
+    return os << *client;
 }
+
 ///////////////////////////////cc.e////////////////////////////////////////
 #undef prefix_
 //#include "Server.mpp"
diff --git a/Console/Server.ih b/Console/Server.ih
index eabef7e1150384dd5ff9d2f2ea626344d3bbe120..6bbaf5a4d5c0e475bb8372a8fe01dc3193094ad5 100644
--- a/Console/Server.ih
+++ b/Console/Server.ih
@@ -80,14 +80,20 @@ namespace detail {
 
         virtual ~ClientReader() = 0;
 
+        // Called by subclasses to get information from the Client
+
         Client & client() const;
         std::string promptString() const;
         ClientHandle handle() const;
         std::ostream & stream() const;
+
+        // Called by subclasses to perform actions in the Client
+
         void stopClient();
-        
         void handleInput(std::string const & input) const;
 
+        // Called by the Client
+
         void disablePrompt();
         void enablePrompt();
         void translate(std::string & data);
diff --git a/Socket/SocketHandle.cti b/Socket/SocketHandle.cti
index cbd90890245f3583f10b1a3d9c0f817cc914eefb..b04f1f8133f9bf7e2ca6555cc5f342f6b5bba9e1 100644
--- a/Socket/SocketHandle.cti
+++ b/Socket/SocketHandle.cti
@@ -133,11 +133,11 @@ prefix_ Target senf::static_socket_cast(Source handle)
 template <class Target, class Source>
 prefix_ Target senf::dynamic_socket_cast(Source handle)
 {
-    BOOST_STATIC_ASSERT((
-        boost::is_convertible<Source*,FileHandle*>::value &&
-        boost::is_convertible<Target*,FileHandle*>::value &&
-        ( boost::is_convertible<Source,Target>::value ||
-          boost::is_convertible<Target,Source>::value ) ));
+//     BOOST_STATIC_ASSERT((
+//         boost::is_convertible<Source*,FileHandle*>::value &&
+//         boost::is_convertible<Target*,FileHandle*>::value &&
+//         ( boost::is_convertible<Source,Target>::value ||
+//           boost::is_convertible<Target,Source>::value ) ));
     try {
         return Target::cast_dynamic(handle);
     }
@@ -147,11 +147,11 @@ prefix_ Target senf::dynamic_socket_cast(Source handle)
 template <class Target, class Source>
 prefix_ bool senf::check_socket_cast(Source handle)
 {
-    BOOST_STATIC_ASSERT((
-        boost::is_convertible<Source*,FileHandle*>::value &&
-        boost::is_convertible<Target*,FileHandle*>::value &&
-        ( boost::is_convertible<Source,Target>::value ||
-          boost::is_convertible<Target,Source>::value ) ));
+//     BOOST_STATIC_ASSERT((
+//         boost::is_convertible<Source*,FileHandle*>::value &&
+//         boost::is_convertible<Target*,FileHandle*>::value &&
+//         ( boost::is_convertible<Source,Target>::value ||
+//           boost::is_convertible<Target,Source>::value ) ));
     // we don't have a non-throwing variant of cast_dynamic
     // for two reasons:
     // a) since the handle is passed back by value, we cannot return
diff --git a/Socket/SocketHandle.test.cc b/Socket/SocketHandle.test.cc
index c88c6363da80e34f611c18df9d5fd37b8bc6fe04..c8071f3afd6020a44ba702e509279df32089115b 100644
--- a/Socket/SocketHandle.test.cc
+++ b/Socket/SocketHandle.test.cc
@@ -66,6 +66,12 @@ BOOST_AUTO_UNIT_TEST(socketHandle)
         >::policy OtherSocketPolicy;
     typedef senf::SocketHandle<OtherSocketPolicy> OtherSocketHandle;
 
+    typedef senf::MakeSocketPolicy<
+        senf::test::SomeCommunicationPolicy,
+        senf::test::SomeAddressingPolicy
+        >::policy AnotherSocketPolicy;
+    typedef senf::SocketHandle<AnotherSocketPolicy> AnotherSocketHandle;
+
     {
         MySocketHandle myh;
         OtherSocketHandle osh (myh);
@@ -75,6 +81,7 @@ BOOST_AUTO_UNIT_TEST(socketHandle)
         SomeSocketHandle ssh = senf::static_socket_cast<SomeSocketHandle>(osh);
 
         BOOST_CHECK_NO_THROW( senf::dynamic_socket_cast<SomeSocketHandle>(osh) );
+        BOOST_CHECK_NO_THROW( senf::dynamic_socket_cast<AnotherSocketHandle>(osh) );
 
         typedef senf::SocketHandle< senf::MakeSocketPolicy<
             OtherSocketPolicy,
diff --git a/Socket/SocketPolicy.test.hh b/Socket/SocketPolicy.test.hh
index d921a47cf31f4fb0fdb8106d69f2ec6d7b1fe38f..00bf25273cb84da046b6a4c276f49f1df2aeedeb 100644
--- a/Socket/SocketPolicy.test.hh
+++ b/Socket/SocketPolicy.test.hh
@@ -31,7 +31,6 @@
 ///////////////////////////////hh.p////////////////////////////////////////
 
 namespace senf {
-
 namespace test {
 
     struct SomeAddressingPolicy : public senf::AddressingPolicyBase