diff --git a/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java b/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java
index bda5b7ff175dac16a7559927aa7b25c923e5a4c2..ef980022c8277fc556ac07fa3c62b46e25227e04 100644
--- a/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java
+++ b/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java
@@ -87,7 +87,7 @@ public class DatabaseHandler
 
 		return dateTime;
 	}
-	
+
 	public DateTime getFirstRepeatingPaymentDate()
 	{
 		Statement stmt = null;
@@ -133,11 +133,11 @@ public class DatabaseHandler
 	}
 
 	public int getRestForAllPreviousMonths(int year, int month)
-	{		
+	{
 		DateTimeFormatter formatter = DateTimeFormat.forPattern("MM.yyyy");
 		String dateString = String.valueOf(month) + "." + year;
-		DateTime currentDate = formatter.parseDateTime(dateString);		
-		
+		DateTime currentDate = formatter.parseDateTime(dateString);
+
 		DateTime firstNormalPaymentDate = getFirstNormalPaymentDate();
 		if(firstNormalPaymentDate == null)
 		{
@@ -148,13 +148,13 @@ public class DatabaseHandler
 		{
 			firstRepeatingPaymentDate = currentDate;
 		}
-		
+
 		DateTime firstDate = firstNormalPaymentDate;
 		if(firstRepeatingPaymentDate.isBefore(firstNormalPaymentDate))
 		{
 			firstDate = firstRepeatingPaymentDate;
-		}	
-	
+		}
+
 		if(firstDate.isAfter(currentDate))
 		{
 			return 0;
@@ -163,10 +163,10 @@ public class DatabaseHandler
 		int startYear = firstDate.getYear();
 		int startMonth = firstDate.getMonthOfYear();
 		int totalRest = 0;
-		
+
 		while(startYear < year || startMonth < month)
 		{
-			totalRest += getRest(startYear, startMonth);			
+			totalRest += getRest(startYear, startMonth);
 
 			startMonth++;
 			if(startMonth > 12)
@@ -183,13 +183,13 @@ public class DatabaseHandler
 		ArrayList<Payment> payments = new ArrayList<>();
 		payments.addAll(getPayments(year, month));
 		payments.addAll(getRepeatingPayments(year, month));
-		
+
 		int rest = 0;
 		for(Payment currentPayment : payments)
 		{
 			rest += currentPayment.getAmount();
 		}
-		
+
 		return rest;
 	}
 
@@ -231,16 +231,16 @@ public class DatabaseHandler
 
 		return results;
 	}
-	
+
 	public Category getCategory(int ID)
 	{
 		Statement stmt = null;
-		String query = "SELECT * FROM category WHERE category.ID = " + ID;	
+		String query = "SELECT * FROM category WHERE category.ID = " + ID;
 		Category result = null;
 		try
 		{
 			stmt = connection.createStatement();
-			ResultSet rs = stmt.executeQuery(query);			
+			ResultSet rs = stmt.executeQuery(query);
 			while(rs.next())
 			{
 				int id = rs.getInt("ID");
@@ -270,7 +270,7 @@ public class DatabaseHandler
 
 		return result;
 	}
-	
+
 	public NormalPayment getPayment(int ID)
 	{
 		Statement stmt = null;
@@ -326,13 +326,13 @@ public class DatabaseHandler
 
 			while(rs.next())
 			{
-				int resultID = rs.getInt("ID");				
+				int resultID = rs.getInt("ID");
 				String name = rs.getString("Name");
 				int amount = rs.getInt("amount");
-				String date = rs.getString("Date");				
+				String date = rs.getString("Date");
 				int categoryID = rs.getInt("CategoryID");
 				String description = rs.getString("Description");
-			
+
 				results.add(new NormalPayment(resultID, amount, date, categoryID, name, description));
 			}
 		}
@@ -360,7 +360,8 @@ public class DatabaseHandler
 	public ArrayList<RepeatingPaymentEntry> getRepeatingPayments(int year, int month)
 	{
 		Statement stmt = null;
-		String query = "SELECT repeating_entry.ID, repeating_entry.RepeatingPaymentID, repeating_entry.Date, repeating_payment.Name, repeating_payment.CategoryID, repeating_payment.Amount, repeating_payment.RepeatInterval, repeating_payment.RepeatEndDate, repeating_payment.RepeatMonthDay, repeating_payment.Description FROM repeating_entry, repeating_payment WHERE repeating_entry.RepeatingPaymentID = repeating_payment.ID AND YEAR(repeating_entry.Date) = " + year + " AND MONTH(repeating_entry.Date) = " + month;
+		String query = "SELECT repeating_entry.ID, repeating_entry.RepeatingPaymentID, repeating_entry.Date, repeating_payment.Name, repeating_payment.CategoryID, repeating_payment.Amount, repeating_payment.RepeatInterval, repeating_payment.RepeatEndDate, repeating_payment.RepeatMonthDay, repeating_payment.Description FROM repeating_entry, repeating_payment WHERE repeating_entry.RepeatingPaymentID = repeating_payment.ID AND YEAR(repeating_entry.Date) = "
+				+ year + " AND MONTH(repeating_entry.Date) = " + month;
 
 		ArrayList<RepeatingPaymentEntry> results = new ArrayList<>();
 		try
@@ -371,17 +372,17 @@ public class DatabaseHandler
 			while(rs.next())
 			{
 				int resultID = rs.getInt("ID");
-				int repeatingPaymentID = rs.getInt("repeatingPaymentID");				
+				int repeatingPaymentID = rs.getInt("repeatingPaymentID");
 				String name = rs.getString("Name");
 				String description = rs.getString("Description");
 				int amount = rs.getInt("amount");
-				String date = rs.getString("Date");				
+				String date = rs.getString("Date");
 				int categoryID = rs.getInt("CategoryID");
 				int repeatInterval = rs.getInt("RepeatInterval");
 				String repeatEndDate = rs.getString("RepeatEndDate");
-				int repeatMonthDay = rs.getInt("RepeatMonthDay");		
-			
-				results.add(new RepeatingPaymentEntry(resultID, repeatingPaymentID, date, amount, categoryID, name, description,repeatInterval, repeatEndDate, repeatMonthDay));
+				int repeatMonthDay = rs.getInt("RepeatMonthDay");
+
+				results.add(new RepeatingPaymentEntry(resultID, repeatingPaymentID, date, amount, categoryID, name, description, repeatInterval, repeatEndDate, repeatMonthDay));
 			}
 		}
 		catch(SQLException e)
@@ -404,9 +405,9 @@ public class DatabaseHandler
 
 		return results;
 	}
-	
+
 	public ArrayList<RepeatingPayment> getAllRepeatingPayments()
-	{		
+	{
 		Statement stmt = null;
 		String query = "SELECT * FROM repeating_payment;";
 
@@ -418,15 +419,15 @@ public class DatabaseHandler
 
 			while(rs.next())
 			{
-				int resultID = rs.getInt("ID");				
+				int resultID = rs.getInt("ID");
 				String name = rs.getString("Name");
 				int amount = rs.getInt("amount");
-				String date = rs.getString("Date");		
+				String date = rs.getString("Date");
 				String description = rs.getString("Description");
 				int categoryID = rs.getInt("CategoryID");
 				int repeatInterval = rs.getInt("RepeatInterval");
 				String repeatEndDate = rs.getString("RepeatEndDate");
-				int repeatMonthDay = rs.getInt("RepeatMonthDay");			
+				int repeatMonthDay = rs.getInt("RepeatMonthDay");
 
 				results.add(new RepeatingPayment(resultID, amount, date, categoryID, name, description, repeatInterval, repeatEndDate, repeatMonthDay));
 			}
@@ -451,7 +452,7 @@ public class DatabaseHandler
 
 		return results;
 	}
-	
+
 	public ArrayList<LatestRepeatingPayment> getLatestRepeatingPaymentEntries()
 	{
 		Statement stmt = null;
@@ -466,9 +467,9 @@ public class DatabaseHandler
 			while(rs.next())
 			{
 				int resultID = rs.getInt("ID");
-				int repeatingPaymentID = rs.getInt("repeatingPaymentID");				
+				int repeatingPaymentID = rs.getInt("repeatingPaymentID");
 				String date = rs.getString("LastDate");
-			
+
 				results.add(new LatestRepeatingPayment(resultID, repeatingPaymentID, date));
 			}
 		}
@@ -492,19 +493,19 @@ public class DatabaseHandler
 
 		return results;
 	}
-	
+
 	public RepeatingPayment getRepeatingPayment(int ID)
 	{
 		Statement stmt = null;
-		String query = "SELECT * FROM repeating_payment WHERE ID = " + ID;	
+		String query = "SELECT * FROM repeating_payment WHERE ID = " + ID;
 		RepeatingPayment result = null;
 		try
 		{
 			stmt = connection.createStatement();
-			ResultSet rs = stmt.executeQuery(query);			
+			ResultSet rs = stmt.executeQuery(query);
 			while(rs.next())
 			{
-				int id = rs.getInt("ID");				
+				int id = rs.getInt("ID");
 				int amount = rs.getInt("amount");
 				String date = rs.getString("Date");
 				int categoryID = rs.getInt("CategoryID");
@@ -568,7 +569,7 @@ public class DatabaseHandler
 			}
 		}
 	}
-	
+
 	public void deletePayment(int ID)
 	{
 		Statement stmt = null;
@@ -596,7 +597,7 @@ public class DatabaseHandler
 			}
 		}
 	}
-	
+
 	public void deleteRepeatingPayment(int ID)
 	{
 		Statement stmt = null;
@@ -624,14 +625,14 @@ public class DatabaseHandler
 			}
 		}
 	}
