diff --git a/Generators/EvgenJobTransforms/python/EvgenConfig.py b/Generators/EvgenJobTransforms/python/EvgenConfig.py
index b2c9bb6dcb0768ed161d74dd094f4f9a2ec8d472..e891d6050d9f0402c371cd5e4056385461e1dffd 100644
--- a/Generators/EvgenJobTransforms/python/EvgenConfig.py
+++ b/Generators/EvgenJobTransforms/python/EvgenConfig.py
@@ -6,7 +6,7 @@
 lhefGenerators = ["Lhef", # generic name: prefer to use the names below
                   "aMcAtNlo", "McAtNlo", "Powheg", "PowHel", "MadGraph", "CompHep", "CalcHep",
                   "Whizard", "MCFM", "JHU", "MEtop", "Charybdis", "Charybdis2",
-                  "BlackMax", "QBH", "gg2ww", "gg2zz", "gg2vv", "HvyN", "VBFNLO", "FPMC"]
+                  "BlackMax", "QBH", "gg2ww", "gg2zz", "gg2vv", "HvyN", "VBFNLO", "FPMC", "ProtosLHEF"]
 
 ## A more general list of generators which provide partonic input, including non-LHEF ones
 inputGenerators = lhefGenerators + ["Alpgen", "Protos"]
@@ -21,7 +21,7 @@ mainGenerators += ["Pythia8", "Pythia8B"]
 ## Sherpa family
 mainGenerators += ["Sherpa"]
 ## Soft QCD generators
-mainGenerators += ["Exhume", "Phojet", "Epos"]
+mainGenerators += ["Exhume", "Phojet", "Epos", "QGSJet"]
 ## ATLAS-specific generators
 mainGenerators += ["ParticleGenerator", "ParticleGun"]
 mainGenerators += ["CosmicGenerator", "BeamHaloGenerator"]
