diff --git a/config/extrahd/extrahd.pl b/config/extrahd/extrahd.pl
index 145a2a43a..cc85228d5 100644
--- a/config/extrahd/extrahd.pl
+++ b/config/extrahd/extrahd.pl
@@ -35,10 +35,20 @@ extrahd_mount() {
 	local failed=0
 
 	while IFS=';' read -r device filesystem mountpoint rest; do
-		# Filter by mountpoint if set
-		if [ -n "${_mountpoint}" ] && [ "${mountpoint}" != "${_mountpoint}" ]; then
-			continue
-		fi
+		# Filter by UUID or mountpoint
+		case "${_mountpoint}" in
+			UUID=*)
+				if [ "${device}" != "${_mountpoint}" ]; then
+					continue
+				fi
+				;;
+
+			/*)
+				if [ -n "${_mountpoint}" ] && [ "${mountpoint}" != "${_mountpoint}" ]; then
+					continue
+				fi
+				;;
+		esac
 
 		# Check that the mountpoint starts with a slash
 		if [ "${mountpoint:0:1}" != "/" ]; then
@@ -75,10 +85,20 @@ extrahd_umount() {
 	local failed=0
 
 	while IFS=';' read -r device filesystem mountpoint rest; do
-		# Filter by mountpoint if set
-		if [ -n "${_mountpoint}" ] && [ "${mountpoint}" != "${_mountpoint}" ]; then
-			continue
-		fi
+		# Filter by UUID or mountpoint
+		case "${_mountpoint}" in
+			UUID=*)
+				if [ "${device}" != "${_mountpoint}" ]; then
+					continue
+				fi
+				;;
+
+			/*)
+				if [ -n "${_mountpoint}" ] && [ "${mountpoint}" != "${_mountpoint}" ]; then
+					continue
+				fi
+				;;
+		esac
 
 		# Do not try to umount if nothing is mounted
 		if ! mountpoint "${mountpoint}" &>/dev/null; then
diff --git a/config/rootfiles/common/udev b/config/rootfiles/common/udev
index e5c9bd01f..876ae0c5a 100644
--- a/config/rootfiles/common/udev
+++ b/config/rootfiles/common/udev
@@ -70,6 +70,7 @@ lib/udev/rules.d/60-persistent-storage.rules
 lib/udev/rules.d/60-persistent-v4l.rules
 lib/udev/rules.d/60-sensor.rules
 lib/udev/rules.d/60-serial.rules
+lib/udev/rules.d/61-extrahd.rules
 lib/udev/rules.d/64-btrfs.rules
 lib/udev/rules.d/70-camera.rules
 lib/udev/rules.d/70-joystick.rules
diff --git a/config/udev/61-extrahd.rules b/config/udev/61-extrahd.rules
new file mode 100644
index 000000000..114f2d665
--- /dev/null
+++ b/config/udev/61-extrahd.rules
@@ -0,0 +1 @@
+ACTION=="add", SUBSYSTEM=="block", RUN+="/var/ipfire/extrahd/bin/extrahd.pl udev-event"
diff --git a/lfs/udev b/lfs/udev
index eb01ae848..703d98b86 100644
--- a/lfs/udev
+++ b/lfs/udev
@@ -122,6 +122,10 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	install -v -m 644 $(DIR_SRC)/config/udev/60-net.rules \
 		/lib/udev/rules.d
 
+	# Install ExtraHD rules
+	install -v -m 644 $(DIR_SRC)/config/udev/61-extrahd.rules \
+		/lib/udev/rules.d
+
 	# Install AQM rules
 	install -v -m 644 $(DIR_SRC)/config/udev/99-aqm.rules \
 		/lib/udev/rules.d