-	
+
 	public void deleteDatabase()
 	{
 		Statement stmt = null;
 		String tableCategory = "DROP TABLE IF EXISTS category;";
 		String tablePayment = "DROP TABLE IF EXISTS payment;";
 		String tableRepeatingPayment = "DROP TABLE IF EXISTS repeating_payment;";
-		String tableRepeatingEntry= "DROP TABLE IF EXISTS repeating_entry;";
+		String tableRepeatingEntry = "DROP TABLE IF EXISTS repeating_entry;";
 		try
 		{
 			stmt = connection.createStatement();
@@ -696,6 +697,35 @@ public class DatabaseHandler
 		}
 	}
 
+	public void importCategory(Category category)
+	{
+		Statement stmt = null;
+		String query = "INSERT INTO category (ID, Name, Color) VALUES('" + category.getID() + "', '" + category.getName() + "' , '" + ConvertTo.toRGBHexWithoutOpacity(category.getColor()) + "') ON DUPLICATE KEY UPDATE Name='" + category.getName() + "', Color='"
+				+ ConvertTo.toRGBHexWithoutOpacity(category.getColor()) + "';";
+		try
+		{
+			stmt = connection.createStatement();
+			stmt.execute(query);
+		}
+		catch(SQLException e)
+		{
+			Logger.error(e);
+		}
+		finally
+		{
+			if(stmt != null)
+			{
+				try
+				{
+					stmt.close();
+				}
+				catch(SQLException e)
+				{
+				}
+			}
+		}
+	}
+
 	public void addNormalPayment(int amount, String date, int categoryID, String name, String description)
 	{
 		Statement stmt = null;
@@ -723,21 +753,58 @@ public class DatabaseHandler
 			}
 		}
 	}
