public synchronized void removeListener(final CycLeaseManagerListener cycLeaseManagerListener) {
    //// Preconditions
    if (cycLeaseManagerListener == null) {
      throw new InvalidParameterException("cycLeaseManagerListener must not be null");
    }
    assert listeners != null : "listeners must not be null";
    if (cycAccess.getCycConnection() instanceof CycConnection) {
      assert cycAccess.getCycLeaseManager().isAlive() : "the CycLeaseManager thread has died because a lease timed-out, errored or was denied";
    }
    // otherwise, this is a SOAP client connection and leasing is never started

    listeners.remove(cycLeaseManagerListener);
  }