diff --git a/files/diskspreparation.sh b/files/diskspreparation.sh
index 335b5542da448a55c21fa493b8b4b1eb9253752b..86d331acb76c8ce9f86e432bd0e1cb6ac6cb4706 100755
--- a/files/diskspreparation.sh
+++ b/files/diskspreparation.sh
@@ -1,5 +1,7 @@
 #!/usr/bin/env bash
 
+. /tmp/answerfile
+
 # convertSizeToByte - converts a given size to byte
 # parameter:
 #  $1 - size in "kB", "kiB", "MB", "MiB", "GB", "GiB", "TB" or "TiB"
@@ -81,7 +83,7 @@ validateScheme() {
 initialDiskScheme() {
   local scheme=$(eval echo \$DISK_$(echo $1 | tr [a-z] [A-Z])_SCHEME | tr [A-Z] [a-z])
 
-  if [ ${scheme} = "mbr" ];
+  if [ ${scheme} = "mbr" -o ${scheme} = "msdos" ];
   then
     parted -s -m /dev/$1 mklabel msdos
   else
@@ -114,7 +116,7 @@ validateDiskPartitionLayout() {
       dsize=$(convertSizeToByte $(echo ${diskdata[${idx}]} | cut -f 4 -d ":"))
       diffperc=$(dc -e "2k $dsize $gsize - 100 * $gsize / p" | sed -e "s/^-//g")
 
-      if [ -n "x${diffperc%.*}" ];
+      if [ "x${diffperc%.*}" = "x" ];
       then
         diffperc=0
       fi
@@ -211,9 +213,37 @@ setDiskPartitionFlags() {
 #  $1 - name of the disk device
 #  $2 - index of the disk partition
 # return:
-#  partition device of the given disk on STDOUT
+#  0 - no error
+#  1 - error occured
+# hint:
+#  The partition device of the given disk is returned on STDOUT.
 getPartitionDeviceByIndex() {  
-  fdisk -l /dev/$1 2>/dev/null | sed -n -e "s/^\(\/dev[^ ]*\) .*$/\1/p" | sed -n "$2p" 
+  local scheme=$(eval echo \$DISK_$(echo $1 | tr [a-z] [A-Z])_SCHEME | tr [A-Z] [a-z])
+  local partdev=""
+  local partname
+  local retval=0
+
+  if [ ${scheme} = "mbr" -o ${scheme} = "msdos" ];
+  then
+    partdev=$(fdisk -l /dev/$1 2>/dev/null | sed -n -e "s/^\(\/dev[^ ]*\) .*$/\1/p" | sed -n "$2p")
+  else
+    if [ -d /sys/block/$1 ]; 
+    then
+      partname=$(ls -d /sys/block/$1/$1* | sed -n "$2p" | xargs basename)
+      if [ -n ${partname} -a -e /dev/${partname} ];
+      then
+        partdev="/dev/${partname}"
+      else
+        retval=1
+      fi
+    else
+      retval=1
+    fi
+  fi
+
+  echo ${partdev}
+
+  return ${retval}
 }  
 
 # formatDiskPartion - format a partition
@@ -234,8 +264,8 @@ formatDiskPartion() {
   case $(echo $3 | tr "[A-Z]" "[a-z]") in
     "ext4") mkfs.ext4 -q -F ${device} >/dev/null|| retval=1 ;;
     "ext3") mkfs.ext3 -q -F ${device} >/dev/null || retval=1 ;;
-    "fat32") mkfs.vfat ${device} >/dev/null || retval=1 ;;
-    "fat16") mkfs.msdos -F 16 ${device} >/dev/null || retval=1 ;;
+    "fat32") mkfs.fat -F 32 ${device} >/dev/null || retval=1 ;;
+    "fat16") mkfs.fat -F 16 ${device} >/dev/null || retval=1 ;;
     "swap") mkswap ${device} >/dev/null || retval=1 ;;
     "ntfs") mkntfs -q -f ${device} >/dev/null || retval=1 ;;
     "btrfs") mkfs.btrfs -q -f ${device} >/dev/null || retval=1 ;;
@@ -348,30 +378,54 @@ generateFSTab() {
 #  $1 - path to target directory
 # return:
 #  none 
+# hint:
+#  This function mounts also the existing partitions.
 createTargetDirectoryLayout(){
   local idx
   local mntpnt
   local fs
+  local opts
+  local partdev
+  declare -a partmntdata=()
 
+  # combine partition devices with their mount point and mount options 
   for disk in ${DISK_DEVICES[@]}
   do
     idx=1
     for part in $(eval "for p in \${DISK_$(echo ${disk} | tr [a-z] [A-Z])_PARTITIONS[@]}; do echo \$p; done ")
     do
-      fs=$(blkid -s TYPE -o value /dev/${disk}${idx})
+      partdev=$(getPartitionDeviceByIndex ${disk} ${idx})
+      fs=$(blkid -s TYPE -o value ${partdev})
       mntpnt=$(echo ${part} | cut -f 3 -d ";") 
+      opts=$(echo ${part} | cut -f 4 -d ";") 
       if [ "${fs}" = "swap" -o "${fs}" = "linux-swap" ];
       then
         mntpnt="none"
       fi
-
-      if [ "${mntpnt}" != "none" ];
-      then
-        mkdir -p $1/${mntpnt}
-      fi
+      partmntdata+=("${partdev};${mntpnt};${fs};${opts}")
       idx=$((${idx} + 1))
     done
   done
+
+  # create directory layout and mount partitions
+  for part in $(eval "for p in \${partmntdata[@]}; do echo \$p; done" | sort -k 2 -t ";")
+  do
+    partdev=$(echo ${part} | cut -f 1 -d ";")   
+    mntpnt=$(echo ${part} | cut -f 2 -d ";")   
+    fs=$(echo ${part} | cut -f 3 -d ";")   
+    opts=$(echo ${part} | cut -f 4 -d ";")   
+
+    if [ "${mntpnt}" != "none" ];
+    then
+      mkdir -p $1/${mntpnt}
+      if [ -z "${opts}" ];
+      then
+        mount -t ${fs} ${partdev} $1/${mntpnt}
+      else
+        mount -t ${fs} ${partdev} $1/${mntpnt} -o ${opts}
+      fi 
+    fi
+  done
 }
 
 for disk in ${DISK_DEVICES[@]}
@@ -404,5 +458,4 @@ do
 done
 
 generateFSTab "/tmp/fstab.local" "uuid"
-generateFSTab "/tmp/fstab.target" "dev" "/target"
 createTargetDirectoryLayout "/target"