diff --git a/reportservice/automatic_run.py b/reportservice/automatic_run.py
index 2387eed2ccc741c4bb7d0b033885dc77304037ac..a85fa0b299aa1d5ad109c3bae349035e59551006 100644
--- a/reportservice/automatic_run.py
+++ b/reportservice/automatic_run.py
@@ -24,6 +24,7 @@ async def auto_run(cfg, timeout=3000):
     request = {}
     request['req'] = ['all']
     request['upload'] = True
+    request['report-fmt'] = 'html'
     for i, ti in enumerate(run_time):
         run_time[i] = parser.parse(ti)
 
diff --git a/reportservice/build_dc_report.sh b/reportservice/build_dc_report.sh
index 1a3e65cbf4e0ff9df7269b10aac967cc2ab4a1e9..cc40a6e46f41264321a39c767c32580b77269765 100755
--- a/reportservice/build_dc_report.sh
+++ b/reportservice/build_dc_report.sh
@@ -2,16 +2,16 @@
 
 # the path to doc folder with a Makefile
 dc_folder=$1
-mode=$2
+report_fmt=$2
 
 echo "Running with the following parameters:"
 echo "DC folder path: $dc_folder"
-echo "Mode is: $mode"
+echo "DC Report format should be: report_fmt"
 
-if [ "${mode}" == "local" ]
+if [ "${report_fmt}" == "pdf" ]
 then
     make latexpdf -C "${dc_folder}"
-elif [ "${mode}" == "prod" ]
+elif [ "${report_fmt}" == "html" ]
 then
     make html -C "${dc_folder}"
 fi
diff --git a/reportservice/manual_run.py b/reportservice/manual_run.py
index a2d4e9f3a47dd5714b8a929f8c0ba0247441cc20..0566e3fba290c088fa76ec309d782a9bbdf134d9 100644
--- a/reportservice/manual_run.py
+++ b/reportservice/manual_run.py
@@ -32,19 +32,27 @@ def manual_run(request, cfg):
     msg = socket.recv_pyobj()
     logging.info('{} Manual Run'.format(msg))
 
+
 arg_parser = argparse.ArgumentParser(description='Manual Launch')
 arg_parser.add_argument('--instrument', default=['all'], nargs='+',
-                        help='select the requested instruments. '
+                        help='Select the requested instruments. '
                              'Default=\"all\", which can be used for selecting'
-                             ' all instruments')
-arg_parser.add_argument('--upload', dest='upload', action='store_true',
-                        help='required for pushing the generated figures '
-                             'to the DC git repository. Default=bool(False)')
+                             ' all instruments.')
+arg_parser.add_argument('--upload', action='store_true',
+                        help='Required for uploading the generated figures.'
+                             'Default=False. '
+                             'Note: THIS HAS NO EFFECT IN SIM MODE!')
+arg_parser.add_argument('--report-fmt', default='html',
+                        type=str, choices=['pdf', 'html'],
+                        help='If available in the report service running mode,'
+                             ' this can configure the report format '
+                             'to be html or pdf. Default=html '
+                             'Note: THIS HAS NO EFFECT IN PROD AND SIM MODES!')
 arg_parser.set_defaults(upload=False)
