diff --git a/res/drawable/ic_chevron_left.xml b/res/drawable/ic_chevron_left.xml
new file mode 100644
index 0000000..26c7932
--- /dev/null
+++ b/res/drawable/ic_chevron_left.xml
@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:tint="?android:attr/colorAccent"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0">
+    <path
+        android:fillColor="#fff"
+        android:pathData="M15.41,7.41L14,6l-6,6 6,6 1.41,-1.41L10.83,12z" />
+</vector>
diff --git a/res/drawable/ic_chevron_right.xml b/res/drawable/ic_chevron_right.xml
new file mode 100644
index 0000000..d48ea37
--- /dev/null
+++ b/res/drawable/ic_chevron_right.xml
@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:tint="?android:attr/colorAccent"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0">
+    <path
+        android:fillColor="#fff"
+        android:pathData="M10,6L8.59,7.41 13.17,12l-4.58,4.59L10,18l6,-6z" />
+</vector>
diff --git a/src/org/omnirom/omnigears/service/EventService.java b/src/org/omnirom/omnigears/service/EventService.java
index 0e70ef0..19f2d04 100644
--- a/src/org/omnirom/omnigears/service/EventService.java
+++ b/src/org/omnirom/omnigears/service/EventService.java
@@ -68,6 +68,8 @@
     private static boolean mWiredHeadsetConnected;
     private static boolean mA2DPConnected;
     private static final int ANIM_DURATION = 300;
+    private static final int LEFT = 0;
+    private static final int RIGHT = 1;
     private static final Interpolator FAST_OUT_SLOW_IN = new PathInterpolator(0.4f, 0f, 0.2f, 1f);
 
     private WindowManager mWindowManager;
@@ -75,6 +77,7 @@
     private Set<String> appList = null;
     private Handler mHandler = new Handler();
     private PackageManager mPm;
+    private int chooserPosition;
 
     private BroadcastReceiver mStateListener = new BroadcastReceiver() {
         @Override
@@ -160,13 +163,6 @@
 
             params.x = context.getResources().getDimensionPixelSize(R.dimen.floating_widget_window_padding);
 
-            int chooserPosition = getPrefs(context).getInt(EventServiceSettings.APP_CHOOSER_POSITION, 0);
-            if (chooserPosition == 0) {
-                params.gravity = Gravity.CENTER_VERTICAL | Gravity.LEFT;
-            } else {
-                params.gravity = Gravity.CENTER_VERTICAL | Gravity.RIGHT;
-            }
-
             // Selected apps
             LinearLayout linearLayout = (LinearLayout) mFloatingWidget.findViewById(R.id.selected_apps);
             if (linearLayout.getChildCount() > 0) linearLayout.removeAllViews();
@@ -193,7 +189,6 @@
 
             // Close button
             View close = inflater.inflate(R.layout.app_grid_item, null);
-            ((ImageView) close.findViewById(R.id.appIcon)).setImageResource(R.drawable.ic_disabled);
             close.setPadding(30, 15, 30, 15);
             close.setOnClickListener(new View.OnClickListener() {
                 @Override
@@ -201,6 +196,17 @@
                     slideAnimation(context, false);
                 }
             });
+
+            // Position and close icon
+            chooserPosition = getPrefs(context).getInt(EventServiceSettings.APP_CHOOSER_POSITION, LEFT);
+            if (chooserPosition == LEFT) {
+                params.gravity = Gravity.CENTER_VERTICAL | Gravity.LEFT;
+                ((ImageView) close.findViewById(R.id.appIcon)).setImageResource(R.drawable.ic_chevron_left);
+            } else {
+                params.gravity = Gravity.CENTER_VERTICAL | Gravity.RIGHT;
+                ((ImageView) close.findViewById(R.id.appIcon)).setImageResource(R.drawable.ic_chevron_right);
+            }
+
             linearLayout.addView(close);
 
             mWindowManager.addView(mFloatingWidget, params);
@@ -350,12 +356,9 @@
     }
 
     private void slideAnimation(Context context, final boolean show) {
-        // 0 is left
-        int chooserPosition = getPrefs(context).getInt(EventServiceSettings.APP_CHOOSER_POSITION, 0);
-
         if (show) {
             int startValue = 0;
-            if (chooserPosition == 1) {
+            if (chooserPosition == RIGHT) {
                 startValue = getOverlayWidth(context);
             } else {
                 startValue = -getOverlayWidth(context);
@@ -371,7 +374,7 @@
 
         } else {
             int endValue = 0;
-            if (chooserPosition == 1) {
+            if (chooserPosition == RIGHT) {
                 endValue = getOverlayWidth(context);
             } else {
                 endValue = -getOverlayWidth(context);
