diff --git a/bootflags.txt b/bootflags.txt
index ada7ed786c29d878c838c534f547529203c1ba09..795e992cd2003ac5341112169d3a31c3eb435df6 100644
--- a/bootflags.txt
+++ b/bootflags.txt
@@ -1,31 +1,70 @@
-acpi=copy_dsdt 	 	Korrigiert DSDT, insbesondere bei Toshiba-Notebooks. 
-acpi=force 	 	Für BIOS-Versionen vor 2002, aktiviert die ACPI-Unterstützung zwangsweise im Kernel. 
-acpi=off 	 	Deaktiviert ACPI vom BIOS (kann helfen, aber auch zur "Kernelpanic" führen). 
-all_generic_ide 	 Generischen IDE-Treiber für alle Geräte verwenden, die vom BIOS erkannt wurden. 
-bootchart=disable 	 Deaktiviert die Visualisierung bzw. die Aufzeichung eines Boot-Charts bei installiertem BootChart 
-BOOT_DEBUG=2|3 	 	Fehlersuche während des Startvorgangs 
-bootdegraded 	 	Bootet Ubuntu auch auf einem inkonsistenten RAID-1 
-DEBCONF_DEBUG=5 	 Ausführliche Fehlersuche 
-elevator=deadline 	 so wird für alle Blockgeräte der Deadline Scheduler verwendet anstatt CFQ, kann bei SSD-Festplatten nützlich sein 
-fb=false 	 	Deaktiviert den Framebuffer. 
-hpet=force 	 	Erzwingt die Aktivierung das HPET-Timers, hilfreich beim Energiesparen bei Laptops, dessen BIOS die HPET vor dem Betriebssystem verstecken (z.B. IBM Thinkpad X31) 
-ht=on 	 		Aktiviert Hyper-Threading. 
-irqpoll 	 	zusammengezogen aus IRQ und Polling. IRQ ist eine Unterbrechungsanforderung per Leitung an den Prozessor. Polling ist das Verfahren zur Steuerung des Zugriffs auf angeschlossene Geräte. 
-noapic, noagp, noapm 	 Deaktiviert die automatische Erkennung von APIC (IRQ-Verwaltung), AGP (Grafik) oder der Energieverwaltung. 
-nolapic 	 Deaktiviert die lokale APIC-Erkennung. 
-nolapic_timer 	 Deaktiviert den lokalen APIC-Timer. Selektiver als noapic und nolapic. Instabilitäten durch den Timer werden umgangen, der Rest von APIC bleibt voll funktionsfähig. Erste Wahl bei Notebooks, da das Energiemanagement funktional bleibt. 
-nomodeset 	 deaktiviert modesetting im Kernel, und die Infrastruktur von X.org wird verwendet (z.B. Acer Extensa 5635Z) 
+acpi=copy_dsdt    Korrigiert DSDT, insbesondere bei Toshiba-Notebooks.
+acpi=force        Für BIOS-Versionen vor 2002, aktiviert die ACPI
+                  -Unterstützung zwangsweise im Kernel. 
+acpi=off          Deaktiviert ACPI vom BIOS (kann helfen, aber auch zur
+                  "Kernelpanic" führen).
+all_generic_ide   Generischen IDE-Treiber für alle Geräte verwenden,
+                  die vom BIOS erkannt wurden. 
+bootchart=disable Deaktiviert die Visualisierung bzw. die Aufzeichung
+                  eines Boot-Charts bei installiertem BootChart 
+BOOT_DEBUG=2|3 	  Fehlersuche während des Startvorgangs 
+bootdegraded 	  Bootet Ubuntu auch auf einem inkonsistenten RAID-1 
+DEBCONF_DEBUG=5   Ausführliche Fehlersuche 
+elevator=deadline so wird für alle Blockgeräte der Deadline Scheduler
+                  verwendet anstatt CFQ, kann bei SSD-Festplatten
+                  nützlich sein 
+fb=false 	  Deaktiviert den Framebuffer. 
+hpet=force 	  Erzwingt die Aktivierung das HPET-Timers, hilfreich
+                  beim Energiesparen bei Laptops, dessen BIOS die HPET
+                  vor dem Betriebssystem verstecken
+                  (z.B. IBM Thinkpad X31) 
+ht=on 	 	Aktiviert Hyper-Threading.
+irqpoll 	zusammengezogen aus IRQ und Polling. IRQ ist eine
+                Unterbrechungsanforderung per Leitung an den Prozessor.
+                Polling ist das Verfahren zur Steuerung des Zugriffs
+                auf angeschlossene Geräte.
+noapic, noagp, noapm 	 Deaktiviert die automatische Erkennung von APIC
+                         (IRQ-Verwaltung), AGP (Grafik) oder der
+                         Energieverwaltung.
+nolapic 	 Deaktiviert die lokale APIC-Erkennung.
+nolapic_timer 	 Deaktiviert den lokalen APIC-Timer. Selektiver als
+                 noapic und nolapic. Instabilitäten durch den Timer
+                 werden umgangen, der Rest von APIC bleibt voll
+                 funktionsfähig. Erste Wahl bei Notebooks, da das
+                 Energiemanagement funktional bleibt.
+nomodeset 	 deaktiviert modesetting im Kernel, und die 
+                 Infrastruktur von X.org wird verwendet
+                 (z.B. Acer Extensa 5635Z) 
 pci=bios 	
 pci=biosirq 	
