diff --git a/Generators/PowhegControl/python/algorithms/postprocessors/madspin.py b/Generators/PowhegControl/python/algorithms/postprocessors/madspin.py
index 756eed44d8f079329a850dc9fedea69f9633e153..222dfd09375b17291677858f3e32ef9352d8627e 100644
--- a/Generators/PowhegControl/python/algorithms/postprocessors/madspin.py
+++ b/Generators/PowhegControl/python/algorithms/postprocessors/madspin.py
@@ -1,12 +1,12 @@
 # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
-from AthenaCommon import Logging
-from ...decorators import timed
-from ...utility import LHE, ProcessManager, SingleProcessThread
 import glob
 import os
 import shutil
 import subprocess
+from AthenaCommon import Logging
+from ...decorators import timed
+from ...utility import LHE, ProcessManager, SingleProcessThread
 
 ## Get handle to Athena logging
 logger = Logging.logging.getLogger("PowhegControl")
@@ -250,6 +250,8 @@ def __run_executable(executable):
 
     @author James Robinson <james.robinson@cern.ch>
     """
+    if not os.path.isfile(executable):
+        raise OSError("MadSpin executable {} not found!".format(executable))
     logger.info("MadSpin executable: {}".format(executable))
     with open("madspin_runcard.txt", "rb") as runcard_input:
         processes = [SingleProcessThread([executable], stdin=runcard_input, ignore_output=["INFO:", "MadSpin>"])]
diff --git a/Generators/PowhegControl/python/algorithms/postprocessors/nnlo_reweighter.py b/Generators/PowhegControl/python/algorithms/postprocessors/nnlo_reweighter.py
index 0a45841e43e82f4c9c78be82486794481bf9ab92..35074ab55dfac7040895840abab3d3c6f4317bc8 100644
--- a/Generators/PowhegControl/python/algorithms/postprocessors/nnlo_reweighter.py
+++ b/Generators/PowhegControl/python/algorithms/postprocessors/nnlo_reweighter.py
@@ -1,12 +1,12 @@
 # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
-from AthenaCommon import Logging
-from ...decorators import timed
-from ...utility import LHE, ProcessManager, SingleProcessThread
 import glob
 import os
 import re
 import shutil
+from AthenaCommon import Logging
+from ...decorators import timed
+from ...utility import LHE, ProcessManager, SingleProcessThread
 from xml.etree import ElementTree
 
 
@@ -97,6 +97,8 @@ def run_NNLOPS_executable(NNLO_executable, NNLO_reweighting_inputs, NNLO_weight_
         f_input_card.write("</initrwgt>\n")
 
     # Run the executable until finished
+    if not os.path.isfile(NNLO_executable):
+        raise OSError("NNLO reweighting executable {} not found!".format(NNLO_executable))
     manager = ProcessManager([SingleProcessThread(NNLO_executable)])
     while manager.monitor():
         pass
diff --git a/Generators/PowhegControl/python/algorithms/postprocessors/photos.py b/Generators/PowhegControl/python/algorithms/postprocessors/photos.py
index 7285bbdddacf04c02bed72c940afe2fdb383fe8b..9f9e002885549b43bb43776092106be9691ce9fb 100644
--- a/Generators/PowhegControl/python/algorithms/postprocessors/photos.py
+++ b/Generators/PowhegControl/python/algorithms/postprocessors/photos.py
@@ -1,5 +1,6 @@
 # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
+import os
 from AthenaCommon import Logging
 from ...decorators import timed
 from ...utility import ProcessManager, SingleProcessThread
@@ -17,6 +18,8 @@ def PHOTOS(process):
     @author James Robinson <james.robinson@cern.ch>
     """
     logger.info("Running PHOTOS afterburner")
+    if not os.path.isfile(process.executable):
+        raise OSError("PHOTOS executable {} not found!".format(process.executable))
     processes = [SingleProcessThread(process.executable)]
     manager = ProcessManager(processes)
     while manager.monitor():
