diff --git a/webservice/webservice.py b/webservice/webservice.py
index 2d2e7f59bd25e2bc0e70cf02a4382591cc9f1823..991acbf3d92b0ebe1ef3d46a22ecc639a4c4b0fb 100644
--- a/webservice/webservice.py
+++ b/webservice/webservice.py
@@ -452,7 +452,7 @@ async def copy_untouched_files(file_list, out_folder, run):
 
 
 async def run_action(job_db, cmd, mode, proposal, run, rid) -> str:
-    """ Run action command (CORRECT OR DARK)
+    """Run action command (CORRECT or DARK).
 
     :param job_db: jobs database
     :param cmd: to run, should be a in list for as expected by subprocess.run
@@ -465,48 +465,41 @@ async def run_action(job_db, cmd, mode, proposal, run, rid) -> str:
     Returns a formatted Success or Error message indicating outcome of the
     execution.
     """
-    # FIXME: this coro has too many returns that can be simplified
     if mode == "prod":
         logging.info(" ".join(cmd))
         retcode, stdout = await run_proc_async(cmd)
-        if retcode == 0:
-            if "DARK" in cmd:
-                logging.info(Success.START_CHAR.format(proposal, run))
-            else:
-                logging.info(Success.START_CORRECTION.format(proposal, run))
-            # enter jobs in job db
-            c = job_db.cursor()  # FIXME: asyncio
-            rstr = stdout.decode()
-
-            for r in rstr.split("\n"):
-                if "Submitted job:" in r:
-                    _, jobid = r.split(":")
-                    c.execute(
-                        "INSERT INTO jobs VALUES (?, ?, ?, ?, 'PD', ?, ?, ?)",
-                        (rid, jobid.strip(), proposal, run,
-                         datetime.now().isoformat(), cmd[3], cmd[4])
-                    )
-            job_db.commit()
-            logging.debug((" ".join(cmd)).replace(',', '').replace("'", ""))
-            if "DARK" in cmd:
-                return Success.START_CHAR.format(proposal, run)
-            else:
-                return Success.START_CORRECTION.format(proposal, run)
-        else:
+        if retcode != 0:
             logging.error(Errors.JOB_LAUNCH_FAILED.format(cmd, retcode))
             return Errors.JOB_LAUNCH_FAILED.format(cmd, retcode)
 
-    else:
         if "DARK" in cmd:
-            logging.debug(Success.START_CHAR_SIM.format(proposal, run))
+            message = Success.START_CHAR.format(proposal, run)
         else:
-            logging.debug(Success.START_CORRECTION_SIM.format(proposal, run))
+            message = Success.START_CORRECTION.format(proposal, run)
+
+        # Save submitted jobs to persistent database.
+        c = job_db.cursor()  # FIXME: asyncio
+        rstr = stdout.decode()
+
+        for r in rstr.split("\n"):
+            if "Submitted job:" in r:
+                _, jobid = r.split(":")
+                c.execute(
+                    "INSERT INTO jobs VALUES (?, ?, ?, ?, 'PD', ?, ?, ?)",
+                    (rid, jobid.strip(), proposal, run,
+                     datetime.now().isoformat(), cmd[3], cmd[4])
+                )
+        job_db.commit()
 
-        logging.debug((" ".join(cmd)).replace(',', '').replace("'", ""))
+    else:  # mode == "sim"
         if "DARK" in cmd:
-            return Success.START_CHAR_SIM.format(proposal, run)
+            message = Success.START_CHAR_SIM.format(proposal, run)
         else:
-            return Success.START_CORRECTION_SIM.format(proposal, run)
+            message = Success.START_CORRECTION_SIM.format(proposal, run)
+
+    logging.info(message)
+    logging.info((" ".join(cmd)).replace(',', '').replace("'", ""))
+    return message
 
 
 async def wait_on_transfer(rpath, max_tries=300) -> bool: