code: @Override
      public boolean removeEventListener(IEventListener listener) {
          // remove the listener from the so
          so.unregister(listener);
          // if we have not been released by all that acquired then keep on
          // disconnection of the last listener
          if (so.isAcquired()) {
              log.debug("Shared object has been aquired so setting keep on disconnect");
              keepOnDisconnect = true;
          }
          // remove the listener
          boolean result = super.removeEventListener(listener);
          // notify other listeners that someone has stopped listening
          serverListeners.forEach(soListener -> {
              soListener.onSharedObjectDisconnect(this);
          });
          // check that linger job has be set
          if (lingerJobName == null) {
              // start a job to allow the so to linger for just a few ticks
              ISchedulingService scheduler = (ISchedulingService) getParent().getContext().getBean(ISchedulingService.BEAN_NAME);
              lingerJobName = scheduler.addScheduledOnceJob(lingerPeriod, new IScheduledJob() {
                  public void execute(ISchedulingService service) {
                      if (so != null && !so.isClosed()) {
                          so.checkRelease();
                      }
                  }
              });
          }
          // check acquire
          if (so.isClosed()) {
              log.debug("Removing scope: {}", this);
              getParent().removeChildScope(this);
          }
          return result;
      }
docs: {@inheritDoc}