public void exposeObject(String name, Object obj) throws IOException {
    // Create a local object
    LocalObject localObj = new LocalObject();
    localObj.objectName = name;
    localObj.objectId = objectIdCounter++;
    localObj.theObject = obj;
    // localObj.methods   = obj.getClass().getMethods();

    ArrayList<Method> methodList = new ArrayList<Method>();
    for (Method method : obj.getClass().getMethods()) {
      if (method.getDeclaringClass() == obj.getClass()) {
        methodList.add(method);
      }
    }
    localObj.methods = methodList.toArray(new Method[methodList.size()]);

    // Put it in the store
    localObjects.put(localObj.objectId, localObj);

    // Inform the others of its existence
    RemoteObjectDefMessage defMsg = new RemoteObjectDefMessage();
    defMsg.objects = new ObjectDef[] {makeObjectDef(localObj)};

    if (client != null) {
      client.send(defMsg);
      logger.log(Level.FINE, "Client: Sending {0}", defMsg);
    } else {
      server.broadcast(defMsg);
      logger.log(Level.FINE, "Server: Sending {0}", defMsg);
    }
  }