-	
+
+	public void importNormalPayment(NormalPayment payment)
+	{
+		if(payment.getDescription() == null)
+		{
+			payment.setDescription("");
+		}
+
+		Statement stmt = null;
+		String query = "INSERT INTO payment (ID, Amount, Date, CategoryID, Name, Description) VALUES('" + payment.getID() + "', '" + payment.getAmount() + "' , '" + payment.getDate() + "' , '" + payment.getCategoryID() + "' , '" + payment.getName() + "' , '" + payment.getDescription() + "')"
+				+ "ON DUPLICATE KEY UPDATE Amount='" + payment.getAmount() + "', Date='" + payment.getDate() + "', CategoryID='" + payment.getCategoryID() + "', Name='" + payment.getName() + "', Description='" + payment.getDescription() + "';";
+		try
+		{
+			stmt = connection.createStatement();
+			stmt.execute(query);
+		}
+		catch(SQLException e)
+		{
+			Logger.error(e);
+		}
+		finally
+		{
+			if(stmt != null)
+			{
+				try
+				{
+					stmt.close();
+				}
+				catch(SQLException e)
+				{
+				}
+			}
+		}
+	}
+
 	public void addRepeatingPayment(int amount, String date, int categoryID, String name, String description, int repeatInterval, String repeatEndDate, int repeatMonthDay)
 	{
 		Statement stmt = null;
-		String query;		
-		//A is placeholder for empty repeatEndDate
-		if(repeatEndDate.equals("A") || repeatEndDate == null)
-		{			
-			query = "INSERT INTO repeating_payment (Amount, Date, CategoryID, Name, RepeatInterval, RepeatEndDate, RepeatMonthDay, Description) VALUES('" + amount + "' , '" + date + "' , '" + categoryID + "' , '" + name + "' , '" + repeatInterval + "' , NULL , '" + repeatMonthDay + "' , '" + description + "');";
+		String query;
+		String correctRepeatEndDate = repeatEndDate;
+		if(correctRepeatEndDate == null || correctRepeatEndDate.equals("A"))
+		{
+			correctRepeatEndDate = "NULL";
 		}
 		else
 		{
-			query = "INSERT INTO repeating_payment (Amount, Date, CategoryID, Name, RepeatInterval, RepeatEndDate, RepeatMonthDay, Description) VALUES('" + amount + "' , '" + date + "' , '" + categoryID + "' , '" + name + "' , '" + repeatInterval + "' , '" + repeatEndDate + "' , '" + repeatMonthDay + "' , '" + description + "');";
+			correctRepeatEndDate = "'" + correctRepeatEndDate + "'";
 		}
-		
+
+		query = "INSERT INTO repeating_payment (Amount, Date, CategoryID, Name, RepeatInterval, RepeatEndDate, RepeatMonthDay, Description) VALUES('" + amount + "' , '" + date + "' , '" + categoryID + "' , '" + name + "' , '" + repeatInterval + "' , " + correctRepeatEndDate + " , '" + repeatMonthDay
+				+ "' , '" + description + "');";
+
 		try
 		{
 			stmt = connection.createStatement();
@@ -761,12 +828,59 @@ public class DatabaseHandler
 			}
 		}
 	}
