diff --git a/app/src/main/java/info/nerull7/mysqlbrowser/db/AsyncDatabaseConnector.java b/app/src/main/java/info/nerull7/mysqlbrowser/db/AsyncDatabaseConnector.java
index d8a0261..8aeef5c 100644
--- a/app/src/main/java/info/nerull7/mysqlbrowser/db/AsyncDatabaseConnector.java
+++ b/app/src/main/java/info/nerull7/mysqlbrowser/db/AsyncDatabaseConnector.java
@@ -2,6 +2,7 @@ package info.nerull7.mysqlbrowser.db;
 
 import android.os.AsyncTask;
 import android.util.Log;
+import android.widget.ArrayAdapter;
 
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -10,8 +11,10 @@ import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
 import java.net.HttpURLConnection;
 import java.net.URL;
+import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -54,11 +57,32 @@ public class AsyncDatabaseConnector {
         matrixReturnListener=null;
     }
 
-    private String actionUrlBuilder(String action){ // TODO Better UrlBuilder this is shit only for use
+    private String actionUrlBuilder(String action){
         String urlBuilder = url;
         urlBuilder += "?u="+login;
         urlBuilder += "&p="+password;
         urlBuilder += "&a="+action;
+
+        return urlBuilder;
+    }
+
+    private String actionUrlBuilder(String action, String argument, String value){
+        ArrayList<String> arguments = new ArrayList<String>();
+        ArrayList<String> values = new ArrayList<String>();
+        arguments.add(argument);
+        values.add(value);
+        return this.actionUrlBuilder(action, arguments, values);
+    }
+
+    private String actionUrlBuilder(String action, List<String> arguments, List<String> values){ // TODO Better UrlBuilder this is shit only for use
+        String urlBuilder = actionUrlBuilder(action);
+        for (int i = 0; i < arguments.size(); i++) {
+            try {
+                urlBuilder += "&" + arguments.get(i) + "=" + URLEncoder.encode(values.get(i), "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
 //        Log.d("URLBuilder", urlBuilder);
         return urlBuilder;
     }
@@ -147,20 +171,53 @@ public class AsyncDatabaseConnector {
     }
 
     public void getTables(){
-        getList(actionUrlBuilder(ACTION_TABLE_LIST)+"&d="+database);
+        getList(actionUrlBuilder(ACTION_TABLE_LIST, "d", database));
     }
 
     public void getFields(String table){
-        getList(actionUrlBuilder(ACTION_FIELD_LIST)+"&d="+database+"&t="+table);
+        ArrayList<String> args = new ArrayList<String>();
+        ArrayList<String> values = new ArrayList<String>();
+
+        args.add("d");
+        values.add(database);
+
+        args.add("t");
+        values.add(table);
+
+        getList(actionUrlBuilder(ACTION_FIELD_LIST, args, values));
     }
 
     public void getRows(String table, int count, int page){
         int limitStart = (page-1) * count;
-        getMatrix(actionUrlBuilder(ACTION_DATA_MATRIX)+"&d="+database+"&t="+table+"&s="+limitStart+"&l="+count);
+        ArrayList<String> args = new ArrayList<String>();
+        ArrayList<String> values = new ArrayList<String>();
+
+        args.add("d");
+        values.add(database);
+
+        args.add("t");
+        values.add(table);
+
+        args.add("s");
+        values.add(String.valueOf(limitStart));
+
+        args.add("l");
+        values.add(String.valueOf(count));
+
+        getMatrix(actionUrlBuilder(ACTION_DATA_MATRIX, args, values) );
     }
 
     public void getEntriesCount(String table){
-        String urlQuery = actionUrlBuilder(ACTION_ENTRIES_COUNT)+"&d="+database+"&t="+table;
+        ArrayList<String> args = new ArrayList<String>();
+        ArrayList<String> values = new ArrayList<String>();
+
+        args.add("d");
+        values.add(database);
+
+        args.add("t");
+        values.add(table);
+
+        String urlQuery = actionUrlBuilder(ACTION_ENTRIES_COUNT, args, values);
         Downloader downloader = new Downloader(new Downloader.OnFinishedListener() {
             @Override
             public void onFinished(String data, String error) {
@@ -180,6 +237,15 @@ public class AsyncDatabaseConnector {
         JSONArray newValuesJSON = new JSONArray();
         String request;
 
+        ArrayList<String> args = new ArrayList<String>();
+        ArrayList<String> values = new ArrayList<String>();
+
+        args.add("d");
+        values.add(database);
+
+        args.add("t");
+        values.add(table);
+
         for (String aHeader : header) {
             headerJSON.put(aHeader);
         }
@@ -188,14 +254,22 @@ public class AsyncDatabaseConnector {
             newValuesJSON.put(newValue);
         }
 
+        args.add("h");
+        values.add(headerJSON.toString());
+
+        args.add("v");
+        values.add(newValuesJSON.toString());
+
         if(oldValues!=null){
             JSONArray oldValuesJSON = new JSONArray();
             for(int i=0;i<newValues.size();i++){
                 oldValuesJSON.put(oldValues.get(i));
             }
-            request = actionUrlBuilder(ACTION_UPDATE_ELEMENT)+"&d="+database+"&t="+table+"&h="+headerJSON+"&v="+newValuesJSON+"&o="+oldValuesJSON;
+            args.add("o");
+            values.add(oldValuesJSON.toString());
+            request = actionUrlBuilder(ACTION_UPDATE_ELEMENT, args, values);
         } else
-            request = actionUrlBuilder(ACTION_ADD_ELEMENT)+"&d="+database+"&t="+table+"&h="+headerJSON+"&v="+newValuesJSON;
+            request = actionUrlBuilder(ACTION_ADD_ELEMENT, args, values);
 
         Downloader downloader = new Downloader(new Downloader.OnFinishedListener() {
             @Override