-arg_parser.add_argument('--config-file', type=str, 
-                        default='./report_conf.yaml',
-                        help='path to report configuration file '
-                             'Default=./report_conf.yaml')
+arg_parser.add_argument('--overwrite-conf', type=str,
+                        default=None,
+                        help='Path to new report configuration file. '
+                             'Default=None, type=str.')
 arg_parser.add_argument('--log-file', type=str, default='./report.log',
                         help='The report log file path. Default=./report.log')
 arg_parser.add_argument('--logging', type=str, default="INFO", 
@@ -54,7 +62,7 @@ arg_parser.add_argument('--logging', type=str, default="INFO",
 
 if __name__ == "__main__":
     args = vars(arg_parser.parse_args())
-    conf_file = args["config_file"]
+    conf_file = args["overwrite_conf"]
     with open(conf_file, "r") as f:
         cfg = yaml.load(f.read(), Loader=yaml.FullLoader)
 
@@ -66,13 +74,11 @@ if __name__ == "__main__":
                         format='%(levelname)-6s: %(asctime)s %(message)s',
                         datefmt='%Y-%m-%d %H:%M:%S')
 
-    request = {}
-
-    request['upload'] = args["upload"]
+    request = {'upload': args["upload"],
+               'report-fmt': args["report_fmt"]}
 
-    if args["instrument"]:
+    if args["overwrite_conf"] is None:
         request['req'] = args["instrument"]
     else:
         request['req'] = cfg
-
     manual_run(request, cfg)
diff --git a/reportservice/report_conf.yaml b/reportservice/report_conf.yaml
index 45b6ca5764b038c71017ff0865d3afb3ee93b972..c272c6755ae1b980abc625613e65c1a9d741c125 100644
--- a/reportservice/report_conf.yaml
+++ b/reportservice/report_conf.yaml
@@ -43,6 +43,10 @@ SPB:
             - 1.1
             - 2.2
             - 4.5
+        gain-setting:
+            - 0
+            - 1
+            - 2
         photon-energy: 9.2
         separate-plot:
             - "gain_setting"
@@ -156,6 +160,10 @@ MID:
             - 1.1
             - 2.2
             - 4.5
+        gain-setting:
+            - 0
+            - 1
+            - 2
         photon-energy: 9.2
         separate-plot:
             - "gain_setting"
@@ -247,6 +255,10 @@ FXE:
             - 1
             - 128
             - 512
+        gain-setting:
+            - 0
+            - 1
+            - 2
         photon-energy: 9.2
         separate-plot:
             - "gain_setting"
diff --git a/reportservice/report_service.py b/reportservice/report_service.py
index 90bde34a0d472e89a0796ad9ef614221ea10d447..130885c78473355967a4724ce3e0342f05fd86c3 100644
--- a/reportservice/report_service.py
+++ b/reportservice/report_service.py
@@ -1,4 +1,3 @@
-
 import argparse
 import asyncio
 from asyncio.subprocess import PIPE
@@ -125,16 +124,16 @@ async def copy_files(f, path, sem):
         await asyncio.subprocess.create_subprocess_shell(" ".join(cmd))
 
 
-async def build_dc_report(dc_folder, mode):
+async def build_dc_report(dc_folder, report_fmt):
     """
     Generating a DC report (latex or html) using maxwell nodes.
     With the supported inputs a slurm job is submitted to sphinx-build
-    pdflatex or html depending on mode of the report_service.
-    html in production mode and pdf in local mode
+    pdf or html depending on mode of the report_service.
+    html for prod mode and pdf or html for local mode depending
+    on the chosen report_fmt
 
-    :param dc_folder: the local DC folder path with figures and doc file
-                      for sphinx-build a pdf latex DC report
-    :param mode: the running mode of the report service
+    :param dc_folder: the local DC folder path with figures and rst files
+    :param report_fmt: the expected report format(html or pdf)
     """
     temp_path = "{}/temp/build_dc_report/".format(os.getcwd())
     os.makedirs(temp_path, exist_ok=True)
@@ -149,7 +148,7 @@ async def build_dc_report(dc_folder, mode):
 
     srun_base += [os.path.abspath("./build_dc_report.sh"),
                   os.path.abspath("{}/doc".format(dc_folder)),
-                  mode]
+                  report_fmt]
     logging.info("Building DC report submission: {}".format(srun_base))
     output = subprocess.check_output(srun_base).decode('utf8')
 
@@ -161,6 +160,7 @@ async def build_dc_report(dc_folder, mode):
     await wait_jobs([jobid])
     asyncio.ensure_future(del_folder("{}/slurm-{}.out".format(temp_path, jobid)))
 
