code: public Proxy getProxy(boolean create) throws TooManyHopsException {
  		if (logger.isDebugEnabled()){
  			logger.debug("getProxy - create=" + create);
  		}
  		checkReadOnly();
  		final MobicentsSipSession session = getSipSession();
  		if (session.getB2buaHelper() != null ) throw new IllegalStateException("Cannot proxy request");
  
  		final MaxForwardsHeader mfHeader = (MaxForwardsHeader)this.message.getHeader(MaxForwardsHeader.NAME);
  		if(mfHeader.getMaxForwards()<=0) {
  			try {
  				this.createResponse(Response.TOO_MANY_HOPS, "Too many hops").send();
  			} catch (IOException e) {
  				throw new RuntimeException("could not send the Too many hops response out !", e);
  			}
  			throw new TooManyHopsException();
  		}
  
  		// For requests like PUBLISH dialogs(sessions) do not exist, but some clients
  		// attempt to send them in sequence as if they support dialogs and when such a subsequent request
  		// comes in it gets assigned to the previous request session where the proxy is destroyed.
  		// In this case we must create a new proxy. And we recoginze this case by additionally checking
  		// if this request is initial. TODO: Consider deleting the session contents too? JSR 289 says
  		// the session is keyed against the headers, not against initial/non-initial...
  		if (create) {
  			MobicentsProxy proxy = session.getProxy();
  			boolean createNewProxy = false;
  			if(isInitial() && proxy != null && proxy.getOriginalRequest() == null)  {
  				createNewProxy = true;
  			}
  			if(proxy == null || createNewProxy) {
  				session.setProxy(new ProxyImpl(this, super.sipFactoryImpl));
  			}
  		}
  		return session.getProxy();
  	}
docs: {@inheritDoc}