private PromotionManifestParser loadManifest()
  throws ExFatalError {    
    //Locate the manifest file in the base directory
    File lManifestFile;
    try {
      lManifestFile = resolveFile(MANIFEST_RELATIVE_FILE_PATH);
    }
    catch (FileNotFoundException e) {
      throw new ExFatalError("Cannot locate manifest file", e);
    }
    
    //Parse the manifest
    PromotionManifestParser lParser = new PromotionManifestParser(lManifestFile);
    try {
      lParser.parse();      
    }
    catch (FileNotFoundException e) {
      throw new ExFatalError("Failed to parse manifest: file not found", e);
    }
    catch (IOException e) {
      throw new ExFatalError("Failed to parse manifest: IOException", e);
    }
    catch (ExParser e) {
      throw new ExFatalError("Failed to parse manifest: " + e.getMessage(), e);
    }
    catch (ExManifest e) {
      throw new ExFatalError("Failed to load manifest: " + e.getMessage(), e);
    }

    //Verify the manifest
    try {
      Logger.logInfo("Verifiying manifest...");
      lParser.verifyManifest(this);
    }
    catch (ExManifest e) {
      throw new ExFatalError("Manifest verification failed: " + e.getMessage(), e);
    }
    
    Logger.logInfo("Manifest parsed and verified successfully");
    
    return lParser;
  }