diff --git a/Socket/ClientSocketHandle.test.cc b/Socket/ClientSocketHandle.test.cc
index 389f30ec85d33869cec4e925eec33dad22dcd290..69505645ebd98fc70f038ced813039b8b0a68800 100644
--- a/Socket/ClientSocketHandle.test.cc
+++ b/Socket/ClientSocketHandle.test.cc
@@ -64,8 +64,11 @@ BOOST_AUTO_UNIT_TEST(clientSocketHandle)
             >::policy OtherSocketPolicy;
         typedef sl::SocketHandle<OtherSocketPolicy> OtherSocketHandle;
     
-        OtherSocketHandle ssh (myh);
-        ssh = myh;
+        OtherSocketHandle osh (myh);
+        osh = myh;
+        typedef sl::ClientSocketHandle<sl::test::SomeProtocol::Policy> SomeSocketHandle;
+        SomeSocketHandle ssh = 
+            sl::static_socket_cast<SomeSocketHandle>(osh);
     }
 
     // reading and writing
diff --git a/Socket/ProtocolClientSocketHandle.test.cc b/Socket/ProtocolClientSocketHandle.test.cc
index 7c73b90460aa173f1de8a8aca79d8398d477a3ae..be924cec378fb8929c99a8ec82781acec64c4a43 100644
--- a/Socket/ProtocolClientSocketHandle.test.cc
+++ b/Socket/ProtocolClientSocketHandle.test.cc
@@ -48,8 +48,18 @@ BOOST_AUTO_UNIT_TEST(protocolClientSocketHandle)
     typedef satcom::lib::ProtocolClientSocketHandle<MyProtocol> MySocketHandle;
 
     {
+        typedef satcom::lib::MakeSocketPolicy<
+            satcom::lib::test::SomeFramingPolicy,
+            satcom::lib::test::SomeReadPolicy,
+            satcom::lib::test::SomeWritePolicy
+            >::policy OtherSocketPolicy;
+        typedef satcom::lib::SocketHandle<OtherSocketPolicy> OtherSocketHandle;
+
         MySocketHandle h;
         h.protocol();
+        
+        OtherSocketHandle osh (h);
+        h = satcom::lib::static_socket_cast<MySocketHandle>(osh);
     }
 
     {
diff --git a/Socket/ProtocolServerSocketHandle.test.cc b/Socket/ProtocolServerSocketHandle.test.cc
index 98408955bb3c8de4be57ecf24460eae20642189d..eb56abc118640c13d1e793219b08b4312e1de82f 100644
--- a/Socket/ProtocolServerSocketHandle.test.cc
+++ b/Socket/ProtocolServerSocketHandle.test.cc
@@ -49,7 +49,18 @@ BOOST_AUTO_UNIT_TEST(protocolServerSocketHandle)
     typedef satcom::lib::ProtocolServerSocketHandle<MyProtocol> MySocketHandle;
 
     {
+        typedef satcom::lib::MakeSocketPolicy<
+            satcom::lib::test::SomeFramingPolicy,
+            satcom::lib::test::SomeReadPolicy,
+            satcom::lib::test::SomeWritePolicy
+            >::policy OtherSocketPolicy;
+        typedef satcom::lib::SocketHandle<OtherSocketPolicy> OtherSocketHandle;
+
         MySocketHandle h;
+        h.protocol();
+
+        OtherSocketHandle osh (h);
+        h = satcom::lib::static_socket_cast<MySocketHandle>(osh);
    
         MySocketHandle::ClientSocketHandle client = h.accept();
         BOOST_CHECK_EQUAL( client.fd(), -1 );
diff --git a/Socket/ServerSocketHandle.test.cc b/Socket/ServerSocketHandle.test.cc
index 73909ac9c642667517926fc9b7d8cd9f819bba32..579f35c78e21e4cc4a34320e3ac02ad2857c49db 100644
--- a/Socket/ServerSocketHandle.test.cc
+++ b/Socket/ServerSocketHandle.test.cc
@@ -61,8 +61,11 @@ BOOST_AUTO_UNIT_TEST(serverSocketHandle)
     typedef sl::SocketHandle<OtherSocketPolicy> OtherSocketHandle;
     
     MySocketHandle myh;
-    OtherSocketHandle ssh (myh);
-    ssh = myh;
+    OtherSocketHandle osh (myh);
+    osh = myh;
+
+    typedef sl::ServerSocketHandle<sl::test::SomeProtocol::Policy> SomeSocketHandle;
+    SomeSocketHandle ssh = sl::static_socket_cast<SomeSocketHandle>(osh);
 
     BOOST_CHECK_NO_THROW( myh.bind(0) );
     BOOST_CHECK_EQUAL( myh.local(), 2u );
diff --git a/Socket/SocketPolicy.hh b/Socket/SocketPolicy.hh
index 74de6f3c08f00daf2038892b7663dadaf54530d2..07c2739fbab7d41cc3d717102ac59559ebd21b9d 100644
--- a/Socket/SocketPolicy.hh
+++ b/Socket/SocketPolicy.hh
@@ -38,6 +38,22 @@ namespace lib {
 	(ReadPolicy)                            \
 	(WritePolicy)                           \
 	(BufferingPolicy)
+    
+    // The implementation file will for each Policy declared above
+    // define the following (SomePolicy is one of the above):
+    //
+    // struct SomePolicyBase;
+    // typedef UndefinedSomePolicy;
+    // template SomePolicyIs< SocketPolicy, Axis >
+    // template IfSomePolicyIs< SocketPolicy, Axis >
+    // template IfSomePolicyIsNot< SocketPolicy, Axis >
+    //
+    // Additionally the following are defined:
+    //
+    // class SocketPolicyBase
+    // template SocketPolicy< ..policies.. >
+    // template MakeSocketPolicy< ..args.. >
+    // template SocketPolicyIsBaseOf< Base, Derived >
 
 }}