diff --git a/net/haproxy/src/etc/rc.syshook.d/50-haproxy.stop b/net/haproxy/src/etc/rc.syshook.d/50-haproxy.stop
new file mode 100755
index 000000000..e05a629cd
--- /dev/null
+++ b/net/haproxy/src/etc/rc.syshook.d/50-haproxy.stop
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+/usr/local/opnsense/scripts/OPNsense/HAProxy/rc-wrapper.sh stop
diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/main.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/main.xml
index 33aa176c7..66a0b4b57 100644
--- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/main.xml
+++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/main.xml
@@ -11,6 +11,12 @@
checkbox
Enable or disable the HAProxy service.
+
+ haproxy.general.gracefulStop
+
+ checkbox
+
+
diff --git a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml
index aed80b1e6..e33063dea 100644
--- a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml
+++ b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml
@@ -1,5 +1,6 @@
//OPNsense/HAProxy
+ 1.0.0
the HAProxy load balancer
@@ -9,6 +10,10 @@
0
Y
+
+ 0
+ Y
+
0
diff --git a/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/rc-wrapper.sh b/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/rc-wrapper.sh
new file mode 100755
index 000000000..163448ab3
--- /dev/null
+++ b/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/rc-wrapper.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+if [ -f /etc/rc.conf.d/haproxy ]; then
+. /etc/rc.conf.d/haproxy
+fi
+
+case "$1" in
+stop|restart)
+ if [ "${haproxy_hardstop}" == "YES" ]; then
+ rcprefix="hard"
+ fi
+ ;;
+esac
+
+/usr/local/etc/rc.d/haproxy ${rcprefix}${1}
diff --git a/net/haproxy/src/opnsense/service/conf/actions.d/actions_haproxy.conf b/net/haproxy/src/opnsense/service/conf/actions.d/actions_haproxy.conf
index a40d035d7..1ee61b638 100644
--- a/net/haproxy/src/opnsense/service/conf/actions.d/actions_haproxy.conf
+++ b/net/haproxy/src/opnsense/service/conf/actions.d/actions_haproxy.conf
@@ -5,25 +5,25 @@ type:script_output
message:setup haproxy service requirements
[start]
-command:/usr/local/opnsense/scripts/OPNsense/HAProxy/setup.sh; /usr/local/etc/rc.d/haproxy start
+command:/usr/local/opnsense/scripts/OPNsense/HAProxy/setup.sh; /usr/local/opnsense/scripts/OPNsense/HAProxy/rc-wrapper.sh start
parameters:
type:script
message:starting haproxy
[stop]
-command:/usr/local/etc/rc.d/haproxy stop; /usr/bin/killall haproxy; exit 0
+command:/usr/local/opnsense/scripts/OPNsense/HAProxy/rc-wrapper.sh stop; /usr/bin/killall haproxy; exit 0
parameters:
type:script
message:stopping haproxy
[restart]
-command:/usr/local/opnsense/scripts/OPNsense/HAProxy/setup.sh; /usr/local/etc/rc.d/haproxy restart
+command:/usr/local/opnsense/scripts/OPNsense/HAProxy/setup.sh; /usr/local/opnsense/scripts/OPNsense/HAProxy/rc-wrapper.sh restart
parameters:
type:script
message:restarting haproxy
[reconfigure]
-command:/usr/local/opnsense/scripts/OPNsense/HAProxy/setup.sh; /usr/local/etc/rc.d/haproxy reload
+command:/usr/local/opnsense/scripts/OPNsense/HAProxy/setup.sh; /usr/local/opnsense/scripts/OPNsense/HAProxy/rc-wrapper.sh reload
parameters:
type:script
message:reconfiguring haproxy
diff --git a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/rc.conf.d b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/rc.conf.d
index 0d4f4b2f1..44eb42162 100644
--- a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/rc.conf.d
+++ b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/rc.conf.d
@@ -3,7 +3,11 @@ haproxy_enable=YES
haproxy_opnsense_bootup_run="/usr/local/opnsense/scripts/OPNsense/HAProxy/setup.sh"
haproxy_pidfile="/var/run/haproxy.pid"
haproxy_config="/usr/local/etc/haproxy.conf"
-# haproxy_flags=""
+{% if helpers.exists('OPNsense.HAProxy.general.gracefulStop') and OPNsense.HAProxy.general.gracefulStop|default("0") == "1" %}
+haproxy_hardstop=NO
+{% else %}
+haproxy_hardstop=YES
+{% endif %}
{% else %}
haproxy_enable=NO
{% endif %}