Index: references/src/main/java/geniusweb/connection/Connectable.java
===================================================================
--- references/src/main/java/geniusweb/connection/Connectable.java	(revision 1)
+++ references/src/main/java/geniusweb/connection/Connectable.java	(revision 9)
@@ -2,7 +2,8 @@
 
 /**
- * a socket for a general two-way connection
+ * A Connectable is an object that can connect on request with a provided
+ * {@link ConnectionEnd} and then respond to incoming and outgong signals.
  *
- * @param <INTYPE> the type of incoming messages
+ * @param <INTYPE>  the type of incoming messages
  * @param <OUTTYPE> the type of outgoing messages
  */
@@ -13,5 +14,5 @@
 	 * @param connection the new connection
 	 */
-	void connect(Connection<INTYPE, OUTTYPE> connection);
+	void connect(ConnectionEnd<INTYPE, OUTTYPE> connection);
 
 	/**
Index: references/src/main/java/geniusweb/connection/ConnectionEnd.java
===================================================================
--- references/src/main/java/geniusweb/connection/ConnectionEnd.java	(revision 9)
+++ references/src/main/java/geniusweb/connection/ConnectionEnd.java	(revision 9)
@@ -0,0 +1,73 @@
+package geniusweb.connection;
+
+import java.io.IOException;
+import java.net.SocketException;
+import java.net.URI;
+
+import geniusweb.references.Reference;
+import tudelft.utilities.listener.Listenable;
+
+/**
+ * One end of a general two-way connection. incoming data is reported through
+ * the {@link Listenable} channel, sending events of the INTYPE.
+ * <p>
+ * 
+ * The connection mechanism assumed here is fundamentally asymmetric. One side
+ * is "Connectable", the other side is a ConnectionEnd created (usually from a
+ * {@link Reference}. This matches the typical client-server system (web
+ * architecture).
+ * 
+ * <p>
+ * If an internal error occurs, eg a socket failure, timeout, or parser error, a
+ * null event is sent into the Listenable. {@link #getError()} can be called to
+ * find out about the error.
+ *
+ * @param <INTYPE>  the type of incoming messages (incoming for the user of this
+ *                  connection end). Incoming messages are received through
+ *                  Listener#not. Incoming messages are usually asynchronous.
+ * @param <OUTTYPE> the type of outgoing messages (outgoing for the user of this
+ *                  connection end). Outgoing messages can be sent directly with
+ *                  #send.
+ * 
+ */
+public interface ConnectionEnd<INTYPE, OUTTYPE> extends Listenable<INTYPE> {
+
+	/**
+	 * Send data out (and flush the output so that there are no excessive delays
+	 * in sending the data). This call is assumed to return immediately (never
+	 * block, eg on synchronized, Thread.sleep, IO, etc). When this is called
+	 * multiple times in sequence, the data should arrive at the receiver end in
+	 * the same order.
+	 * 
+	 * @param data the data to be sent.
+	 * @throws IOException if the data failed to be sent.
+	 */
+	void send(OUTTYPE data) throws IOException;
+
+	/**
+	 * @return Reference that was used to create this connection
+	 */
+	Reference getReference();
+
+	/**
+	 * @return the URI of the remote endpoint that makes up the connection. This
+	 *         is a URI that uniquely identifies the remote object
+	 */
+	URI getRemoteURI();
+
+	/**
+	 * Close the connection. Should return immediately (not block). Before
+	 * really closing, this should attempt to send out possibly cached messages
+	 * before closing the connection.
+	 * 
+	 */
+	void close();
+
+	/**
+	 * @return the latest internal error, or null if no error occured. If the
+	 *         channel is closed, this is set to {@link SocketException} "Socket
+	 *         closed", even if the close was a "normal" termination eg when
+	 *         {@link #close()} was called.
+	 */
+	Throwable getError();
+}
Index: references/src/main/java/geniusweb/connection/ConnectionFactory.java
===================================================================
--- references/src/main/java/geniusweb/connection/ConnectionFactory.java	(revision 1)
+++ references/src/main/java/geniusweb/connection/ConnectionFactory.java	(revision 9)
@@ -9,4 +9,5 @@
  * factory that can turn a {@link Reference} into a connection to that
  * reference.
+ * 
  * 
  * @param <INTYPE>  the type of incoming messages. Incoming messages are
@@ -30,5 +31,5 @@
 	 *                                 the server. This suggest to retry later.
 	 */
-	Connection<INTYPE, OUTTYPE> connect(Reference reference)
+	ConnectionEnd<INTYPE, OUTTYPE> connect(Reference reference)
 			throws IOException, NoResourcesNowException;
 
Index: references/src/main/java/geniusweb/connection/DefaultConnection.java
===================================================================
--- references/src/main/java/geniusweb/connection/DefaultConnection.java	(revision 1)
+++ references/src/main/java/geniusweb/connection/DefaultConnection.java	(revision 9)
@@ -14,4 +14,4 @@
  */
 public abstract class DefaultConnection<INTYPE, OUTTYPE> extends
-		DefaultListenable<INTYPE> implements Connection<INTYPE, OUTTYPE> {
+		DefaultListenable<INTYPE> implements ConnectionEnd<INTYPE, OUTTYPE> {
 }