+
 async def push_figures(repo_master, addf):
     """ Upload new figures
 
@@ -220,25 +220,19 @@ async def server_runner(conf_file, mode):
     while True:
         response = await socket.recv_pyobj()
         await socket.send_pyobj('Build DC reports through -->')
-        logging.info("response: {} with git pushing: {}"
-                     .format(response['req'], response['upload']))
+        logging.info("response: {} with uploading: {} and report format: {}"
+                     .format(response['req'],
+                             response['upload'],
+                             response['report-fmt']))
 
         # Check if response is a list or a dict.
         # if list, it should either have instrument names or ['all'].
-        # if dict, it should acquires the details of the requested reports
+        # if dict, it should acquire the details of the requested reports
         # for generation. As it will be used instead of report_conf.yaml
 
         # reports config file
         req_cfg = {}
 
-        # No interaction with DC repo (local or remote)
-        # is allowed if sim mode.
-        if mode == 'sim':
-            upload = False
-        else:
-            # boolean for pushing to DC git repo.
-            upload = response['upload']
-
         # Validate the type of 'requested' response.
         if isinstance(response['req'], dict):
             req_cfg = response['req']
@@ -258,9 +252,21 @@ async def server_runner(conf_file, mode):
             logging.error(Errors.REQUEST_MALFORMED.format(response['req']))
             continue
 
+        # No interaction with DC repository (local or remote)
+        # is allowed if sim mode.
+        if mode == 'sim':
+            req_cfg['GLOBAL']['upload'] = False
+            req_cfg['GLOBAL']['report-fmt'] = False
+        else:
+            # boolean for pushing to DC git repo.
+            req_cfg['GLOBAL']['upload'] = response['upload']
+            if mode == 'prod':
+                req_cfg['GLOBAL']['report-fmt'] = 'html'
+            else:
+                req_cfg['GLOBAL']['report-fmt'] = response['report-fmt']
         logging.info('Requested Configuration: {}'.format(req_cfg))
 
-        async def do_action(cfg, upload, mode):
+        async def do_action(cfg, service_mode):
 
             logging.info('Run plot production')
             local_repo = cfg['GLOBAL']['git']['repo-local']
@@ -301,10 +307,10 @@ async def server_runner(conf_file, mode):
                 for output in outputs:
                     if output[0]:
                         logging.info('Submission Output: {}'
-                                            .format(output[0].decode('utf8')))
+                                     .format(output[0].decode('utf8')))
                     if output[1]:
                         logging.error('Submission Error: {}'
-                                            .format(output[1].decode('utf8')))
+                                      .format(output[1].decode('utf8')))
                     job_list += await parse_output(output[0].decode('utf8'))
 
                 try:
@@ -318,7 +324,7 @@ async def server_runner(conf_file, mode):
 
                 # Avoid copying files if upload bool is False
                 # to avoid causing local git repository errors.
-                if upload:
+                if cfg['GLOBAL']['upload']:
                     # Copy all plots
                     for det_name, det_conf in instrument.items():
 
@@ -346,29 +352,35 @@ async def server_runner(conf_file, mode):
                                 '{}/{}'.format(fpath, f.split('/')[-1]))
 
                         await asyncio.gather(*[copy_files(k, v, sem)
-                                            for k, v in det_new_files.items()])
+                                               for k, v in det_new_files.items()])  # noqa
 
                         logging.info('{} figures of {} are copied into {}'
-                            .format(len(figures), det_name, fig_local))
-
-            if upload:
-
-                # Remove sensitive information from the config file.
-                del cfg['GLOBAL']
-                # Write the requested cfg.yaml before pushing all figures.
-                with open('{}/report_conf.yaml'.format(
-                                              fig_local), 'w') as outfile:
-                    yaml.dump(cfg, outfile, default_flow_style=False)
-
-                if mode == 'prod':
-                    # add report_con.yaml in the list of files added to the
-                    # new git commit before pushing to remote
-                    all_new_files.append('{}/report_conf.yaml'.format(fig_local))
-                    asyncio.ensure_future(push_figures(local_repo,
-                                                       all_new_files))
-                # build either html or latexpdf depending
-                # the running mode of the report_service
-                asyncio.ensure_future(build_dc_report(local_repo, mode))
+                                     .format(len(figures), det_name,
+                                             fig_local))
+
+            if cfg['GLOBAL']['upload']:
+                try:
+                    report_fmt = cfg['GLOBAL']['report-fmt']
+                    # Remove sensitive information from the config file.
+                    del cfg['GLOBAL']
+                    # Write the requested cfg.yaml before pushing all figures.
+                    with open('{}/report_conf.yaml'.format(
+                                                  fig_local), 'w') as outfile:
+                        yaml.dump(cfg, outfile, default_flow_style=False)
+
+                    if service_mode == 'prod':
+                        # add report_con.yaml in the list of files added to the
+                        # new git commit before pushing to remote
+                        all_new_files.append('{}/report_conf.yaml'
+                                             .format(fig_local))
+                        asyncio.ensure_future(push_figures(local_repo,
+                                                           all_new_files))
+                    # build either html or pdf depending on the running mode
+                    # of the report_service and requested report format.
+                    asyncio.ensure_future(build_dc_report(local_repo,
+                                                          report_fmt))  # noqa
+                except Exception as upload_e:
+                    logging.error("upload failed: {}".format(upload_e))
 
                 # TODO:delete out-folder
                 #try:
@@ -383,7 +395,6 @@ async def server_runner(conf_file, mode):
 
         try:
             asyncio.ensure_future(do_action(copy.copy(req_cfg),
-                                            copy.copy(upload),
                                             mode))
         except Exception as e:  # actions that fail are only error logged
             logging.error(str(e))