diff --git a/pom.xml b/pom.xml
index 380ed970e82db5cfce1fddb96e0498f2f957db42..e16df4f8a4ad4af1deec47300632496adeb86be1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,94 +1,139 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>de.deadlocker8</groupId>
-  <artifactId>SmartTime</artifactId>
-  <version>5.2.0</version>
-  <build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>3.7.0</version>
-				<configuration>
-					<source>1.8</source>
-					<target>1.8</target>
-				</configuration>
-			</plugin>			
-			<plugin>
-				<artifactId>maven-assembly-plugin</artifactId>
-				<configuration>
-					<outputDirectory>build/${project.version}</outputDirectory>
-					<finalName>SmartTime-v${project.version}</finalName>
-					<appendAssemblyId>false</appendAssemblyId>
-					<archive>
-						<manifest>
-							<mainClass>de.deadlocker8.smarttime.main.Main</mainClass>
-						</manifest>
-					</archive>
-					<descriptorRefs>
-						<descriptorRef>jar-with-dependencies</descriptorRef>
-					</descriptorRefs>
-				</configuration>
-				<executions>
-					<execution>
-						<id>make-assembly</id> <!-- this is used for inheritance merges -->
-						<phase>package</phase> <!-- bind to the packaging phase -->
-						<goals>
-							<goal>single</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<!-- LAUNCH4J -->
-			<plugin>
-				<groupId>com.akathist.maven.plugins.launch4j</groupId>
-				<artifactId>launch4j-maven-plugin</artifactId>
-				<version>1.7.21</version>
-				<executions>
-					<execution>
-						<id>l4j-clui</id>
-						<phase>package</phase>
-						<goals>
-							<goal>launch4j</goal>
-						</goals>
-						<configuration>
-							<headerType>gui</headerType>
-							<jar>build/${project.version}/SmartTime-v${project.version}.jar</jar>
-							<outfile>build/${project.version}/SmartTime-v${project.version}.exe</outfile>
-							<downloadUrl>http://java.com/download</downloadUrl>
-							<classPath>
-								<mainClass>de.deadlocker8.smarttime.main.Main</mainClass>
-							</classPath>
-							<jre>
-								<bundledJre64Bit>false</bundledJre64Bit>
-								<bundledJreAsFallback>false</bundledJreAsFallback>
-								<minVersion>1.8.0</minVersion>
-								<jdkPreference>preferJre</jdkPreference>
-								<runtimeBits>64/32</runtimeBits>
-							</jre>
-							<icon>build/Icon.ico</icon>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>de.deadlocker8</groupId>
+    <artifactId>SmartTime</artifactId>
+    <version>6.0.0</version>
 