diff --git a/Generators/PowhegControl/python/parameters/registry.py b/Generators/PowhegControl/python/parameters/registry.py
index 56558fb976b2a2fe838479133f134feb50edca9c..bf282c50c005253303f1dc3a69d163ffb714d191 100644
--- a/Generators/PowhegControl/python/parameters/registry.py
+++ b/Generators/PowhegControl/python/parameters/registry.py
@@ -324,7 +324,7 @@ class Registry(object):
         self.add_default("pdfreweight", 1, frozen=True, description="store PDF information. Deprecated for processes with XML-reweighting. [1:enabled]")
         self.add_default("Phasespace", 1, name="phasespace", description="phasespace to use. [1:standard; 2:use separate unweighted events from event.total.lhe as input]")
         self.add_default("photoninduced", -1, description="[-1:use Powheg default]")
-        self.add_default("PHOTOS_enabled", 1, description="use PHOTOS for photon radiation. [1:enabled]")
+        self.add_default("PHOTOS_enabled", True, description="use PHOTOS for photon radiation. [False:disabled; True:enabled]")
         self.add_default("phsp_Wm", atlas_common.mass.W, name="mass_W", description="W boson mass in GeV")
         self.add_default("phsp_Ww", atlas_common.width.W, name="width_W", description="W boson width in GeV")
         self.add_default("phsp_Zm", atlas_common.mass.Z, name="mass_Z", description="Z boson mass in GeV")
diff --git a/Generators/PowhegControl/python/powheg_control.py b/Generators/PowhegControl/python/powheg_control.py
index 6b2cae9bfef005fda88f9eaa1eab00590983ac54..0f001cf79df8dd5ffd01fba3cb32287a93a14249 100644
--- a/Generators/PowhegControl/python/powheg_control.py
+++ b/Generators/PowhegControl/python/powheg_control.py
@@ -147,14 +147,14 @@ class PowhegControl(object):
         logger.info("|     Option name     |    ATLAS default    |                     Description                     |")
         logger.info("===================================================================================================")
         for parameter in [p for p in parameters_sorted if p.is_visible]:
-            logger.info("| {:<19} | {:>19} | {}".format(parameter.name, parameter.default_value, parameter.description))
+            logger.info("| {:<19} | {:>19} | {}".format(parameter.name, str(parameter.default_value), parameter.description))
         logger.info("==================================================================================================")
 
         # Print list of parameters that have been changed by the user
         parameters_changed = [p for p in parameters_sorted if p.value != p.default_value]
         logger.info("In these jobOptions {} parameter(s) have been changed from their default value:".format(len(parameters_changed)))
         for idx, parameter in enumerate(parameters_changed):
-            logger.info("  {:<3} {:<19} {:>15} => {}".format("{})".format(idx + 1), "{}:".format(parameter.name), parameter.default_value, parameter.value))
+            logger.info("  {:<3} {:<19} {:>15} => {}".format("{})".format(idx + 1), "{}:".format(parameter.name), str(parameter.default_value), parameter.value))
 
         # Validate any parameters which need validation/processing
         self.process.validate_parameters()
