diff --git a/app/src/main/java/info/nerull7/mysqlbrowser/ElementArrayAdapter.java b/app/src/main/java/info/nerull7/mysqlbrowser/ElementArrayAdapter.java
index 95bcd35..f532ff5 100644
--- a/app/src/main/java/info/nerull7/mysqlbrowser/ElementArrayAdapter.java
+++ b/app/src/main/java/info/nerull7/mysqlbrowser/ElementArrayAdapter.java
@@ -8,6 +8,7 @@ import android.widget.ArrayAdapter;
 import android.widget.EditText;
 import android.widget.TextView;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -46,4 +47,12 @@ public class ElementArrayAdapter extends ArrayAdapter<String> {
 
         return rowView;
     }
+
+    public List<String> getFieldArray(){
+        return fields;
+    }
+
+    public List<String> getValueArray(){
+        return values;
+    }
 }
diff --git a/app/src/main/java/info/nerull7/mysqlbrowser/ElementFragment.java b/app/src/main/java/info/nerull7/mysqlbrowser/ElementFragment.java
index 886ae34..b9cb5c3 100644
--- a/app/src/main/java/info/nerull7/mysqlbrowser/ElementFragment.java
+++ b/app/src/main/java/info/nerull7/mysqlbrowser/ElementFragment.java
@@ -7,14 +7,17 @@ import android.os.Bundle;
 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.widget.ArrayAdapter;
+import android.widget.EditText;
 import android.widget.ListAdapter;
 import android.widget.ListView;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import info.nerull7.mysqlbrowser.db.AsyncDatabaseConnector;
@@ -22,13 +25,13 @@ import info.nerull7.mysqlbrowser.db.AsyncDatabaseConnector;
 /**
  * Created by nerull7 on 2014-08-06.
  */
-public class ElementFragment extends Fragment implements AsyncDatabaseConnector.ListReturnListener {
+public class ElementFragment extends Fragment implements AsyncDatabaseConnector.ListReturnListener, AsyncDatabaseConnector.StringReturnListener {
     public static final String EDIT_ELEMENT = "edit_element";
     public static final String EDIT_LIST = "edit_element_list";
 
     private String databaseName;
     private String tableName;
-    private ListAdapter listAdapter;
+    private ElementArrayAdapter listAdapter;
 
     private ProgressBar progressBar;
     private ListView listView;
@@ -50,6 +53,22 @@ public class ElementFragment extends Fragment implements AsyncDatabaseConnector.
         return rootView;
     }
 
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if(item.getItemId() == R.id.action_save ){
+            List<String> fields = listAdapter.getFieldArray();
+
+            Static.asyncDatabaseConnector.setStringReturnListener(this);
+            if(getArguments().getBoolean(EDIT_ELEMENT))
+                Static.asyncDatabaseConnector.updateElement(tableName, fields, values, getNewValues());
+            else
+                Static.asyncDatabaseConnector.addNewElement(tableName, fields, getNewValues());
+            return true;
+        } else {
+            return super.onOptionsItemSelected(item);
+        }
+    }
+
     private void initArguments() {
         databaseName = getArguments().getString(Static.DATABASE_NAME_ARG);
         tableName = getArguments().getString(Static.TABLE_NAME_ARG);
@@ -76,4 +95,19 @@ public class ElementFragment extends Fragment implements AsyncDatabaseConnector.
         setHasOptionsMenu(true);
     }
 
+    private List<String> getNewValues(){
+        List<String> newValues = new ArrayList<String>();
+
+        for(int i=0; i<listView.getChildCount();i++){
+            EditText editText = (EditText) listView.getChildAt(i).findViewById(R.id.editFieldValue);
+            newValues.add(String.valueOf(editText.getText()));
+        }
+        return newValues;
+    }
+
+    @Override
+    public void onStringReturn(String data) { //TODO Better UI handling
+        Static.showErrorAlert(data,getActivity());
+        getActivity().finish();
+    }
 }
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 2065aea..8ed0c03 100644
--- a/app/src/main/java/info/nerull7/mysqlbrowser/db/AsyncDatabaseConnector.java
+++ b/app/src/main/java/info/nerull7/mysqlbrowser/db/AsyncDatabaseConnector.java
@@ -5,6 +5,7 @@ import android.util.Log;
 
 import org.json.JSONArray;
 import org.json.JSONException;
+import org.json.JSONObject;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -25,6 +26,8 @@ public class AsyncDatabaseConnector {
     public static final String ACTION_FIELD_LIST = "fieldlist";
     public static final String ACTION_ENTRIES_COUNT = "numrows";
     public static final String ACTION_DATA_MATRIX = "getrows";
+    public static final String ACTION_ADD_ELEMENT = "addelement";
+    public static final String ACTION_UPDATE_ELEMENT = "updateelement";
 
     private String login;
     private String password;
@@ -169,6 +172,43 @@ public class AsyncDatabaseConnector {
         downloader.execute(urlQuery);
     }
 
+    public void addNewElement(String table, List<String> header, List<String> values) {
+        this.updateElement(table, header, null, values);
+    }
+
+    public void updateElement(String table, List<String> header, List<String> oldValues, List<String> newValues){
+        JSONArray headerJSON = new JSONArray();
+        JSONArray newValuesJSON = new JSONArray();
+        String request;
+
+        for(int i=0;i<header.size();i++){
+            headerJSON.put(header.get(i));
+        }
+
+        for(int i=0;i<newValues.size();i++){
+            newValuesJSON.put(newValues.get(i));
+        }
+
+        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;
+        } else
+            request = actionUrlBuilder(ACTION_ADD_ELEMENT)+"&d="+database+"&t="+table+"&h="+headerJSON+"&v="+newValuesJSON;
+
+        Downloader downloader = new Downloader(new Downloader.OnFinishedListener() {
+            @Override
+            public void onFinished(String data, String error) {
+                if(stringReturnListener!=null){
+                    stringReturnListener.onStringReturn(data);
+                }
+            }
+        });
+        downloader.execute(request);
+    }
+
     public void setBooleanReturnListener(BooleanReturnListener booleanReturnListener){
         this.booleanReturnListener = booleanReturnListener;
     }
@@ -227,6 +267,8 @@ public class AsyncDatabaseConnector {
             InputStream inputStream = null;
             String response;
 
+            Log.d("URL REQUEST", urlRequest);
+
             HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();  // TODO Handling no connection
             urlConnection.setReadTimeout(READ_TIMEOUT);
             urlConnection.setConnectTimeout(CONNECTION_TIMEOUT);