-	<dependencies>	
-		<dependency>
-			<groupId>de.deadlocker8</groupId>
-			<artifactId>tools</artifactId>
-			<version>1.0.0</version>
-		</dependency>
-		<dependency>
-			<groupId>com.google.code.gson</groupId>
-			<artifactId>gson</artifactId>
-			<version>2.8.1</version>
-		</dependency>
-		<dependency>
-			<groupId>org.xerial</groupId>
-			<artifactId>sqlite-jdbc</artifactId>
-			<version>3.21.0</version>
-		</dependency>
-	</dependencies>
+    <properties>
+        <jlibs.version>2.0.6</jlibs.version>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.7.0</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <outputDirectory>build/${project.version}</outputDirectory>
+                    <finalName>SmartTime-v${project.version}</finalName>
+                    <appendAssemblyId>false</appendAssemblyId>
+                    <archive>
+                        <manifest>
+                            <mainClass>de.deadlocker8.smarttime.main.Main</mainClass>
+                        </manifest>
+                    </archive>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
+                        <phase>package</phase> <!-- bind to the packaging phase -->
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <!-- LAUNCH4J -->
+            <plugin>
+                <groupId>com.akathist.maven.plugins.launch4j</groupId>
+                <artifactId>launch4j-maven-plugin</artifactId>
+                <version>1.7.21</version>
+                <executions>
+                    <execution>
+                        <id>l4j-clui</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>launch4j</goal>
+                        </goals>
+                        <configuration>
+                            <headerType>gui</headerType>
+                            <jar>build/${project.version}/SmartTime-v${project.version}.jar</jar>
+                            <outfile>build/${project.version}/SmartTime-v${project.version}.exe</outfile>
+                            <downloadUrl>http://java.com/download</downloadUrl>
+                            <classPath>
+                                <mainClass>de.deadlocker8.smarttime.main.Main</mainClass>
+                            </classPath>
+                            <jre>
+                                <bundledJre64Bit>false</bundledJre64Bit>
+                                <bundledJreAsFallback>false</bundledJreAsFallback>
+                                <minVersion>1.8.0</minVersion>
+                                <jdkPreference>preferJre</jdkPreference>
+                                <runtimeBits>64/32</runtimeBits>
+                            </jre>
+                            <icon>build/Icon.ico</icon>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>de.thecodelabs</groupId>
+                <artifactId>jlibs</artifactId>
+                <version>${jlibs.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>de.thecodelabs</groupId>
+            <artifactId>libUtils</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>de.thecodelabs</groupId>
+            <artifactId>libLogger</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.xerial</groupId>
+            <artifactId>sqlite-jdbc</artifactId>
+            <version>3.21.0</version>
+        </dependency>
+    </dependencies>
+
+    <repositories>
+        <repository>
+            <id>release</id>
+            <url>https://maven.thecodelabs.de/artifactory/Releases</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+        <repository>
+            <id>snapshots</id>
+            <url>https://maven.thecodelabs.de/artifactory/Snapshots</url>
+            <releases>
+                <enabled>false</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
 </project>
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/smarttime/charts/ChartGUIController.java b/src/main/java/de/deadlocker8/smarttime/charts/ChartGUIController.java
index 2333e2448e7d5c70e6c32ea01a652296ff139b1f..b4a555808ebec16efb604e96e16096671c901216 100644
--- a/src/main/java/de/deadlocker8/smarttime/charts/ChartGUIController.java
+++ b/src/main/java/de/deadlocker8/smarttime/charts/ChartGUIController.java
@@ -1,13 +1,11 @@
 package de.deadlocker8.smarttime.charts;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-
 import de.deadlocker8.smarttime.core.LogObject;
 import de.deadlocker8.smarttime.core.SQL;
 import de.deadlocker8.smarttime.core.Settings;
 import de.deadlocker8.smarttime.core.Utils;
+import de.thecodelabs.logger.Logger;
+import de.thecodelabs.utils.ui.Alerts;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 import javafx.fxml.FXML;
@@ -20,8 +18,10 @@ import javafx.scene.image.Image;
 import javafx.scene.layout.AnchorPane;
 import javafx.scene.layout.VBox;
 import javafx.stage.Stage;
-import logger.Logger;
-import tools.AlertGenerator;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
 
 @SuppressWarnings("rawtypes")
 public class ChartGUIController
@@ -431,7 +431,7 @@ public class ChartGUIController
 	
 	private void showErrorMessage()
 	{
-		AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Fehler beim Erstellen des Diagramms.", icon, stage, null, false);	
+		Alerts.getInstance().createAlert(AlertType.ERROR, "Fehler", "Fehler beim Erstellen des Diagramms.", stage);
 	}
 
 	private void showPieChart(PieChart chart)
diff --git a/src/main/java/de/deadlocker8/smarttime/charts/PieChartGenerator.java b/src/main/java/de/deadlocker8/smarttime/charts/PieChartGenerator.java
index fea7b62c1b4aee2c0eab163408de19d4f94c547a..18b723510069f221a65da3495c4a6c13181b9d36 100644
--- a/src/main/java/de/deadlocker8/smarttime/charts/PieChartGenerator.java
+++ b/src/main/java/de/deadlocker8/smarttime/charts/PieChartGenerator.java
@@ -13,7 +13,7 @@ import javafx.scene.Node;
 import javafx.scene.chart.PieChart;
 import javafx.scene.control.Tooltip;
 import javafx.scene.input.MouseEvent;
-import tools.ConvertTo;
+import de.deadlocker8.smarttime.core.ConvertTo;
 
 public class PieChartGenerator
 {
diff --git a/src/main/java/de/deadlocker8/smarttime/charts/SummaryGenerator.java b/src/main/java/de/deadlocker8/smarttime/charts/SummaryGenerator.java
index 0d6ee9b3b92dd96dd37f1834fcfcf488b495078a..944259354976baac9a24099e3c9480ddd5c616e1 100644
--- a/src/main/java/de/deadlocker8/smarttime/charts/SummaryGenerator.java
+++ b/src/main/java/de/deadlocker8/smarttime/charts/SummaryGenerator.java
@@ -10,7 +10,7 @@ import javafx.geometry.Pos;
 import javafx.scene.control.Label;
 import javafx.scene.layout.Priority;
 import javafx.scene.layout.VBox;
-import tools.ConvertTo;
+import de.deadlocker8.smarttime.core.ConvertTo;
 
 public class SummaryGenerator
 {
diff --git a/src/main/java/de/deadlocker8/smarttime/controller/Controller.java b/src/main/java/de/deadlocker8/smarttime/controller/Controller.java
index c3782b8bfff1b17aace0115e0e88405519ca0532..fa77a7f9ee76716ede314ca4d882422d285dc6ef 100644
--- a/src/main/java/de/deadlocker8/smarttime/controller/Controller.java
+++ b/src/main/java/de/deadlocker8/smarttime/controller/Controller.java
@@ -13,13 +13,11 @@ import java.util.ResourceBundle;
 import java.util.regex.Pattern;
 
 import de.deadlocker8.smarttime.charts.ChartGUIController;
-import de.deadlocker8.smarttime.core.Exporter;
-import de.deadlocker8.smarttime.core.Importer;
-import de.deadlocker8.smarttime.core.LogObject;
-import de.deadlocker8.smarttime.core.SQL;
-import de.deadlocker8.smarttime.core.Settings;
-import de.deadlocker8.smarttime.core.Timer;
-import de.deadlocker8.smarttime.core.Utils;
+import de.deadlocker8.smarttime.core.*;
+import de.thecodelabs.logger.Logger;
+import de.thecodelabs.utils.io.PathUtils;
+import de.thecodelabs.utils.ui.Alerts;
+import de.thecodelabs.utils.util.SystemUtils;
 import javafx.application.Platform;
 import javafx.beans.property.SimpleStringProperty;
 import javafx.beans.property.StringProperty;
@@ -61,10 +59,7 @@ import javafx.stage.Modality;
 import javafx.stage.Stage;
 import javafx.stage.WindowEvent;
 import javafx.util.Callback;
-import logger.Logger;
-import tools.AlertGenerator;
-import tools.ConvertTo;
-import tools.PathUtils;
+
 
 public class Controller
 {
@@ -91,7 +86,7 @@ public class Controller
 	private long endTimestamp;
 	private int longestProject;
 	private ArrayList<LogObject> logObjects = new ArrayList<LogObject>();
-	private final String DEFAULT_SAVE_PATH = PathUtils.getOSindependentPath() + "/Deadlocker/SmartTime/";
+	private final String DEFAULT_SAVE_PATH = SystemUtils.getApplicationSupportDirectoryPath("Deadlocker", "SmartTime").toString();
 	private SQL sql;
 	private Stage waitingStage = new Stage();
 	private Image icon;
@@ -103,7 +98,7 @@ public class Controller
 		this.stage = stage;
 
 		labelSeparator.setStyle("-fx-background-color: #cdc6c6; -fx-font-size: 0.7");
-		PathUtils.checkFolder(new File(DEFAULT_SAVE_PATH));
+		PathUtils.createDirectoriesIfNotExists(new File(DEFAULT_SAVE_PATH).toPath());
 		icon = new Image("/de/deadlocker8/smarttime/icon.png");
 		accordion.setExpandedPane(gesamtesLog);
 		projektExistiertFlag = false;
@@ -136,7 +131,7 @@ public class Controller
 			}
 			else
 			{
-				AlertGenerator.showAlert(AlertType.WARNING, "Warnung", "", "Kein Projekt ausgewählt.", icon, stage, null, false);
+				Alerts.getInstance().createAlert(AlertType.WARNING, "Warnung", "Kein Projekt ausgewählt.", stage);
 				startButton.setSelected(false);
 			}
 		});
@@ -151,7 +146,7 @@ public class Controller
 		// Prüft, ob die Stoppuhr noch läuft
 		if(isTimerRunning())
 		{
-			AlertGenerator.showAlert(AlertType.WARNING, "Warnung", "", "Stoppuhr läuft noch!", icon, stage, null, false);
+			Alerts.getInstance().createAlert(AlertType.WARNING, "Warnung", "Stoppuhr läuft noch!", stage);
 		}
 		else
 		{
@@ -207,7 +202,7 @@ public class Controller
 		}
 		else
 		{
-			AlertGenerator.showAlert(AlertType.WARNING, "Warnung", "Stoppuhr läuft noch!", "Projekt und Task können nur geändert werden,\nwenn die Stoppuhr nicht läuft.", icon, stage, null, false);
+			Alerts.getInstance().createAlert(AlertType.WARNING, "Warnung", "Stoppuhr läuft noch!", "Projekt und Task können nur geändert werden,\nwenn die Stoppuhr nicht läuft.", stage);
 		}
 	}
 
