private void processObject(Object o){
		try {
			MethodTransfer mt=(MethodTransfer)o;
			//System.out.println ("method transfer");
			MethodDetails md=mt.getMethodDetails();
			
			Class<?> c=couple.getReceiver().getClass();
			try {
				Method m=c.getDeclaredMethod(md.getName(),md.getArgumentTypes());
				Object ob=m.invoke(couple.getReceiver(),md.getArguments());
				
				changeTransferTo(new ReturnTransfer(mt,ob));
			} catch(Exception e){
				changeTransferTo(new ExceptionTransfer(mt.getID(),e));
			}
			return;
		} catch (ClassCastException e){	}
		try {
			try {
				ReturnTransfer rt=(ReturnTransfer)o;
				//System.out.println ("Return transfer");
				Sender.Returner<Object> retu=couple.getSender().getReturner(rt.getID());
				retu.getCountDownLatch().countDown();
				retu.getExchanger().exchange(rt.getReturnedValue());
				rt.getID().destroy();
			} catch(InterruptedException e){
				conn.exceptionEncountered(e,this);
			}
			return;
		} catch (ClassCastException e){ }
		try {
			ExceptionTransfer et=(ExceptionTransfer) o;
			conn.exceptionEncountered(et.getException(),this);
			et.getID().destroy();
			return;
		} catch (ClassCastException e){ }
		if (!(o instanceof NullTransfer))
			conn.exceptionEncountered(new NullPointerException ("Unresolved object received - "+o),this);
	}