public synchronized void remove(BaseObject obj) {
    synchronized (objList) {
      if (!objList.contains(obj)) {
        return;
      }

      objList.remove(obj);
      obj.notifyListeners(obj);
      obj.removeListener(this);

      notifyListener(obj);
    }
  }