private synchronized void startServices() {
      
      //Check to see if we already started
      if(sessionStarted_flag) return;
      
      logger.log(Level.INFO, "STARTING Session");
      sessionStarted_flag = true;
      
      //Start the services listed in start_services.xml
      try {
         URL url = null;
         String startupURL = System.getProperty(STARTUP_SERVICES_URL);
         if(startupURL != null) {
            url = new URL(startupURL);
         }
         else {
             File startupServicesFile = new File(Boot.getBootDir(), "start_services.xml");
             if(startupServicesFile.exists()) {
                 url = startupServicesFile.toURI().toURL();
                 logger.log(Level.INFO, "Start Services URL:"+url.toString());
             }
         }

         //Start the Startup Services
         startupServiceExps = ServiceStarter.startServices(url, false, true);
         
         if(!startupServiceExps.isEmpty()) {
            Iterator it = startupServiceExps.iterator();
            while(it.hasNext()) {
               ServiceStartException exp = (ServiceStartException)it.next();
               if(exp.getService()!=null)
                  logger.log(Level.SEVERE, "An Error occured starting startup service:"+exp.getService().getName(), exp);
               else
                  logger.log(Level.SEVERE, "An Error occured starting startup services:"+exp.getMessage(), exp);
            }
         }
      }
      catch(Throwable exp) {
         //This is Bad but we don't have to show an error to the user
         logger.log(Level.SEVERE, "Error Starting Starup Services!", exp);
      }
      
      fireSessionStarted();
   }