@@ -278,7 +273,7 @@ public class Controller
 		catch(Exception e)
 		{
 			Logger.error(e);
-			AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Beim Laden der Daten ist ein Fehler aufgetreten.", icon, stage, null, false);
+			Alerts.getInstance().createAlert(AlertType.ERROR, "Fehler", "Beim Laden der Daten ist ein Fehler aufgetreten.", stage);
 		}
 	}
 
@@ -310,7 +305,7 @@ public class Controller
 			catch(Exception ex)
 			{
 				Logger.error(ex);
-				AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Fehler beim Erstellen der Datenbank.", icon, stage, null, false);
+				Alerts.getInstance().createAlert(AlertType.ERROR, "Fehler", "Fehler beim Erstellen der Datenbank.", stage);
 			}
 		}
 	}
@@ -499,7 +494,7 @@ public class Controller
 		catch(Exception e)
 		{
 			Logger.error(e);
-			AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Fehler beim Speichern des Eintrags.", icon, stage, null, false);
+			Alerts.getInstance().createAlert(AlertType.ERROR, "Fehler", "Fehler beim Speichern des Eintrags.", stage);
 		}
 
 		loadAll();
@@ -642,9 +637,10 @@ public class Controller
 			catch(IOException e)
 			{
 				Logger.error(e);
-				AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Beim Exportieren der Daten ist ein Fehler aufgetreten.", icon, stage, null, false);
+				Alerts.getInstance().createAlert(AlertType.ERROR, "Fehler", "Beim Exportieren der Daten ist ein Fehler aufgetreten.", stage);
 			}
-			AlertGenerator.showAlert(AlertType.INFORMATION, "Erfolgreich exportiert", "", "Export erfolgreich abgeschlossen.", icon, stage, null, false);
+
+			Alerts.getInstance().createAlert(AlertType.INFORMATION, "Erfolgreich exportiert", "Export erfolgreich abgeschlossen.", stage);
 		}
 	}
 
@@ -749,7 +745,7 @@ public class Controller
 		catch(Exception e)
 		{
 			Logger.error(e);
-			AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Beim Aktualisieren des Eintrags ist ein Fehler aufgetreten.", icon, stage, null, false);
+			Alerts.getInstance().createAlert(AlertType.ERROR, "Fehler", "Beim Aktualisieren des Eintrags ist ein Fehler aufgetreten.", stage);
 		}
 	}
 
@@ -763,7 +759,7 @@ public class Controller
 		catch(Exception e)
 		{
 			Logger.error(e);
-			AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Beim Löschen des Eintrags ist ein Fehler aufgetreten.", icon, stage, null, false);
+			Alerts.getInstance().createAlert(AlertType.ERROR, "Fehler", "Beim Löschen des Eintrags ist ein Fehler aufgetreten.", stage);
 		}
 	}
 
@@ -789,7 +785,7 @@ public class Controller
 					catch(IOException e)
 					{
 						Logger.error(e);
-						AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Beim Verschieben der Datenbank ist ein Fehler aufgetreten", icon, stage, null, false);
+						Alerts.getInstance().createAlert(AlertType.ERROR, "Fehler", "Beim Verschieben der Datenbank ist ein Fehler aufgetreten.", stage);
 					}
 				}
 				else
@@ -824,7 +820,7 @@ public class Controller
 			catch(Exception e)
 			{
 				Logger.error(e);
-				AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Beim Löschen der Datenbank ist ein Fehler aufgetreten.", icon, stage, null, false);
+				Alerts.getInstance().createAlert(AlertType.ERROR, "Fehler", "Beim Löschen der Datenbank ist ein Fehler aufgetreten.", stage);
 			}
 		}
 	}