-	
+
+	public void importRepeatingPayment(RepeatingPayment payment)
+	{
+		Statement stmt = null;
+		String query;
+		// A is placeholder for empty repeatEndDate
+		String repeatEndDate = payment.getRepeatEndDate();
+		if(repeatEndDate == null || repeatEndDate.equals("A"))
+		{
+			repeatEndDate = "NULL";
+		}
+		else
+		{
+			repeatEndDate = "'" + repeatEndDate + "'";
+		}
+
+		if(payment.getDescription() == null)
+		{
+			payment.setDescription("");
+		}
+
+		query = "INSERT INTO repeating_payment (ID, Amount, Date, CategoryID, Name, RepeatInterval, RepeatEndDate, RepeatMonthDay, Description) VALUES('" + payment.getID() + "', '" + payment.getAmount() + "' , '" + payment.getDate() + "' , '" + payment.getCategoryID() + "' , '" + payment.getName()
+				+ "' , '" + payment.getRepeatInterval() + "' ," + repeatEndDate + ", '" + payment.getRepeatMonthDay() + "' , '" + payment.getDescription() + "')" + " ON DUPLICATE KEY UPDATE " + "Amount='" + payment.getAmount() + "', Date='" + payment.getDate() + "', CategoryID='"
+				+ payment.getCategoryID() + "', Name='" + payment.getName() + "', RepeatInterval='" + payment.getRepeatInterval() + "', RepeatEndDate=" + repeatEndDate + ", RepeatMonthDay='" + payment.getRepeatMonthDay() + "', Description='" + payment.getDescription() + "';";
+		try
+		{
+			stmt = connection.createStatement();
+			stmt.execute(query);
+		}
+		catch(SQLException e)
+		{
+			Logger.error(e);
+		}
+		finally
+		{
+			if(stmt != null)
+			{
+				try
+				{
+					stmt.close();
+				}
+				catch(SQLException e)
+				{
+				}
+			}
+		}
+	}
+
 	public void addRepeatingPaymentEntry(int repeatingPaymentID, String date)
 	{
 		Statement stmt = null;
-		String query;		
-		query = "INSERT INTO repeating_entry (RepeatingPaymentID, Date) VALUES('" +  repeatingPaymentID + "' , '" + date + "');";
+		String query;
+		query = "INSERT INTO repeating_entry (RepeatingPaymentID, Date) VALUES('" + repeatingPaymentID + "' , '" + date + "');";
 		try
 		{
 			stmt = connection.createStatement();
@@ -820,8 +934,8 @@ public class DatabaseHandler
 				}
 			}
 		}
