public synchronized void readResponse(final InputStream in, long length) throws IOException {
        if (LOG.isInfo()) {
            LOG.info("RouteModule.readResponse()", "content length: "+length);
        }
        
        try {
            m_parsedRoute = Nav2RouteParser.parseNavigatorRouteBin(
                    m_routeRequest, m_routeID, m_routeBB, in);
                m_moduleData.getCallbackHandler().callInvokeCallbackRunnable(
                        new Runnable() {
                            public void run() {
                                m_listener.routeDone(m_reqID, m_parsedRoute);
                            }
                        });
                
                if (m_routeRequest.isReroute() 
                        && m_routeRequest.getRerouteReason() 
                        == RouteRequest.REASON_TRAFFIC_INFO_UPDATE) {
                    if (m_routeFollower != null) {
                        m_locIfc.removeSyncLocationListener(m_routeFollower);
                        if (m_routeFollower.isRunning()) {
                            m_routeFollower.stop();
                        }
                    }
                }
                
                if (isAutoStartNavigation()) {
                    m_routeFollower = new RouteFollower(this, m_systems, m_parsedRoute, m_routeRequest);
                    m_routeFollower.initRouteFollower();
                    m_moduleData.getPAL().getConcurrencyLayer().startNewDaemonThread(m_routeFollower, "RouteFollower");
                    m_locIfc.addSyncLocationListener(m_criteria, m_routeFollower);
                }
        }
        catch (final IOException ioe) {
            if (LOG.isError()) {
                LOG.error("RouteModule.readResponse(in, length)", ioe.getMessage());
            }
            m_moduleData.getCallbackHandler().callInvokeCallbackRunnable(new Runnable() {
                public void run() {
                    m_listener.error(m_reqID, new UnexpectedError(ioe.getMessage(), ioe));
                }
            });
            
        }

    }