diff --git a/rc.d/rc.6 b/rc.d/rc.6
index ca1b4c8..84ad428 100755
--- a/rc.d/rc.6
+++ b/rc.d/rc.6
@@ -38,7 +38,7 @@ case "$0" in
 esac
 
 # Save the system time to the hardware clock using hwclock --systohc.
-if [ -x /sbin/hwclock ]; then
+if [ -x /sbin/hwclock ] && ! grep -q 'hwclock=no' /etc/rc.d/rc.bootconf; then
   # Check for a broken motherboard RTC clock (where ioports for rtc are
   # unknown) to prevent hwclock causing a hang:
   if ! grep -q -w rtc /proc/ioports ; then
diff --git a/rc.d/rc.M b/rc.d/rc.M
index 8772409..e596a80 100755
--- a/rc.d/rc.M
+++ b/rc.d/rc.M
@@ -15,7 +15,7 @@
 echo "Going multiuser..."
 
 # Update all the shared library links:
-if [ -x /sbin/ldconfig ]; then
+if [ -x /sbin/ldconfig ] && ! grep -q 'ldconfig=no' /etc/rc.d/rc.bootconf; then
   echo "Updating shared library links:  /sbin/ldconfig &"
   /sbin/ldconfig &
 fi
@@ -78,7 +78,7 @@ if [ -x /etc/rc.d/rc.syslog -a -x /usr/sbin/syslogd -a -d /var/log ]; then
 fi
 
 # Update the X font indexes:
-if [ -x /usr/bin/fc-cache ]; then
+if [ -x /usr/bin/fc-cache ] && ! grep -q 'fc-cache=no' /etc/rc.d/rc.bootconf; then
   echo "Updating X font indexes:  /usr/bin/fc-cache -f &"
   /usr/bin/fc-cache -f &
 fi
@@ -146,7 +146,8 @@ elif [ -x /etc/rc.d/rc.acpid ]; then # otherwise, start acpid:
 fi
 
 # Update any existing icon cache files:
