diff --git a/WarpDrinkApp/app/src/main/AndroidManifest.xml b/WarpDrinkApp/app/src/main/AndroidManifest.xml
index dfa9e13ba4c1e4a1a557d039f08b55c33407bc9d..a16bf69f79eb557065d24b2f8c0f095c4c54ac59 100644
--- a/WarpDrinkApp/app/src/main/AndroidManifest.xml
+++ b/WarpDrinkApp/app/src/main/AndroidManifest.xml
@@ -16,8 +16,8 @@
         android:theme="@style/AppTheme">
 
 
-        <meta-data android:name="AA_DB_NAME" android:value="warppay_data.db" />
-        <meta-data android:name="AA_DB_VERSION" android:value="8" />
+        <meta-data android:name="AA_DB_NAME" android:value="warppay.db" />
+        <meta-data android:name="AA_DB_VERSION" android:value="9.1" />
 
         <activity
             android:name="ms.warpzone.warppay.MainActivity"
diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/MainActivity.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/MainActivity.java
index fe8b4a5a885a6874d9f2918a9f01bdad41ec4f52..80bf2b1d12866b90bc8819ea9a172f322a3ef58b 100644
--- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/MainActivity.java
+++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/MainActivity.java
@@ -20,6 +20,7 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import ms.warpzone.warppay.R;
+import ms.warpzone.warppay.data.models.local.Product;
 import ms.warpzone.warppay.data.models.local.User;
 
 import ms.warpzone.warppay.dialogs.NewUserDialog;
@@ -143,11 +144,19 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
         if(this.manager.getCurrentUser() != null) {
             if (event.getAction() == KeyEvent.ACTION_UP) {
                 if (KeyEvent.KEYCODE_ENTER == event.getKeyCode()) {
-                    Toast.makeText(this, this.barcode, Toast.LENGTH_LONG).show();
+                    Product p = Product.getOneByBarcode(this.barcode.trim().replace("\n", "").toString());
+                    if (p != null) {
+                        Order order = new Order(p);
+                        UiManager.getInstance().addOrder(order);
+                        this.manager.addOrder(order);
+                    } else {
+                        Toast.makeText(this, "Barcode not found: "+this.barcode, Toast.LENGTH_LONG).show();
+                    }
                     this.barcode = "";
                 } else {
                     this.barcode += (char) event.getUnicodeChar();
                 }
+
             }
         }
         return super.dispatchKeyEvent(event);
diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/Product.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/Product.java
index a7caf4629ce9e5b9b04b7d1886e1c73ab29b3cd4..49ea3d52cb921c9eddcdb060ccb313cb03d3c9c5 100644
--- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/Product.java
+++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/Product.java
@@ -45,6 +45,7 @@ public class Product extends Model {
         this.count = count;
     }
 
+
     public int getPid() {
         return pid;
     }
@@ -104,11 +105,10 @@ public class Product extends Model {
     }
 
     public String toString() {
-        return this.name + " " + this.category;
+        return this.name + " " + this.category+" "+this.barcode;
     }
 
     public static List<Product> getByCategory(String category) {
-        Log.d("APP", category);
         return new Select()
                 .from(Product.class)
                 .where("category = ?", category)
@@ -121,4 +121,11 @@ public class Product extends Model {
                 .where("name = ?", product_name)
                 .executeSingle();
     }
+
+    public static Product getOneByBarcode(String barcode) {
+        return new Select()
+                .from(Product.class)
+                .where("barcode = ?", barcode)
+                .executeSingle();
+    }
 }
diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestProduct.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestProduct.java
index 3f0e4b3a02346dd98bfacf257a3381361e237653..99417406c71ae248dcc55602980736af75aabed1 100644
--- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestProduct.java
+++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestProduct.java
@@ -8,6 +8,7 @@ public class RestProduct {
     private int id;
     private String name;
     private String category;
+    private String barcode;
     private Float price_vk;
     private int stock_count;
 
@@ -15,10 +16,11 @@ public class RestProduct {
         super();
     }
 
-    public RestProduct(int id, String name, String category, Float price_vk, int stock_count) {
+    public RestProduct(int id, String name, String category,String barcode, Float price_vk, int stock_count) {
         this.id = id;
         this.name = name;
         this.category = category;
+        this.barcode = barcode;
         this.price_vk = price_vk;
         this.stock_count = stock_count;
     }
@@ -68,6 +70,7 @@ public class RestProduct {
         p.setPid(this.id);
         p.setName(this.name);
         p.setCategory(this.category);
+        p.setBarcode(this.barcode);
         p.setPrice(this.price_vk);
         p.setCount(this.stock_count);
         return p;
@@ -78,8 +81,13 @@ public class RestProduct {
         restProduct.setId(product.getPid());
         restProduct.setName(product.getName());
         restProduct.setCategory(product.getCategory());
+        restProduct.setBarcode(product.getBarcode());
         restProduct.setCount(product.getCount());
         restProduct.setPrice(product.getPrice());
         return restProduct;
     }
+
+    public void setBarcode(String barcode) {
+        this.barcode = barcode;
+    }
 }
diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ChargeCustomDialog.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ChargeCustomDialog.java
index 8fe1210f0837204254e04b617f865ac9eade0acf..e93d6c67bce3ba2d3c43943040abbd817c63d9de 100644
--- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ChargeCustomDialog.java
+++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ChargeCustomDialog.java
@@ -51,6 +51,7 @@ public class ChargeCustomDialog extends Dialog implements
         }
         if(amount > 0.0)
             MainManager.getInstance().chargeAmount(amount);
+        this.numPick.setEnabled(false);
         dismiss();
     }
 }
diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/PayChoiceDialog.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/PayChoiceDialog.java
index ccc5551b40829ef7ef0905e4809bd2d0a1f1359e..bd2c3609fe9b26a7ae67d313320327b861713009 100644
--- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/PayChoiceDialog.java
+++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/PayChoiceDialog.java
@@ -10,6 +10,7 @@ import android.widget.TextView;
 import ms.warpzone.warppay.R;
 import ms.warpzone.warppay.manager.DataManager;
 import ms.warpzone.warppay.manager.MainManager;
+import ms.warpzone.warppay.manager.UiManager;
 
 public class PayChoiceDialog extends Dialog implements View.OnClickListener {
 
@@ -54,6 +55,7 @@ public class PayChoiceDialog extends Dialog implements View.OnClickListener {
             default:
                 break;
         }
+
         dismiss();
     }
 }
diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/DataManager.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/DataManager.java
index 037a0e29489079bc9fe49a918bf3170afe99bf44..edb75c48596088efab03b68e2d69cfde79156d66 100644
--- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/DataManager.java
+++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/DataManager.java
@@ -76,7 +76,6 @@ public class DataManager {
             this.currentUser.setCredit(this.currentUser.getCredit() - this.totalAmount);
             this.currentUser.save();
         }
-        Log.d("USER", String.valueOf(this.currentUser.getCredit()));
         this.totalAmount = 0.0;
     }
 
diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/MainManager.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/MainManager.java
index 81ed5bc6561214dbcc261766fdf27f748c69f340..32aeb67b13818ba40805b2f53b603df9c88bc6cb 100644
--- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/MainManager.java
+++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/MainManager.java
@@ -26,6 +26,7 @@ import ms.warpzone.warppay.MainActivity;
 import ms.warpzone.warppay.R;
 import ms.warpzone.warppay.data.SQLiteService;
 import ms.warpzone.warppay.data.models.local.Category;
+import ms.warpzone.warppay.data.models.local.Product;
 import ms.warpzone.warppay.data.models.local.User;
 import ms.warpzone.warppay.data.RestService;
 import ms.warpzone.warppay.data.models.rest.RestCategory;
