public synchronized boolean follow() {
        try {
            if (!isAutoStartNavigation() && (m_parsedRoute != null)) {
                if (m_routeFollower != null) {
                    m_locIfc.removeSyncLocationListener(m_routeFollower);
                    if (m_routeFollower.isRunning()) {
                        m_routeFollower.stop();
                    }
                }
                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);
                return true;
            }
        } catch (Exception e) {
            if(LOG.isError()) {
                LOG.error("RouteModule.follow()", e.toString());
            }
            error(new UnexpectedError("Route could not start following becasue of an error", e));
        }
        return false;
    }