@@ -47,6 +47,13 @@ notesthepmcGenerators = ["ParticleDecayer", "ParticleGun", "CosmicGenerator", "B
 notuneGenerators = ["ParticleGenerator", "ParticleGun", "CosmicGenerator", "BeamHaloGenerator", "HepMCAscii"]
 
 
+def gen_require_steering(gennames):
+    "Return a boolean of whether this set of generators requires the steering command line flag"
+    if not "EvtGen" in gennames: return False
+    if any(("Pythia" in gen and not "Pythia8" in gen) for gen in gennames): return True
+    if any(("Herwig" in gen and not "Herwigpp" in gen) for gen in gennames): return True
+    return False
+
 def gen_known(genname):
     "Return whether a generator name is known"
     return genname in knownGenerators
diff --git a/Generators/EvgenJobTransforms/scripts/Generate_tf.py b/Generators/EvgenJobTransforms/scripts/Generate_tf.py
index 0fa10886208c4a55ef9627531a3fca71ad1aa133..4d04bc26a3d03e26318543ac06d540f0760b6651 100755
--- a/Generators/EvgenJobTransforms/scripts/Generate_tf.py
+++ b/Generators/EvgenJobTransforms/scripts/Generate_tf.py
@@ -109,7 +109,7 @@ class EvgenExecutor(athenaExecutor):
             expand_if_archive(tarball)
             if "MC14" in str(joparam):
                 mk_jo_proxy(os.getcwd(), "MC14JobOptions", "_joproxy14")
-            if "MC15" in str(joparam):
+            else :
                 mk_jo_proxy(os.getcwd(), "MC15JobOptions", "_joproxy15")
             ## Source setup script (requires some shenanigans to update the Python env robustly)
             # TODO: trf framework now bans use of exec()...
@@ -123,13 +123,14 @@ class EvgenExecutor(athenaExecutor):
                 # TODO: Make the package name configurable
                 if "MC14" in str(joparam):
                     mk_jo_proxy("/cvmfs/atlas.cern.ch/repo/sw/Generators/MC14JobOptions/latest/", "MC14JobOptions","_joproxy14")
-                if "MC15" in str(joparam):
+#                if "MC15" in str(joparam):
+                else :
                     mk_jo_proxy("/cvmfs/atlas.cern.ch/repo/sw/Generators/MC15JobOptions/latest/", "MC15JobOptions","_joproxy15")
                 msg.info("No evgenJobOpts tarball specified, using JOBOPTSEARCHPATH = '%s'" % os.environ["JOBOPTSEARCHPATH"])
             elif os.path.exists("/afs/cern.ch/atlas/groups/Generators"):
                 if "MC14" in str(joparam):
                     mk_jo_proxy("/afs/cern.ch/atlas/groups/Generators/MC14JobOptions/latest/", "MC14JobOptions","_joproxy14")
-                if "MC15" in str(joparam):
+                else :
                     mk_jo_proxy("/afs/cern.ch/atlas/groups/Generators/MC15JobOptions/latest/", "MC15JobOptions","_joproxy15")
                 msg.info("No evgenJobOpts tarball specified, no cvmfs, using JOBOPTSEARCHPATH = '%s'" % os.environ["JOBOPTSEARCHPATH"])
 
diff --git a/Generators/EvgenJobTransforms/share/Generate_ecmenergies.py b/Generators/EvgenJobTransforms/share/Generate_ecmenergies.py
index 028499a0b083892b57943a14f059776a658b9d0a..ab0ec39c3e48768dd1759a87557bb9d29e5c31ce 100644
--- a/Generators/EvgenJobTransforms/share/Generate_ecmenergies.py
+++ b/Generators/EvgenJobTransforms/share/Generate_ecmenergies.py
@@ -36,5 +36,8 @@ elif 'Sherpa' in evgenConfig.generators:
 elif 'Epos' in evgenConfig.generators:
     genSeq.Epos.BeamMomentum = -eBeam
     genSeq.Epos.TargetMomentum = eBeam
+elif 'QGSJet' in evgenConfig.generators:
+    genSeq.QGSJet.BeamMomentum = -eBeam
+    genSeq.QGSJet.TargetMomentum = eBeam    
 
 del eCM, eBeam
diff --git a/Generators/EvgenJobTransforms/share/Generate_randomseeds.py b/Generators/EvgenJobTransforms/share/Generate_randomseeds.py
index 20c1b4f26cf954ee9129d1ce7fc475cb8fae8850..236b38f6f8b46bd7d7ec83db073a18d379e8f3d7 100644
--- a/Generators/EvgenJobTransforms/share/Generate_randomseeds.py
+++ b/Generators/EvgenJobTransforms/share/Generate_randomseeds.py
@@ -24,6 +24,7 @@ genseeds = {
     'Isajet'            : ["ISAJET OFFSET {rnd} 1857585203 {rnd}", "ISAJET_INIT 820021 2347532"],
     'Phojet'            : ["PHOJET OFFSET {rnd} 174947321 {rnd}", "PHOJET_INIT 820021 2347532"],
     'Epos'              : ["EPOS OFFSET {rnd} {rnd} 31122001", "EPOS_INIT OFFSET {rnd} 820021 2347532"],
+    'QGSJet'            : ["QGSJet OFFSET {rnd} {rnd} 51122005", "QGSJET_INIT OFFSET {rnd} 820021 2347532"],
     'ParticleGun'       : ["ParticleGun {rnd} {rnd}"],
     'ParticleGenerator' : ["SINGLE LUXURY 2 OFFSET 12345 {rnd} {rnd}"],
     'ParticleDecayer'   : ["ParticleDecayer LUXURY 2 OFFSET 54321 {rnd} {rnd}"],
diff --git a/Generators/EvgenJobTransforms/share/skeleton.ABtoEVGEN.py b/Generators/EvgenJobTransforms/share/skeleton.ABtoEVGEN.py
index 2d5ec7b2c334a7dd04ff2bb32b1642a0fb35e9b2..58003da0060be83b8d03f00db090786c79690af8 100644
--- a/Generators/EvgenJobTransforms/share/skeleton.ABtoEVGEN.py
+++ b/Generators/EvgenJobTransforms/share/skeleton.ABtoEVGEN.py
@@ -406,6 +406,8 @@ elif "Alpgen" in evgenConfig.generators:
     datFile = "inparmAlpGen.dat"
 elif "Protos" in evgenConfig.generators:
     datFile = "protos.dat"
+elif "ProtosLHEF" in evgenConfig.generators:
+    datFile = "protoslhef.dat"
 elif "AcerMC" in evgenConfig.generators:
     datFile = "inparmAcerMC.dat"
 elif "CompHep" in evgenConfig.generators:
@@ -439,32 +441,32 @@ def mk_symlink(srcfile, dstfile):
             evgenLog.debug("Symlinking: %s is already the same as %s" % (dstfile, srcfile))
 
 ## Find and symlink dat and event files, so they are available via the name expected by the generator
-if eventsFile or datFile:
-    if not hasattr(runArgs, "inputGeneratorFile") or runArgs.inputGeneratorFile == "NONE":
-        raise RuntimeError("%s needs input file (argument inputGeneratorFile)" % runArgs.jobConfig)
-    if evgenConfig.inputfilecheck and not re.search(evgenConfig.inputfilecheck, runArgs.inputGeneratorFile):
-        raise RuntimeError("inputGeneratorFile=%s is incompatible with inputfilecheck '%s' in %s" %
-                           (runArgs.inputGeneratorFile, evgenConfig.inputfilecheck, runArgs.jobConfig))
-    inputroot = os.path.basename(runArgs.inputGeneratorFile).split("._")[0]
-    if datFile:
-        realDatFile = find_unique_file('*%s*.dat' % inputroot)
-        mk_symlink(realDatFile, datFile)
-    if eventsFile:
-        realEventsFile = find_unique_file('*%s.*.ev*ts' % inputroot)
-        mk_symlink(realEventsFile, eventsFile)
-else:
-    if hasattr(runArgs, "inputGeneratorFile") and runArgs.inputGeneratorFile != "NONE":
-        raise RuntimeError("inputGeneratorFile arg specified for %s, but generators %s do not require an input file" %
-                           (runArgs.jobConfig, str(gennames)))
-    if evgenConfig.inputfilecheck:
-        raise RuntimeError("evgenConfig.inputfilecheck specified in %s, but generators %s do not require an input file" %
-                           (runArgs.jobConfig, str(gennames)))
+#if eventsFile or datFile:
+#    if not hasattr(runArgs, "inputGeneratorFile") or runArgs.inputGeneratorFile == "NONE":
+#        raise RuntimeError("%s needs input file (argument inputGeneratorFile)" % runArgs.jobConfig)
+#    if evgenConfig.inputfilecheck and not re.search(evgenConfig.inputfilecheck, runArgs.inputGeneratorFile):
+#        raise RuntimeError("inputGeneratorFile=%s is incompatible with inputfilecheck '%s' in %s" %
+#                           (runArgs.inputGeneratorFile, evgenConfig.inputfilecheck, runArgs.jobConfig))
+#    inputroot = os.path.basename(runArgs.inputGeneratorFile).split("._")[0]
+#    if datFile:
+#        realDatFile = find_unique_file('*%s*.dat' % inputroot)
+#        mk_symlink(realDatFile, datFile)
+#    if eventsFile:
+#        realEventsFile = find_unique_file('*%s.*.ev*ts' % inputroot)
+#        mk_symlink(realEventsFile, eventsFile)
+#else:
+#    if hasattr(runArgs, "inputGeneratorFile") and runArgs.inputGeneratorFile != "NONE":
+#        raise RuntimeError("inputGeneratorFile arg specified for %s, but generators %s do not require an input file" %
+#                           (runArgs.jobConfig, str(gennames)))
+#    if evgenConfig.inputfilecheck:
+#        raise RuntimeError("evgenConfig.inputfilecheck specified in %s, but generators %s do not require an input file" %
+#                           (runArgs.jobConfig, str(gennames)))
 
 ## Check conf files, as above but for a different command line arg, and with omission allowed
-if hasattr(runArgs, "inputGenConfFile") and runArgs.inputGenConfFile != "NONE":
-    if evgenConfig.inputconfcheck and not re.search(evgenConfig.inputconfcheck, runArgs.inputGenConfFile):
-        raise RuntimeError("inputGenConfFile=%s is incompatible with inputconfcheck (%s) in %s" %
-                           (runArgs.inputGenConfFile, evgenConfig.inputconfcheck, runArgs.jobConfig))
+#if hasattr(runArgs, "inputGenConfFile") and runArgs.inputGenConfFile != "NONE":
+#    if evgenConfig.inputconfcheck and not re.search(evgenConfig.inputconfcheck, runArgs.inputGenConfFile):
+#        raise RuntimeError("inputGenConfFile=%s is incompatible with inputconfcheck (%s) in %s" %
+#                           (runArgs.inputGenConfFile, evgenConfig.inputconfcheck, runArgs.jobConfig))
 
 ## Do the aux-file copying
 if evgenConfig.auxfiles:
diff --git a/Generators/EvgenJobTransforms/share/skeleton.GENtoEVGEN.py b/Generators/EvgenJobTransforms/share/skeleton.GENtoEVGEN.py
index c6c8aef9a8bc96c3e9be0ca62b76662307692f40..76eb7052772475ce8a6b20ef9e6af61d997a21c2 100644
--- a/Generators/EvgenJobTransforms/share/skeleton.GENtoEVGEN.py
+++ b/Generators/EvgenJobTransforms/share/skeleton.GENtoEVGEN.py
@@ -95,7 +95,7 @@ evgenLog.debug("****************** CONFIGURING EVENT GENERATION ****************
 ## Functions for operating on generator names
 ## NOTE: evgenConfig, topSeq, svcMgr, theApp, etc. should NOT be explicitly re-imported in JOs
 from EvgenJobTransforms.EvgenConfig import evgenConfig
-from EvgenJobTransforms.EvgenConfig import gens_known, gens_lhef, gen_sortkey, gens_testhepmc, gens_notune
+from EvgenJobTransforms.EvgenConfig import gens_known, gens_lhef, gen_sortkey, gens_testhepmc, gens_notune, gen_require_steering
 
 ## Fix non-standard event features
 from EvgenProdTools.EvgenProdToolsConf import FixHepMC
@@ -244,14 +244,21 @@ gennames = sorted(evgenConfig.generators, key=gen_sortkey)
 ## Check that the actual generators, tune, and main PDF are consistent with the JO name
 if joparts[0].startswith("MC"): #< if this is an "official" JO
     genpart = jo_physshortparts[0]
+#    genpart = genpart.replace("Py8", "Pythia8").replace("MG","MadGraph").replace("Ph","Powheg").replace("Hpp",Herwigpp").replace("Sh","Sherpa").replace("Ag","Alpgen").replace("Py","Pythia").replace("EG","EvtGen").replace("PG","ParticleGun")
     expectedgenpart = ''.join(gennames)
     ## We want to record that HERWIG was used in metadata, but in the JO naming we just use a "Jimmy" label
     expectedgenpart = expectedgenpart.replace("HerwigJimmy", "Jimmy")
     def _norm(s):
         # TODO: add EvtGen to this normalization for MC14?
         return s.replace("Photospp", "").replace("Photos", "").replace("Tauola", "")
-    if genpart != expectedgenpart and _norm(genpart) != _norm(expectedgenpart):
-        evgenLog.error("Expected first part of JO name to be '%s' or '%s', but found '%s'" % (_norm(expectedgenpart), expectedgenpart, genpart))
+    def _norm2(s):
+        return s.replace("Py", "Pythia").replace("MG","MadGraph").replace("Ph","Powheg").replace("Hpp","Herwigpp").replace("Sh","Sherpa").replace("Ag","Alpgen").replace("EG","EvtGen").replace("PG","ParticleGun")
+        
+    def _short2(s):
+         return s.replace("Pythia","Py").replace("MadGraph","MG").replace("Powheg","Ph").replace("Herwigpp","Hpp").replace("Sherpa","Sh").replace("Alpgen","Ag").replace("EvtGen","EG").replace("PG","ParticleGun")
+     
+    if genpart != expectedgenpart and _norm(genpart) != _norm(expectedgenpart) and _norm2(genpart) != expectedgenpart:
+        evgenLog.error("Expected first part of JO name to be '%s' or '%s' or '%s', but found '%s'" % (_norm(expectedgenpart), expectedgenpart, _short2(expectedgenpart), genpart))
         sys.exit(1)
     del _norm
     ## Check if the tune/PDF part is needed, and if so whether it's present
@@ -261,6 +268,13 @@ if joparts[0].startswith("MC"): #< if this is an "official" JO
                        " It should contain <generators>_<tune+PDF_<process>. Please rename.")
         sys.exit(1)
 
+## Check the "--steering=afterburn" command line argument has been set if EvtGen is in the JO name
+# Dont't have access to steering flag so check it's effect on output files
+if gen_require_steering(gennames):
+    if hasattr(runArgs, "outputEVNTFile") and not hasattr(runArgs, "outputEVNT_PreFile"):
+        raise RuntimeError("'EvtGen' found in job options name, please set '--steering=afterburn'")
+
+
 ## Check that the evgenConfig.minevents setting is acceptable
 ## minevents defines the production event sizes and must be sufficiently "round"
 if evgenConfig.minevents < 1:
@@ -414,6 +428,8 @@ elif "Alpgen" in evgenConfig.generators:
     datFile = "inparmAlpGen.dat"
 elif "Protos" in evgenConfig.generators:
     datFile = "protos.dat"
+elif "ProtosLHEF" in evgenConfig.generators:
+    datFile = "protoslhef.dat"
 elif "AcerMC" in evgenConfig.generators:
     datFile = "inparmAcerMC.dat"
 elif "CompHep" in evgenConfig.generators:
@@ -423,8 +439,10 @@ elif "CompHep" in evgenConfig.generators:
 eventsFile = None
 if "Alpgen" in evgenConfig.generators:
     eventsFile = "alpgen.unw_events"
-elif "Protos" in evgenConfig.generators: # TODO: converting to LHEF
+elif "Protos" in evgenConfig.generators: 
     eventsFile = "protos.events"
+elif "ProtosLHEF" in evgenConfig.generators:
+    eventsFile = "protoslhef.events"
 elif "BeamHaloGenerator" in evgenConfig.generators:
     eventsFile = "beamhalogen.events"
 elif "HepMCAscii" in evgenConfig.generators: