diff -ruN hotplug-2004_03_29.orig/etc/hotplug/hotplug.functions hotplug-2004_03_29/etc/hotplug/hotplug.functions
--- hotplug-2004_03_29.orig/etc/hotplug/hotplug.functions	2004-03-29 21:25:59.000000000 +0200
+++ hotplug-2004_03_29/etc/hotplug/hotplug.functions	2005-03-19 22:47:19.000000000 +0100
@@ -58,6 +58,17 @@
 #MODPROBE="/sbin/modprobe -vs"
 
 
+# return true if the argument is a blacklisted module
+is_blacklisted() {
+    MODULE_EXPR="$(echo $1 | sed -e 's/[-_]/[-_]/g')"
+    if grep -qs "^${MODULE_EXPR}$" \
+	    $HOTPLUG_DIR/blacklist $HOTPLUG_DIR/blacklist.d/*; then
+	return 0
+    fi
+    return 1
+}
+
+
 ####################################################################
 #
 # usage: load_driver type filename description
@@ -123,14 +134,25 @@
     # For USB, some user-mode drivers or setup scripts may be listed.
     debug_mesg Setup $DRIVERS for $DESCRIPTION
 
+    LOADED_DRIVERS=""
     # either kernel or user mode drivers may need to be set up
     for MODULE in $DRIVERS
     do
 	# maybe driver modules need loading
         LOADED=false
-	if ! lsmod | grep -q "^$MODULE " > /dev/null 2>&1; then
-	    if grep -q "^$MODULE\$" $HOTPLUG_DIR/blacklist \
-		    >/dev/null 2>&1; then
+
+	# check if the $MODULE has been already seen
+	if echo "|$LOADED_DRIVERS|" | grep -qs "|$MODULE|"; then
+	    # $MODULE is duplicated?
+	    continue
+	fi
+	# XXX:
+	# Even if $LOADED = false, we may not need to try loading it again.
+	# or do we need to check $LOADED = true at end of the loop?
+	LOADED_DRIVERS="$LOADED_DRIVERS|$MODULE"
+
+	if ! lsmod | grep -qs "^$(echo $MODULE | sed -e 's/[-_]/[-_]/g') "; then
+	    if is_blacklisted $MODULE; then
 		debug_mesg "... blacklisted module:  $MODULE"
 		continue
 	    fi
