diff --git a/src/webui/grafana_prom_load_generator.json b/src/webui/grafana_prom_load_generator.json
new file mode 100644
index 0000000000000000000000000000000000000000..365691ddb1ded28efb6aab1548e5e109ad9c685d
--- /dev/null
+++ b/src/webui/grafana_prom_load_generator.json
@@ -0,0 +1,414 @@
+{
+    "annotations": {
+      "list": [
+        {
+          "builtIn": 1,
+          "datasource": {
+            "type": "datasource",
+            "uid": "grafana"
+          },
+          "enable": true,
+          "hide": true,
+          "iconColor": "rgba(0, 211, 255, 1)",
+          "name": "Annotations & Alerts",
+          "target": {
+            "limit": 100,
+            "matchAny": false,
+            "tags": [],
+            "type": "dashboard"
+          },
+          "type": "dashboard"
+        }
+      ]
+    },
+    "editable": true,
+    "fiscalYearStartMonth": 0,
+    "graphTooltip": 0,
+    "id": 7,
+    "iteration": 1682521708178,
+    "links": [],
+    "liveNow": false,
+    "panels": [
+      {
+        "aliasColors": {},
+        "bars": false,
+        "dashLength": 10,
+        "dashes": false,
+        "datasource": {
+          "type": "prometheus",
+          "uid": "uq1HQksVk"
+        },
+        "fill": 1,
+        "fillGradient": 0,
+        "gridPos": {
+          "h": 6,
+          "w": 24,
+          "x": 0,
+          "y": 0
+        },
+        "hiddenSeries": false,
+        "id": 4,
+        "legend": {
+          "alignAsTable": false,
+          "avg": false,
+          "current": false,
+          "max": false,
+          "min": false,
+          "rightSide": false,
+          "show": false,
+          "total": false,
+          "values": false
+        },
+        "lines": true,
+        "linewidth": 1,
+        "nullPointMode": "null",
+        "options": {
+          "alertThreshold": true
+        },
+        "percentage": false,
+        "pluginVersion": "8.5.22",
+        "pointradius": 2,
+        "points": false,
+        "renderer": "flot",
+        "seriesOverrides": [],
+        "spaceLength": 10,
+        "stack": false,
+        "steppedLine": false,
+        "targets": [
+          {
+            "datasource": {
+              "type": "prometheus",
+              "uid": "uq1HQksVk"
+            },
+            "exemplar": true,
+            "expr": "sum(tfs_loadgen_rpc_[[method]]_counter_requests_started_total{pod=~\"[[pod]]\"})",
+            "hide": false,
+            "interval": "",
+            "legendFormat": "started",
+            "refId": "A"
+          },
+          {
+            "datasource": {
+              "type": "prometheus",
+              "uid": "uq1HQksVk"
+            },
+            "exemplar": true,
+            "expr": "sum(tfs_loadgen_rpc_[[method]]_counter_requests_completed_total{pod=~\"[[pod]]\"})",
+            "hide": false,
+            "interval": "",
+            "legendFormat": "completed",
+            "refId": "B"
+          },
+          {
+            "datasource": {
+              "type": "prometheus",
+              "uid": "uq1HQksVk"
+            },
+            "exemplar": true,
+            "expr": "sum(tfs_loadgen_rpc_[[method]]_counter_requests_failed_total{pod=~\"[[pod]]\"})",
+            "hide": false,
+            "interval": "",
+            "legendFormat": "failed",
+            "refId": "C"
+          }
+        ],
+        "thresholds": [],
+        "timeRegions": [],
+        "title": "Requests",
+        "tooltip": {
+          "shared": true,
+          "sort": 0,
+          "value_type": "individual"
+        },
+        "transformations": [],
+        "type": "graph",
+        "xaxis": {
+          "mode": "time",
+          "show": true,
+          "values": []
+        },
+        "yaxes": [
+          {
+            "$$hashKey": "object:935",
+            "format": "short",
+            "logBase": 1,
+            "min": "0",
+            "show": true
+          },
+          {
+            "$$hashKey": "object:936",
+            "format": "short",
+            "logBase": 1,
+            "show": true
+          }
+        ],
+        "yaxis": {
+          "align": false
+        }
+      },
+      {
+        "cards": {},
+        "color": {
+          "cardColor": "#b4ff00",
+          "colorScale": "linear",
+          "colorScheme": "interpolateRdYlGn",
+          "exponent": 0.5,
+          "min": 0,
+          "mode": "opacity"
+        },
+        "dataFormat": "tsbuckets",
+        "datasource": {
+          "type": "prometheus",
+          "uid": "uq1HQksVk"
+        },
+        "gridPos": {
+          "h": 8,
+          "w": 24,
+          "x": 0,
+          "y": 6
+        },
+        "heatmap": {},
+        "hideZeroBuckets": true,
+        "highlightCards": true,
+        "id": 2,
+        "interval": "60s",
+        "legend": {
+          "show": true
+        },
+        "pluginVersion": "7.5.4",
+        "reverseYBuckets": false,
+        "targets": [
+          {
+            "exemplar": true,
+            "expr": "sum(\r\n    max_over_time(tfs_[[component]]_rpc_[[method]]_histogram_duration_bucket{pod=~\"[[pod]]\"}[1m]) -\r\n    min_over_time(tfs_[[component]]_rpc_[[method]]_histogram_duration_bucket{pod=~\"[[pod]]\"}[1m])\r\n) by (le)",
+            "format": "heatmap",
+            "instant": false,
+            "interval": "1m",
+            "intervalFactor": 1,
+            "legendFormat": "{{le}}",
+            "refId": "A"
+          }
+        ],
+        "title": "Histogram",
+        "tooltip": {
+          "show": true,
+          "showHistogram": true
+        },
+        "type": "heatmap",
+        "xAxis": {
+          "show": true
+        },
+        "yAxis": {
+          "format": "s",
+          "logBase": 1,
+          "show": true
+        },
+        "yBucketBound": "auto"
+      },
+      {
+        "aliasColors": {},
+        "bars": false,
+        "dashLength": 10,
+        "dashes": false,
+        "datasource": {
+          "type": "prometheus",
+          "uid": "uq1HQksVk"
+        },
+        "fill": 1,
+        "fillGradient": 0,
+        "gridPos": {
+          "h": 6,
+          "w": 24,
+          "x": 0,
+          "y": 14
+        },
+        "hiddenSeries": false,
+        "id": 5,
+        "legend": {
+          "alignAsTable": false,
+          "avg": false,
+          "current": false,
+          "max": false,
+          "min": false,
+          "rightSide": false,
+          "show": false,
+          "total": false,
+          "values": false
+        },
+        "lines": true,
+        "linewidth": 1,
+        "nullPointMode": "null",
+        "options": {
+          "alertThreshold": true
+        },
+        "percentage": false,
+        "pluginVersion": "8.5.22",
+        "pointradius": 2,
+        "points": false,
+        "renderer": "flot",
+        "seriesOverrides": [],
+        "spaceLength": 10,
+        "stack": false,
+        "steppedLine": false,
+        "targets": [
+          {
+            "exemplar": true,
+            "expr": "sum(tfs_[[component]]_rpc_[[method]]_histogram_duration_sum{pod=~\"[[pod]]\"})",
+            "hide": false,
+            "interval": "",
+            "legendFormat": "total time",
+            "refId": "B"
+          }
+        ],
+        "thresholds": [],
+        "timeRegions": [],
+        "title": "Total Exec Time",
+        "tooltip": {
+          "shared": true,
+          "sort": 0,
+          "value_type": "individual"
+        },
+        "transformations": [],
+        "type": "graph",
+        "xaxis": {
+          "mode": "time",
+          "show": true,
+          "values": []
+        },
+        "yaxes": [
+          {
+            "$$hashKey": "object:407",
+            "format": "s",
+            "logBase": 1,
+            "min": "0",
+            "show": true
+          },
+          {
+            "$$hashKey": "object:408",
+            "format": "short",
+            "logBase": 1,
+            "show": true
+          }
+        ],
+        "yaxis": {
+          "align": false
+        }
+      }
+    ],
+    "refresh": "5s",
+    "schemaVersion": 36,
+    "style": "dark",
+    "tags": [],
+    "templating": {
+      "list": [
+        {
+          "allValue": ".*",
+          "current": {
+            "selected": true,
+            "text": [
+              "setup",
+              "teardown"
+            ],
+            "value": [
+              "setup",
+              "teardown"
+            ]
+          },
+          "datasource": {
+            "type": "prometheus",
+            "uid": "uq1HQksVk"
+          },
+          "definition": "metrics(tfs_loadgen_requests_)",
+          "hide": 0,
+          "includeAll": true,
+          "label": "Method",
+          "multi": true,
+          "name": "method",
+          "options": [],
+          "query": {
+            "query": "metrics(tfs_loadgen_requests_)",
+            "refId": "StandardVariableQuery"
+          },
+          "refresh": 2,
+          "regex": "/tfs_loadgen_requests_(.+)_histogram_duration_bucket/",
+          "skipUrlSync": false,
+          "sort": 0,
+          "tagValuesQuery": "",
+          "tagsQuery": "",
+          "type": "query",
+          "useTags": false
+        },
+        {
+          "allValue": ".*",
+          "current": {
+            "selected": true,
+            "text": [
+              "All"
+            ],
+            "value": [
+              "$__all"
+            ]
+          },
+          "datasource": {
+            "type": "prometheus",
+            "uid": "uq1HQksVk"
+          },
+          "definition": "label_values(tfs_loadgen_requests_[[method]]_histogram_duration_bucket, pod)",
+          "error": {
+            "config": {
+              "data": {
+                "end": "1682522070",
+                "match[]": "tfs_loadgen_requests_(setup|teardown)_histogram_duration_bucket",
+                "start": "1682349270"
+              },
+              "headers": {
+                "Content-Type": "application/x-www-form-urlencoded",
+                "X-Grafana-Org-Id": 1
+              },
+              "hideFromInspector": true,
+              "method": "POST",
+              "retry": 0,
+              "url": "api/datasources/proxy/3/api/v1/series"
+            },
+            "data": {
+              "error": "invalid parameter \"match[]\": 1:22: parse error: unexpected \"(\"",
+              "errorType": "bad_data",
+              "message": "invalid parameter \"match[]\": 1:22: parse error: unexpected \"(\"",
+              "status": "error"
+            },
+            "message": "invalid parameter \"match[]\": 1:22: parse error: unexpected \"(\"",
+            "status": 400,
+            "statusText": "Bad Request"
+          },
+          "hide": 0,
+          "includeAll": true,
+          "label": "Pod",
+          "multi": true,
+          "name": "pod",
+          "options": [],
+          "query": {
+            "query": "label_values(tfs_loadgen_requests_[[method]]_histogram_duration_bucket, pod)",
+            "refId": "StandardVariableQuery"
+          },
+          "refresh": 2,
+          "regex": "",
+          "skipUrlSync": false,
+          "sort": 0,
+          "tagValuesQuery": "",
+          "tagsQuery": "",
+          "type": "query",
+          "useTags": false
+        }
+      ]
+    },
+    "time": {
+      "from": "now-2d",
+      "to": "now"
+    },
+    "timepicker": {},
+    "timezone": "",
+    "title": "TFS / Load Generator",
+    "uid": "SDgbwzsVk",
+    "version": 5,
+    "weekStart": ""
+  }
\ No newline at end of file
diff --git a/src/webui/service/load_gen/forms.py b/src/webui/service/load_gen/forms.py
index c8174fcd7efbd4e19f9b7e228a0f76ad76a9c098..8092b3193563df52e9c538e20890835f799fe8ee 100644
--- a/src/webui/service/load_gen/forms.py
+++ b/src/webui/service/load_gen/forms.py
@@ -40,6 +40,8 @@ class LoadGenForm(FlaskForm):
     capacity_gbps  = StringField('Capacity [Gbps]',  default=DEFAULT_CAPACITY_GBPS,  validators=[Regexp(RE_SCALAR_RANGE_LIST)])
     e2e_latency_ms = StringField('E2E Latency [ms]', default=DEFAULT_E2E_LATENCY_MS, validators=[Regexp(RE_SCALAR_RANGE_LIST)])
 