diff --git a/Generators/PowhegControl/python/processes/external/external_photos.py b/Generators/PowhegControl/python/processes/external/external_photos.py
index 20dcfb03cd9aacb364a79663c8fdb81bc301a198..e925257b934252fdb81a3e0b4e78bb097e5aa21e 100644
--- a/Generators/PowhegControl/python/processes/external/external_photos.py
+++ b/Generators/PowhegControl/python/processes/external/external_photos.py
@@ -30,7 +30,9 @@ class ExternalPHOTOS(ExternalBase):
         """
         # Check that PHOTOS is not disabled
         self.expose()
-        if self.PHOTOS_enabled != 1:
-            logger.warning("PHOTOS not enabled")
+        if self.PHOTOS_enabled:
+            logger.info("Running with PHOTOS enabled")
+        else:
+            logger.info("Running without PHOTOS")
             return False
         return True
diff --git a/Generators/PowhegControl/python/processes/powheg/W_EW.py b/Generators/PowhegControl/python/processes/powheg/W_EW.py
index c0e807db1eaedf0528434677274891f00974861f..8b91c2954628fb4a5743462dce77c944aa2ac656 100644
--- a/Generators/PowhegControl/python/processes/powheg/W_EW.py
+++ b/Generators/PowhegControl/python/processes/powheg/W_EW.py
@@ -1,9 +1,9 @@
 # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
+import os
 from AthenaCommon import Logging
 from ..external import ExternalPHOTOS
 from ..powheg_V2 import PowhegV2
-import os
 
 ## Get handle to Athena logging
 logger = Logging.logging.getLogger("PowhegControl")
@@ -171,7 +171,13 @@ class W_EW(PowhegV2):
         self.add_keyword("Zwidth")
 
     def validate_decays(self):
-        """! Validate idvecbos and vdecaymode keywords."""
+        """! Validate idvecbos and vdecaymode keywords and check that 'no_ew' is compatible with 'PHOTOS_enabled'."""
+        # If PHOTOS is disabled but EW effects are on, any subsequent PHOTOS process will have to run in vetoed mode which is not supported
+        if not self.externals["PHOTOS"].parameters_by_keyword("PHOTOS_enabled")[0].value and self.parameters_by_keyword("no_ew")[0].value == 0:
+            logger.error("Attempting to run with native PHOTOS disabled but with EW corrections on.")
+            logger.error("This would require any later PHOTOS generation to run in vetoed mode.")
+            logger.error("Please change 'PHOTOS_enabled' and/or 'no_ew' in your jobOptions.")
+            raise ValueError("Incompatible options. Please change 'PHOTOS_enabled' and/or 'no_ew' in your jobOptions.")
         self.expose()  # convenience call to simplify syntax
         self.check_decay_mode(self.decay_mode, self.allowed_decay_modes)
         # Calculate appropriate decay mode numbers
diff --git a/Generators/PowhegControl/python/processes/powheg/Z_EW.py b/Generators/PowhegControl/python/processes/powheg/Z_EW.py
index 1a3ab806e5a32bd3509e4187395423190c416cec..2e34535ce783ac89ab9b05f7224fbadce62144a4 100644
--- a/Generators/PowhegControl/python/processes/powheg/Z_EW.py
+++ b/Generators/PowhegControl/python/processes/powheg/Z_EW.py
@@ -1,13 +1,14 @@
 # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
+import os
 from AthenaCommon import Logging
 from ..external import ExternalPHOTOS
 from ..powheg_V2 import PowhegV2
-import os
 
 ## Get handle to Athena logging
 logger = Logging.logging.getLogger("PowhegControl")
 
+
 class Z_EW(PowhegV2):
     """! Default Powheg configuration for single Z-boson production with electroweak corrections.
 
@@ -170,7 +171,13 @@ class Z_EW(PowhegV2):
         self.add_keyword("Zwidth")
 
     def validate_decays(self):
-        """! Validate vdecaymode keyword."""
+        """! Validate vdecaymode keyword and check that 'no_ew' is compatible with 'PHOTOS_enabled'."""
+        # If PHOTOS is disabled but EW effects are on, any subsequent PHOTOS process will have to run in vetoed mode which is not supported
+        if not self.externals["PHOTOS"].parameters_by_keyword("PHOTOS_enabled")[0].value and self.parameters_by_keyword("no_ew")[0].value == 0:
+            logger.error("Attempting to run with native PHOTOS disabled but with EW corrections on.")
+            logger.error("This would require any later PHOTOS generation to run in vetoed mode.")
+            logger.error("Please change 'PHOTOS_enabled' and/or 'no_ew' in your jobOptions.")
+            raise ValueError("Incompatible options. Please change 'PHOTOS_enabled' and/or 'no_ew' in your jobOptions.")
         self.expose()  # convenience call to simplify syntax
         self.check_decay_mode(self.decay_mode, self.allowed_decay_modes)
         # Calculate appropriate decay mode numbers