diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 39f66fe..f6b00ce 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -34,6 +34,10 @@
             android:name=".ElementActivity"
             android:label="@string/title_activity_element" >
         </activity>
+        <activity
+            android:name=".SQLActivity"
+            android:label="@string/title_activity_sql">
+        </activity>
     </application>
 
     <uses-permission android:name="android.permission.INTERNET" />
diff --git a/app/src/main/java/info/nerull7/mysqlbrowser/ListActivity.java b/app/src/main/java/info/nerull7/mysqlbrowser/ListActivity.java
index e2863fd..c88c75f 100644
--- a/app/src/main/java/info/nerull7/mysqlbrowser/ListActivity.java
+++ b/app/src/main/java/info/nerull7/mysqlbrowser/ListActivity.java
@@ -33,7 +33,7 @@ public class ListActivity extends Activity {
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
-        getMenuInflater().inflate(R.menu.main, menu);
+        getMenuInflater().inflate(R.menu.logged, menu);
         return true;
     }
 
@@ -47,6 +47,8 @@ public class ListActivity extends Activity {
         if (id == R.id.action_settings) {
             Static.startSettings(this);
             return true;
+        } else if (id == R.id.action_sql){
+            Static.startSQL(this);
         }
         return super.onOptionsItemSelected(item);
     }
diff --git a/app/src/main/java/info/nerull7/mysqlbrowser/SQLActivity.java b/app/src/main/java/info/nerull7/mysqlbrowser/SQLActivity.java
new file mode 100644
index 0000000..396ce94
--- /dev/null
+++ b/app/src/main/java/info/nerull7/mysqlbrowser/SQLActivity.java
@@ -0,0 +1,22 @@
+package info.nerull7.mysqlbrowser;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+/**
+ * Created by nerull7 on 30.09.14.
+ */
+public class SQLActivity extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_sql);
+
+        if (savedInstanceState == null) {
+            getFragmentManager().beginTransaction()
+                    .add(R.id.container, new SQLFragment())
+                    .commit();
+        }
+    }
+
+}
diff --git a/app/src/main/java/info/nerull7/mysqlbrowser/SQLFragment.java b/app/src/main/java/info/nerull7/mysqlbrowser/SQLFragment.java
new file mode 100644
index 0000000..0ba7079
--- /dev/null
+++ b/app/src/main/java/info/nerull7/mysqlbrowser/SQLFragment.java
@@ -0,0 +1,72 @@
+package info.nerull7.mysqlbrowser;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.content.Context;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+
+/**
+ * Created by nerull7 on 30.09.14.
+ */
+public class SQLFragment extends Fragment{
+    private EditText sqlEditText;
+    private InputMethodManager inputMethodManager;
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+        View rootView = inflater.inflate(R.layout.fragment_sql, container, false);
+        sqlEditText = (EditText) rootView.findViewById(R.id.sqlQueryText);
+        setHasOptionsMenu(true);
+        return rootView;
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+        inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
+        inputMethodManager.showSoftInput(sqlEditText, InputMethodManager.SHOW_FORCED);
+        sqlEditText.requestFocus();
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()){
+            case R.id.action_execute:
+                actionExecute();
+                break;
+            case R.id.action_cancel:
+                actionCancel();
+                break;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        inflater.inflate(R.menu.sql, menu);
+        super.onCreateOptionsMenu(menu, inflater);
+    }
+
+    private void actionCancel(){
+        inputMethodManager.hideSoftInputFromWindow(sqlEditText.getWindowToken(), 0);
+        getActivity().finish();
+    }
+
+    private void actionExecute(){
+        String sqlQuery = String.valueOf(sqlEditText.getText());
+        Log.d("SQLQUERY", sqlQuery);
+
+        Static.asyncDatabaseConnector.setOnPostExecuteListener(null);
+        Static.asyncDatabaseConnector.executeSQL(null /*FIXME*/, sqlQuery);
+    }
+}
diff --git a/app/src/main/java/info/nerull7/mysqlbrowser/Static.java b/app/src/main/java/info/nerull7/mysqlbrowser/Static.java
index 6e59148..01d7d35 100644
--- a/app/src/main/java/info/nerull7/mysqlbrowser/Static.java
+++ b/app/src/main/java/info/nerull7/mysqlbrowser/Static.java
@@ -51,4 +51,9 @@ public class Static {
         builder.create();
         builder.show();
     }
+
+    public static void startSQL(Context context) {
+        Intent intent = new Intent(context, SQLActivity.class);
+        context.startActivity(intent);
+    }
 }
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 277dbb7..42a8e04 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.content.res.Resources;
 import android.os.AsyncTask;