+    max_workers = IntegerField('Max Workers', default=10, validators=[DataRequired(), NumberRange(min=1)])
+
     do_teardown = BooleanField('Do Teardown', default=True)
 
     record_to_dlt = BooleanField('Record to DLT', default=False)
diff --git a/src/webui/service/load_gen/routes.py b/src/webui/service/load_gen/routes.py
index ad4876fe14d7ba927c84ac4a8eac6dd232c099ab..1b4f9c6ba971c17fc3ac9216aad6cc39b20c8151 100644
--- a/src/webui/service/load_gen/routes.py
+++ b/src/webui/service/load_gen/routes.py
@@ -69,6 +69,7 @@ def home():
     set_properties(form.availability             , _availability                  , readonly=status.running)
     set_properties(form.capacity_gbps            , _capacity_gbps                 , readonly=status.running)
     set_properties(form.e2e_latency_ms           , _e2e_latency_ms                , readonly=status.running)
+    set_properties(form.max_workers              , status.parameters.max_workers  , readonly=status.running)
     set_properties(form.do_teardown              , status.parameters.do_teardown  , disabled=status.running)
     set_properties(form.record_to_dlt            , status.parameters.record_to_dlt, disabled=status.running)
     set_properties(form.dlt_domain_id            , status.parameters.dlt_domain_id, readonly=status.running)
