public static void stopSipStack(SipStack sipStack, SipListener listener) {
    Iterator<SipProvider> sipProviderIterator = sipStack.getSipProviders();
    try {
      while (sipProviderIterator.hasNext()) {
        SipProvider sipProvider = sipProviderIterator.next();
        ListeningPoint[] listeningPoints = sipProvider.getListeningPoints();
        for (ListeningPoint listeningPoint : listeningPoints) {
          sipProvider.removeListeningPoint(listeningPoint);
          sipStack.deleteListeningPoint(listeningPoint);
          listeningPoints = sipProvider.getListeningPoints();
        }
        sipProvider.removeSipListener(listener);
        sipStack.deleteSipProvider(sipProvider);
        sipProviderIterator = sipStack.getSipProviders();
      }
    } catch (Exception e) {
      throw new IllegalStateException("Cant remove the listening points or sip providers", e);
    }

    sipStack.stop();
    sipStack = null;
  }