+import android.util.Log;
 
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -37,6 +38,7 @@ public class AsyncDatabaseConnector {
     public static final String ACTION_ADD_ELEMENT = "addelement";
     public static final String ACTION_UPDATE_ELEMENT = "updateelement";
     public static final String ACTION_REMOVE_ELEMENT = "removeelement";
+    public static final String ACTION_SQL_QUERY = "query";
 
     private String login;
     private String password;
@@ -339,6 +341,44 @@ public class AsyncDatabaseConnector {
         downloader.execute(request);
     }
 
+    public void executeSQL(String database, String query){
+        ArrayList<String> args = new ArrayList();
+        ArrayList<String> values = new ArrayList();
+        final Request request;
+
+        if(database!=null){
+            args.add("d");
+            values.add(database);
+        }
+        args.add("q");
+        values.add(query);
+
+        request = actionUrlBuilder(ACTION_SQL_QUERY, args, values);
+
+        Downloader downloader = new Downloader(new Downloader.OnFinishedListener() {
+            @Override
+            public void onFinished(String data, String error) {
+                String []response = data.split("\n");
+
+                List<String>headerList = null;
+                try {
+                    headerList = parseListFromJSON(response[1]);
+                } catch (JSONException e) { e.printStackTrace(); }
+                if(listReturnListener!=null) {
+                    listReturnListener.onListReturn(headerList);
+                }
+
+                List<List<String>> dataMatrix = null;
+                try {
+                    dataMatrix = parseMatrixFromJSON(response[2]);
+                } catch (JSONException e) { e.printStackTrace(); }
+                if(matrixReturnListener!=null)
+                    matrixReturnListener.onMatrixReturn(dataMatrix);
+            }
+        }, onPostExecuteListener, resources);
+        downloader.execute(request);
+    }
+
     public void setBooleanReturnListener(BooleanReturnListener booleanReturnListener){
         this.booleanReturnListener = booleanReturnListener;
     }
@@ -468,14 +508,14 @@ public class AsyncDatabaseConnector {
                 reader = new BufferedReader(new InputStreamReader(in));
                 String line;
                 while ((line = reader.readLine()) != null) {
-                    streamOutput += line;
+                    streamOutput += line + '\n';
                 }
             } finally {
                 if (reader != null) {
                     reader.close();
                 }
             }
-            return streamOutput;
+            return streamOutput.substring(0, streamOutput.length()-1); // Remove last \n
         }
 
         @Override
diff --git a/app/src/main/res/drawable-hdpi/ic_action_file_upload.png b/app/src/main/res/drawable-hdpi/ic_action_file_upload.png
new file mode 100644
index 0000000..4910c3a
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_action_file_upload.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_action_file_upload.png b/app/src/main/res/drawable-mdpi/ic_action_file_upload.png
new file mode 100644
index 0000000..8374b8d
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_action_file_upload.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_action_file_upload.png b/app/src/main/res/drawable-xhdpi/ic_action_file_upload.png
new file mode 100644
index 0000000..702ea4e
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_action_file_upload.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_file_upload.png b/app/src/main/res/drawable-xxhdpi/ic_action_file_upload.png
new file mode 100644
index 0000000..8e78556
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_action_file_upload.png differ
diff --git a/app/src/main/res/layout/activity_sql.xml b/app/src/main/res/layout/activity_sql.xml
new file mode 100644
index 0000000..43ab1db
--- /dev/null
+++ b/app/src/main/res/layout/activity_sql.xml
@@ -0,0 +1,7 @@
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/container"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="info.nerull7.mysqlbrowser.ListActivity"
+    tools:ignore="MergeRootFrame" />
diff --git a/app/src/main/res/layout/fragment_sql.xml b/app/src/main/res/layout/fragment_sql.xml
new file mode 100644
index 0000000..1298338
--- /dev/null
+++ b/app/src/main/res/layout/fragment_sql.xml
@@ -0,0 +1,24 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="info.nerull7.mysqlbrowser.DatabaseFragment">
+
+
+    <EditText
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:inputType="textMultiLine"
+        android:ems="10"
+        android:id="@+id/sqlQueryText"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentRight="true"
+        android:layout_alignParentEnd="true"
+        android:gravity="left|top"
+        android:hint="@string/hint_sql_query" >
+        <requestFocus/>
+    </EditText>
+</RelativeLayout>
diff --git a/app/src/main/res/menu/logged.xml b/app/src/main/res/menu/logged.xml
new file mode 100644
index 0000000..5d31f08
--- /dev/null
+++ b/app/src/main/res/menu/logged.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:id="@+id/action_settings"
+        android:title="@string/action_settings"
+        android:orderInCategory="100"
+        android:showAsAction="never" />
+    <item android:id="@+id/action_sql"
+        android:title="@string/sql_query"
+        android:orderInCategory="200"
+        android:showAsAction="never" />
+</menu>
\ No newline at end of file
diff --git a/app/src/main/res/menu/sql.xml b/app/src/main/res/menu/sql.xml
new file mode 100644
index 0000000..5bc3b39
--- /dev/null
+++ b/app/src/main/res/menu/sql.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <item android:id="@+id/action_execute"
+        android:title="@string/action_execute"
+        android:showAsAction="always"
+        android:icon="@drawable/ic_action_file_upload"/>
+
+    <item android:id="@+id/action_cancel"
+        android:title="@string/action_cancel"
+        android:showAsAction="always"
+        android:icon="@drawable/ic_action_delete"/>
+
+</menu>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ec32bc1..d4c83cb 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -53,5 +53,10 @@
     <string name="save_credentials">Save credentials</string>
     <string name="connector_url">Connector URL</string>
     <string name="no_connection">No Internet Connection</string>
+    <string name="sql_query">SQL Query</string>
+    <string name="title_activity_sql">SQL Query</string>
+    <string name="hint_sql_query">SQL Query</string>
+    <string name="action_cancel">Cancel</string>
+    <string name="action_execute">Execute</string>
 
 </resources>