diff --git a/files/installer.sh b/files/installer.sh
index 8d242deab8f2687906b512d90ca386ff73204410..547d4bfd58eac0dcd5857a2b7ef3871904c457bb 100755
--- a/files/installer.sh
+++ b/files/installer.sh
@@ -1,176 +1,194 @@
-#!/bin/bash
-# Variablen:
-export INSTALLER_DNS="tu-dresden.de"
-export INSTALLER_CONFIG=''
-export INSTALLER_CONFIG_FILE="/tmp/installer-tmpfile.sh"
-export INSTALLER_CONFIG_URL=''
-export INSTALLER_DEBUGGING=''
-export INSTALLER_ERROR_ACTION=reboot
-export INSTALLER_LOGFILE="/tmp/installer.log"
-export INSTALLER_MODE='sdm_install'
-export INSTALLER_NOTIFY_URL=''
-
-# VERWENDETE VARIABLEN
-# OS_DISTRIBUTION
-
-# ----------------------------------------------------------------------------------------------------------------------
-# Vorbereitung
-update-ca-certificates
-uname -r
-[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
-sleep 5
-export PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin/
-
-
-
-# damit das Skript von überall aus gestartet werden kann:
-# in eigenen Ordner wechseln
-# dirname: gibt Pfad aus ohne Dateiname
-# readlink: kompletter Pfad aus $0
-cd "$(dirname "$(readlink -f "$0")")"
-
-. ./functions.sh
-
-# prüfe, wenn uid ungliche Null
-if ! [ $EUID -eq 0 ]
-then
-    echo "Der SDM-Installer muss als Benutzer »root« gestartet werden!"
-    exit 1
-fi
-
-clear
-# dmesg -n: gibt auf Konsole Nr x aus
-dmesg -n 1
-# swap auschalten
-swapoff -a
-
-
-# ----------------------------------------------------------------------------------------------------------------------
-# Auf Netzwerk warten
-
-# hier wird mit Status-Anzeige 10x probiert INSTALLER_DNS (tu-dresden.de) aufzulösen (um die DNS-Konfiguration durch DHCP abzuwarten)
-(
-
-counter=0
-while ! nslookup $INSTALLER_DNS 2> /dev/null > /dev/null
+#!/usr/bin/env bash
+
+export DISK_SDA_SCHEME="msdos"
+declare -a DISK_SDA_PARTITIONS=()
+DISK_SDA_PARTITIONS+=("1GB:fat32:/boot:defaults:0:0:False")
+DISK_SDA_PARTITIONS+=("12.5GB:ext4:/:defaults:0:0:True")
+export DISK_SDA_PARTITIONS
+export DISK_SDB_SCHEME="mbr"
+declare -a DISK_SDB_PARTITIONS=()
+DISK_SDB_PARTITIONS+=("12G:swap::defaults:0:0:true")
+export DISK_SDB_PARTITIONS
+
+declare -a DISK_DEVICES=("sda")
+export DISK_DEVICES
+
+# convertSizeToByte - converts a given size to byte
+# parameter:
+#  $1 - size in "kB", "MB", "MiB", "GB", "GiB", "TB" or "TiB"
+# return:
+#  size in byte
+convertSizeToByte() {
+  local unit=$(echo $1 | sed "s/[1-9\.]*//g")
+  local value=$(echo $1 | sed "s/[a-zA-Z%]*//g")
+  local factor=1
+ 
+  case ${unit} in
+   "B") factor=1;;
+   "kB") factor=1000 ;;
+   "MB") factor=1000000 ;;
+   "GB") factor=1000000000 ;;
+   "TB") factor=1000000000000 ;;
+   "kiB") factor=1024 ;;
+   "MiB") factor=1048576 ;;
+   "GiB") factor=1073741824 ;;
+   "TiB") factor=1099511627776 ;;
+   *) factor=1 ;;
+  esac
+
+  res=$(dc -e "0k ${value} ${factor} * p")
+  
+  echo "${res%.*}"
+}
+
+# convertByteToSize - converts a byte size to a given unit 
+# parameter:
+#  $1 - size in byte
+#  $2 - unit like "kB", "MB", "MiB", "GB", "GiB", "TB" or "TiB"
+# return:
+#  rounded size with unit
+convertByteToSize() {
+  local factor=1
+
+  case $2 in
+   "B") factor=1;;
+   "kB") factor=1000 ;;
+   "MB") factor=1000000 ;;
+   "GB") factor=1000000000 ;;
+   "TB") factor=1000000000000 ;;
+   "kiB") factor=1024 ;;
+   "MiB") factor=1048576 ;;
+   "GiB") factor=1073741824 ;;
+   "TiB") factor=1099511627776 ;;
+   *) factor=1 ;;
+  esac
+
+  res=$(dc -e "2k $1 ${factor} / p")
+  echo "${res%.*}$2"
+}
+
+# validateDiskScheme - checks the scheme of a disk device
+# parameter:
+#  $1 - disk device name
+# retur:
+#  0 - no changes
+#  1 - label has changed
+validateScheme() {
+ local lbl=$(echo $diskdata[0] | cut -f 6 -d ":")
+ local retval=1
+ local scheme=$(eval echo \$DISK_$(echo $1 | tr [a-z] [A-Z])_SCHEME)
+ 
+ if [ "x${scheme}" = "x${lbl}" ];
+ then
+   retval=0
+ fi
+
+ return ${retval}
+}
+
+# initialDiskScheme - initials the scheme of a disk device
+# parameter:
+#  $1 - disk device name
+# return:
+#  none
+initialDiskScheme() {
+  local scheme=$(eval echo \$DISK_$(echo $1 | tr [a-z] [A-Z])_SCHEME)
+
+  if [ ${scheme} = "mbr" ];
+  then
+    parted -s -m /dev/$1 mklabel msdos
+  else
+    parted -s -m /dev/$1 mklabel ${scheme}
+  fi
+
+  return
+}
+
+# validateDiskPartitions - checks the partitions of a disk device
+# parameter:
+#  $1 - disk device name
+# return:
+#  0 - no changes
+#  1 - partions has changed
+validateDiskPartitions() {
+ declare -a parts=()
+ local retval=0
+
+ for part in $(eval "for p in \${DISK_$(echo $1 | tr [a-z] [A-Z])_PARTITIONS[@]}; do echo \$p; done ")
+ do
+   parts+=(${part})
+ done
+
+ if [ ${#parts[@]} -eq $((${#diskdata[@]} - 1)) ];
+ then
+   for idx in $(seq 1 1 ${#parts[@]})
+   do
+     gsize=$(convertSizeToByte $(echo ${parts[$((${idx} - 1))]} | cut -f 1 -d ":"))
+     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%.*}" ];
+     then
+       diffperc=0
+     fi
+
+     #if difference between current disk size and given disk size more than 1% then partitions has changed
+     if [ ${diffperc%.*} -gt 1 ];
+     then
+       retval=1
+     fi
+   done
+ else
+   retval=1
+ fi
+
+ return ${retval}
+}
+
+# initialDiskPartitions - initial the partitions of a disk device
+# parameter:
+#  $1 - disk device name
+# return:
+#  none 
+initialDiskPartitions() {
+ declare -a parts=()
+ local start=$(convertSizeToByte "1MiB")
+ local fs=""
+ local size=""
+ local end=""
+
+ for part in $(eval "for p in \${DISK_$(echo $1 | tr [a-z] [A-Z])_PARTITIONS[@]}; do echo \$p; done ")
+ do
+   fs=$(echo ${part} | cut -f 2 -d ":")
+   fsize=$(echo ${part} | cut -f 1 -d ":")
+   size=$(convertSizeToByte $(echo ${part} | cut -f 1 -d ":"))
+   end=$((${start} + ${size}))
+   parted -a optimal -s -m /dev/$1 mkpart primary ${fs} $(convertByteToSize ${start} "MiB") $(convertByteToSize ${end} "MiB")
+   start=${end}
+ done
+}
+
+for disk in ${DISK_DEVICES[@]}
 do
-    [ "$counter" -ge 100 ] && exit 1
-    
-    counter=$(expr $counter + 1)
-    echo $counter
-    
-    sleep 1
-done
-
-echo XXX
-echo 100
-echo "Netzwerkverbindung erfolgreich."
-echo XXX
-
-sleep 5
-# Lampda Funktion, die Klammern "fangen" die Ausgabe ab
-# --gauge Infobox mit Höhe Breite %Anzeige, XXX ist für dialog erforderlich
-) | dialog --title "SDM-Installation" --gauge "Warte auf Netzwerk-Verbindung ..." 15 70 0
-
-if [ ${PIPESTATUS[0]} -eq 1 ]
-then
-    dialog_info "Netzwerkverbindung gescheitert! Der Rechner wird neugestartet." && sleep 3
-    $INSTALLER_ERROR_ACTION; exit 1
-fi
-
-
-export hostname="$(hostname)"
-
-
-# ----------------------------------------------------------------------------------------------------------------------
-# Parameter
-
-# Kernel-Parameter in Umgebung übernehmen
-export $(cat /proc/cmdline)
-
-# Debug-Modus -> Installation überspringen und in eine Shell droppen
-# verlassen durch? vielleicht reboot oder poweroff
-if [ -n "$INSTALLER_DEBUGGING" ]
-then
-    while true
-    do
-        bash
-    done
-fi
-
-# Parameter prüfen
-if [ -z "$OS_DISTRIBUTION" ] && [ -n "$INSTALLER_MODE" ]
-then
-    dialog_info "Fehlende Parameter! Der Rechner wird neugestartet." && sleep 3
-    $INSTALLER_ERROR_ACTION; exit 1
-fi
-
-# ----------------------------------------------------------------------------------------------------------------------
-# Konfiguration laden
-if [ -n "$INSTALLER_CONFIG_URL" ]
-then
-    if [[ "$INSTALLER_CONFIG_URL" == http* ]]
-    then
-        INSTALLER_CONFIG_URL="$INSTALLER_CONFIG_URL?hostname=$hostname"
-        dialog_info "Hole Installationskonfiguration von Server ..." && sleep 1
-        
-        if ! curl -s --capath ./certs/ -o "$INSTALLER_CONFIG_FILE" "$INSTALLER_CONFIG_URL?hostname=$hostname" > /dev/null
-        then
-            dialog_info "Installations-Skript konnten nicht geholt werden!\n\nDer Rechner wird neugestartet." && sleep 3
-            $INSTALLER_ERROR_ACTION; exit 1
-        fi
-        chmod +x "$INSTALLER_CONFIG_FILE"
-        export $INSTALLER_CONFIG="$INSTALLER_CONFIG_FILE"
-    fi
-fi
-
-
-# Konfiguration entweder über URL oder fest in das Tinycore einbauen unter $INSTALLER_CONFIG_FILE
-# das . VAR lädt den Inhalt der Datei in die Shell Umgebung
-. "$INSTALLER_CONFIG"
-
-
-# nochmal aus cmdline überschreiben
-export $(cat /proc/cmdline)
+  declare -a diskdata=()
 
-if [ $(type -t $INSTALLER_MODE) != "function" ]
-then
-    dialog_info "Unbekannte Methode: $INSTALLER_MODE. Der Rechner wird neugestartet." && sleep 3
-    $INSTALLER_ERROR_ACTION; exit 1
-fi
+  for ddt in $(parted -s -m /dev/${disk} print 2>/dev/null | sed '1d;s/[ ]*//g')
+  do
+    diskdata+=(${ddt})
+  done
 
-[ -n "$INSTALLER_LOGFILE_URL" ] && INSTALLER_LOGFILE_URL="$INSTALLER_LOGFILE_URL?hostname=$hostname"
-[ -n "$INSTALLER_NOTIFY_URL" ] && INSTALLER_NOTIFY_URL="$INSTALLER_NOTIFY_URL?hostname=$hostname"
+  validateScheme ${disk}
+  
+  if [ $? -eq 0 ];
+  then
+    validateDiskPartitions ${disk}
 
-
-# ----------------------------------------------------------------------------------------------------------------------
-
-
-dialog_info "Starte Installation ... \n\nHostname: $hostname \nDistribution: $OS_DISTRIBUTION\nModus: $INSTALLER_MODE\nKonfiguration: $INSTALLER_CONFIG"
-sleep 5
-
-# Installation aufrufen
-($INSTALLER_MODE)
-
-if [ $? -eq 0 ]
-then
-    dialog_info "Installationsprotokolle werden hochgeladen ..."
-    upload_logfile
-    
-    if [ -n "$INSTALLER_NOTIFY_URL" ]
+    if [ $? -ne 0 ];
     then
-        dialog_info "Installation erfolgreich.\n\nMelde an Server ..."
-        
-        if curl -s --capath ./certs/ "$INSTALLER_NOTIFY_URL" > /dev/null
-        then
-            dialog_info "Installation erfolgreich.\n\nDer Rechner wird neugestartet." && sleep 3
-        else
-            dialog_msg "Installation erfolgreich.\n\nServer nicht erreichbar.\n\nBestätigen, um Rechner neuzustarten."
-        fi
-    else
-        dialog_msg "Installation erfolgreich.\n\nBestätigen, um Rechner neuzustarten."
+      initialDiskPartitions ${disk}
     fi
-fi
-
-#reboot
-exit 0
+  else
+    initialDiskScheme ${disk}
+    initialDiskPartitions ${disk}
+  fi  
+done