diff --git a/WarpDrinkApp/.idea/encodings.xml b/WarpDrinkApp/.idea/encodings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..97626ba45445dc9f3afa66e6a149914dc39e3df6
--- /dev/null
+++ b/WarpDrinkApp/.idea/encodings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding">
+    <file url="PROJECT" charset="UTF-8" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/WarpDrinkApp/.idea/gradle.xml b/WarpDrinkApp/.idea/gradle.xml
index 3ec595561ecd27655f5f272d50e9a438d7dccb62..d390b65d4da0514ee615c8f931ca2b2f4495c743 100644
--- a/WarpDrinkApp/.idea/gradle.xml
+++ b/WarpDrinkApp/.idea/gradle.xml
@@ -5,7 +5,7 @@
       <GradleProjectSettings>
         <option name="distributionType" value="LOCAL" />
         <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="gradleHome" value="$APPLICATION_HOME_DIR$/gradle/gradle-2.2.1" />
+        <option name="gradleHome" value="C:\Program Files\Android\Android Studio\gradle\gradle-2.8" />
         <option name="gradleJvm" value="1.7" />
         <option name="modules">
           <set>
diff --git a/WarpDrinkApp/.idea/misc.xml b/WarpDrinkApp/.idea/misc.xml
index f6607a52de32e22ad8d42fadbe325aa1851b208d..1a3eaffb45f4870522a76374f46c26ae8571f727 100644
--- a/WarpDrinkApp/.idea/misc.xml
+++ b/WarpDrinkApp/.idea/misc.xml
@@ -3,6 +3,30 @@
   <component name="EntryPointsManager">
     <entry_points version="2.0" />
   </component>
+  <component name="NullableNotNullManager">
+    <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
+    <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
+    <option name="myNullables">
+      <value>
+        <list size="4">
+          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
+          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
+          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
+          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
+        </list>
+      </value>
+    </option>
+    <option name="myNotNulls">
+      <value>
+        <list size="4">
+          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
+          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
+          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
+          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
+        </list>
+      </value>
+    </option>
+  </component>
   <component name="ProjectLevelVcsManager" settingsEditedManually="false">
     <OptionsSetting value="true" id="Add" />
     <OptionsSetting value="true" id="Remove" />
@@ -13,7 +37,7 @@
     <ConfirmationsSetting value="0" id="Add" />
     <ConfirmationsSetting value="0" id="Remove" />
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="false" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">
diff --git a/WarpDrinkApp/.idea/runConfigurations.xml b/WarpDrinkApp/.idea/runConfigurations.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7f68460d8b38ac04e3a3224d7c79ef719b1991a9
--- /dev/null
+++ b/WarpDrinkApp/.idea/runConfigurations.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RunConfigurationProducerService">
+    <option name="ignoredProducers">
+      <set>
+        <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
+        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
+        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
+      </set>
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/WarpDrinkApp/WarpDrinkApp.iml b/WarpDrinkApp/WarpDrinkApp.iml
index ce931f9ff88cf72ced082490733c00a5b94cf779..4ff09d8a61062cd40c66c1c87a7e8a353d1fc6f4 100644
--- a/WarpDrinkApp/WarpDrinkApp.iml
+++ b/WarpDrinkApp/WarpDrinkApp.iml
@@ -8,7 +8,7 @@
       </configuration>
     </facet>
   </component>
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
     <exclude-output />
     <content url="file://$MODULE_DIR$">
       <excludeFolder url="file://$MODULE_DIR$/.gradle" />
diff --git a/WarpDrinkApp/app/app.iml b/WarpDrinkApp/app/app.iml
index 89bc1db1ddbfd80533e40dcdccf31c7aee452b8e..4fefdc2fca88c2f45b961f7d6ef8e6a958aae205 100644
--- a/WarpDrinkApp/app/app.iml
+++ b/WarpDrinkApp/app/app.iml
@@ -12,10 +12,12 @@
         <option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
         <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
         <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
-        <option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" />
         <option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" />
         <option name="COMPILE_JAVA_TEST_TASK_NAME" value="compileDebugAndroidTestSources" />
-        <option name="TEST_SOURCE_GEN_TASK_NAME" value="generateDebugAndroidTestSources" />
+        <afterSyncTasks>
+          <task>generateDebugAndroidTestSources</task>
+          <task>generateDebugSources</task>
+        </afterSyncTasks>
         <option name="ALLOW_USER_CONFIGURATION" value="false" />
         <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
         <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
@@ -24,7 +26,7 @@
       </configuration>
     </facet>
   </component>
-  <component name="NewModuleRootManager" inherit-compiler-output="false">
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
     <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
     <output-test url="file://$MODULE_DIR$/build/intermediates/classes/androidTest/debug" />
     <exclude-output />
@@ -34,13 +36,13 @@
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/debug" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/androidTest/debug" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
@@ -63,43 +65,41 @@
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/22.2.0/jars" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/22.2.0/jars" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
       <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
       <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
     </content>
     <orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="library" exported="" name="scribe-codepath-0.0.3" level="project" />
+    <orderEntry type="library" exported="" name="httpclient-android-4.3.5.1" level="project" />
     <orderEntry type="library" exported="" name="activeandroid-3.0" level="project" />
-    <orderEntry type="library" exported="" name="jackson-core-2.0.1" level="project" />
     <orderEntry type="library" exported="" name="support-annotations-22.2.0" level="project" />
-    <orderEntry type="library" exported="" name="support-v4-22.2.0" level="project" />
-    <orderEntry type="library" exported="" name="spring-android-rest-template-1.0.1.RELEASE" level="project" />
-    <orderEntry type="library" exported="" name="appcompat-v7-22.2.0" level="project" />
-    <orderEntry type="library" exported="" name="gson-1.7.2" level="project" />
-    <orderEntry type="library" exported="" name="codepath-utils" level="project" />
+    <orderEntry type="library" exported="" name="okio-1.9.0" level="project" />
+    <orderEntry type="library" exported="" name="retrofit-2.0.0-beta2" level="project" />
+    <orderEntry type="library" exported="" name="converter-gson-2.0.0-beta2" level="project" />
     <orderEntry type="library" exported="" name="jackson-databind-2.0.1" level="project" />
-    <orderEntry type="library" exported="" name="httpclient-android-4.3.5.1" level="project" />
     <orderEntry type="library" exported="" name="jackson-annotations-2.0.1" level="project" />
+    <orderEntry type="library" exported="" name="spring-android-rest-template-1.0.1.RELEASE" level="project" />
+    <orderEntry type="library" exported="" name="okhttp-2.7.5" level="project" />
+    <orderEntry type="library" exported="" name="antlr4-runtime-4.5.3" level="project" />
+    <orderEntry type="library" exported="" name="gson-2.7" level="project" />
+    <orderEntry type="library" exported="" name="support-v4-22.2.0" level="project" />
     <orderEntry type="library" exported="" name="spring-android-core-1.0.1.RELEASE" level="project" />