-pci=noacpi 	 Schaltet die ACPI-Erkennung während der PCI-Konfiguration aus (ist insbesondere bei manchen VIA-Chipsätzen notwendig). 
-pci=nomsi 	 Deaktiviert "Message Signaled Interrupts". Hilft oft bei Problemen mit dem SATA-Controller auf neueren Mainboards. 
-pci=routeirq 	 IRQ-Autorouting, hilfreich für einige Mainboards (zum Beispiel Asus A7N8X). 
-processor.max_cstate=3 	 behebt das Problem des "C4-Fiepen" - (siehe unten) 
-single 	 	booten in den Single-User-Mode 
-text 	 	booten in die Konsole, X bleibt aussen vor, interaktiver Modus mit Netzwerk vergleichbar Runlevel 3 
+pci=noacpi    Schaltet die ACPI-Erkennung während der PCI-
+              Konfiguration aus (ist insbesondere bei manchen VIA-
+              Chipsätzen notwendig).
+pci=nomsi     Deaktiviert "Message Signaled Interrupts". Hilft oft 
+              bei Problemen mit dem SATA-Controller auf neueren
+              Mainboards.
+pci=routeirq  IRQ-Autorouting, hilfreich für einige Mainboards 
+              (zum Beispiel Asus A7N8X). 
+processor.max_cstate=3 	 behebt das Problem des "C4-Fiepen" - 
+                         (siehe unten) 
+single 	booten in den Single-User-Mode 
+text 	booten in die Konsole, X bleibt aussen vor, interaktiver Modus 
+        mit Netzwerk vergleichbar Runlevel 3 
 usb=bios 	