-	}	
-	
+	}
+
 	public void updateNormalPayment(int ID, int amount, String date, int categoryID, String name, String description)
 	{
 		Statement stmt = null;
diff --git a/src/de/deadlocker8/budgetmasterserver/main/DatabaseImporter.java b/src/de/deadlocker8/budgetmasterserver/main/DatabaseImporter.java
index 9cc06ac18c1ba34b18de4c04089534e6e6193623..d76aaa646bc879bd0965e175fe2baa311cb5d82b 100644
--- a/src/de/deadlocker8/budgetmasterserver/main/DatabaseImporter.java
+++ b/src/de/deadlocker8/budgetmasterserver/main/DatabaseImporter.java
@@ -1,44 +1,48 @@
 package de.deadlocker8.budgetmasterserver.main;
 
-import java.sql.Connection;
-import java.sql.DriverManager;
+import java.util.ArrayList;
 
-import logger.Logger;
+import de.deadlocker8.budgetmaster.logic.Category;
+import de.deadlocker8.budgetmaster.logic.NormalPayment;
+import de.deadlocker8.budgetmaster.logic.RepeatingPayment;
 
 public class DatabaseImporter
 {
-	private Connection connection;
+	private DatabaseHandler handler;
 	
-	public DatabaseImporter(Settings settings) throws IllegalStateException
+	public DatabaseImporter(DatabaseHandler handler) throws IllegalStateException
     {
-        try
-        {
-            this.connection = DriverManager.getConnection(settings.getDatabaseUrl() + settings.getDatabaseName() + "?useLegacyDatetimeCode=false&serverTimezone=Europe/Berlin", settings.getDatabaseUsername(), settings.getDatabasePassword());
-        }
-        catch(Exception e)
-        {
-            Logger.error(e);
-            throw new IllegalStateException("Cannot connect the database!", e);
-        }
+        this.handler = handler;
     }
 	
 	public void importDatabase(Database database)
-	{
-	   
+	{		
+		importCategories(database.getCategories());
+		importNormalPayments(database.getNormalPayments());
+		importRepeatingPayments(database.getRepeatingPayments());
 	}
 	
-	private void importCategories()
+	private void importCategories(ArrayList<Category> categories)
 	{	   
-        //TODO
+        for(Category currentCategory : categories)
+        {
+        	handler.importCategory(currentCategory);
+        }
 	}
 	
-	private void importNormalPayments()
+	private void importNormalPayments(ArrayList<NormalPayment> normalPayments)
     {      
-        //TODO
+		for(NormalPayment currentPayment : normalPayments)
+        {
+        	handler.importNormalPayment(currentPayment);
+        }
     }
 	
-	private void importRepeatingPayments()
+	private void importRepeatingPayments(ArrayList<RepeatingPayment> repeatingPayments)
     {      
-        //TODO
+		for(RepeatingPayment currentPayment : repeatingPayments)
+        {
+        	handler.importRepeatingPayment(currentPayment);
+        }
     }
 }
\ No newline at end of file
diff --git a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java
index 21a9a66b34be6438dcc1d998b638af8380d2d4ad..93e6a78c3d1684f9eb5e3214f9a43d5e052f5a41 100644
--- a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java
+++ b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java
@@ -118,7 +118,7 @@ public class SparkServer
 		
 		// Database
 		get("/database", new DatabaseExport(settings, gson));
-		put("/database", new DatabaseImport(handler, settings));
+		put("/database", new DatabaseImport(handler, settings, gson));
 		delete("/database", new DatabaseDelete(handler, settings));
 
 		after((request, response) -> {
diff --git a/src/de/deadlocker8/budgetmasterserver/server/database/DatabaseImport.java b/src/de/deadlocker8/budgetmasterserver/server/database/DatabaseImport.java
index 9d6939017fd00132fbcad613629c9939ae0ee7bd..0ed9793002491e39c6fd0d6f35d7e6236eb98bf0 100644
--- a/src/de/deadlocker8/budgetmasterserver/server/database/DatabaseImport.java
+++ b/src/de/deadlocker8/budgetmasterserver/server/database/DatabaseImport.java
@@ -9,6 +9,7 @@ import org.joda.time.DateTime;
 import com.google.gson.Gson;
 
 import de.deadlocker8.budgetmaster.logic.NormalPayment;
+import de.deadlocker8.budgetmasterserver.main.Database;
 import de.deadlocker8.budgetmasterserver.main.DatabaseHandler;
 import de.deadlocker8.budgetmasterserver.main.DatabaseImporter;
 import de.deadlocker8.budgetmasterserver.main.Settings;
@@ -22,11 +23,13 @@ public class DatabaseImport implements Route
 {
     private DatabaseHandler handler;
     private Settings settings;
+    private Gson gson;
 
-    public DatabaseImport(DatabaseHandler handler, Settings settings)
+    public DatabaseImport(DatabaseHandler handler, Settings settings, Gson gson)
 	{
 	    this.handler = handler;
 		this.settings = settings;
+		this.gson = gson;
 	}
 
     @Override
@@ -37,21 +40,27 @@ public class DatabaseImport implements Route
             halt(400, "Bad Request");
         }
 	    //TODO json input?
+	    String databaseJSON = "";
+	    
 	    
 	    try
 	    {
 	        boolean delete = Boolean.parseBoolean(req.queryMap("delete").value());  
+	       
+	        
 //TODO
 //    		try
-//    		{	
+//    		{		        
+//	        	Database database = gson.fromJson(databaseJSON, Database.class);
+	        
 //    		    if(delete)
-//                {
+//              {
 //                    handler.deleteDatabase();
 //                    handler = new DatabaseHandler(settings); 
-//                }
+//              }
 //    		    
-//    		    DatabaseImporter importer = new DatabaseImporter(settings);	  
-//    		    importer.importDatabase();		    
+//    		    DatabaseImporter importer = new DatabaseImporter(handler);	  
+//    		    importer.importDatabase(database);		    
 //    			return "";
 //    		}
 //    		catch(Exception e)