@@ -893,6 +889,8 @@ public class Controller
 	{
 		ArrayList<String> creditLines = new ArrayList<>();
 		creditLines.add(bundle.getString("credits"));
-		AlertGenerator.showAboutAlertWithCredits(bundle.getString("app.name"), bundle.getString("version.name"), bundle.getString("version.code"), bundle.getString("version.date"), "Robert Goldmann", creditLines, icon, stage, null, false);
+
+		// TODO
+//		AlertGenerator.showAboutAlertWithCredits(bundle.getString("app.name"), bundle.getString("version.name"), bundle.getString("version.code"), bundle.getString("version.date"), "Robert Goldmann", creditLines, icon, stage, null, false);
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/smarttime/controller/EditController.java b/src/main/java/de/deadlocker8/smarttime/controller/EditController.java
index 3d8ddda97e46146a703f429f61c71abd456efdcc..8319231261adc3b2f8cf5d6e6777fc0f7be35f93 100644
--- a/src/main/java/de/deadlocker8/smarttime/controller/EditController.java
+++ b/src/main/java/de/deadlocker8/smarttime/controller/EditController.java
@@ -1,13 +1,10 @@
 package de.deadlocker8.smarttime.controller;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Optional;
-
 import de.deadlocker8.smarttime.core.LogObject;
 import de.deadlocker8.smarttime.core.SQL;
 import de.deadlocker8.smarttime.core.Settings;
 import de.deadlocker8.smarttime.core.Utils;
+import de.thecodelabs.utils.ui.Alerts;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 import javafx.event.ActionEvent;
@@ -19,7 +16,10 @@ import javafx.scene.control.ButtonType;
 import javafx.scene.control.ComboBox;
 import javafx.scene.image.Image;
 import javafx.stage.Stage;
-import tools.AlertGenerator;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Optional;
 
 
 public class EditController
@@ -89,7 +89,7 @@ public class EditController
 
 		if(project == null || project.equals("") || task == null || task.equals(""))
 		{
-			AlertGenerator.showAlert(AlertType.WARNING, "Warnung", "", "Die Felder dürfen nicht leer sein.", icon, stage, null, false);
+			Alerts.getInstance().createAlert(AlertType.WARNING, "Warnung", "Die Felder dürfen nicht leer sein.", stage);
 		}
 		else
 		{
diff --git a/src/main/java/de/deadlocker8/smarttime/controller/InsertTimeController.java b/src/main/java/de/deadlocker8/smarttime/controller/InsertTimeController.java
index 266a1f9f5706e034ecb4d1fb711787f593bd412b..dd22f128af09ce0f79e1d639035e011d21ddcaf0 100644
--- a/src/main/java/de/deadlocker8/smarttime/controller/InsertTimeController.java
+++ b/src/main/java/de/deadlocker8/smarttime/controller/InsertTimeController.java
@@ -1,5 +1,21 @@
 package de.deadlocker8.smarttime.controller;
 
+import de.deadlocker8.smarttime.core.*;
+import de.thecodelabs.logger.Logger;
+import de.thecodelabs.utils.ui.Alerts;
+import de.thecodelabs.utils.ui.icon.FontAwesomeType;
+import de.thecodelabs.utils.ui.icon.FontIcon;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.fxml.FXML;
+import javafx.scene.Parent;
+import javafx.scene.control.Alert.AlertType;
+import javafx.scene.control.*;
+import javafx.scene.image.Image;
+import javafx.scene.paint.Color;
+import javafx.stage.Stage;
+import javafx.util.Callback;
+
 import java.sql.Timestamp;
 import java.text.DateFormat;
 import java.text.ParseException;
@@ -12,30 +28,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
 
-import de.deadlocker8.smarttime.core.LogObject;
-import de.deadlocker8.smarttime.core.SQL;
-import de.deadlocker8.smarttime.core.Settings;
-import de.deadlocker8.smarttime.core.Utils;
-import fontAwesome.FontIcon;
-import fontAwesome.FontIconType;
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
-import javafx.fxml.FXML;
-import javafx.scene.Parent;
-import javafx.scene.control.Alert.AlertType;
-import javafx.scene.control.Button;
-import javafx.scene.control.ComboBox;
-import javafx.scene.control.DateCell;
-import javafx.scene.control.DatePicker;
-import javafx.scene.control.Label;
-import javafx.scene.image.Image;
-import javafx.scene.paint.Color;
-import javafx.stage.Stage;
-import javafx.util.Callback;
-import logger.Logger;
-import tools.AlertGenerator;
-import tools.ConvertTo;
-
 public class InsertTimeController 
 {
 	@FXML private DatePicker datePicker1;
@@ -62,8 +54,11 @@ public class InsertTimeController
 		this.stage = stage;
 		this.controller = controller;		
 		this.icon = icon;
-		
-		buttonUseCurrentTime.setGraphic(new FontIcon(FontIconType.CLOCK_ALT, 14, Color.BLACK));
+
+		final FontIcon fontIconClock = new FontIcon(FontAwesomeType.CLOCK_ALT);
+		fontIconClock.setSize(14);
+		fontIconClock.setColor(Color.BLACK);
+		buttonUseCurrentTime.setGraphic(fontIconClock);
 		
 		ArrayList<String> objects = new ArrayList<String>();
 		
@@ -210,21 +205,21 @@ public class InsertTimeController
 				catch(Exception e)
 				{	
 					Logger.error(e);
-					AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Fehler beim Speichern des Eintrags.", icon, stage, null, false);									
-				}				
-				
-				AlertGenerator.showAlert(AlertType.INFORMATION, "Gespeichert", "", "Der Eintrag wurde erfolgreich gespeichert.", icon, stage, null, false);				
+					Alerts.getInstance().createAlert(AlertType.ERROR, "Fehler", "Fehler beim Speichern des Eintrags.", stage);
+				}
+
+				Alerts.getInstance().createAlert(AlertType.INFORMATION, "Gespeichert", "Der Eintrag wurde erfolgreich gespeichert.", stage);
 				stage.close();
 				controller.loadAll();				
 			}
 			else
 			{
-				AlertGenerator.showAlert(AlertType.WARNING, "Warnung", "", "Endzeit muss vor Startzeit liegen.", icon, stage, null, false);
+				Alerts.getInstance().createAlert(AlertType.WARNING, "Warnung", "Endzeit muss vor Startzeit liegen.", stage);
 			}
 		}
 		else
 		{
-			AlertGenerator.showAlert(AlertType.WARNING, "Warnung", "", "Die Felder für Projekt und Task dürfen nicht leer sein.", icon, stage, null, false);
+			Alerts.getInstance().createAlert(AlertType.WARNING, "Warnung", "Die Felder für Projekt und Task dürfen nicht leer sein.", stage);
 		}
 	}
 	
@@ -399,7 +394,7 @@ public class InsertTimeController
 		
 		Duration d= Duration.between(dateTime, dateTime2);
 		
-		labelDuration.setText(ConvertTo.ConvertSecondsToTime(d.getSeconds()));		
+		labelDuration.setText(ConvertTo.ConvertSecondsToTime(d.getSeconds()));
 	}
 	
 	public boolean isEndDateAfterStartDate()
diff --git a/src/main/java/de/deadlocker8/smarttime/controller/ProjectController.java b/src/main/java/de/deadlocker8/smarttime/controller/ProjectController.java
index eeb62597c853855f641adf04b81440345285a48c..f20820fcd502e004bbab8733e48bdaadead101e3 100644
--- a/src/main/java/de/deadlocker8/smarttime/controller/ProjectController.java
+++ b/src/main/java/de/deadlocker8/smarttime/controller/ProjectController.java
@@ -1,11 +1,9 @@
 package de.deadlocker8.smarttime.controller;
 
-import java.util.ArrayList;
-import java.util.Collections;
-
 import de.deadlocker8.smarttime.core.SQL;
 import de.deadlocker8.smarttime.core.Settings;
 import de.deadlocker8.smarttime.core.Utils;
+import de.thecodelabs.utils.ui.Alerts;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 import javafx.event.ActionEvent;
@@ -15,7 +13,9 @@ import javafx.scene.control.Button;
 import javafx.scene.control.ComboBox;
 import javafx.scene.image.Image;
 import javafx.stage.Stage;