-if find /usr/share/icons 2> /dev/null | grep -q icon-theme.cache ; then
+if ! grep -q 'icon-cache=no' /etc/rc.d/rc.bootconf && \
+  find /usr/share/icons 2> /dev/null | grep -q icon-theme.cache; then
   for theme_dir in /usr/share/icons/* ; do
     if [ -r ${theme_dir}/icon-theme.cache ]; then
       echo "Updating icon-theme.cache in ${theme_dir}..."
@@ -162,14 +163,19 @@ if find /usr/share/icons 2> /dev/null | grep -q icon-theme.cache ; then
 fi
 
 # Update mime database:
-if [ -x /usr/bin/update-mime-database -a -d /usr/share/mime ]; then
+if [ -x /usr/bin/update-mime-database -a -d /usr/share/mime ] && \
+  ! grep -q 'mime-database=no' /etc/rc.d/rc.bootconf; then
   echo "Updating MIME database:  /usr/bin/update-mime-database /usr/share/mime &"
   /usr/bin/update-mime-database /usr/share/mime 1> /dev/null 2> /dev/null &
 fi
 
 # Start D-Bus:
 if [ -x /etc/rc.d/rc.messagebus ]; then
-  sh /etc/rc.d/rc.messagebus start
+  if ! grep -q 'dbus-fg=no' /etc/rc.d/rc.bootconf; then
+    sh /etc/rc.d/rc.messagebus start
+  else
+    sh /etc/rc.d/rc.messagebus start &
+  fi
 fi
 
 # Start console-kit-daemon:
@@ -194,13 +200,13 @@ fi
 
 # These GTK+/pango files need to be kept up to date for
 # proper input method, pixbuf loaders, and font support.
-if [ -x /usr/bin/update-gtk-immodules ]; then
+if [ -x /usr/bin/update-gtk-immodules ] && ! grep -q 'gtk-immodules=no' /etc/rc.d/rc.bootconf; then
   /usr/bin/update-gtk-immodules --verbose
 fi
-if [ -x /usr/bin/update-gdk-pixbuf-loaders ]; then
+if [ -x /usr/bin/update-gdk-pixbuf-loaders ] && ! grep -q 'gdk-pixbuf-loaders=no' /etc/rc.d/rc.bootconf; then
   /usr/bin/update-gdk-pixbuf-loaders --verbose
 fi
-if [ -x /usr/bin/update-pango-querymodules ]; then
+if [ -x /usr/bin/update-pango-querymodules ] && ! grep -q 'pango-querymodules=no' /etc/rc.d/rc.bootconf; then
   /usr/bin/update-pango-querymodules --verbose
 fi
 
@@ -272,7 +278,11 @@ fi
 # If you want cron to actually log activity to /var/log/cron, then change
 # -l notice to -l info to increase the logging level.
 if [ -x /usr/sbin/crond ]; then
-  /usr/sbin/crond -l notice
+  if ! grep -q 'dbus-fg=no' /etc/rc.d/rc.bootconf; then
+    /usr/sbin/crond -l notice
+  else
+    /usr/sbin/crond -l notice &
+  fi
 fi
 
 # Start atd (manages jobs scheduled with 'at'):
@@ -324,7 +334,11 @@ fi
 
 # Load ALSA (sound) defaults:
 if [ -x /etc/rc.d/rc.alsa ]; then
-  . /etc/rc.d/rc.alsa
+  if ! grep -q 'alsa-fg=no' /etc/rc.d/rc.bootconf; then
+    . /etc/rc.d/rc.alsa
+  else
+    /etc/rc.d/rc.alsa &
+  fi
 fi
 
 # Load a custom screen font if the user has an rc.font script.
@@ -373,4 +387,5 @@ if [ -x /etc/rc.d/rc.local ]; then
   . /etc/rc.d/rc.local
 fi
 
+wait
 # All done.
diff --git a/rc.d/rc.S b/rc.d/rc.S
index c02f1e2..08938ae 100755
--- a/rc.d/rc.S
+++ b/rc.d/rc.S
@@ -37,7 +37,11 @@ fi
 if grep -wq sysfs /proc/mounts && grep -q tmpfs /proc/filesystems ; then
   if ! grep -wq nohotplug /proc/cmdline ; then
     if [ -x /etc/rc.d/rc.udev ]; then
-      /bin/sh /etc/rc.d/rc.udev start
+      if ! grep -q 'udev-fg=no' /etc/rc.d/rc.bootconf; then
+        /bin/sh /etc/rc.d/rc.udev start
+      else
+        /bin/sh /etc/rc.d/rc.udev start &
+      fi
     fi
   fi
 fi
@@ -127,7 +131,7 @@ if [ -x /etc/rc.d/rc.fuse ]; then
 fi
 
 # Set the system time from the hardware clock using hwclock --hctosys.
-if [ -x /sbin/hwclock ]; then
+if [ -x /sbin/hwclock ] && ! grep -q 'hwclock=no' /etc/rc.d/rc.bootconf; then
   # Check for a broken motherboard RTC clock (where ioports for rtc are
   # unknown) to prevent hwclock causing a hang:
   if ! grep -q -w rtc /proc/ioports ; then
@@ -325,7 +329,9 @@ fi
 # We also need to wait a little bit to let USB and other
 # hotplugged devices settle (sorry to slow down the boot):
 echo "Mounting non-root local filesystems:"
-sleep 3
+if ! grep -q 'fstab-hotplugged-dev=no' /etc/rc.d/rc.bootconf; then
+  sleep 3
+fi
 if /bin/grep -wq devpts /proc/mounts ; then
   /sbin/mount -a -v -t nonfs,nosmbfs,nocifs,noproc,nosysfs,nodevpts
 else
diff --git a/rc.d/rc.bootconf b/rc.d/rc.bootconf
new file mode 100644
index 0000000..e2fcb85
--- /dev/null
+++ b/rc.d/rc.bootconf
@@ -0,0 +1,15 @@
+ldconfig=no
+fc-cache=no
+dhcpcd-fg=no
+icon-cache=no
+mime-database=no
+gtk-immodules=no
+gdk-pixbuf-loaders=no
+pango-querymodules=no
+fstab-hotplugged-dev=no
+hwclock=yes
+sshd-fg=no
+dbus-fg=no
+alsa-fg=no
+loadkeys-fg=no
+udev-fg=no
diff --git a/rc.d/rc.inet1 b/rc.d/rc.inet1
index 4e6c7aa..7f70452 100755
--- a/rc.d/rc.inet1
+++ b/rc.d/rc.inet1
@@ -132,8 +132,13 @@ if_up() {
         #fi
         #### (end commented out)
         # 10 seconds should be a reasonable default DHCP timeout.  30 was too much.
-        echo "/etc/rc.d/rc.inet1:  /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1}" | $LOGGER
-        /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1}
+        if ! grep -q 'dhcpcd-fg=no' /etc/rc.d/rc.bootconf; then
+          echo "/etc/rc.d/rc.inet1:  /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1}" | $LOGGER
+          /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1}
+        else
+          echo "/etc/rc.d/rc.inet1:  /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1}" | $LOGGER
+          /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1} &
+        fi
       else # bring up interface using a static IP address
         if [ ! "${IPADDR[$i]}" = "" ]; then # skip unconfigured interfaces
           # Determine broadcast address from the IP address and netmask:
diff --git a/rc.d/rc.inet1.conf b/rc.d/rc.inet1.conf
index 62e493f..07e8730 100644
--- a/rc.d/rc.inet1.conf
+++ b/rc.d/rc.inet1.conf
@@ -18,6 +18,7 @@ IPADDR[0]=""
 NETMASK[0]=""
 USE_DHCP[0]="yes"
 DHCP_HOSTNAME[0]=""
+DHCP_NOIPV4LL[0]="yes"
 #DHCP_KEEPRESOLV[0]="yes"
 
 # Config information for eth1:
diff --git a/rc.d/rc.inet2 b/rc.d/rc.inet2
index 232d93e..1567ba9 100755
--- a/rc.d/rc.inet2
+++ b/rc.d/rc.inet2
@@ -88,7 +88,11 @@ fi
 # Start the OpenSSH SSH daemon:
 if [ -x /etc/rc.d/rc.sshd ]; then
   echo "Starting OpenSSH SSH daemon:  /usr/sbin/sshd"
-  /etc/rc.d/rc.sshd start
+  if ! grep -q 'sshd-fg=no' /etc/rc.d/rc.bootconf; then
+    /etc/rc.d/rc.sshd start
+  else
+    /etc/rc.d/rc.sshd start &
+  fi
 fi
 
 # Start the BIND name server daemon:
diff --git a/rc.d/rc.keymap b/rc.d/rc.keymap
index c99aa6b..9864a4c 100755
--- a/rc.d/rc.keymap
+++ b/rc.d/rc.keymap
@@ -1,5 +1,9 @@
 #!/bin/sh
 # Load the keyboard map.  More maps are in /usr/share/kbd/keymaps.
 if [ -x /usr/bin/loadkeys ]; then
- /usr/bin/loadkeys fr-latin9.map
+  if ! grep -q 'loadkeys-fg=no' /etc/rc.d/rc.bootconf; then
+    /usr/bin/loadkeys fr-latin9.map
+  else
+    /usr/bin/loadkeys fr-latin9.map &
+  fi
 fi
