code: public void normalize(Model model) {
  		
  		if(model.getLevel() != BioPAXLevel.L3)
  			throw new IllegalArgumentException("Not Level3 model. " +
  				"Consider converting it first (e.g., with the PaxTools).");
  		
  		//if set, update the xml:base
  		if(xmlBase != null && !xmlBase.isEmpty())
  			model.setXmlBase(xmlBase);
  
  		// Normalize/merge xrefs, first, and then CVs
  		// (also because some of original xrefs might have "normalized" URIs 
  		// that, in fact, must be used for other biopax types, such as CV or ProteinReference)
  		log.info("Normalizing xrefs..." + description);
  		normalizeXrefs(model);
  		
  		// fix displayName where possible
  		if(fixDisplayName) {
  			log.info("Normalizing display names..." + description);
  			fixDisplayName(model);
  		}
  			
  		log.info("Normalizing CVs..." + description);
  		normalizeCVs(model);
  		
  		//normalize BioSource objects (better, as it is here, go after Xrefs and CVs)
  		log.info("Normalizing organisms..." + description);
  		normalizeBioSources(model);
  
  		// auto-generate missing entity references:
  		for(SimplePhysicalEntity spe : new HashSet<SimplePhysicalEntity>(model.getObjects(SimplePhysicalEntity.class))) {
  			//it skips if spe has entityReference or memberPE already
  			ModelUtils.addMissingEntityReference(model, spe);
  		}
  
  		log.info("Normalizing entity references..." + description);
  		normalizeERs(model);
  		
  		// find/add lost (in replace) children
  		log.info("Repairing..." + description);
  		model.repair(); // it does not remove dangling utility class objects (can be done separately, later, if needed)
  		
  		log.info("Optional tasks (reasoning)..." + description);
  	}
docs: BioPAX normalization
  (modifies the original Model)
  
  @param model BioPAX model to normalize
  @throws NullPointerException if model is null
  @throws IllegalArgumentException if model is not Level3 BioPAX