-import tools.AlertGenerator;
+
+import java.util.ArrayList;
+import java.util.Collections;
 
 /**
  * Controllerklasse für das Projektfenster
@@ -98,7 +98,7 @@ public class ProjectController
 
 		if(project == null || project.equals("") || task == null || task.equals(""))
 		{
-			AlertGenerator.showAlert(AlertType.WARNING, "Warnung", "", "Die Felder dürfen nicht leer sein.", icon, stage, null, false);
+			Alerts.getInstance().createAlert(AlertType.WARNING, "Warnung", "Die Felder dürfen nicht leer sein.", stage);
 		}
 		else
 		{
diff --git a/src/main/java/de/deadlocker8/smarttime/controller/ReportController.java b/src/main/java/de/deadlocker8/smarttime/controller/ReportController.java
index 14f39099def53f6f624f8c98661fbf87ee5d3499..fea78e84ad0ec676228deb46f6b340ec43947cfa 100644
--- a/src/main/java/de/deadlocker8/smarttime/controller/ReportController.java
+++ b/src/main/java/de/deadlocker8/smarttime/controller/ReportController.java
@@ -6,6 +6,8 @@ import java.util.Collections;
 import de.deadlocker8.smarttime.core.SQL;
 import de.deadlocker8.smarttime.core.Settings;
 import de.deadlocker8.smarttime.core.Utils;
+import de.thecodelabs.logger.Logger;
+import de.thecodelabs.utils.ui.Alerts;
 import javafx.fxml.FXML;
 import javafx.scene.control.Alert.AlertType;
 import javafx.scene.control.CheckBox;
@@ -15,8 +17,6 @@ import javafx.scene.control.RadioButton;
 import javafx.scene.control.ToggleGroup;
 import javafx.scene.image.Image;
 import javafx.stage.Stage;
-import logger.Logger;
-import tools.AlertGenerator;
 
 public class ReportController
 {
@@ -133,13 +133,13 @@ public class ReportController
 		String project = comboBoxProject.getValue();
 		if(project == null || project.equals(""))
 		{
-			AlertGenerator.showAlert(AlertType.WARNING, "Warnung", "", "Bitte wähle ein Projekt aus", icon, stage, null, false);
+			Alerts.getInstance().createAlert(AlertType.WARNING, "Warnung", "Bitte wähle ein Projekt aus", stage);
 			return;
 		}
 		
 		if(!project.equals(ALL_PROJECTS) && getNumberOfActivatedTasks() == 0)
 		{
-			AlertGenerator.showAlert(AlertType.WARNING, "Warnung", "", "Bitte wähle mindestens einen Task aus aus", icon, stage, null, false);
+			Alerts.getInstance().createAlert(AlertType.WARNING, "Warnung", "Bitte wähle mindestens einen Task aus", stage);
 			return;
 		}
 		
diff --git a/src/main/java/de/deadlocker8/smarttime/controller/TimePickerController.java b/src/main/java/de/deadlocker8/smarttime/controller/TimePickerController.java
index e538f7441c4c73cc67c3efdaa57d97f128b8a4d7..37e8e86781cde9205d8544bee63ef577c65d0be4 100644
--- a/src/main/java/de/deadlocker8/smarttime/controller/TimePickerController.java
+++ b/src/main/java/de/deadlocker8/smarttime/controller/TimePickerController.java
@@ -1,8 +1,7 @@
 package de.deadlocker8.smarttime.controller;
 
-import java.net.URL;
-import java.util.ResourceBundle;
-
+import de.thecodelabs.utils.ui.icon.FontAwesomeType;
+import de.thecodelabs.utils.ui.icon.FontIcon;
 import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
 import javafx.fxml.FXML;
@@ -13,8 +12,9 @@ import javafx.scene.control.Label;
 import javafx.scene.layout.HBox;
 import javafx.scene.layout.VBox;
 import javafx.scene.paint.Color;
-import fontAwesome.FontIcon;
-import fontAwesome.FontIconType;
+
+import java.net.URL;
+import java.util.ResourceBundle;
 
 public class TimePickerController implements Initializable
 {
@@ -93,11 +93,11 @@ public class TimePickerController implements Initializable
 	@Override
 	public void initialize(URL location, ResourceBundle resources)
 	{
-		FontIcon arrowUp = new FontIcon(FontIconType.ARROW_UP);
+		FontIcon arrowUp = new FontIcon(FontAwesomeType.ARROW_UP);
 		arrowUp.setSize(10);
 		arrowUp.setColor(Color.web("#000000"));
 		
-		FontIcon arrowDown = new FontIcon(FontIconType.ARROW_DOWN);
+		FontIcon arrowDown = new FontIcon(FontAwesomeType.ARROW_DOWN);
 		arrowDown.setSize(10);
 		arrowDown.setColor(Color.web("#000000"));
 		
@@ -133,11 +133,11 @@ public class TimePickerController implements Initializable
 		
 	//VBoxMinutes
 		
-		arrowUp = new FontIcon(FontIconType.ARROW_UP);
+		arrowUp = new FontIcon(FontAwesomeType.ARROW_UP);
 		arrowUp.setSize(10);
 		arrowUp.setColor(Color.web("#000000"));
 		
-		arrowDown = new FontIcon(FontIconType.ARROW_DOWN);
+		arrowDown = new FontIcon(FontAwesomeType.ARROW_DOWN);
 		arrowDown.setSize(10);
 		arrowDown.setColor(Color.web("#000000"));
 		
@@ -171,11 +171,11 @@ public class TimePickerController implements Initializable
 		vboxMinutes.setAlignment(Pos.CENTER);
 		
 	//VBoxSeconds
-		arrowUp = new FontIcon(FontIconType.ARROW_UP);
+		arrowUp = new FontIcon(FontAwesomeType.ARROW_UP);
 		arrowUp.setSize(10);
 		arrowUp.setColor(Color.web("#000000"));
 		
-		arrowDown = new FontIcon(FontIconType.ARROW_DOWN);
+		arrowDown = new FontIcon(FontAwesomeType.ARROW_DOWN);
 		arrowDown.setSize(10);
 		arrowDown.setColor(Color.web("#000000"));
 		
diff --git a/src/main/java/de/deadlocker8/smarttime/core/ConvertTo.java b/src/main/java/de/deadlocker8/smarttime/core/ConvertTo.java
new file mode 100644
index 0000000000000000000000000000000000000000..73fa03bc2126082d1b9f2a00f5d28324758ecf94
--- /dev/null
+++ b/src/main/java/de/deadlocker8/smarttime/core/ConvertTo.java
@@ -0,0 +1,162 @@
+package de.deadlocker8.smarttime.core;
+
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import javafx.scene.paint.Color;
+
+/**
+ * stellt Methoden zur Konvertierung von Einheiten zur Verfügung
+ *
+ * @author Robert
+ *
+ */
+public class ConvertTo
+{
+	/**
+	 * Konvertiert Millisekunden in Stunden, Minuten und Sekunden
+	 *
+	 * @param millis
+	 *            long - Millisekunden
+	 * @return String - Stunden + Minuten + Sekunden
+	 */
+	public static String ConvertMillisToTime(long millis)
+	{
+		long sek = (millis / 1000) % 60;
+		long min = (millis / (1000 * 60)) % 60;
+		long hour = (millis / (1000 * 60 * 60));
+
+		return hour + " h  " + min + " min  " + sek + " sek";
+	}
+
+	/**
+	 * Konvertiert Sekunden in Stunden, Minuten und Sekunden
+	 *
+	 * @param seconds
+	 *            long - Sekunden
+	 * @return String - Stunden + Minuten + Sekunden
+	 */
+	public static String ConvertSecondsToTime(long seconds)
+	{
+		long sek = seconds % 60;
+		long min = seconds / 60 % 60;
+		long hour = seconds / (60 * 60);
+
+		return hour + " h " + min + " min " + sek + " sek";
+	}
+
+	/**
+	 * Konvertiert Sekunden in Minuten und Sekunden
+	 *
+	 * @param seconds
+	 *            long - Sekunden
+	 * @return String - Minuten + Sekunden
+	 */
+	public static String ConvertMillisToMinutesAndSeconds(long millis)
+	{
+		long sek = (millis / 1000) % 60;
+		long min = (millis / 1000) / 60;
+
+		return min + ":" + String.format("%02d", sek);
+	}
+
+	/**
+	 * Konvertiert Millisekunden in Datum und Uhrzeit
+	 *
+	 * @param millis
+	 *            long - Millisekunden
+	 * @return String - dd.MM.yyyy-hh:mm:ss.SSS
+	 */
+	public static String ConvertMillisToDateAndTime(long millis)
+	{
+		Date date = new Date(millis);
+
+		DateFormat formatter = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss.SSS");
+		return formatter.format(date);
+	}
+
+	/**
+	 * Konvertiert einen Timestamp zurück in Millisekunden
+	 *
+	 * @param time
+	 *            String - Timestamp
+	 * @return long - Millisekunden
+	 */
+	public static long ConvertTimestampToMillis(String time)
+	{
+		try
+		{
+			Timestamp timestamp = Timestamp.valueOf(time);
+			return timestamp.getTime();
+		}
+		catch(IllegalArgumentException e)
+		{
+			System.err.println("Falsches Eingabeformat \nString muss folgende Struktur haben: yyyy-mm-dd hh:mm:ss[.SSSSSSSSS]");
+		}
+		return 0;
+	}
+
+	/**
+	 * Konvertiert Bytes zu MB, KB und Bytes
+	 *
+	 * @param bytes
+	 *            long - Bytes
+	 * @return String - Megabyte + Kilobyte + Byte;
+	 */
+	public static String ConvertBytesToDecimalSize(long bytes)
+	{
+		long normal = bytes % 1000;
+		long kilo = (bytes / 1000) % 1000;
+		long mega = (bytes / 1000000) % 1000000;
+
+		return mega + " MB " + kilo + " KB " + normal;
+	}
+
+	/**
+	 * Konvertiert Bytes zu MB, KB und Bytes
+	 *
+	 * @param bytes
+	 *            long - Bytes
+	 * @return String - Megabyte + Kilobyte + Byte;
+	 */
+	public static String ConvertBytesToBinarySize(long bytes)
+	{
+		long normal = bytes % 1024;
+		long kilo = (bytes / 1024) % 1024;
+		long mega = (bytes / 1048576) % 1048576;
+
+		return mega + " MB " + kilo + " KB " + normal;
+	}
+
+	public static String toRGBHex(Color color)
+	{
+		return String.format("#%02X%02X%02X%02X", (int)(color.getRed() * 255), (int)(color.getGreen() * 255), (int)(color.getBlue() * 255), (int)(color.getOpacity() * 255));
+	}
+
+	public static String toRGBHexWithoutOpacity(Color color)
+	{
+		return String.format("#%02X%02X%02X", (int)(color.getRed() * 255), (int)(color.getGreen() * 255), (int)(color.getBlue() * 255));
+	}
+
+	/**
+	 * get an appropriate readable text color for given background color
+	 * @param color - background color
+	 * @return Color - text color
+	 */
+	public static Color getAppropriateTextColor(Color color)
+	{
+		// Counting the perceptive luminance - human eye favors green color...
+		double a = 1 - (0.299 * (int)(color.getRed()*255) + 0.587 * (int)(color.getGreen()*255) + 0.114 * (int)(color.getBlue()*255)) / 255;
+
+		if(a < 0.5)
+		{
+			return Color.BLACK;
+		}
+		else
+		{
+			return Color.WHITE;
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/smarttime/core/Exporter.java b/src/main/java/de/deadlocker8/smarttime/core/Exporter.java
index 3fe6ff79d25c6af9b6e3c374ffc4d14c2aa58b77..f5f11bb43b3e2cee0a7ae68408a274d1d443f90a 100644
--- a/src/main/java/de/deadlocker8/smarttime/core/Exporter.java
+++ b/src/main/java/de/deadlocker8/smarttime/core/Exporter.java
@@ -1,20 +1,19 @@
 package de.deadlocker8.smarttime.core;
 
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.util.ArrayList;
-import java.util.Date;
-
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
-
+import de.thecodelabs.logger.Logger;
+import de.thecodelabs.utils.ui.Alerts;
 import javafx.application.Platform;
 import javafx.scene.control.Alert.AlertType;
 import javafx.scene.image.Image;
 import javafx.stage.Stage;
-import logger.Logger;
-import tools.AlertGenerator;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.Date;
 
 public class Exporter
 {
@@ -59,15 +58,15 @@ public class Exporter
             out.write(allItems.toString());           
             out.close();   
             
-			Platform.runLater(()->{				
-				AlertGenerator.showAlert(AlertType.INFORMATION, "Erfolgreich exportiert", "", "Der Exportvorgang wurde erfolgreich abgeschlossen.", icon, stage, null, false);
+			Platform.runLater(()->{
+				Alerts.getInstance().createAlert(AlertType.INFORMATION, "Erfolgreich exportiert", "Der Exportvorgang wurde erfolgreich abgeschlossen.", stage);
 			});
 		}
 		catch(Exception e)
 		{			
 			Logger.error(e);
 			Platform.runLater(()->{
-				AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Beim Exportieren der Daten ist ein Fehler aufgetreten.", icon, stage, null, false);
+				Alerts.getInstance().createAlert(AlertType.ERROR, "Fehler", "Beim Exportieren der Daten ist ein Fehler aufgetreten.", stage);
 			});
 		}		
 	}	
diff --git a/src/main/java/de/deadlocker8/smarttime/core/Importer.java b/src/main/java/de/deadlocker8/smarttime/core/Importer.java
index f63fad730006d7330a3a5aaa7c121ee82de1065c..3c25f26c02dc59a7e6e89c60de69bfc54b53e417 100644
--- a/src/main/java/de/deadlocker8/smarttime/core/Importer.java
+++ b/src/main/java/de/deadlocker8/smarttime/core/Importer.java
@@ -1,22 +1,21 @@
 package de.deadlocker8.smarttime.core;
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.regex.Pattern;
-
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
-
+import de.thecodelabs.logger.Logger;
+import de.thecodelabs.utils.ui.Alerts;
 import javafx.application.Platform;
 import javafx.scene.control.Alert.AlertType;
 import javafx.scene.image.Image;
 import javafx.stage.Stage;
-import logger.Logger;
-import tools.AlertGenerator;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.regex.Pattern;
 
 public class Importer
 {
@@ -54,15 +53,15 @@ public class Importer
 				sql.insert(o);
 			}
 			
-			Platform.runLater(()->{				
-				AlertGenerator.showAlert(AlertType.INFORMATION, "Erfolgreich importiert", "", "Der Importvorgang wurde erfolgreich abgeschlossen.", icon, stage, null, false);
+			Platform.runLater(()->{
+				Alerts.getInstance().createAlert(AlertType.INFORMATION, "Erfolgreich importiert", "Der Importvorgang wurde erfolgreich abgeschlossen.", stage);
 			});
 		}
 		catch(Exception e)
 		{			
 			Logger.error(e);
 			Platform.runLater(()->{
-				AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Beim Importieren der Daten ist ein Fehler aufgetreten.", icon, stage, null, false);
+				Alerts.getInstance().createAlert(AlertType.ERROR, "Fehler", "Beim Importieren der Daten ist ein Fehler aufgetreten.", stage);
 			});
 		}		
 	}	
@@ -79,15 +78,15 @@ public class Importer
 				currentDB.insert(item);
 			}
 			
-			Platform.runLater(()->{				
-				AlertGenerator.showAlert(AlertType.INFORMATION, "Erfolgreich importiert", "", "Der Importvorgang wurde erfolgreich abgeschlossen.", icon, stage, null, false);
+			Platform.runLater(()->{
+				Alerts.getInstance().createAlert(AlertType.INFORMATION, "Erfolgreich importiert", "Der Importvorgang wurde erfolgreich abgeschlossen.", stage);
 			});
 		}
 		catch(Exception e)
 		{			
 			Logger.error(e);
 			Platform.runLater(()->{
-				AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Beim Importieren der Daten ist ein Fehler aufgetreten.", icon, stage, null, false);
+				Alerts.getInstance().createAlert(AlertType.ERROR, "Fehler", "Beim Importieren der Daten ist ein Fehler aufgetreten.", stage);
 			});
 		}		
 	}
@@ -130,7 +129,7 @@ public class Importer
 		{			
 			Logger.error(e);
 			Platform.runLater(()->{
-				AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Beim Importieren der Daten ist ein Fehler aufgetreten.", icon, stage, null, false);
+				Alerts.getInstance().createAlert(AlertType.ERROR, "Fehler", "Beim Importieren der Daten ist ein Fehler aufgetreten.", stage);
 			});
 		}					
 	}
diff --git a/src/main/java/de/deadlocker8/smarttime/core/LogObject.java b/src/main/java/de/deadlocker8/smarttime/core/LogObject.java
index 8d27fe5b661b6c1a58a7adaaf46a1c43c46948a0..d1aab6e5471033847474bf0a040c64a5c953b135 100644
--- a/src/main/java/de/deadlocker8/smarttime/core/LogObject.java
+++ b/src/main/java/de/deadlocker8/smarttime/core/LogObject.java
@@ -3,7 +3,7 @@ package de.deadlocker8.smarttime.core;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 
-import tools.ConvertTo;
+import de.deadlocker8.smarttime.core.ConvertTo;
 
 /**
  * Klasse "Logobject" - generiert Objekte, die alle wichtigen Eigenschaften für das Logfile enthalten
diff --git a/src/main/java/de/deadlocker8/smarttime/core/Timer.java b/src/main/java/de/deadlocker8/smarttime/core/Timer.java
index 4c21a5e18e6dc323cf9456194cc8bdb31531fd9f..9c0c4c31295eec025ab2a266f3ec109679eca385 100644
--- a/src/main/java/de/deadlocker8/smarttime/core/Timer.java
+++ b/src/main/java/de/deadlocker8/smarttime/core/Timer.java
@@ -5,7 +5,7 @@ import javafx.animation.Timeline;
 import javafx.animation.Animation.Status;
 import javafx.scene.control.Label;
 import javafx.util.Duration;
-import tools.ConvertTo;
+import de.deadlocker8.smarttime.core.ConvertTo;
 
 public class Timer
 {
diff --git a/src/main/java/de/deadlocker8/smarttime/core/Utils.java b/src/main/java/de/deadlocker8/smarttime/core/Utils.java
index fe3725341f821d6c8abaafec6a01c3be7f684738..258b28f2935e616f119a639850dd6fe97f404ac9 100644
--- a/src/main/java/de/deadlocker8/smarttime/core/Utils.java
+++ b/src/main/java/de/deadlocker8/smarttime/core/Utils.java
@@ -6,14 +6,16 @@ import java.io.Reader;
 import java.io.Writer;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.Locale;
 import java.util.ResourceBundle;
 
 import com.google.gson.Gson;
+import de.thecodelabs.utils.io.PathUtils;
+import de.thecodelabs.utils.util.SystemUtils;
 
-import tools.PathUtils;
 
 public class Utils 
 {   
@@ -38,8 +40,9 @@ public class Utils
 		Settings settings;
 		try
 		{
-			Gson gson = new Gson();			
-			Reader reader = Files.newBufferedReader(Paths.get(PathUtils.getOSindependentPath() + bundle.getString("folder") + "/settings.json"), Charset.forName("UTF-8"));
+			Gson gson = new Gson();
+			Path configDir = SystemUtils.getApplicationSupportDirectoryPath(bundle.getString("folder"));
+			Reader reader = Files.newBufferedReader(configDir.resolve("settings.json"), Charset.forName("UTF-8"));
 			settings = gson.fromJson(reader, Settings.class);	
 			reader.close();
 			return settings;
@@ -54,8 +57,10 @@ public class Utils
 	{		
 		Gson gson = new Gson();
 		String jsonString = gson.toJson(settings);
-		PathUtils.checkFolder(new File(PathUtils.getOSindependentPath() + bundle.getString("folder")));
-		Writer writer = Files.newBufferedWriter(Paths.get(PathUtils.getOSindependentPath() + bundle.getString("folder")  + "/settings.json"), Charset.forName("UTF-8"));
+
+		Path configDir = SystemUtils.getApplicationSupportDirectoryPath(bundle.getString("folder"));
+		PathUtils.createDirectoriesIfNotExists(configDir);
+		Writer writer = Files.newBufferedWriter(configDir.resolve("settings.json"), Charset.forName("UTF-8"));
 		writer.write(jsonString);
 		writer.close();
 	}
diff --git a/src/main/java/de/deadlocker8/smarttime/main/Main.java b/src/main/java/de/deadlocker8/smarttime/main/Main.java
index 9afe3731ec4338d30924b59b4d7d5a3ea7829edf..1ce0c54b1ba4ea551644573573398a330f6d5eb9 100644
--- a/src/main/java/de/deadlocker8/smarttime/main/Main.java
+++ b/src/main/java/de/deadlocker8/smarttime/main/Main.java
@@ -1,10 +1,15 @@
 package de.deadlocker8.smarttime.main;
 
-import java.io.File;
-import java.util.Locale;
-import java.util.ResourceBundle;
-
 import de.deadlocker8.smarttime.controller.Controller;
+import de.thecodelabs.logger.FileOutputOption;
+import de.thecodelabs.logger.LogLevelFilter;
+import de.thecodelabs.logger.Logger;
+import de.thecodelabs.utils.application.ApplicationUtils;
+import de.thecodelabs.utils.application.container.PathType;
+import de.thecodelabs.utils.io.PathUtils;
+import de.thecodelabs.utils.ui.Alerts;
+import de.thecodelabs.utils.ui.NVCStage;
+import de.thecodelabs.utils.util.SystemUtils;
 import javafx.application.Application;
 import javafx.event.EventHandler;
 import javafx.fxml.FXMLLoader;
@@ -14,10 +19,10 @@ import javafx.scene.control.Alert.AlertType;
 import javafx.scene.image.Image;
 import javafx.stage.Stage;
 import javafx.stage.WindowEvent;
-import logger.FileOutputMode;
-import logger.Logger;
-import tools.AlertGenerator;
-import tools.PathUtils;
+
+import java.util.Locale;
+import java.util.Optional;
+import java.util.ResourceBundle;
 
 
 public class Main extends Application
@@ -26,9 +31,9 @@ public class Main extends Application
 	public void start(Stage stage)
 	{
 		try
-		{			
+		{
 			FXMLLoader loader = new FXMLLoader(getClass().getResource("/de/deadlocker8/smarttime/fxml/MainGUI.fxml"));
-			Parent root = (Parent)loader.load();
+			Parent root = (Parent) loader.load();
 
 			Scene scene = new Scene(root, 800, 800);
 			scene.getStylesheets().add("/de/deadlocker8/smarttime/css/application.css");
@@ -37,8 +42,8 @@ public class Main extends Application
 			stage.setResizable(true);
 			stage.setTitle("SmartTime");
 			stage.setScene(scene);
-			
-			Controller controller = (Controller)loader.getController();			
+
+			Controller controller = (Controller) loader.getController();
 			controller.init(stage);
 
 			stage.getIcons().add(new Image("/de/deadlocker8/smarttime/icon.png"));
@@ -52,8 +57,8 @@ public class Main extends Application
 				{
 					if(controller.isTimerRunning())
 					{
-						AlertGenerator.showAlert(AlertType.WARNING, "Warnung", "", "Die Stoppuhr läuft noch!", new Image("/de/deadlocker8/smarttime/icon.png"), stage, null, false);
-						
+						Alerts.getInstance().createAlert(AlertType.WARNING, "Warnung", "Die Stoppuhr läuft noch!", stage);
+
 						// "schluckt" die Aufforderung das Fenster zu schließen
 						// (Fenster wird dadurch nicht geschlossen)
 						we.consume();
@@ -70,23 +75,35 @@ public class Main extends Application
 			Logger.error(e);
 		}
 	}
-	
+
 	@Override
-	public void init() throws Exception
+	public void init()
 	{
 		ResourceBundle bundle = ResourceBundle.getBundle("de/deadlocker8/smarttime/", Locale.GERMANY);
-		
+
 		Parameters params = getParameters();
-		String logLevelParam = params.getNamed().get("loglevel");		
-		Logger.setLevel(logLevelParam);	
-		
-		File logFolder = new File(PathUtils.getOSindependentPath() + "/Deadlocker/" + bundle.getString("app.name"));			
-		PathUtils.checkFolder(logFolder);
-		Logger.enableFileOutput(logFolder, System.out, System.err, FileOutputMode.COMBINED);
-		
-		Logger.appInfo(bundle.getString("app.name"), bundle.getString("version.name"), bundle.getString("version.code"), bundle.getString("version.date"));		
+		final Optional<String> isDebugOptional = params.getUnnamed().stream()
+				.filter(param -> param.contains("debug"))
+				.findAny();
+
+		final boolean isDebug = isDebugOptional.isPresent();
+
+		Logger.init(SystemUtils.getApplicationSupportDirectoryPath("Deadlocker", bundle.getString("app.name")));
+		if(isDebug)
+		{
+			NVCStage.setDisabledSizeLoading(true);
+			Logger.setLevelFilter(LogLevelFilter.DEBUG);
+			Logger.setFileOutput(FileOutputOption.DISABLED);
+		}
+		else
+		{
+			Logger.setFileOutput(FileOutputOption.COMBINED);
+		}
+		Logger.info("Logging initialized (Running in LogLevel: {0})", Logger.getLevelFilter().toString());
+
+		Logger.appInfo(bundle.getString("app.name"), bundle.getString("version.name"), bundle.getString("version.code"), bundle.getString("version.date"));
 	}
-	
+
 	public static void main(String[] args)
 	{
 		launch(args);
diff --git a/src/main/resources/de/deadlocker8/smarttime/_de.properties b/src/main/resources/de/deadlocker8/smarttime/_de.properties
index e081845078ba700c2aaab359f3d823d9d3a85220..bedddf2ee172c6a579e9fb2db00bca55d3758c14 100644
--- a/src/main/resources/de/deadlocker8/smarttime/_de.properties
+++ b/src/main/resources/de/deadlocker8/smarttime/_de.properties
@@ -1,7 +1,7 @@
 app.name=SmartTime
-version.code=32
-version.name=5.1.2
-version.date=05.06.17
+version.code=33
+version.name=6.0.0
+version.date=23.04.21
 
 folder=Deadlocker/SmartTime
 credits=Icon made by Vectors Market from www.flaticon.com (licensed by CC 3.0 BY)
\ No newline at end of file