diff --git a/SOURCES/vncserver.service b/SOURCES/vncserver.service
index 5077e82..7b9cb2f 100644
--- a/SOURCES/vncserver.service
+++ b/SOURCES/vncserver.service
@@ -3,9 +3,7 @@
 # Quick HowTo:
 # 1. Copy this file to /etc/systemd/system/vncserver@.service
 # 2. Replace <USER> with the actual user name and edit vncserver
-#    parameters appropriately
-#    (ExecStart=/usr/sbin/runuser -l <USER> -c "/usr/bin/vncserver %i"
-#     PIDFile=/home/<USER>/.vnc/%H%i.pid)
+#    parameters in the wrapper script located in /usr/bin/vncserver_wrapper
 # 3. Run `systemctl daemon-reload`
 # 4. Run `systemctl enable vncserver@:<display>.service`
 #
@@ -36,12 +34,11 @@ Description=Remote desktop service (VNC)
 After=syslog.target network.target
 
 [Service]
-Type=forking
+Type=simple
 
 # Clean any existing files in /tmp/.X11-unix environment
 ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
-ExecStart=/usr/sbin/runuser -l <USER> -c "/usr/bin/vncserver %i"
-PIDFile=/home/<USER>/.vnc/%H%i.pid
+ExecStart=/usr/bin/vncserver_wrapper <USER> %i
 ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
 
 [Install]
diff --git a/SOURCES/vncserver_wrapper b/SOURCES/vncserver_wrapper
new file mode 100755
index 0000000..0c8f994
--- /dev/null
+++ b/SOURCES/vncserver_wrapper
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+USER="$1"
+INSTANCE="$2"
+
+die() {
+	echo "FATAL: ${@:-}" >&2
+	exit 2
+}
+
+cleanup() {
+	[ -n "$VNCPID" ] || return
+	if kill -0 $VNCPID 2>/dev/null; then
+		kill $VNCPID
+	fi
+}
+
+trap cleanup TERM INT HUP
+
+[ -n "$USER" -a -n "$INSTANCE" ] || die "Invalid usage!"
+
+/usr/sbin/runuser -l "$USER" -c "/usr/bin/vncserver ${INSTANCE}"
+[ $? -eq 0 ] || die "'runuser -l $USER' failed!"
+
+# Wait up to 5 seconds for vncserver to be up
+for tries in $(seq 1 50); do
+	[ -e "~$USER/.vnc/$(hostname)${INSTANCE}.pid" ] && break
+	sleep 0.1
+done
+
+eval HOME=~$USER
+
+VNCPID=$(cat "$HOME/.vnc/$(hostname)${INSTANCE}.pid" 2>/dev/null || true)
+[ -n "$VNCPID" ] || die "'vncserver ${INSTANCE}' failed to start after 5 seconds!"
+
+echo "'vncserver ${INSTANCE}' has PID $VNCPID, waiting until it exits ..."
+
+while kill -0 $VNCPID 2>/dev/null; do
+	sleep 5
+done
+
+echo "PID $VNCPID exited, exiting ..."
diff --git a/SPECS/tigervnc.spec b/SPECS/tigervnc.spec
index 25460ce..cc6de4a 100644
--- a/SPECS/tigervnc.spec
+++ b/SPECS/tigervnc.spec
@@ -1,6 +1,6 @@
 Name:           tigervnc
 Version:        1.8.0
-Release:        17%{?dist}
+Release:        19%{?dist}
 Summary:        A TigerVNC remote display system
 
 Group:          User Interface/Desktops
@@ -13,6 +13,7 @@ Source2:        vncserver.sysconfig
 Source3:        10-libvnc.conf
 Source4:        xvnc.service
 Source5:        xvnc.socket
+Source6:        vncserver_wrapper
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 BuildRequires:  libX11-devel, automake, autoconf, libtool, gettext, gettext-autopoint
@@ -272,6 +273,9 @@ install -m644 %{SOURCE4} %{buildroot}%{_unitdir}/xvnc@.service
 install -m644 %{SOURCE5} %{buildroot}%{_unitdir}/xvnc.socket
 rm -rf %{buildroot}%{_initrddir}
 
+# Install vncserver wrapper script
+install -m744 %{SOURCE6} %{buildroot}%{_bindir}/vncserver_wrapper
+
 mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
 install -m644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vncservers
 
@@ -333,7 +337,9 @@ fi
 %systemd_preun xvnc.socket
 
 %postun server
-%systemd_postun
+%systemd_postun vncserver.service
+%systemd_postun xvnc.service
+%systemd_postun xvnc.socket
 
 %files -f %{name}.lang
 %doc README.txt
@@ -348,6 +354,7 @@ fi
 %{_unitdir}/xvnc.socket
 %{_bindir}/x0vncserver
 %{_bindir}/vncserver
+%{_bindir}/vncserver_wrapper
 %{_mandir}/man1/vncserver.1*
 %{_mandir}/man1/x0vncserver.1*
 
@@ -376,6 +383,14 @@ fi
 %{_datadir}/icons/hicolor/*/apps/*
 
 %changelog
+* Thu Oct 10 2019 Jan Grulich <jgrulich@redhat.com> - 1.8.0-19
+- Use vncserver wrapper script to workaround systemd issues
+  Resolves: bz#1747191
+
+* Tue Aug 13 2019 Adam Jackson <ajax@redhat.com> - 1.8.0-18
+- Rebuild against newer X server to pick up backing store crash fixes
+  Resolves: bz#1670342
+
 * Mon Feb 18 2019 Jan Grulich <jgrulich@redhat.com> - 1.8.0-17
 - Release pointer grab when cursor leaves window
   Resolves: bz#1664801