public RemoteInvocationHandler (Connection connection, final int objectID) {
			super();
			this.connection = connection;
			this.objectID = objectID;

			responseListener = new Listener() {
				public void received (Connection connection, Object object) {
					if (!(object instanceof InvokeMethodResult)) return;
					InvokeMethodResult invokeMethodResult = (InvokeMethodResult)object;
					if (invokeMethodResult.objectID != objectID) return;

					int responseID = invokeMethodResult.responseID;
					synchronized (this) {
						if (pendingResponses[responseID]) responseTable[responseID] = invokeMethodResult;
					}

					lock.lock();
					try {
						responseCondition.signalAll();
					} finally {
						lock.unlock();
					}
				}

				public void disconnected (Connection connection) {
					close();
				}
			};
			connection.addListener(responseListener);
		}