-vga=... 	 Stellt die Auflösung von Grub und der Konsole ein (siehe unten). 
-xforcevesa 	 Der XServer (graphische Oberfläche) wird unabhängig von der verwendeten Hardware nur für "vesa" konfiguriert. 
-nomodeset 	 Verhindert, dass der Kernel die Mode-Settings für die Grafikkarte durchführt. Die Mode-Settings werden wie vor Kernel 2.6.28 im User-Mode durchgeführt (siehe auch:Mode-Settings). 
-noplymouth 	 Schaltet die Anzeige von Plymouth ab, diese Ergänzung ersetzt das nosplash aus dem alten Ubuntu-Splash. 
-pcie_aspm=force 	 Erzwingt Active State Power Management (Kernel 2.6.38+)
\ No newline at end of file
+vga=...  Stellt die Auflösung von Grub und der Konsole ein. 
+xforcevesa  Der XServer (graphische Oberfläche) wird unabhängig von der
+            verwendeten Hardware nur für "vesa" konfiguriert. 
+nomodeset   Verhindert, dass der Kernel die Mode-Settings für die 
+            Grafikkarte durchführt. Die Mode-Settings werden wie vor 
+            Kernel 2.6.28 im User-Mode durchgeführt
+            (siehe auch:Mode-Settings). 
+noplymouth   Schaltet die Anzeige von Plymouth ab, diese Ergänzung 
+             ersetzt das nosplash aus dem alten Ubuntu-Splash. 
+pcie_aspm=force Erzwingt Active State Power Management (Kernel 2.6.38+)
+nomodeset   Verhindert, dass der Kernel die Mode-Settings für die 
+            Grafikkarte durchführt. Die Mode-Settings werden wie vor 
+            Kernel 2.6.28 im User-Mode durchgeführt
+            (siehe auch:Mode-Settings). 
+noplymouth   Schaltet die Anzeige von Plymouth ab, diese Ergänzung 
+             ersetzt das nosplash aus dem alten Ubuntu-Splash.
+pcie_aspm=force Erzwingt Active State Power Management (Kernel 2.6.38+)
diff --git a/grub/grub.cfg b/grub/grub.cfg
index bd356e09bb14b9fd850674d9b538b58a678382f9..e5c41e28c53813ee6547dc2cf90da927156b78fc 100644
--- a/grub/grub.cfg
+++ b/grub/grub.cfg
@@ -10,6 +10,8 @@ fi
 set menu_color_normal=white/black
 set menu_color_highlight=black/light-gray
 
+set pager=1
+
 function set64 {
   set bits="64"
   set arch="x86_64"
@@ -145,6 +147,11 @@ menuentry "${lip_flavor} ${lip_version}${lip_extra_info} ${bits}bit (english, fn
         LoadCasper
 }
 