@@ -100,6 +101,7 @@ def start():
             load_gen_params.offered_load       = form.offered_load.data
             load_gen_params.holding_time       = form.holding_time.data
             load_gen_params.inter_arrival_time = form.inter_arrival_time.data
+            load_gen_params.max_workers        = form.max_workers.data
             load_gen_params.do_teardown        = form.do_teardown.data
             load_gen_params.dry_mode           = False
             load_gen_params.record_to_dlt      = form.record_to_dlt.data
diff --git a/src/webui/service/templates/load_gen/home.html b/src/webui/service/templates/load_gen/home.html
index 371d6916131722e4c624acf4595aad1ce239f506..046459acf12068b2cb9d8529d4454c36609613d5 100644
--- a/src/webui/service/templates/load_gen/home.html
+++ b/src/webui/service/templates/load_gen/home.html
@@ -158,6 +158,21 @@
             </div>
             <br />
 
+            <div class="row mb-3">
+                {{ form.max_workers.label(class="col-sm-2 col-form-label") }}
+                <div class="col-sm-10">
+                    {% if form.max_workers.errors %}
+                        {{ form.max_workers(class="form-control is-invalid") }}
+                        <div class="invalid-feedback">
+                            {% for error in form.max_workers.errors %}<span>{{ error }}</span>{% endfor %}
+                        </div>
+                    {% else %}
+                        {{ form.max_workers(class="form-control") }}
+                    {% endif %}
+                </div>
+            </div>
+            <br />
+
             <div class="row mb-3">
                 <div class="col-sm-10">
                     {{ form.do_teardown }} {{ form.do_teardown.label(class="col-sm-3 col-form-label") }}<br/>