@@ -113,8 +114,6 @@ public class MainManager {
     }
 
     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) {
@@ -134,7 +133,6 @@ public class MainManager {
         this.restService.getAllCategories().enqueue(new Callback<List<RestCategory>>() {
             @Override
             public void onResponse(Response<List<RestCategory>> response, Retrofit retrofit) {
-                Log.d("HALLO",response.message());
                 List<Category> categoryList = MainManager.getInstance().sqLiteService.refreshCategoryData(response.body());
                 if (categoryList != null) {
                     MainManager.getInstance().uiManager.showCategoryButtons();
@@ -231,6 +229,7 @@ public class MainManager {
             if (DataManager.getInstance().getCurrentUser().getCredit()>=totalAmount || cash){
                 DataManager.getInstance().performPayment(cash);
                 MainManager.getInstance().clearCurrentUser();
+
             } else {
                 Toast.makeText(mainActivity, mainActivity.getResources().getString(R.string.please_charge), Toast.LENGTH_LONG).show();
             }
diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/UiManager.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/UiManager.java
index 523aebc6531e4bb6e9f1d0f90d8bc6eff1662eac..653c68e8dd9c669d1fcb5661b2265e82c7b1762b 100644
--- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/UiManager.java
+++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/UiManager.java
@@ -1,6 +1,8 @@
 package ms.warpzone.warppay.manager;
 
 import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.DialogInterface;
 import android.os.Build;
 import android.provider.Contacts;
 import android.util.Log;
@@ -28,6 +30,7 @@ import ms.warpzone.warppay.R;
 import ms.warpzone.warppay.data.models.local.Category;
 import ms.warpzone.warppay.data.models.local.Product;
 import ms.warpzone.warppay.data.models.local.User;
+import ms.warpzone.warppay.data.models.rest.RestProduct;
 import ms.warpzone.warppay.dialogs.ChargeDialog;
 import ms.warpzone.warppay.dialogs.NewUserDialog;
 import ms.warpzone.warppay.dialogs.PayChoiceDialog;
@@ -43,8 +46,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
     private ImageButton btnRefresh;
     private TextView txtSum,txtCredit;
     private ListView lstOrdered;
-    private GridLayout gridProducts;
-    private EditText txtBarcode;
+    private GridLayout gridCategories;
     private AutoCompleteTextView atxvName;
 
     private ListViewAdapter lstOrderedAdapter;
@@ -95,7 +97,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
         this.atxvName.setFocusable(true);
         this.atxvName.requestFocus();
 
-        this.gridProducts = (GridLayout) mainActivity.findViewById(R.id.gridProducts);
+        this.gridCategories = (GridLayout) mainActivity.findViewById(R.id.gridCategories);
         this.btnLogout.setVisibility(View.INVISIBLE);
         this.enableControls(false);
         this.mainActivity = mainActivity;
@@ -105,7 +107,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
         if (view.requestFocus()) {
             InputMethodManager imm = (InputMethodManager)
                     this.mainActivity.getSystemService(this.mainActivity.getApplicationContext().INPUT_METHOD_SERVICE);
-            imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
+            imm.showSoftInput(view, InputMethodManager.SHOW_FORCED);
         }
     }
     protected void refreshTotalTextView(double totalAmount) {
@@ -125,23 +127,36 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
 
     protected void clearCurrentUser() {
         this.atxvName.setText("");
-        if(this.atxvName.requestFocus()) {
-            this.showSoftKeyboard(this.mainActivity.getCurrentFocus());
-        }
+
         this.lstOrderedAdapter.clear();
         this.enableControls(false);
         this.btnLogout.setVisibility(View.INVISIBLE);
         this.refreshCreditTextView(0.0);
         this.refreshTotalTextView(0.0);
+        if(this.atxvName.requestFocus()) {
+            this.showSoftKeyboard(this.mainActivity.getCurrentFocus());
+        }
     }
 
     private void enableControls(boolean enable) {
+        int visible;
+        if(enable)
+            visible= View.VISIBLE;
+        else
+            visible= View.INVISIBLE;
         this.atxvName.setEnabled(!enable);
         this.btnRefresh.setEnabled(!enable);
-        this.btnCharge.setEnabled(enable);
-        this.btnPay.setEnabled(enable);
         this.btnLogout.setEnabled(enable);
-
+        this.gridCategories.setVisibility(visible);
+        this.btnPay.setEnabled(enable);
+        this.btnPay.setVisibility(visible);
+        if(DataManager.getInstance().getIs_guest()) {
+            this.btnCharge.setEnabled(false);
+            this.btnCharge.setVisibility(View.INVISIBLE);
+        } else {
+            this.btnCharge.setEnabled(enable);
+            this.btnCharge.setVisibility(visible);
+        }
     }
 
     protected void refreshUserData(List<User> userList) {
@@ -166,7 +181,16 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
                 new ChargeDialog().show();
                 break;
             case R.id.btnPay:
-                new PayChoiceDialog().show();
+                PayChoiceDialog payChoiceDialog = new PayChoiceDialog();
+                payChoiceDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
+                    @Override
+                    public void onDismiss(DialogInterface dialog) {
+                        if (MainManager.getInstance().getCurrentUser() == null)
+                            MainManager.getInstance().clearCurrentUser();
+                    }
+                });
+
+                payChoiceDialog.show();
                 break;
             case R.id.btnLogout:
                 MainManager.getInstance().clearCurrentUser();
@@ -178,21 +202,20 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
                 MainManager.getInstance().refreshData();
                 break;
             case R.id.btnGuest:
+                DataManager.getInstance().setIs_guest(true);
                 MainManager.getInstance().setCurrentUser(new User("Guest",0,""));
                 this.atxvName.setText("Gast");
                 this.atxvName.dismissDropDown();
-                DataManager.getInstance().setIs_guest(true);
+
         }
     }
-    // @ToDo: Key handling für beide Fälle (BarCode und Username)
-    // @ToDo: Tastatur spinnt noch rum
+
+    //@ToDo: Custom Charge spinnt
+    // @ToDo: payment dismiss spinnt
     @Override
     public boolean onKey(View v, int keyCode, KeyEvent event) {
-        if (event.getAction()==KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
-            Log.d("APP", String.valueOf(v.getId())+" "+R.id.txtUsername);
-            /*if(v.getId() == R.id.txtBarcode) {
-                Log.d("APP", this.txtBarcode.getText().toString());
-            } else*/ if (v.getId() == R.id.txtUsername) {
+        if (event.getAction() == KeyEvent.ACTION_UP) {
+            if (KeyEvent.KEYCODE_ENTER == event.getKeyCode()) {
                 if (this.atxvAdapter.getCount() == 1) {
                     MainManager.getInstance().setCurrentUser((User) this.atxvAdapter.getItem(0));
                     this.atxvName.setText(this.atxvAdapter.getItem(0).toString());
@@ -200,6 +223,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
                     DataManager.getInstance().setIs_guest(false);
                 }
                 return false;
+
             }
         }
         return false;
@@ -215,7 +239,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
 
     public void showCategoryButtons() {
         List<Category> categoryList = Category.getAll();
-        this.gridProducts.removeAllViews();
+        this.gridCategories.removeAllViews();
         for (Category c: categoryList) {
             Button catButton = new Button(this.mainActivity.getApplicationContext());
             catButton.setText(c.getName());
@@ -223,7 +247,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
             catButton.setWidth(150);
             catButton.setGravity(0);
             catButton.setOnClickListener(new CategoryOnClickListener());
-            this.gridProducts.addView(catButton);
+            this.gridCategories.addView(catButton);
         }
         for (int i=categoryList.size();i<12;i++) {
             Button btn = new Button(this.mainActivity.getApplicationContext());
@@ -232,7 +256,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap
             btn.setGravity(0);
             btn.setText("");
             btn.setEnabled(false);
-            this.gridProducts.addView(btn);
+            this.gridCategories.addView(btn);
         }
     }
 
diff --git a/WarpDrinkApp/app/src/main/res/layout/activity_main.xml b/WarpDrinkApp/app/src/main/res/layout/activity_main.xml
index 13e473268b895faf7e3303e249f4dc5346514d4d..bf6098a0a522f8fdb4dbaa6216f694fb26bca059 100644
--- a/WarpDrinkApp/app/src/main/res/layout/activity_main.xml
+++ b/WarpDrinkApp/app/src/main/res/layout/activity_main.xml
@@ -54,6 +54,7 @@
                         android:layout_columnSpan="1"
                         android:layout_row="0"
                         android:imeOptions="actionNext"
+                        android:inputType="textNoSuggestions"
                         android:singleLine="true" />
 
                     <Space
@@ -90,13 +91,14 @@
                     android:layout_row="2" />
 
                 <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                    android:id="@+id/gridProducts"
+                    android:id="@+id/gridCategories"
                     android:layout_width="fill_parent"
                     android:layout_height="fill_parent"
                     android:layout_gravity="left"
                     android:columnCount="4"
                     android:orientation="horizontal"
-                    android:rowCount="3"></GridLayout>
+                    android:rowCount="3"
+                    android:visibility="invisible"></GridLayout>
 
                 <Space
                     android:layout_width="20px"