diff --git a/package/base/rockinitrd/initrd_essential.txt b/package/base/rockinitrd/initrd_essential.txt
index 014ad7c2c..557a59d83 100644
--- a/package/base/rockinitrd/initrd_essential.txt
+++ b/package/base/rockinitrd/initrd_essential.txt
@@ -4,7 +4,7 @@
 /bin/ls			/bin/ls
 /sbin/pivot_root	/sbin/pivot_root
 /sbin/insmod		/sbin/insmod
-/sbin/insmod.old	/sbin/insmod.old
+/sbin/modprobe		/sbin/modprobe
 /bin/mount		/bin/mount
 /bin/umount		/bin/umount
 /usr/bin/chroot		/usr/bin/chroot
diff --git a/package/base/rockinitrd/mkinitrd.sh b/package/base/rockinitrd/mkinitrd.sh
index d0be58e32..4dcc80154 100644
--- a/package/base/rockinitrd/mkinitrd.sh
+++ b/package/base/rockinitrd/mkinitrd.sh
@@ -69,20 +69,38 @@ case ${initrdfs} in
 		;;
 esac
 
+get_module_dependencies() {
+        module="${1}"
+        deps=`/sbin/modinfo -F depends ${module} 2>/dev/null | tr ',' ' '`
+        if [ -n "${deps}" ] ; then
+                for dep in ${deps} ; do
+                        echo "`get_module_dependencies ${dep}`"
+                done
+        fi
+        echo "${module}";
+}
+
 add_module_to_initrd() {
-	module="${1}"
+	# adds a module and all it's dependencies to the initrd
+	module_name="${1}"
 	parameter="${2}"
-	module=${module/.ko/} # just in case, shouldn't be
-	module="`find ${rootdir}/lib/modules/${kernel} -name "${module}.o" -o -name "${module}.ko"`"
-	[ -f "${targetdir}/${module}" ] && return # skip dupes
-	echo "Adding ${module}."
-	mkdir -p ${targetdir}/${module%/*}
-	cp ${module} ${targetdir}/${module}
-	echo "/sbin/insmod ${module} ${parameter}" >> ${targetdir}/etc/conf/kernel
+	module_name=${module_name/.ko/} # just in case, shouldn't be
+
+	for dependant_module in `get_module_dependencies ${module_name} | sort | uniq` ; do
+		module="`find ${rootdir}/lib/modules/${kernel} -name "${dependant_module}.o" -o -name "${dependant_module}.ko"`"
+		[ -f "${targetdir}/${module}" ] && return # skip dupes
+		echo "Adding ${module}."
+		mkdir -p ${targetdir}/${module%/*}
+		cp ${module} ${targetdir}/${module}
+	done
+
+	echo "/sbin/modprobe ${module_name} ${parameter}" >> ${targetdir}/etc/conf/kernel
 }
 
 echo "Creating ${initrd_img} ..."
 mkdir -p ${targetdir}/etc/conf
+mkdir -p ${targetdir}/lib/modules/${kernel}
+cp ${rootdir}/lib/modules/${kernel}/modules.dep ${targetdir}/lib/modules/${kernel}
 if [ "${empty}" = 0 ] ; then
 	grep '^modprobe ' ${rootdir}/etc/conf/kernel | grep -v 'no-initrd' | \
 		sed 's,[ 	]#.*,,' | \
@@ -93,14 +111,6 @@ if [ "${empty}" = 0 ] ; then
 				echo "$0: Please either adjust /etc/conf/kernel or the configuration for the kernel V${kernel}" >&2
 				continue
 			fi
-			modinfo ${module} 2> /dev/null | grep ^depends: | \
-			while read a b; do
-				[ -z "${b}" ] && continue
-				b="${b//,/ }"
-				for module in ${b} ; do
-					add_module_to_initrd "${module}"
-				done
-			done
 			add_module_to_initrd "${b}" "${c}"
 		done
 fi