+    <orderEntry type="library" exported="" name="codepath-utils" level="project" />
+    <orderEntry type="library" exported="" name="appcompat-v7-22.2.0" level="project" />
+    <orderEntry type="library" exported="" name="jackson-core-2.0.1" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/WarpDrinkApp/app/build.gradle b/WarpDrinkApp/app/build.gradle
index e2b6e480d2716d4b1bdb9c3b3fa3fca4c8b4d78b..eab9d98131ae70ce68909cad6c405f3629934c2c 100644
--- a/WarpDrinkApp/app/build.gradle
+++ b/WarpDrinkApp/app/build.gradle
@@ -2,7 +2,7 @@ apply plugin: 'com.android.application'
 
 android {
     compileSdkVersion 21
-    buildToolsVersion '23.0.0 rc2'
+    buildToolsVersion '23.0.1'
 
     defaultConfig {
         applicationId "ms.itsecteam.warpdrink"
@@ -32,7 +32,12 @@ dependencies {
     compile 'com.android.support:appcompat-v7:22.2.0'
     compile 'com.fasterxml.jackson.core:jackson-databind:2.0.1'
     compile 'org.springframework.android:spring-android-rest-template:1.0.1.RELEASE'
-    compile 'com.google.code.gson:gson:1.7.2'
     compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
+    compile group: 'com.squareup.retrofit' , name: 'retrofit' , version: '2.0.0-beta2'
+    compile group: 'com.squareup.retrofit' , name: 'converter-gson' , version: '2.0.0-beta2'
+    compile group: 'com.google.code.gson' , name: 'gson' , version: '2.7'
+    compile group: 'com.squareup.okio' , name: 'okio' , version: '1.9.0'
+    compile group: 'com.squareup.okhttp', name: 'okhttp', version: '2.7.5'
+    compile group: 'org.antlr', name: 'antlr4-runtime', version: '4.5.3'
 
 }
diff --git a/WarpDrinkApp/app/src/main/AndroidManifest.xml b/WarpDrinkApp/app/src/main/AndroidManifest.xml
index 4e628c489d480c19bb97cd1851a6c3af686fae61..99c6900a0163c35640748cdfb514ffc3a5d56adb 100644
--- a/WarpDrinkApp/app/src/main/AndroidManifest.xml
+++ b/WarpDrinkApp/app/src/main/AndroidManifest.xml
@@ -2,12 +2,18 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="ms.itsecteam.warpdrink" >
     <uses-permission android:name="android.permission.INTERNET"></uses-permission>
+    <uses-permission android:name="android.permission.NFC" />
+
+    <uses-feature
+        android:name="android.hardware.nfc"
+        android:required="true" />
     <application
         android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
+        android:largeHeap="true"
         android:name="ms.itsecteam.warpdrink.WarpDrinkApplication"
-        android:theme="@style/AppTheme" >
+        android:theme="@style/AppTheme">
 
 
         <meta-data android:name="AA_DB_NAME" android:value="warpdrink_data.db" />
@@ -19,12 +25,19 @@
             android:name=".MainActivity"
             android:label="@string/app_name"
             android:screenOrientation="landscape"
+            android:windowSoftInputMode="stateVisible"
             >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
+            <intent-filter>
+                <action android:name="android.nfc.action.TECH_DISCOVERED" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.nfc.action.TAG_DISCOVERED"/>
+            </intent-filter>
         </activity>
     </application>
 
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/MainActivity.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/MainActivity.java
index bd2b1bcd097db7b8c1d8b3e005a2ab018b5ea33c..7ed3ff00bd05883b2bcaa665ad48b98dff1d5e20 100644
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/MainActivity.java
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/MainActivity.java
@@ -1,38 +1,43 @@
 package ms.itsecteam.warpdrink;
 
+import android.app.AlertDialog;
+import android.app.PendingIntent;
 import android.content.DialogInterface;
-import android.support.v7.app.ActionBarActivity;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.nfc.NfcAdapter;
+import android.nfc.tech.NfcF;
 import android.os.Bundle;
-import android.view.KeyEvent;
+import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
 import android.view.Menu;
 import android.view.MenuInflater;
 
 import android.view.MenuItem;
 import android.view.View;
+import android.widget.Toast;
 
-
-
-import java.util.List;
-
-import ms.itsecteam.warpdrink.data.objects.User;
+import ms.itsecteam.warpdrink.data.models.local.User;
 
 import ms.itsecteam.warpdrink.dialogs.NewUserDialog;
 import ms.itsecteam.warpdrink.dialogs.SettingsDialog;
+import ms.itsecteam.warpdrink.manager.DataManager;
 import ms.itsecteam.warpdrink.manager.MainManager;
 import ms.itsecteam.warpdrink.manager.UiManager;
 import ms.itsecteam.warpdrink.orderList.Order;
 
 
-public class MainActivity extends ActionBarActivity implements View.OnClickListener { // implements View.OnClickListener, View.OnKeyListener, AdapterView.OnItemClickListener, DialogInterface.OnClickListener {
-
-    private User currentUser;
-    private List<User> users;
+public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
     private MainManager manager;
+    private NfcAdapter nfcAdapter;
+    private PendingIntent mPendingIntent;
+    private IntentFilter[] mIntentFilters;
+    private String[][] mNFCTechLists;
+
     public boolean onCreateOptionsMenu(Menu menu) {
         MenuInflater inflater = getMenuInflater();
         inflater.inflate(R.menu.menu_main, menu);
-
         return true;
     }
 
@@ -40,15 +45,53 @@ public class MainActivity extends ActionBarActivity implements View.OnClickListe
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-
         getWindow().addFlags(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
         setContentView(R.layout.activity_main);
 
         this.manager = MainManager.getInstance();
         this.manager.init(this);
 
+        this.nfcAdapter = NfcAdapter.getDefaultAdapter(this);
+        this.mPendingIntent = PendingIntent.getActivity(this, 0,
+                new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
+        IntentFilter ndefIntent = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
+        try {
+            this.mIntentFilters = new IntentFilter[] { ndefIntent };
+        } catch (Exception e) {
+            Log.e("TagDispatch", e.toString());
+        }
+        mNFCTechLists = new String[][] { new String[] { NfcF.class.getName() } };
+    }
+
+    public void onResume() {
+        super.onResume();
 
+        if (nfcAdapter != null) {
+            nfcAdapter.enableForegroundDispatch(this, mPendingIntent, mIntentFilters, mNFCTechLists);
+        }
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+
+        if (nfcAdapter != null)
+            nfcAdapter.disableForegroundDispatch(this);
+    }
+    protected void onNewIntent(Intent intent) {
+        String card_id = byteArrayToHex(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID));
+        DataManager.getInstance().setLastCardId(card_id);
+        if(this.manager.getCurrentUser() == null) {
+            User u = User.getByCardId(card_id);
+            this.manager.setCurrentUser(u);
+        }
+    }
 
+    public static String byteArrayToHex(byte[] a) {
+        StringBuilder sb = new StringBuilder(a.length * 2);
+        for(byte b: a)
+            sb.append(String.format("%02x", b & 0xff));
+        return sb.toString();
     }
 
     public void onClick(View v) {
@@ -63,6 +106,21 @@ public class MainActivity extends ActionBarActivity implements View.OnClickListe
             case R.id.action_new_user:
                 new NewUserDialog().show();
                 break;
+            case R.id.action_learn_card_id:
+                if (this.manager.getCurrentUser() != null){
+                    new AlertDialog.Builder(this)
+                            .setTitle(this.getResources().getString(R.string.confirm_payment_title))
+                            .setMessage("Bitte die Karte vorhalten und nach dem Ton auf ok drücken.")
+                            .setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                                public void onClick(DialogInterface dialog, int which) {
+                                    MainManager.getInstance().saveCardId();
+                                }
+                            })
+                            .setIcon(android.R.drawable.ic_dialog_alert)
+                            .show();
+                } else {
+                    Toast.makeText(this, "Bitte User auswählen", Toast.LENGTH_LONG).show();
+                }
             default:
                 break;
         }
@@ -79,7 +137,7 @@ public class MainActivity extends ActionBarActivity implements View.OnClickListe
     public boolean onKey(View v, int keyCode, KeyEvent event) {
         if (event.getAction()==KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
            if(this.atxvAdapter.getCount() == 1) {
-               setCurrentUser(DatabaseManager.getInstance().remoteGetUser(((User) this.atxvAdapter.getItem(0)).getUserid()));
+               setCurrentUser(SQLiteService.getInstance().remoteGetUser(((User) this.atxvAdapter.getItem(0)).getUserid()));
                this.atxvName.setText(this.atxvAdapter.getItem(0).toString());
                this.atxvName.dismissDropDown();
            }
@@ -90,7 +148,7 @@ public class MainActivity extends ActionBarActivity implements View.OnClickListe
 
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-        setCurrentUser(DatabaseManager.getInstance().remoteGetUser(((User) this.atxvAdapter.getItem(position)).getUserid()));
+        setCurrentUser(SQLiteService.getInstance().remoteGetUser(((User) this.atxvAdapter.getItem(position)).getUserid()));
     }
 
     @Override
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/WarpDrinkApplication.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/WarpDrinkApplication.java
index b9c47b36f7529eca838258a9222c24bc2b8c681a..e03ffc85b4caad50c8256db35323f6a4052c82a9 100644
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/WarpDrinkApplication.java
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/WarpDrinkApplication.java
@@ -1,19 +1,10 @@
 package ms.itsecteam.warpdrink;
-
-import android.util.Log;
-
 import com.activeandroid.ActiveAndroid;
 
-import ms.itsecteam.warpdrink.manager.MainManager;
-
-/**
- * Created by Chris on 26.06.2015.
- */
 public class WarpDrinkApplication extends com.activeandroid.app.Application  {
     @Override
     public void onCreate() {
         super.onCreate();
-        Log.d("DATABASE", "INIT");
         ActiveAndroid.initialize(this);
     }
 
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/RestService.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/RestService.java
new file mode 100644
index 0000000000000000000000000000000000000000..0789d59bf43ea55091a827d5dacdbe985fe06ca0
--- /dev/null
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/RestService.java
@@ -0,0 +1,32 @@
+package ms.itsecteam.warpdrink.data;
+
+
+import java.util.List;
+
+import ms.itsecteam.warpdrink.data.models.rest.RestProduct;
+import ms.itsecteam.warpdrink.data.models.rest.RestUser;
+import retrofit.Call;
+import retrofit.http.Body;
+import retrofit.http.GET;
+import retrofit.http.POST;
+import retrofit.http.PUT;
+import retrofit.http.Path;
+
+public interface RestService {
+
+    @GET("users/{user}")
+    Call<RestUser> getSingleUser(@Path("user") String userid);
+
+    @GET("users/")
+    Call<List<RestUser>> getAllUser();
+
+    @POST("users/")
+    Call<RestUser> addUser(@Body RestUser user);
+
+    @PUT("users/{userid}/")
+    Call<RestUser> saveUser(@Path("userid") String uid, @Body RestUser user);
+
+    @GET("products/")
+    Call<List<RestProduct>> getAllProducts();
+
+}
\ No newline at end of file
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/SQLiteService.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/SQLiteService.java
new file mode 100644
index 0000000000000000000000000000000000000000..4b510927e570375fb33343dfecf46291b7b0af6c
--- /dev/null
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/SQLiteService.java
@@ -0,0 +1,68 @@
+package ms.itsecteam.warpdrink.data;
+
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import ms.itsecteam.warpdrink.data.models.local.Product;
+import ms.itsecteam.warpdrink.data.models.local.Setting;
+import ms.itsecteam.warpdrink.data.models.local.User;
+import ms.itsecteam.warpdrink.data.models.rest.RestProduct;
+import ms.itsecteam.warpdrink.data.models.rest.RestUser;
+
+public class SQLiteService {
+
+    private static SQLiteService instance;
+    private SQLiteService() {}
+
+    public static SQLiteService getInstance () {
+        if (SQLiteService.instance == null)
+            SQLiteService.instance = new SQLiteService();
+        return SQLiteService.instance;
+    }
+
+
+    public void saveSetting(String key, String value) {
+        Setting.setSetting(key, value);
+    }
+
+    public String getSetting(String key) {
+        return this.getSetting(key, "");
+    }
+
+    public String getSetting(String key, String defaultValue) {
+        String value = Setting.getSetting(key);
+        if(value == null) {
+            return defaultValue;
+        }
+        return value;
+    }
+
+    public List<User> refreshUserData(List<RestUser> u) {
+        User.deleteAll();
+        List<User> ret_val = new ArrayList<>();
+        for (RestUser anU : u) {
+            User usr = anU.toLocalUser();
+            usr.save();
+            ret_val.add(usr);
+        }
+        Log.d("App", Arrays.toString(u.toArray()));
+        return ret_val;
+    }
+
+    public List<Product> refreshProductData(List<RestProduct> body) {
+        Product.deleteAll();
+        List<Product> ret_val = new ArrayList<>();
+        for (RestProduct anU : body) {
+            Product prod = anU.toLocalProduct();
+            prod.save();
+            ret_val.add(prod);
+        }
+
+        return ret_val;
+    }
+
+
+}
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/local/Product.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/local/Product.java
new file mode 100644
index 0000000000000000000000000000000000000000..8b1b5d3ae61ec580a114513a9bf6b06f6c6a9e36
--- /dev/null
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/local/Product.java
@@ -0,0 +1,95 @@
+package ms.itsecteam.warpdrink.data.models.local;
+
+import com.activeandroid.Model;
+import com.activeandroid.annotation.Column;
+import com.activeandroid.annotation.Table;
+import com.activeandroid.query.Delete;
+import com.activeandroid.query.Select;
+
+import java.util.List;
+
+@Table(name = "Products")
+public class Product extends Model {
+
+    @Column(name = "pid")
+    private int pid;
+
+    @Column(name = "name")
+    private String name;
+
+    @Column(name = "category")
+    private String category;
+
+    @Column(name = "price")
+    private float price;
+
+    @Column(name = "count")
+    private int count;
+
+    public Product() {
+        super();
+    }
+
+    public Product(int pid, String name, String category, float price, int count) {
+        this.pid = pid;
+        this.name = name;
+        this.category = category;
+        this.price = price;
+        this.count = count;
+    }
+
+    public int getPid() {
+        return pid;
+    }
+
+    public void setPid(int pid) {
+        this.pid = pid;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCategory() {
+        return category;
+    }
+
+    public void setCategory(String category) {
+        this.category = category;
+    }
+
+    public float getPrice() {
+        return price;
+    }
+
+    public void setPrice(float price) {
+        this.price = price;
+    }
+
+    public int getCount() {
+        return count;
+    }
+
+    public void setCount(int count) {
+        this.count = count;
+    }
+
+    public static List<Product> getAll() {
+        return new Select()
+                .from(Product.class)
+                .execute();
+    }
+
+    public static void deleteAll() {
+        new Delete().from(Product.class).execute();
+    }
+
+    public String toString() {
+        return this.name;
+    }
+
+}
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/objects/Setting.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/local/Setting.java
similarity index 95%
rename from WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/objects/Setting.java
rename to WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/local/Setting.java
index acc94dcaff995b7ffc42410c895f2ccf4e82e3a1..52b6986991d96b5eae5cf650f552bcc259cc0e39 100644
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/objects/Setting.java
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/local/Setting.java
@@ -1,4 +1,4 @@
-package ms.itsecteam.warpdrink.data.objects;
+package ms.itsecteam.warpdrink.data.models.local;
 
 import com.activeandroid.Model;
 import com.activeandroid.annotation.Column;
@@ -6,8 +6,6 @@ import com.activeandroid.annotation.Table;
 import com.activeandroid.query.Delete;
 import com.activeandroid.query.Select;
 
-import java.util.List;
-
 @Table(name = "Settings")
 public class Setting extends Model {
 
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/objects/User.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/local/User.java
similarity index 53%
rename from WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/objects/User.java
rename to WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/local/User.java
index 764f3814cf3dfa85a06758909e788282086f50fb..4bea14647478546ac81daf5cc808e0736b7bf3c8 100644
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/objects/User.java
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/local/User.java
@@ -1,4 +1,4 @@
-package ms.itsecteam.warpdrink.data.objects;
+package ms.itsecteam.warpdrink.data.models.local;
 
 import com.activeandroid.Model;
 import com.activeandroid.annotation.Column;
@@ -11,40 +11,40 @@ import java.util.List;
 @Table(name = "Users")
 public class User extends Model {
 
-    @Column(name = "userid")
-    private int userid;
+    @Column(name = "uid")
+    private String uid;
 
     @Column(name = "credit")
     private double credit;
 
-    @Column(name = "name")
-    private String name;
+    @Column(name = "card_id")
+    private String card_id;
 
     public User() {
         super();
     }
 
-    public User(int userid, String name, double credit) {
+    public User(String uid, double credit, String card_id) {
         super();
-        this.userid = userid;
-        this.name = name;
+        this.uid = uid;
         this.credit = credit;
+        this.card_id = card_id;
     }
 
-    public int getUserid() {
-        return userid;
+    public String getUserid() {
+        return uid;
     }
 
-    public void setUserid(int userid) {
-        this.userid = userid;
+    public void setUserid(String uid) {
+        this.uid = uid;
     }
 
-    public String getName() {
-        return name;
+    public String getCardId() {
+        return card_id;
     }
 
-    public void setName(String name) {
-        this.name = name;
+    public void setCardId(String card_id) {
+        this.card_id = card_id;
     }
 
     public double getCredit() {
@@ -60,16 +60,24 @@ public class User extends Model {
                 .from(User.class)
                 .execute();
     }
-    public static User getByName(String name) {
+    public static User getByName(String uid) {
         return new Select()
                 .from(User.class)
-                .where("name = ?", name)
+                .where("uid = ?", uid)
                 .executeSingle();
     }
     public static void deleteAll() {
         new Delete().from(User.class).execute();
     }
     public String toString() {
-        return this.name;
+        return this.uid;
     }
+
+    public static User getByCardId(String card_id) {
+        return new Select()
+                .from(User.class)
+                .where("card_id = ?", card_id)
+                .executeSingle();
+    }
+
 }
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/rest/RestProduct.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/rest/RestProduct.java
new file mode 100644
index 0000000000000000000000000000000000000000..2613bf7f2c60536f105789f67c68b40bc5447f91
--- /dev/null
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/rest/RestProduct.java
@@ -0,0 +1,86 @@
+package ms.itsecteam.warpdrink.data.models.rest;
+
+import ms.itsecteam.warpdrink.data.models.local.Product;
+import ms.itsecteam.warpdrink.data.models.local.User;
+
+public class RestProduct {
+
+
+    private int pid;
+    private String name;
+    private String category;
+    private Float price;
+    private int count;
+
+    public RestProduct() {
+        super();
+    }
+
+    public RestProduct(int pid, String name, String category, Float price, int count) {
+        this.pid = pid;
+        this.name = name;
+        this.category = category;
+        this.price = price;
+        this.count = count;
+    }
+
+    public int getPid() {
+        return pid;
+    }
+
+    public void setPid(int pid) {
+        this.pid = pid;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCategory() {
+        return category;
+    }
+
+    public void setCategory(String category) {
+        this.category = category;
+    }
+
+    public Float getPrice() {
+        return price;
+    }
+
+    public void setPrice(Float price) {
+        this.price = price;
+    }
+
+    public int getCount() {
+        return count;
+    }
+
+    public void setCount(int count) {
+        this.count = count;
+    }
+
+    public Product toLocalProduct() {
+        Product p = new Product();
+        p.setPid(this.pid);
+        p.setName(this.name);
+        p.setCategory(this.category);
+        p.setPrice(this.price);
+        p.setCount(this.count);
+        return p;
+    }
+
+    public static RestProduct fromLocalProduct(Product product) {
+        RestProduct restProduct = new RestProduct();
+        restProduct.setPid(product.getPid());
+        restProduct.setName(product.getName());
+        restProduct.setCategory(product.getCategory());
+        restProduct.setCount(product.getCount());
+        restProduct.setPrice(product.getPrice());
+        return restProduct;
+    }
+}
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/rest/RestUser.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/rest/RestUser.java
new file mode 100644
index 0000000000000000000000000000000000000000..c272c0c78dad69be10c97b4f292d29a2509e5db7
--- /dev/null
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/models/rest/RestUser.java
@@ -0,0 +1,65 @@
+package ms.itsecteam.warpdrink.data.models.rest;
+
+import ms.itsecteam.warpdrink.data.models.local.User;
+
+public class RestUser {
+
+
+    private String uid;
+    private double credit;
+    private String card_id;
+
+    public RestUser() {
+        super();
+    }
+
+    public RestUser(String uid, double credit, String card_id) {
+        super();
+        this.uid = uid;
+        this.credit = credit;
+        this.card_id = card_id;
+    }
+
+    public String getUserid() {
+        return uid;
+    }
+
+    public void setUserid(String uid) {
+        this.uid = uid;
+    }
+
+    public String getCardId() {
+        return card_id;
+    }
+
+    public void setCardId(String card_id) {
+        this.card_id = card_id;
+    }
+
+    public double getCredit() {
+        return credit;
+    }
+
+    public void setCredit(double credit) {
+        this.credit = credit;
+    }
+
+    public String toString() {
+        return this.uid;
+    }
+
+    public User toLocalUser() {
+        User u = new User();
+        u.setCardId(this.card_id);
+        u.setUserid(this.uid);
+        u.setCredit(this.credit);
+        return u;
+    }
+    public static RestUser fromLocalUser(User user) {
+        RestUser rest_user = new RestUser();
+        rest_user.setCardId(user.getCardId());
+        rest_user.setUserid(user.getUserid());
+        rest_user.setCredit(user.getCredit());
+        return rest_user;
+    }
+}
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/RequestSingleObject.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/RequestSingleObject.java
deleted file mode 100644
index 565853cf8990479a18cecc68026efdd0ac34f81c..0000000000000000000000000000000000000000
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/RequestSingleObject.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package ms.itsecteam.warpdrink.data.rest;
-
-import android.os.AsyncTask;
-import android.util.Log;
-
-import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
-import org.springframework.web.client.RestTemplate;
-
-public class RequestSingleObject<T> extends AsyncTask<Object, Void, T> {
-    String url;
-    Class<T> clazz;
-    public RequestSingleObject initTask(String url, Class<T> clazz) {
-        this.url = "http://10.0.2.2:8080/warpdrink/rest/";
-
-        this.url += url;
-        this.clazz=clazz;
-        return this;
-    }
-    @Override
-    protected T doInBackground(Object... params) {
-        try {
-            RestTemplate restTemplate = new RestTemplate();
-            restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
-            T ret = restTemplate.getForObject(this.url, clazz);
-
-            return ret;
-        } catch (Exception e) {
-            Log.e("MainActivity", e.getMessage(), e);
-        }
-
-        return null;
-    }
-
-    @Override
-    protected void onPostExecute(T result) { }
-
-}
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/RequestUserList.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/RequestUserList.java
deleted file mode 100644
index 4338dfecdae5efe9f3d16eda1ebcb56d11b7f37c..0000000000000000000000000000000000000000
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/RequestUserList.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package ms.itsecteam.warpdrink.data.rest;
-
-import android.os.AsyncTask;
-import android.util.Log;
-
-import com.google.gson.Gson;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.List;
-
-import ms.itsecteam.warpdrink.data.objects.User;
-
-public class RequestUserList extends AsyncTask<Object, Void, List<User>> {
-    String url;
-    public RequestUserList initTask(String url) {
-        this.url = "http://10.0.2.2:8080/warpdrink/rest/";
-        this.url += url;
-        return this;
-    }
-    @Override
-    protected List<User> doInBackground(Object... params) {
-        User[] x;
-        try {
-            String line;
-            String response="";
-            OutputStreamWriter writer;
-            BufferedReader reader;
-            HttpURLConnection conn;
-            try {
-                conn =  (HttpURLConnection) new URL(this.url).openConnection();
-                conn.setDoOutput(true);
-                reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
-                while ((line = reader.readLine()) != null) { response += line; }
-                Log.d("TV",response);
-                x = new Gson().fromJson(response, User[].class);
-                reader.close();
-                return Arrays.asList(x);
-            } catch (Exception e) { Log.d("TV",e.toString()); }
-        } catch (Exception e) {
-            Log.e("MainActivity", e.getMessage(), e);
-        }
-        return null;
-    }
-
-}
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/RestClient.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/RestClient.java
deleted file mode 100644
index ee532ff84bd6e99c818e1a7d0ef2798d54a20f57..0000000000000000000000000000000000000000
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/RestClient.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package ms.itsecteam.warpdrink.data.rest;
-
-import android.util.Log;
-import android.widget.Toast;
-
-import com.google.gson.Gson;
-
-import org.apache.http.NameValuePair;
-import org.apache.http.message.BasicNameValuePair;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import ms.itsecteam.warpdrink.MainActivity;
-import ms.itsecteam.warpdrink.data.objects.User;
-import ms.itsecteam.warpdrink.data.rest.http.HttpGetRequest;
-import ms.itsecteam.warpdrink.data.rest.http.HttpPostRequest;
-import ms.itsecteam.warpdrink.data.rest.http.HttpPutRequest;
-
-public class RestClient {
-
-    private static RestClient instance;
-    private MainActivity mainActivity;
-    private RestClient() {}
-
-    public static RestClient getInstance () {
-        if (RestClient.instance == null) {
-            RestClient.instance = new RestClient();
-        }
-        return RestClient.instance;
-    }
-
-    public User getUser(int userid) {
-        try {
-            User u = (User) new RequestSingleObject<User>().initTask("user/"+userid,User.class).execute().get();
-            return u;
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-    public List<User> getAllUser() {
-        try {
-            String response = new HttpGetRequest().initTask("user/all").execute().get();
-            if(response == null) {
-                this.handleError();
-                return null;
-            }
-            return Arrays.asList(new Gson().fromJson(response, User[].class));
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-    public void saveUserCredit(User u) {
-        List<NameValuePair> postParams = new ArrayList<NameValuePair>(2);
-        postParams.add(new BasicNameValuePair("credit", String.valueOf(u.getCredit())));
-        new HttpPostRequest().initTask("/user/"+u.getUserid(),postParams).execute();
-    }
-    public boolean createUser(User u) {
-        List<NameValuePair> postParams = new ArrayList<NameValuePair>(2);
-        postParams.add(new BasicNameValuePair("name", u.getName()));
-        try {
-            String response = new HttpPutRequest().initTask("/user/create",postParams).execute().get();
-            if(response != "") {
-                u = new Gson().fromJson(response, User.class);
-                if(u.getUserid() != 0) {
-                    u.save();
-                    return true;
-                }
-            }
-
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return false;
-    }
-
-    private void handleError() {
-        Toast.makeText(null,"Netzwerkfehler",Toast.LENGTH_LONG);
-    }
-}
-
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/http/HttpGetRequest.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/http/HttpGetRequest.java
deleted file mode 100644
index a16bdcb629a8025c4606792cef5e5335faf9026a..0000000000000000000000000000000000000000
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/http/HttpGetRequest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package ms.itsecteam.warpdrink.data.rest.http;
-
-import android.os.AsyncTask;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.DefaultHttpClient;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-import ms.itsecteam.warpdrink.manager.DatabaseManager;
-
-// this.url = "http://10.0.2.2:8080/warpdrink/rest/";
-
-public class HttpGetRequest extends AsyncTask<Void, Void, String> {
-    String url;
-    public HttpGetRequest initTask(String url) {
-        this.url = DatabaseManager.getInstance().getSetting("api_url")+"/"+ url;
-        return this;
-    }
-    @Override
-    protected String doInBackground(Void... params) {
-        try {
-            HttpClient client = new DefaultHttpClient();
-            HttpGet request = new HttpGet(this.url);
-
-            HttpResponse response = client.execute(request);
-            BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
-
-            String line = "";
-            String responsestr="";
-            while ((line = rd.readLine()) != null) {
-                responsestr += line;
-            }
-            return responsestr;
-        } catch (Exception e) {
-        }
-        return null;
-    }
-}
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/http/HttpPostRequest.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/http/HttpPostRequest.java
deleted file mode 100644
index 4d4b512d30652a1e4fbb1e765598b4ad5fd7b3b5..0000000000000000000000000000000000000000
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/http/HttpPostRequest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package ms.itsecteam.warpdrink.data.rest.http;
-
-import android.os.AsyncTask;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.NameValuePair;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.entity.UrlEncodedFormEntity;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.impl.client.DefaultHttpClient;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.util.List;
-
-import ms.itsecteam.warpdrink.manager.DatabaseManager;
-
-public class HttpPostRequest extends AsyncTask<Void, Void, String> {
-    String url;
-    List<NameValuePair> postParams;
-    public HttpPostRequest initTask(String url, List<NameValuePair> postParams) {
-        this.url = DatabaseManager.getInstance().getSetting("api_url")+"/"+ url;
-        this.postParams =postParams;
-        return this;
-    }
-    @Override
-    protected String doInBackground(Void... params) {
-        try {
-            HttpClient client = new DefaultHttpClient();
-            HttpPost request = new HttpPost(this.url);
-
-            request.setEntity(new UrlEncodedFormEntity(this.postParams, "UTF-8"));
-
-            HttpResponse response = client.execute(request);
-            BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
-
-            String line = "";
-            String responsestr="";
-            while ((line = rd.readLine()) != null) {
-                responsestr += line;
-            }
-            return responsestr;
-        } catch (Exception e) {
-        }
-        return null;
-    }
-
-}
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/http/HttpPutRequest.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/http/HttpPutRequest.java
deleted file mode 100644
index 4b2661ed26d34a6e2fb8b349f739a6d738939334..0000000000000000000000000000000000000000
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/data/rest/http/HttpPutRequest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package ms.itsecteam.warpdrink.data.rest.http;
-
-import android.os.AsyncTask;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.NameValuePair;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.entity.UrlEncodedFormEntity;
-import org.apache.http.client.methods.HttpPut;
-import org.apache.http.impl.client.DefaultHttpClient;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.util.List;
-
-import ms.itsecteam.warpdrink.manager.DatabaseManager;
-
-public class HttpPutRequest extends AsyncTask<Void, Void, String> {
-    String url;
-    List<NameValuePair> postParams;
-    public HttpPutRequest initTask(String url, List<NameValuePair> postParams) {
-        this.url = DatabaseManager.getInstance().getSetting("api_url")+"/"+ url;
-        this.postParams = postParams;
-        return this;
-    }
-    @Override
-    protected String doInBackground(Void... params) {
-        try {
-            HttpClient client = new DefaultHttpClient();
-            HttpPut request = new HttpPut(this.url);
-
-            request.setEntity(new UrlEncodedFormEntity(this.postParams, "UTF-8"));
-
-            HttpResponse response = client.execute(request);
-            BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
-
-            String line = "";
-            String responsestr="";
-            while ((line = rd.readLine()) != null) {
-                responsestr += line;
-            }
-            return responsestr;
-        } catch (Exception e) {
-
-        }
-        return null;
-    }
-
-}
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/ChargeCustomDialog.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/ChargeCustomDialog.java
index 1674b46e614cc9014bad876b19c365b6eb4e043e..f80aaa37aecfb495e504bd1928c375f90df74f80 100644
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/ChargeCustomDialog.java
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/ChargeCustomDialog.java
@@ -9,8 +9,6 @@ import android.widget.NumberPicker;
 
 import ms.itsecteam.warpdrink.MainActivity;
 import ms.itsecteam.warpdrink.R;
-import ms.itsecteam.warpdrink.data.objects.User;
-import ms.itsecteam.warpdrink.data.rest.RestClient;
 import ms.itsecteam.warpdrink.manager.MainManager;
 
 public class ChargeCustomDialog extends Dialog implements
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/ChargeDialog.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/ChargeDialog.java
index 862eeb1df281dbb755dfc06084d91bc5517b7037..8bf942a4558268deae45f33d7ef8051fd2af777e 100644
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/ChargeDialog.java
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/ChargeDialog.java
@@ -8,8 +8,6 @@ import android.widget.Button;
 
 import ms.itsecteam.warpdrink.MainActivity;
 import ms.itsecteam.warpdrink.R;
-import ms.itsecteam.warpdrink.data.objects.User;
-import ms.itsecteam.warpdrink.data.rest.RestClient;
 import ms.itsecteam.warpdrink.manager.MainManager;
 
 public class ChargeDialog extends Dialog implements
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/NewUserDialog.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/NewUserDialog.java
index be8edbd0d426343eb546c57e23d8241c47e1df2b..b517a9ffcbad6b67b3829d9bfb5eef6d072b618c 100644
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/NewUserDialog.java
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/NewUserDialog.java
@@ -10,7 +10,6 @@ import android.widget.Toast;
 
 import ms.itsecteam.warpdrink.MainActivity;
 import ms.itsecteam.warpdrink.R;
-import ms.itsecteam.warpdrink.manager.DatabaseManager;
 import ms.itsecteam.warpdrink.manager.MainManager;
 
 public class NewUserDialog extends Dialog implements
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/SettingsDialog.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/SettingsDialog.java
index 2cd903f52f426b62cbd999a263e325b028fa5ab1..9ea94d40210949c55b8d51b7e5e657e9b9a26b21 100644
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/SettingsDialog.java
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/dialogs/SettingsDialog.java
@@ -9,7 +9,7 @@ import android.widget.TextView;
 
 import ms.itsecteam.warpdrink.MainActivity;
 import ms.itsecteam.warpdrink.R;
-import ms.itsecteam.warpdrink.manager.DatabaseManager;
+import ms.itsecteam.warpdrink.data.SQLiteService;
 
 public class SettingsDialog extends Dialog implements
         View.OnClickListener {
@@ -34,7 +34,7 @@ public class SettingsDialog extends Dialog implements
         this.btnAbort.setOnClickListener(this);
 
         this.txtApiUrl = (TextView) findViewById(R.id.txtApiUrl);
-        this.txtApiUrl.setText(DatabaseManager.getInstance().getSetting("api_url"));
+        this.txtApiUrl.setText(SQLiteService.getInstance().getSetting("api_url"));
 
     }
 
@@ -42,7 +42,7 @@ public class SettingsDialog extends Dialog implements
     public void onClick(View v) {
         switch (v.getId()) {
             case R.id.btnSave:
-                DatabaseManager.getInstance().saveSetting("api_url",txtApiUrl.getText().toString());
+                SQLiteService.getInstance().saveSetting("api_url",txtApiUrl.getText().toString());
                 this.dismiss();
                 break;
             case R.id.btnAbort:
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/DataManager.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/DataManager.java
index d223ba00c99c760dcad47a048b62fe589da45e41..e660d3bfd669c0534b003768202f30ae3a790123 100644
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/DataManager.java
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/DataManager.java
@@ -1,17 +1,21 @@
 package ms.itsecteam.warpdrink.manager;
 
-import ms.itsecteam.warpdrink.data.objects.User;
-import ms.itsecteam.warpdrink.data.rest.RestClient;
+import android.util.Log;
+
+import ms.itsecteam.warpdrink.data.models.local.User;
+import ms.itsecteam.warpdrink.data.models.rest.RestUser;
+import retrofit.Callback;
+import retrofit.Response;
+import retrofit.Retrofit;
 
 public class DataManager {
     private User currentUser;
     private double totalAmount;
 
-
-
     private static DataManager ourInstance = new DataManager();
+    private String lastCardId;
 
-    protected static DataManager getInstance() {
+    public static DataManager getInstance() {
         return ourInstance;
     }
 
@@ -20,9 +24,20 @@ public class DataManager {
 
     public void saveCurrentUser() {
         this.currentUser.save();
-        RestClient.getInstance().saveUserCredit(this.currentUser);
+        RestUser rest_user = RestUser.fromLocalUser(this.currentUser);
+        MainManager.getInstance().getRestService().saveUser(rest_user.getUserid(), rest_user).enqueue(new Callback<RestUser>() {
+            @Override
+            public void onResponse(Response<RestUser> response, Retrofit retrofit) {
+            }
+
+            @Override
+            public void onFailure(Throwable t) {
+                Log.d("REST", t.getMessage());
+            }
+        });
     }
 
+
     public void performPayment() {
         this.currentUser.setCredit(this.currentUser.getCredit()-this.totalAmount);
         this.saveCurrentUser();
@@ -30,7 +45,7 @@ public class DataManager {
     }
 
     public void clearCurrentUser() {
-
+        this.currentUser = null;
     }
 
     public User getCurrentUser() {
@@ -53,7 +68,11 @@ public class DataManager {
         this.totalAmount = totalAmount;
     }
 
+    public void setLastCardId(String lastCardId) {
+        this.lastCardId = lastCardId;
+    }
 
-
-
+    public String getLastCardId() {
+        return lastCardId;
+    }
 }
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/DatabaseManager.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/DatabaseManager.java
deleted file mode 100644
index f227cb8cb73d43c348db565141806f26995df582..0000000000000000000000000000000000000000
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/DatabaseManager.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package ms.itsecteam.warpdrink.manager;
-
-import android.util.Log;
-import java.util.Arrays;
-import java.util.List;
-import java.util.ListIterator;
-
-import ms.itsecteam.warpdrink.MainActivity;
-import ms.itsecteam.warpdrink.data.objects.Setting;
-import ms.itsecteam.warpdrink.data.objects.User;
-import ms.itsecteam.warpdrink.data.rest.RestClient;
-
-public class DatabaseManager {
-
-    private static DatabaseManager instance;
-    private DatabaseManager() {}
-
-    public static DatabaseManager getInstance () {
-        if (DatabaseManager.instance == null)
-            DatabaseManager.instance = new DatabaseManager();
-        return DatabaseManager.instance;
-    }
-
-    public User getUserByName(String name) {
-        return User.getByName(name);
-    }
-    public void refreshUserData(List<User> u) {
-        User.deleteAll();
-        if(u == null)
-            return;
-        ListIterator<User> ui = u.listIterator();
-        while(ui.hasNext()) {
-            ui.next().save();
-        }
-        Log.d("App", Arrays.toString(u.toArray()));
-    }
-
-
-    public void saveSetting(String key, String value) {
-        Setting.setSetting(key, value);
-    }
-
-    public String getSetting(String key) {
-        return this.getSetting(key, "");
-    }
-
-    public String getSetting(String key, String defaultValue) {
-        String value = Setting.getSetting(key);
-        if(value == null) {
-            return defaultValue;
-        }
-        return value;
-    }
-
-    public User remoteGetUser(int userid) {
-        return RestClient.getInstance().getUser(userid);
-    }
-
-}
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/MainManager.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/MainManager.java
index 450f02a229d9dda6f6550575035efb09778fb934..8d445661da6a11a4cc7fff539113976cdef6872c 100644
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/MainManager.java
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/MainManager.java
@@ -3,58 +3,116 @@ package ms.itsecteam.warpdrink.manager;
 import android.app.AlertDialog;
 import android.content.DialogInterface;
 import android.util.Log;
+import android.view.WindowManager;
 import android.widget.Toast;
-
-import java.util.Arrays;
 import java.util.List;
-import java.util.ListIterator;
-
 import ms.itsecteam.warpdrink.MainActivity;
 import ms.itsecteam.warpdrink.R;
-import ms.itsecteam.warpdrink.data.objects.User;
-import ms.itsecteam.warpdrink.data.rest.RestClient;
+import ms.itsecteam.warpdrink.data.SQLiteService;
+import ms.itsecteam.warpdrink.data.models.local.Product;
+import ms.itsecteam.warpdrink.data.models.local.User;
+import ms.itsecteam.warpdrink.data.RestService;
+import ms.itsecteam.warpdrink.data.models.rest.RestProduct;
+import ms.itsecteam.warpdrink.data.models.rest.RestUser;
 import ms.itsecteam.warpdrink.orderList.Order;
+import retrofit.Callback;
+import retrofit.GsonConverterFactory;
+import retrofit.Response;
+import retrofit.Retrofit;
 
 public class MainManager {
 
+    private RestService restService;
     private MainActivity mainActivity;
-    private DatabaseManager databaseManager;
+    private SQLiteService sqLiteService;
     private UiManager uiManager;
     private DataManager dataManager;
 
-    private static MainManager ourInstance = new MainManager();
+    private static MainManager instance = new MainManager();
+
     public static MainManager getInstance() {
-        return ourInstance;
+        return instance;
     }
 
     private MainManager() {
-        this.databaseManager = DatabaseManager.getInstance();
+        this.sqLiteService = SQLiteService.getInstance();
         this.uiManager = UiManager.getInstance();
         this.dataManager = DataManager.getInstance();
+        this.restService = this.createRestService();
+    }
+
+    private RestService createRestService() {
+        Retrofit retrofit = new Retrofit.Builder()
+                .baseUrl("https://infra-test.warpzone.ms/api/")
+               // .baseUrl("http://10.0.2.92:8000/api/")
+                .addConverterFactory(GsonConverterFactory.create())
+                .build();
+        return retrofit.create(RestService.class);
     }
 
     public void init(MainActivity mainActivity) {
         this.mainActivity = mainActivity;
         this.uiManager.initUi(this.mainActivity);
-        this.refreshUserData();
+
+        this.refreshData();
     }
 
-    public void refreshUserData() {
-        List<User> userList = RestClient.getInstance().getAllUser();
-        this.databaseManager.refreshUserData(userList);
-        if(userList != null) {
-            this.uiManager.refreshUserData(userList);
-        }
+    public void refreshData() {
+        Log.d("REST", "Refreshing user data");
+
+        this.restService.getAllUser().enqueue(new Callback<List<RestUser>>() {
+            @Override
+            public void onResponse(Response<List<RestUser>> response, Retrofit retrofit) {
+                List<User> userList = MainManager.getInstance().sqLiteService.refreshUserData(response.body());
+                if (userList != null) {
+                    MainManager.getInstance().uiManager.refreshUserData(userList);
+                }
+                Toast.makeText(MainManager.getInstance().mainActivity, "Refresh successful", Toast.LENGTH_LONG).show();
+            }
+
+            @Override
+            public void onFailure(Throwable t) {
+                Log.d("REST", t.getMessage());
+            }
+        });
+
+        this.restService.getAllProducts().enqueue(new Callback<List<RestProduct>>() {
+            @Override
+            public void onResponse(Response<List<RestProduct>> response, Retrofit retrofit) {
+                List<ms.itsecteam.warpdrink.data.models.local.Product> productList = MainManager.getInstance().sqLiteService.refreshProductData(response.body());
+                if (productList != null) {
+                    MainManager.getInstance().uiManager.refreshProductData(productList);
+                }
+            }
+
+            @Override
+            public void onFailure(Throwable t) {
+                Log.d("REST", t.getMessage());
+            }
+        });
+
     }
 
     public boolean addUser(String name) {
-         if(this.databaseManager.getUserByName(name) == null) {
-                User u = new User();
-                u.setName(name);
-                RestClient.getInstance().createUser(u);
-                this.refreshUserData();
-                return true;
-        }
+        Log.d("USER", "Start");
+         if(User.getByName(name) == null) {
+             User user = new User();
+             user.setUserid(name);
+             Log.d("USER", "Weter");
+             this.restService.addUser(RestUser.fromLocalUser(user)).enqueue(new Callback<RestUser>() {
+                 @Override
+                 public void onResponse(Response<RestUser> response, Retrofit retrofit) {
+                     MainManager.getInstance().refreshData();
+                 }
+
+                 @Override
+                 public void onFailure(Throwable t) {
+                     Log.d("Error", t.getMessage());
+                 }
+             });
+
+             return true;
+         }
         return false;
     }
 
@@ -65,27 +123,30 @@ public class MainManager {
         }
     }
 
+    public User getCurrentUser() {
+        return this.dataManager.getCurrentUser();
+    }
     public void clearCurrentUser() {
         this.dataManager.clearCurrentUser();
         this.uiManager.clearCurrentUser();
     }
-    public void addOrder(double amount) {
-        DataManager.getInstance().addToTotalAmount(amount);
+
+    public void addOrder(Product product) {
+        DataManager.getInstance().addToTotalAmount(product.getPrice());
         this.uiManager.refreshTotalTextView(DataManager.getInstance().getTotalAmount());
     }
 
     public void removeOrder(Order order) {
-        DataManager.getInstance().addToTotalAmount((-1)*order.getValue());
+        DataManager.getInstance().addToTotalAmount((-1)*order.getProduct().getPrice());
         this.uiManager.removeOrder(order);
         this.uiManager.refreshTotalTextView(DataManager.getInstance().getTotalAmount());
 
     }
     public void chargeAmount(double amount) {
-        User user = this.dataManager.getCurrentUser();
-        user.setCredit(user.getCredit()+amount);
-        user.save();
-        RestClient.getInstance().saveUserCredit(user);
-        this.uiManager.refreshCreditTextView(user.getCredit());
+        User currentUser = this.dataManager.getCurrentUser();
+        currentUser.setCredit(currentUser.getCredit() + amount);
+        this.dataManager.saveCurrentUser();
+        MainManager.getInstance().uiManager.refreshCreditTextView(currentUser.getCredit());
     }
     public void performPayment() {
         User user = DataManager.getInstance().getCurrentUser();
@@ -122,7 +183,32 @@ public class MainManager {
 
     public void setMainActivity(MainActivity mainActivity) {
         this.mainActivity = mainActivity;
-    }
 
+    }
 
+    public RestService getRestService() { return restService; }
+
+
+    public void saveCardId() {
+        final String card_id = this.dataManager.getLastCardId();
+
+        if (card_id != null) {
+            new AlertDialog.Builder(this.mainActivity)
+                .setTitle(this.mainActivity.getResources().getString(R.string.confirm_payment_title))
+                .setMessage("Die karten id "+card_id+" wird dem Nutzer "+this.getCurrentUser()+" hinzugefügt")
+                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which) {
+                        MainManager.getInstance().getCurrentUser().setCardId(card_id);
+                        MainManager.getInstance().dataManager.saveCurrentUser();
+
+                    }
+                })
+                .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which) {
+                    }
+                })
+                .setIcon(android.R.drawable.ic_dialog_alert)
+                .show();
+        }
+    }
 }
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/UiManager.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/UiManager.java
index 7ff6b8b3f199d9f5b6d88bf489bfd1457d8296b7..20d6c50a5e126b25d6a86a1444d5b3a39af38c64 100644
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/UiManager.java
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/manager/UiManager.java
@@ -2,8 +2,8 @@ package ms.itsecteam.warpdrink.manager;
 
 import android.util.Log;
 import android.view.KeyEvent;
-import android.view.MenuItem;
 import android.view.View;
+import android.view.WindowManager;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.AutoCompleteTextView;
@@ -11,24 +11,20 @@ import android.widget.Button;
 import android.widget.ImageButton;
 import android.widget.ListView;
 import android.widget.TextView;
-import android.widget.Toast;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.ListIterator;
 
 import ms.itsecteam.warpdrink.MainActivity;
 import ms.itsecteam.warpdrink.R;
-import ms.itsecteam.warpdrink.data.objects.User;
+import ms.itsecteam.warpdrink.data.models.local.Product;
+import ms.itsecteam.warpdrink.data.models.local.User;
 import ms.itsecteam.warpdrink.dialogs.ChargeDialog;
 import ms.itsecteam.warpdrink.dialogs.NewUserDialog;
-import ms.itsecteam.warpdrink.dialogs.SettingsDialog;
 import ms.itsecteam.warpdrink.orderList.ListViewAdapter;
+import ms.itsecteam.warpdrink.orderList.ListViewAdapterProducts;
 import ms.itsecteam.warpdrink.orderList.Order;
 
-/**
- * Created by chris on 29.06.2015.
- */
 public class UiManager implements View.OnKeyListener, View.OnClickListener, AdapterView.OnItemClickListener {
 
     private MainActivity mainActivity;
@@ -36,9 +32,11 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
     private ImageButton btnRefresh;
     private TextView txtSum,txtCredit;
     private ListView lstOrdered;
+    private ListView lstProduct;
     private AutoCompleteTextView atxvName;
 
-    private ListViewAdapter lstAdapter;
+    private ListViewAdapter lstOrderedAdapter;
+    private ListViewAdapterProducts lstProductAdapter;
     private ArrayAdapter atxvAdapter;
     private ArrayList<Double> order;
     private List<User> users;
@@ -62,11 +60,15 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
         this.btnPay = (Button) mainActivity.findViewById(R.id.btnPay);
         this.btnCharge = (Button) mainActivity.findViewById(R.id.btnCharge);
 
-        this.lstAdapter = new ListViewAdapter(mainActivity, R.layout.order_list_item, new ArrayList<Order>());
-        this.lstOrdered = (ListView) mainActivity.findViewById(R.id.lstOrdered);
-        this.lstOrdered.setAdapter(this.lstAdapter);
+        this.lstOrderedAdapter = new ListViewAdapter(mainActivity, R.layout.order_list_item, new ArrayList<Order>());
+        this.lstProductAdapter = new ListViewAdapterProducts(mainActivity, R.layout.product_list_item, Product.getAll());
 
+        this.lstOrdered = (ListView) mainActivity.findViewById(R.id.lstOrdered);
+        this.lstOrdered.setAdapter(this.lstOrderedAdapter);
 
+        this.lstProduct = (ListView) mainActivity.findViewById(R.id.lstProduct);
+        this.lstProduct.setAdapter(this.lstProductAdapter);
+        this.lstProduct.setOnItemClickListener(this);
         this.users = User.getAll();
         this.atxvAdapter = new ArrayAdapter(mainActivity, android.R.layout.select_dialog_item, this.users);
         this.atxvName = (AutoCompleteTextView) mainActivity.findViewById(R.id.atxvName);
@@ -74,6 +76,8 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
         this.atxvName.setThreshold(1);
         this.atxvName.setOnKeyListener(this);
         this.atxvName.setOnItemClickListener(this);
+        this.atxvName.setFocusableInTouchMode(true);
+        this.atxvName.setFocusable(true);
 
         this.btnLogout.setVisibility(View.INVISIBLE);
         this.enableControls(false);
@@ -89,6 +93,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
 
     protected void setCurrentUser(User user) {
         this.enableControls(true);
+        this.atxvName.setText(user.getUserid());
         this.atxvName.dismissDropDown();
         this.btnLogout.setVisibility(View.VISIBLE);
         this.refreshCreditTextView(user.getCredit());
@@ -96,7 +101,10 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
 
     protected void clearCurrentUser() {
         this.atxvName.setText("");
-        this.lstAdapter.clear();
+        if(this.atxvName.requestFocus()) {
+            this.mainActivity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+        }
+        this.lstOrderedAdapter.clear();
         this.enableControls(false);
         this.btnLogout.setVisibility(View.INVISIBLE);
         this.refreshCreditTextView(0.0);
@@ -109,30 +117,36 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
         this.btnCharge.setEnabled(enable);
         this.btnPay.setEnabled(enable);
         this.btnLogout.setEnabled(enable);
+        this.lstProduct.setEnabled(enable);
     }
 
     protected void refreshUserData(List<User> userList) {
         this.atxvAdapter.clear();
-        ListIterator<User> userListIterator = userList.listIterator();
-        while(userListIterator.hasNext()) {
-            this.atxvAdapter.add(userListIterator.next());
+        for (User anUserList : userList) {
+            this.atxvAdapter.add(anUserList);
         }
     }
+    public void refreshProductData(List<Product> productList) {
+        this.lstProductAdapter.clear();
+        this.lstProductAdapter.addAll(productList);
+    }
+
     protected void removeOrder(Order order) {
-        this.lstAdapter.remove(order);
+        this.lstOrderedAdapter.remove(order);
     }
 
     @Override
     public void onClick(View v) {
+        Log.d("HALLO", Integer.toString(v.getId()));
         switch (v.getId()) {
-            case R.id.btnOneEuro:
-                this.lstAdapter.insert(new Order(1.0), this.lstAdapter.getCount());
+         /*   case R.id.btnOneEuro:
+                this.lstOrderedAdapter.insert(new Order(1.0), this.lstOrderedAdapter.getCount());
                 MainManager.getInstance().addOrder(1.0);
                 break;
             case R.id.btnFiftyCent:
-                this.lstAdapter.insert(new Order(0.5), this.lstAdapter.getCount());
+                this.lstOrderedAdapter.insert(new Order(0.5), this.lstOrderedAdapter.getCount());
                 MainManager.getInstance().addOrder(0.5);
-                break;
+                break;*/
             case R.id.btnCharge:
                 new ChargeDialog().show();
                 break;
@@ -146,8 +160,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
                 new NewUserDialog().show();
                 break;
             case R.id.btnRefresh:
-                MainManager.getInstance().refreshUserData();
-                Toast.makeText(this.mainActivity, "Refresh successful", Toast.LENGTH_LONG).show();
+                MainManager.getInstance().refreshData();
                 break;
         }
     }
@@ -166,6 +179,17 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
     }
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-        MainManager.getInstance().setCurrentUser((User) this.atxvAdapter.getItem(position));
+        switch (parent.getId()) {
+            case R.id.lstProduct:
+                Product p = this.lstProductAdapter.getItem(position);
+                this.lstOrderedAdapter.insert(new Order(p), this.lstOrderedAdapter.getCount());
+                MainManager.getInstance().addOrder(p);
+                break;
+            case -1:
+                MainManager.getInstance().setCurrentUser((User) this.atxvAdapter.getItem(position));
+            break;
+        }
     }
+
+
 }
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/orderList/ListViewAdapter.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/orderList/ListViewAdapter.java
index 769424b7c5ec3387bae2fc7104dd80ab256f53aa..50053271cb32fa88fa78adb0ef70558d06b45ea1 100644
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/orderList/ListViewAdapter.java
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/orderList/ListViewAdapter.java
@@ -40,6 +40,7 @@ public class ListViewAdapter extends ArrayAdapter<Order> {
         holder.btnRemoveOrder.setTag(holder.order);
 
         holder.value = (TextView)row.findViewById(R.id.txtOrderValue);
+        holder.name = (TextView)row.findViewById(R.id.txtOrderName);
 
         row.setTag(holder);
 
@@ -48,11 +49,13 @@ public class ListViewAdapter extends ArrayAdapter<Order> {
     }
 
     private void setupItem(OrderHolder holder) {
-        holder.value.setText(String.valueOf(holder.order.getValue())+" Euro");
+        holder.name.setText(holder.order.getProduct().getName());
+        holder.value.setText(String.valueOf(holder.order.getProduct().getPrice()));
     }
 
     public static class OrderHolder {
         Order order;
+        TextView name;
         TextView value;
         ImageButton btnRemoveOrder;
     }
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/orderList/ListViewAdapterProducts.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/orderList/ListViewAdapterProducts.java
new file mode 100644
index 0000000000000000000000000000000000000000..b8f8158793db970297c1493fa9d12140339f9067
--- /dev/null
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/orderList/ListViewAdapterProducts.java
@@ -0,0 +1,59 @@
+package ms.itsecteam.warpdrink.orderList;
+
+import android.app.Activity;
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import java.util.List;
+
+import ms.itsecteam.warpdrink.R;
+import ms.itsecteam.warpdrink.data.models.local.Product;
+
+public class ListViewAdapterProducts extends ArrayAdapter<Product>{
+
+    private List<Product> items;
+    private int layoutResourceId;
+    private Context context;
+
+    public ListViewAdapterProducts(Context context, int layoutResourceId, List<Product> items) {
+        super(context, layoutResourceId, items);
+        this.layoutResourceId = layoutResourceId;
+        this.context = context;
+        this.items = items;
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        View row;
+        ProductHolder holder;
+
+        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
+        row = inflater.inflate(layoutResourceId, parent, false);
+
+        holder = new ProductHolder();
+        holder.product = items.get(position);
+
+        holder.name = (TextView)row.findViewById(R.id.txtProductName);
+        holder.price = (TextView)row.findViewById(R.id.txtProductPrice);
+
+        row.setTag(holder);
+
+        setupItem(holder);
+        return row;
+    }
+
+    private void setupItem(ProductHolder holder) {
+        holder.name.setText(String.valueOf(holder.product.getName()));
+        holder.price.setText(String.valueOf(holder.product.getPrice())+" Euro");
+    }
+
+    public static class ProductHolder {
+        Product product;
+        TextView name;
+        TextView price;
+    }
+}
\ No newline at end of file
diff --git a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/orderList/Order.java b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/orderList/Order.java
index e999122b0d631afa537432f3edc29a1ce6c6f93c..1efd9de0b30f9972ce104e1adade9566ec2311c0 100644
--- a/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/orderList/Order.java
+++ b/WarpDrinkApp/app/src/main/java/ms/itsecteam/warpdrink/orderList/Order.java
@@ -4,11 +4,13 @@ import android.widget.ImageButton;
 
 import java.io.Serializable;
 
+import ms.itsecteam.warpdrink.data.models.local.Product;
+
 public class Order implements Serializable {
 
     private static final long serialVersionUID = -5435670920302756945L;
 
-    private double value = 0;
+    private Product product;
     private double position=0;
     private ImageButton btn;
 
@@ -28,16 +30,16 @@ public class Order implements Serializable {
         this.position = position;
     }
 
-    public Order(double value) {
-            this.setValue(value);
-        }
+    public Order(Product p) {
+            this.product = p;
+    }
 
-        public double getValue() {
-            return value;
-        }
+    public Product getProduct() {
+        return product;
+    }
 
-        public void setValue(double value) {
-            this.value = value;
-        }
+    public void setProduct(Product value) {
+        this.product = product;
+    }
 
 }
diff --git a/WarpDrinkApp/app/src/main/res/layout/activity_main.xml b/WarpDrinkApp/app/src/main/res/layout/activity_main.xml
index 06ed63e0f69cd2705a254b4840990c6c14a82d12..f35e3a366fecb27488461e21475cc81657841d57 100644
--- a/WarpDrinkApp/app/src/main/res/layout/activity_main.xml
+++ b/WarpDrinkApp/app/src/main/res/layout/activity_main.xml
@@ -18,7 +18,7 @@
             <LinearLayout
                 android:orientation="vertical"
                 android:layout_width="464dp"
-                android:layout_height="wrap_content">
+                android:layout_height="361dp">
 
                 <LinearLayout
                     android:orientation="horizontal"
@@ -67,24 +67,13 @@
                     android:layout_column="1"
                     android:layout_row="2" />
 
-                <Button android:text="@string/btn_oneEuro" android:id="@+id/btnOneEuro" android:background="@drawable/btn_blue" style="@style/ButtonText"
-                    android:layout_row="3"
-                    android:layout_column="1"
-                    android:width="10dp"
-                    android:onClick="onClick"
-                    android:layout_width="300dp"></Button>
-
-                <Button
-                    style="@style/ButtonText"
-                    android:text="@string/btn_fiftyCent"
-                    android:id="@+id/btnFiftyCent"
-                    android:background="@drawable/btn_blue"
-                    android:layout_row="4"
-                    android:layout_column="1"
-                    android:width="10dp"
-                    android:layout_width="300dp"
-                    android:onClick="onClick"
-                    android:layout_height="wrap_content" />
+                <ListView
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:id="@+id/lstProduct"
+                    android:layout_row="2"
+                    android:layout_column="12"
+                    android:choiceMode="singleChoice" />
 
                 <Space
                     android:layout_width="20px"
@@ -95,7 +84,7 @@
             <LinearLayout
                 android:orientation="vertical"
                 android:layout_width="match_parent"
-                android:layout_height="match_parent">
+                android:layout_height="363dp">
 
 
                 <LinearLayout
diff --git a/WarpDrinkApp/app/src/main/res/layout/order_list_item.xml b/WarpDrinkApp/app/src/main/res/layout/order_list_item.xml
index 4bbe5445063d7f99904eafe53371a9d40a3c4dbb..521b7fc0690165fbdbbe82026ce5c61f35187a8a 100644
--- a/WarpDrinkApp/app/src/main/res/layout/order_list_item.xml
+++ b/WarpDrinkApp/app/src/main/res/layout/order_list_item.xml
@@ -4,12 +4,26 @@
     android:layout_height="fill_parent"
     android:orientation="horizontal" >
 
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:text="Medium Text"
-        android:id="@+id/txtOrderValue" />
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:text="Large Text"
+            android:id="@+id/txtOrderName" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:text="Medium Text"
+            android:id="@+id/txtOrderValue" />
+
+    </LinearLayout>
 
     <ImageButton
         android:id="@+id/btnRemoveOrder"
diff --git a/WarpDrinkApp/app/src/main/res/layout/product_list_item.xml b/WarpDrinkApp/app/src/main/res/layout/product_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a3efeded494a5d4d3da71f0564abdea9c3a52ed
--- /dev/null
+++ b/WarpDrinkApp/app/src/main/res/layout/product_list_item.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:orientation="horizontal" >
+
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:text="Large Text"
+            android:id="@+id/txtProductName"
+            android:layout_gravity="center_horizontal" />
+
+        <TextView
+            android:layout_width="68dp"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:text="1.0"
+            android:id="@+id/txtProductPrice" />
+
+    </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/WarpDrinkApp/app/src/main/res/menu/menu_main.xml b/WarpDrinkApp/app/src/main/res/menu/menu_main.xml
index 056ff9c36effcc1db409dceb5dba610db19e281d..835133e66153c7f1a62d4ccbea9a26b8a88b18f4 100644
--- a/WarpDrinkApp/app/src/main/res/menu/menu_main.xml
+++ b/WarpDrinkApp/app/src/main/res/menu/menu_main.xml
@@ -10,4 +10,10 @@
         android:icon="@drawable/ic_menu_refresh"
         android:title="@string/addNewUser" />
 
+    <item
+        android:id="@+id/action_learn_card_id"
+        android:orderInCategory="200"
+        android:icon="@drawable/ic_menu_refresh"
+        android:title="@string/lernCardId" />
+
 </menu>
diff --git a/WarpDrinkApp/app/src/main/res/values/strings.xml b/WarpDrinkApp/app/src/main/res/values/strings.xml
index f5279cd87255864804559d49926800b0dac9cb3b..96343036826a2e7e39b5302ef1df9b31eed3856c 100644
--- a/WarpDrinkApp/app/src/main/res/values/strings.xml
+++ b/WarpDrinkApp/app/src/main/res/values/strings.xml
@@ -26,6 +26,7 @@
     <string name="rest_config_header">REST-API Konfiguration</string>
     <string name="save">Speichern</string>
     <string name="abort">Abbrechen</string>
+    <string name="lernCardId">Learn Card ID</string>
 
     <style name="ButtonText">
         <item name="android:layout_width">fill_parent</item>
diff --git a/WarpDrinkApp/build.gradle b/WarpDrinkApp/build.gradle
index 79381f11929dbbed7d73df61d078f18bb4848556..ec238d2aef909a94156e6e486abffb7e7700e106 100644
--- a/WarpDrinkApp/build.gradle
+++ b/WarpDrinkApp/build.gradle
@@ -4,7 +4,7 @@ buildscript {
         jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:1.2.3'
+        classpath 'com.android.tools.build:gradle:1.5.0'
 
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
@@ -17,4 +17,4 @@ allprojects {
 }
 
 dependencies {
-}
\ No newline at end of file
+}