+menuentry "Show bootflags" {
+	cat "/bootflags.txt"
+	read
+}
+
 menuentry "${lip_flavor} ${lip_version}${lip_extra_info} ${bits}bit (deutsch, load casper from first disk)" {
         set cmdline="debian-installer/locale=de_DE console-setup/layoutcode=de live-media=/dev/sda1"
         LoadCasper
diff --git a/scripts/linuxparty.py b/scripts/linuxparty.py
new file mode 100755
index 0000000000000000000000000000000000000000..4d8bfe9b149db6df459428834ca284ee11f92c36
--- /dev/null
+++ b/scripts/linuxparty.py
@@ -0,0 +1,341 @@
+#!/usr/bin/python3
+#this is treeview branch
+
+import sys, os, io, subprocess
+import json
+import apt
+import dbus
+import traceback
+import tempfile
+from PyQt5 import QtWidgets, QtGui, QtCore
+from collections import OrderedDict
+
+cache = apt.cache.Cache()
+
+def get_devices():
+    devices = []
+    bus = dbus.SystemBus()
+    udisks_manager = bus.get_object("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2")
+    manager_iface = dbus.Interface(udisks_manager, "org.freedesktop.DBus.ObjectManager")
+    try:
+        for k,v in manager_iface.GetManagedObjects().items():
+            drive_info = v.get("org.freedesktop.UDisks2.Block", {})
+            if drive_info.get("IdUsage") == "filesystem":
+                label = str(drive_info.get("IdLabel"))
+                device = bytearray(drive_info.get("Device")).replace(b"\x00",b"").decode("utf-8")
+                fs_info = v.get("org.freedesktop.UDisks2.Filesystem")
+                dbus_mpoints = fs_info.get("MountPoints")
+                mpoints = [bytearray(mpoint).replace(b"\x00",b"").decode("utf-8") for mpoint in dbus_mpoints]
+                devices.append((label, device, mpoints))
+    except Exception as ex:
+        traceback.print_exc(ex)
+        print("No devices found")
+    return devices
+
+def mount_stick(dev):
+    bus = dbus.SystemBus()
+    udisks = bus.get_object("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2/block_devices/%s"%(dev,))
+    iface = dbus.Interface(udisks, "org.freedesktop.UDisks2.Filesystem")
+    res = None
+    try:
+        res = bytearray(iface.Mount()).replace(b"\x00",b"").decode("utf-8")
+    except Exception as ex:
+        traceback.print_exc(ex)
+        print("Could not mount %s"%(dev,))
+    return res
+
+def find_lipstick():
+    devices = get_devices()
+    stick = None
+    for device in devices:
+        if device[0].lower()=="lipstick":
+            stick = device
+    return stick
+
+def enable_offline_repo(gui):
+    try_again = True
+    stick = None
+    while True:
+        stick = find_lipstick()
+        if stick is not None:
+            if len(stick[2])<1:
+                mount_stick(stick[1])
+                stick = find_lipstick()
+
+        if stick is None or (type(stick) is tuple and len(stick[2])<=0):
+            choice = QtWidgets.QMessageBox.question(gui, 'LIPStick nicht gefunden!', "Möchtest du noch einmal versuchen den LIPStick zu finden?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
+            if choice == QtWidgets.QMessageBox.No:
+                try_again = False
+        else:
+            try_again = False
+        if not try_again:
+            break
+
+    if stick is None:
+        QtWidgets.QMessageBox.critical(gui, "Kein LIPStick gefunden", "Es wird ohne LIPStick weiter gemacht")
+        return
+
+    subprocess_wrap(['/bin/bash', basedir+"/liprepoctl.sh", "on", stick[2][0]])
+
+def disable_offline_repo():
+    subprocess_wrap(['/bin/bash', basedir+"/liprepoctl.sh", "off"])
+
+
+def subprocess_wrap(what):
+    proc = subprocess.Popen(what, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+    while True:
+        status = proc.poll()
+        if status is not None:
+            break
+        output = proc.stdout.readline()
+        if output == '' and status:
+            break
+        if output:
+            print(output.strip().decode('utf-8'))
+    rc = proc.poll()
+    print("Subprocess exited with status", rc)
+    return rc
+
+def get_mountpoint(dev):
+    iface = QtDBus.QDBusInterface("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2/block_devices/%s"%(dev,), "org.freedesktop.DBus.Properties", QtDBus.QDBusConnection.systemBus())
+    msg = iface.call("Get", "org.freedesktop.UDisks2.Filesystem", "MountPoints")
+    mpoint = msg.arguments()[0][0].data().decode('utf-8')[:-1]
+    print(mpoint)
+    return mpoint
+
+class Ui_MainWindow(object):
+    def setupUi(self, MainWindow):
+        MainWindow.setObjectName("MainWindow")
+        MainWindow.resize(700, 500)
+        self.centralwidget = QtWidgets.QWidget(MainWindow)
+        self.centralwidget.setObjectName("centralwidget")
+        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
+        self.gridLayout.setObjectName("gridLayout")
+        self.treeView = QtWidgets.QTreeView(self.centralwidget)
+        self.treeView.setGeometry(QtCore.QRect(10, 10, 781, 521))
+        self.treeView.header().setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
+        self.treeView.setHeaderHidden(True)
+        self.gridLayout.addWidget(self.treeView, 0, 0, 1, 4)
+        self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
+        self.progressBar.hide()
+        self.progressBar.setProperty("value", 0)
+        self.progressBar.setObjectName("progressBar")
+        self.gridLayout.addWidget(self.progressBar, 2, 0, 1, 1)
+        self.btnr = QtWidgets.QPushButton(self.centralwidget)
+        self.btnr.setObjectName("btnr")
+        self.gridLayout.addWidget(self.btnr, 2, 2, 1, 1)
+        self.btnl = QtWidgets.QPushButton(self.centralwidget)
+        self.btnl.setObjectName("btnl")
+        self.gridLayout.addWidget(self.btnl, 2, 1, 1, 1)
+        MainWindow.setCentralWidget(self.centralwidget)
+        self.menubar = QtWidgets.QMenuBar(MainWindow)
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 600, 22))
+        self.menubar.setObjectName("menubar")
+        self.menuFile = QtWidgets.QMenu(self.menubar)
+        self.menuFile.setObjectName("menuFile")
+        self.menuAbout = QtWidgets.QMenu(self.menubar)
+        self.menuAbout.setObjectName("menuAbout")
+        MainWindow.setMenuBar(self.menubar)
+        self.actionQuit = QtWidgets.QAction(MainWindow)
+        self.actionQuit.setObjectName("actionQuit")
+        self.actionInfo = QtWidgets.QAction(MainWindow)
+        self.actionInfo.setObjectName("actionInfo")
+        self.menuAbout.addAction(self.actionInfo)
+        self.menubar.addAction(self.menuFile.menuAction())
+        self.menubar.addAction(self.menuAbout.menuAction())
+
+        self.retranslateUi(MainWindow)
+        QtCore.QMetaObject.connectSlotsByName(MainWindow)
+
+    def retranslateUi(self, MainWindow):
+        _translate = QtCore.QCoreApplication.translate
+        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
+        self.btnr.setText(_translate("MainWindow", "&Quit"))
+        self.btnl.setText(_translate("MainWindow", "&Install"))
+        self.menuFile.setTitle(_translate("MainWindow", "&File"))
+        self.menuAbout.setTitle(_translate("MainWindow", "&About"))
+        self.actionQuit.setText(_translate("MainWindow", "&Quit"))
+        self.actionInfo.setText(_translate("MainWindow", "&Info"))
+
+class Main(QtWidgets.QMainWindow):
+    def __init__(self):
+        QtWidgets.QMainWindow.__init__(self)
+        self.ui = Ui_MainWindow()
+        self.ui.setupUi(self)
+
+        extractAction = QtWidgets.QAction("&Quit", self)
+        extractAction.setShortcut("Ctrl+Q")
+        extractAction.setStatusTip('Leave the Application')
+        extractAction.triggered.connect(self.close_application)
+
+        self.ui.menuFile.addAction(extractAction)
+        self.ui.btnr.clicked.connect(self.close_application)
+
+
+    def close_application(self):
+        choice = QtWidgets.QMessageBox.question(self, 'Close the Application?', "No Packages will be installed.", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
+        if choice == QtWidgets.QMessageBox.Yes:
+            QtCore.QCoreApplication.instance().quit()
+        else:
+            pass
+
+def installProcess():
+    global pkglist
+
+    window.ui.btnl.hide()
+    window.ui.btnr.setText("&Finish")
+    window.ui.progressBar.show()
+    window.ui.progressBar.setRange(0,0)
+    pkglist = getPackagelistTree()
+    enable_offline_repo(window)
+    installPackages(pkglist)
+    #window.ui.progressBar.setRange(0,1)
+    #window.ui.progressBar.setValue(1)
+    makeDoku(pkglist)
+    showSuccBox()
+    disable_offline_repo()
+
+def showSuccBox():
+    succBox = QtWidgets.QMessageBox()
+    succBox.setText("The selected packages have been installed.")
+    succBox.setWindowTitle("Installation Finished!")
+    succBox.setIcon(1)
+    sys.exit(succBox.exec_())
+
+def showErrorBox():
+    errorBox = QtWidgets.QMessageBox()
+    errorBox.setText("Something went wrong. No packages have been installed.")
+    errorBox.setWindowTitle("Error")
+    errorBox.setIcon(3)
+    sys.exit(errorBox.exec_())
+
+def showErrorBox(errorstring):
+    errorBox = QtWidgets.QMessageBox()
+    errorBox.setText(errorstring)
+    errorBox.setWindowTitle("Error")
+    errorBox.setIcon(3)
+    sys.exit(errorBox.exec_())
+
+def chooseFirewall():
+    askBox = QtWidgets.QMessageBox()
+    askBox.setText("Netzwerk: Soll die Ubuntu Firewall (ufw/gufw) aktiviert werden?")
+    askBox.setIcon(4)
+    askBox.setStandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
+    result = askBox.exec_()
+    if result == QtWidgets.QMessageBox.Yes:
+        enableFirewall()
+
+def checkIfRoot():
+    if os.getuid() != 0:
+        errorBox = QtWidgets.QMessageBox()
+        errorBox.setText("You must run this script as root.")
+        errorBox.setWindowTitle("Please run this script as root.")
+        errorBox.setIcon(3)
+        sys.exit(errorBox.exec_())
+    else:
+        pass
+
+def installPackages(strlist):
+    global pkglist
+    cache.update()
+    cache.open(None)
+
+    for pkg in pkglist:
+        candidate = cache[pkg]
+        if not candidate.is_installed:
+            candidate.mark_install()
+    try:
+        cache.commit(apt.progress.text.AcquireProgress(), apt.progress.base.InstallProgress())
+    except Exception as ex:
+        print("Error during install",ex)
+def enableFirewall():
+    command=['ufw', 'enable']
+    subprocess_wrap(command)
+
+def mountStick():
+    command=['/bin/bash', basedir+"/infuse_offline_repo.sh"]
+    subprocess_wrap(command)
+
+def makeDoku(stringlist):
+    global pkglist
+
+    command=['/bin/bash', basedir+"/makeDoku.sh", basedir+"/", " ".join(pkglist)]
+    subprocess_wrap(command)
+    
+def getPackagelist():
+    installList = []
+    model = window.ui.tableView.model()
+    i = 0
+    while i < model.rowCount():
+        item = model.item(i)
+        item.readOnly(true)
+        if item.isEnabled:
+            if item.checkState():
+                installList.append(item.text())
+        i += 1
+    return installList
+
+def getPackagelistTree():
+    installList = []
+    model = window.ui.treeView.model()
+    i = 0
+    while i < model.rowCount():
+        branch = model.item(i)
+        j = 0
+        #if branch.isEnabled():
+            #check if branc is checkt if true return all children true
+#            if branch.checkState():
+#                while j < branch.rowCount():
+#                    installList.append(branch.child(j).text())
+#                    j += 1
+#            else:
+        while j < branch.rowCount():
+            if branch.child(j).isEnabled:
+                if branch.child(j).checkState():
+                    installList.append(branch.child(j).text())
+            j += 1
+        i += 1
+    return installList
+
+def fillTreeView(inputDataJson, treeView):
+    model = QtGui.QStandardItemModel()
+    branchfont = QtGui.QFont()
+    branchfont.setBold(True)
+    for softwareGroup in inputDataJson:
+        branch = QtGui.QStandardItem(softwareGroup)
+        #branch.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
+        #branch.setData(QtCore.QVariant(QtCore.Qt.Checked), QtCore.Qt.CheckStateRole)
+        branch.setFont(branchfont)
+        if 'groupDesc' in inputDataJson[softwareGroup]:
+            branchDesc = QtGui.QStandardItem(inputDataJson[softwareGroup]['groupDesc'])
+        else:
+            branchDesc = QtGui.QStandardItem('')
+        for package in inputDataJson[softwareGroup]['packages']:
+            if not ('hidden' in package and package['hidden']):
+                item = QtGui.QStandardItem(package['pkgname'])
+                item.setText(package['pkgname'])
+                item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
+                if package['tagged']:
+                    item.setData(QtCore.QVariant(QtCore.Qt.Checked), QtCore.Qt.CheckStateRole)
+                else:
+                    item.setData(QtCore.QVariant(QtCore.Qt.Unchecked), QtCore.Qt.CheckStateRole)
+                item2 = QtGui.QStandardItem(package['pkgdescription'])
+                branch.appendRow([item, item2])
+        model.appendRow([branch, branchDesc])
+    treeView.setModel(model)
+    treeView.expandAll()
+
+if __name__ == '__main__':
+    app = QtWidgets.QApplication(sys.argv)
+    basedir=os.path.dirname(os.path.realpath(__file__))
+    checkIfRoot()
+    chooseFirewall()
+    #mountStick()
+    window = Main()
+    window.setWindowTitle("Linux Install Party Software Installer")
+    with open(basedir+'/../offline_repo.json', 'r') as inputfile:
+        data=json.loads(inputfile.read(), object_pairs_hook=OrderedDict)
+    fillTreeView(data, window.ui.treeView)
+    window.ui.btnl.clicked.connect(installProcess)
+    window.show()
+    sys.exit(app.exec_())
diff --git a/scripts/linuxparty.sh b/scripts/linuxparty.sh
index 567ec5203d1cb1d18c0ea07ef82268e94129b480..0c66cefb5b18d1b44c6c1f6aa6884995722db432 100644
--- a/scripts/linuxparty.sh
+++ b/scripts/linuxparty.sh
@@ -50,8 +50,9 @@ COMMON_PKGS=(\
 "FALSE" "zsh-doc" "Dokumentation von zsh" \
 "FALSE" "lftp" "FTP-Client" \
 "FALSE" "gddrescue" "Falls Daten gelöscht, letzte Option vor dem Tod der Hoffnung" \
-"TRUE" "liblapack-dev" "LAPACK ist eine Standard-Numerik-Bibliothek für Physiker und Numeriker" \
-"TRUE" "liblapack-doc" "LAPACK Dokumentation (s. oben)" \
+"FALSE" "liblapack-dev" "LAPACK ist eine Standard-Numerik-Bibliothek für Physiker und Numeriker" \
+"FALSE" "liblapack-doc" "LAPACK Dokumentation (s. oben)" \
+"FALSE" "x2goclient" "Remote Desktop Client" \
 )
 
 PH_PKGS=(\
@@ -417,7 +418,7 @@ create_doc()
   USER_HOME=$(getent passwd "${SUDO_USER:-$USER}" | cut -d ':' -f6)
   cp "${WORKING_DIR}/DOCUMENTATION.gen.pdf" "${USER_HOME}/Deine-LIP-Dokumentation.pdf"
   RC=$?
-  pressenter "Dokummentation der von dir installierten Paktete wurde in deinem Benutzerverzeichnis ($HOME) als 'Deine-LIP-Dokumentation.pdf' abegelegt."
+  pressenter "Eine Dokumentation der von dir installierten Paktete wurde in deinem Benutzerverzeichnis ($HOME) als 'Deine-LIP-Dokumentation.pdf' abegelegt."
 
   return $RC
 }
@@ -499,12 +500,13 @@ then
   install_if
 fi
 
-if askyesno "Software für Mathematik installieren ?"
-then
+#FIXME: currently singular cannot be installed on ubuntu 15.10 (this is the only package in the math section)
+#if askyesno "Software für Mathematik installieren ?"
+#then
   #apt-install haskell-platform java7-jdk swi-prolog
   #ok "Haskell, Java, Prolog und Eclipse wurden installiert"
-  install_m
-fi
+ # install_m
+#fi
 
 if askyesno "Software für Physiker (Python-SciPy,-NumPy,diverse Plot-Programme) installieren ?"
 then
diff --git a/scripts/liprepoctl.sh b/scripts/liprepoctl.sh
index 025077380940e0991858fc807be00372549974db..ff0a7d834f1ce5587f05f77e9ba90d3e2635b39a 100644
--- a/scripts/liprepoctl.sh
+++ b/scripts/liprepoctl.sh
@@ -3,8 +3,8 @@
 ACTION="$1"
 FILENAME="/etc/apt/sources.list.d/lipoffline.list"
 ACTIVATED=`test -e "$FILENAME"`
-DIST_CODENAME="trusty"
-DIST_VERSION="14.04"
+DIST_CODENAME="wily"
+DIST_VERSION="15.10"
 
 
 function install_repo()
diff --git a/scripts/makeDoku.sh b/scripts/makeDoku.sh
new file mode 100755
index 0000000000000000000000000000000000000000..49355b6697ce2a622a3486cd3f74b109e968cd6d
--- /dev/null
+++ b/scripts/makeDoku.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+# Takes 2 arguments, first path where docuparts are stored 2nd list of installed packages
+
+if [ $# -eq 0 ]
+then
+    echo "No path supplied"
+    exit 1
+else
+    DOCUDIR="$1/../Doku"
+    echo $DOCUDIR
+    shift
+fi
+
+if [ ! -f "$DOCUDIR/HEADER.tex" ]; then #HEADER muss ex. sonst kommt auf keinen Fall was sinnvolles bei rum
+    echo "Leider ist keine Dokumentation auf dem LIP-Stick vorhanden..."
+    exit 0 #linuxparty.sh soll auch ohne Doku Verzeichnis laufen
+fi
+
+if [ $# -eq 0 ]
+then
+    echo "No packages supplied"
+    exit 1
+else
+    PACKAGELIST="$@ FOOTER"
+    echo $PACKAGELIST
+fi
+
+
+WORKING_DIR=$(mktemp -d)
+cp -a "$DOCUDIR/." "$WORKING_DIR"
+
+for PACKAGE in $PACKAGELIST; do
+  #zenity and kdialog return quoted package names; nice for apt call but bad here
+  CLEAN_PACKAGE_NAME=$(echo "$PACKAGE" | tr -d "\" ")
+  echo "Dokumentation fuer $PACKAGE von ${WORKING_DIR}/${CLEAN_PACKAGE_NAME}.tex"
+  if [ -f "${WORKING_DIR}/${CLEAN_PACKAGE_NAME}.tex" ]; then
+    echo "\\input{${CLEAN_PACKAGE_NAME}.tex}" >> "$WORKING_DIR/DOCUMENTATION.gen.tex"
+    #cat "${DOCUDIR}/${CLEAN_PACKAGE_NAME}.tex" >> "$DOCFILE"
+  fi
+done
+
+pushd "$WORKING_DIR"
+pdflatex -output-directory "$WORKING_DIR" "DOCUMENTATION.gen.tex"
+pdflatex -output-directory "$WORKING_DIR" "DOCUMENTATION.gen.tex" # ja, ist Absicht
+if [ $? -ne 0 ]; then
+  exit 1
+fi
+popd
+
+USER_HOME=$(getent passwd "${SUDO_USER:-$USER}" | cut -d ':' -f6)
+cp "${WORKING_DIR}/DOCUMENTATION.gen.pdf" "${USER_HOME}/Deine-LIP-Dokumentation.pdf"
+RC=$?
+
+exit $RC
diff --git a/scripts/mount-stick-repo.sh b/scripts/mount-stick-repo.sh
index 88dcf8ef9b4a740a199f4e5614e763f29bd53493..02e1b3794bf6fd651aa423cbe180010d073f0eee 100644
--- a/scripts/mount-stick-repo.sh
+++ b/scripts/mount-stick-repo.sh
@@ -1,10 +1,13 @@
 #! /bin/bash
 set -e
 
+LIPSTICK_LABEL="LIPStick"
+LIPSTICK_LABEL_ALT="$(echo -n "$LIPSTICK_LABEL" | tr "[a-z]" "[A-Z]")"
+
 #find device
-DEV="$(blkid -t "LABEL=MultiBoot" -o device | head -n1 || echo '')"
+DEV="$(blkid -t "LABEL=$LIPSTICK_LABEL" -o device | head -n1 || echo '')"
 if [ -z "$DEV" ]; then
-  DEV="$(blkid -t "LABEL=MULTIBOOT" -o device | head -n1 || echo '')"
+  DEV="$(blkid -t "LABEL=$LIPSTICK_LABEL_ALT" -o device | head -n1 || echo '')"
 fi
 
 PS3="[1,2,3]<Enter>: "
@@ -16,9 +19,9 @@ while [ -z "$DEV" ];  do
 "Installation abbrechen" ; do
     case $i in
      "Stick ist jetzt gesteckt")
-       DEV="$(blkid -t "LABEL=MultiBoot" -o device | head -n1 || echo '')"
+       DEV="$(blkid -t "LABEL=$LIPSTICK_LABEL" -o device | head -n1 || echo '')"
        if [ -z "$DEV" ]; then
-	 DEV="$(blkid -t "LABEL=MULTIBOOT" -o device | head -n1 || echo '')"
+	 DEV="$(blkid -t "LABEL=$LIPSTICK_LABEL_ALT" -o device | head -n1 || echo '')"
        fi
        ;;
      "Ohne Stick weitermachen")