diff --git a/app/build.gradle b/app/build.gradle
index 42243f7..cb09029 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -21,6 +21,10 @@
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
+        debug {
+            applicationIdSuffix '.debug'
+            versionNameSuffix ' DEBUG'
+        }
     }
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_8
diff --git a/app/src/debug/res/values/strings.xml b/app/src/debug/res/values/strings.xml
new file mode 100644
index 0000000..399e1fd
--- /dev/null
+++ b/app/src/debug/res/values/strings.xml
@@ -0,0 +1,3 @@
+<resources>
+    <string name="app_name">OmniControl DEBUG</string>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/java/org/omnirom/control/AppListFragment.kt b/app/src/main/java/org/omnirom/control/AppListFragment.kt
index 5c37ff4..d2fcdb2 100644
--- a/app/src/main/java/org/omnirom/control/AppListFragment.kt
+++ b/app/src/main/java/org/omnirom/control/AppListFragment.kt
@@ -1,31 +1,35 @@
+/*
+ *  Copyright (C) 2021 The OmniROM Project
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
 package org.omnirom.control
 
 import android.content.Intent
-import android.content.pm.PackageManager
 import android.os.Bundle
-import android.provider.Settings
 import androidx.appcompat.app.AppCompatActivity
 import androidx.preference.Preference
 import androidx.preference.PreferenceCategory
 import androidx.preference.PreferenceFragmentCompat
 
 class AppListFragment : PreferenceFragmentCompat() {
-    val KEY_APPS_LIST = "apps_list"
-    val OMNISTORE_APP_PKG = "org.omnirom.omnistore"
-    val OMNISTORE_INSTALL_PKG = "org.omnirom.omnistoreinstaller"
+    private val KEY_APPS_LIST = "apps_list"
+    private val OMNISTORE_APP_PKG = "org.omnirom.omnistore"
+    private val OMNISTORE_INSTALL_PKG = "org.omnirom.omnistoreinstaller"
     lateinit var appManager: ApplicationManager
 
-    fun isAvailableApp(packageName: String): Boolean {
-        val pm: PackageManager = requireContext().getPackageManager()
-        return try {
-            val enabled = pm.getApplicationEnabledSetting(packageName)
-            enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED &&
-                    enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER
-        } catch (e: Exception) {
-            false
-        }
-    }
-
     override fun onResume() {
         super.onResume()
         (activity as? AppCompatActivity)?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
@@ -86,32 +90,32 @@
             resources.getString(R.string.omnistore_summary)
         )
 
-        appManager.addApp(
+        /*appManager.addApp(
             "org.omnirom.omnistyle",
             "org.omnirom.omnistyle.WallpaperActivity",
             getString(R.string.wallpaper_title),
             getString(R.string.wallpaper_summary)
-        )
+        )*/
 
         appManager.addApp(
-                "org.omnirom.device",
-                "org.omnirom.device.DeviceSettings",
-                getString(R.string.device_settings_title),
-                getString(R.string.device_settings_summary)
+            "org.omnirom.device",
+            "org.omnirom.device.DeviceSettings",
+            getString(R.string.device_settings_title),
+            getString(R.string.device_settings_summary)
         )
         createAppList()
     }
 
-    fun createAppList() {
+    private fun createAppList() {
         var appCategory: PreferenceCategory? = findPreference(KEY_APPS_LIST)
         if (appCategory != null) {
             appCategory.removeAll()
             for (app in appManager.mAppList) {
-                if (!isAvailableApp(app.mPackage)) {
+                if (!Utils.isAvailableApp(requireContext(), app.mPackage)) {
                     continue
                 }
-                if (app.mPackage.equals(OMNISTORE_INSTALL_PKG) && isAvailableApp(
-                        OMNISTORE_APP_PKG
+                if (app.mPackage.equals(OMNISTORE_INSTALL_PKG) && Utils.isAvailableApp(
+                        requireContext(), OMNISTORE_APP_PKG
                     )
                 ) {
                     continue
@@ -129,6 +133,7 @@
             }
         }
     }
+
     override fun onPreferenceTreeClick(preference: Preference?): Boolean {
         if (preference?.key != null) {
             var app: Application? = appManager.getAppOfPackage(preference.key)
diff --git a/app/src/main/java/org/omnirom/control/Application.kt b/app/src/main/java/org/omnirom/control/Application.kt
index 16e246c..f75c98c 100644
--- a/app/src/main/java/org/omnirom/control/Application.kt
+++ b/app/src/main/java/org/omnirom/control/Application.kt
@@ -1,19 +1,30 @@
+/*
+ *  Copyright (C) 2021 The OmniROM Project
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
 package org.omnirom.control
 
 import android.content.ComponentName
 
-class Application {
-    val mPackage: String
-    val mActivity:String
-    val mTitle: String
-    val mSummary: String
+class Application(packageName: String, activity: String, title: String, summary: String) {
+    val mPackage: String = packageName
+    val mActivity:String = activity
+    val mTitle: String = title
+    val mSummary: String = summary
 
-    constructor(packageName: String, activity: String, title: String, summary: String){
-        mActivity=activity
-        mPackage=packageName
-        mTitle=title
-        mSummary=summary
-    }
     fun getComponentName() : ComponentName{
         return ComponentName(mPackage, mActivity)
     }
diff --git a/app/src/main/java/org/omnirom/control/ApplicationManager.kt b/app/src/main/java/org/omnirom/control/ApplicationManager.kt
index b281d8a..8e13000 100644
--- a/app/src/main/java/org/omnirom/control/ApplicationManager.kt
+++ b/app/src/main/java/org/omnirom/control/ApplicationManager.kt
@@ -1,5 +1,21 @@
 package org.omnirom.control
-
+/*
+ *  Copyright (C) 2021 The OmniROM Project
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
 import android.content.Context
 import android.content.Intent
 import android.content.pm.PackageManager
@@ -15,16 +31,10 @@
 
 
 
-class ApplicationManager {
-
-    val mContext: Context
+class ApplicationManager(context: Context) {
+    private val mContext: Context = context
     val mAppList: ArrayList<Application> = ArrayList()
-    val mIconSize: Int
-
-    constructor(context: Context) {
-        mContext = context
-        mIconSize = mContext.resources.getDimensionPixelSize(R.dimen.applist_icon_size)
-    }
+    private val mIconSize: Int = mContext.resources.getDimensionPixelSize(R.dimen.applist_icon_size)
 
     fun getAppIcon(app: Application): Drawable {
         val pm: PackageManager = mContext.getPackageManager()
@@ -41,7 +51,6 @@
         try {
             mContext.startActivity(intent)
         } catch (e: Exception) {
-
         }
     }
 
@@ -51,30 +60,17 @@
 
     fun getAppOfPackage(packageName: String): Application? {
         for (app in mAppList) {
-            if (app.mPackage.equals(packageName)) return app
+            if (app.mPackage == packageName) return app
         }
         return null
     }
 
-    fun isAvailableApp(app: Application): Boolean {
-        val pm: PackageManager = mContext.getPackageManager()
-        return try {
-            val enabled = pm.getApplicationEnabledSetting(app.mPackage)
-            enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED &&
-                    enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER
-        } catch (e: PackageManager.NameNotFoundException) {
-            false
-        }
-    }
-
-    fun resizeAppIcon(image: Drawable,
-        size: Int, border: Int): Drawable {
+    private fun resizeAppIcon(image: Drawable,
+                              size: Int, border: Int): Drawable {
         val canvas = Canvas()
-        canvas.setDrawFilter(
-            PaintFlagsDrawFilter(
-                Paint.ANTI_ALIAS_FLAG,
-                Paint.FILTER_BITMAP_FLAG
-            )
+        canvas.drawFilter = PaintFlagsDrawFilter(
+            Paint.ANTI_ALIAS_FLAG,
+            Paint.FILTER_BITMAP_FLAG
         )
         val bmResult = Bitmap.createBitmap(
             size + border, size + border,
diff --git a/app/src/main/java/org/omnirom/control/BarsSettingsFragment.kt b/app/src/main/java/org/omnirom/control/BarsSettingsFragment.kt
index c0b4c6f..dd475bb 100644
--- a/app/src/main/java/org/omnirom/control/BarsSettingsFragment.kt
+++ b/app/src/main/java/org/omnirom/control/BarsSettingsFragment.kt
@@ -1,3 +1,20 @@
+/*
+ *  Copyright (C) 2021 The OmniROM Project
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
 package org.omnirom.control
 
 import android.os.Bundle
diff --git a/app/src/main/java/org/omnirom/control/ButtonSettingsFragment.kt b/app/src/main/java/org/omnirom/control/ButtonSettingsFragment.kt
new file mode 100644
index 0000000..ebb9a9e
--- /dev/null
+++ b/app/src/main/java/org/omnirom/control/ButtonSettingsFragment.kt
@@ -0,0 +1,42 @@
+/*
+ *  Copyright (C) 2021 The OmniROM Project
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package org.omnirom.control
+
+import android.os.Bundle
+import android.provider.Settings
+import androidx.appcompat.app.AppCompatActivity
+import androidx.preference.Preference
+import androidx.preference.PreferenceFragmentCompat
+
+
+class ButtonSettingsFragment : PreferenceFragmentCompat() {
+
+    override fun onResume() {
+        super.onResume()
+        (activity as? AppCompatActivity)?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
+        (activity as? SettingsActivity)?.updateFragmentTitle(resources.getString(R.string.button_settings_title))
+    }
+
+    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
+        setPreferencesFromResource(R.xml.button_settings_preferences, rootKey)
+    }
+
+    override fun onPreferenceTreeClick(preference: Preference?): Boolean {
+        return super.onPreferenceTreeClick(preference)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/omnirom/control/GridViewFragment.kt b/app/src/main/java/org/omnirom/control/GridViewFragment.kt
index e86c197..91cef18 100644
--- a/app/src/main/java/org/omnirom/control/GridViewFragment.kt
+++ b/app/src/main/java/org/omnirom/control/GridViewFragment.kt
@@ -1,6 +1,25 @@
+/*
+ *  Copyright (C) 2021 The OmniROM Project
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
 package org.omnirom.control
 
+import android.content.ComponentName
 import android.content.Context
+import android.content.Intent
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
@@ -11,71 +30,100 @@
 
 
 class GridViewFragment() : Fragment() {
-    lateinit var gridView: GridView
-    val gridItems: ArrayList<GridItem>
+    private lateinit var gridView: GridView
+    private val gridItems: ArrayList<GridItem> = ArrayList()
 
-    init {
-        this.gridItems = ArrayList<GridItem>()
-        gridItems.add(
-            GridItem(
-                R.string.applist_settings_title,
-                R.drawable.applist_icon,
-                AppListFragment()
-            )
-        )
-        gridItems.add(
-            GridItem(
-                R.string.bars_settings_title,
-                R.drawable.ic_bars_tile,
-                BarsSettingsFragment()
-            )
-        )
-        gridItems.add(
-            GridItem(
-                R.string.more_settings_title,
-                R.drawable.ic_settings_more,
-                MoreSettingsFragment()
-            )
-        )
+    abstract class GridItem(title: Int, summary: Int, icon: Int) {
+        val gridTitle: Int = title
+        val gridSummary: Int = summary
+        val gridIcon: Int = icon
     }
 
-    class GridItem(text: Int, icon: Int, fragment: Fragment) {
-        val gridText: Int
-        val gridIcon: Int
-        val gridFragment: Fragment
+    class FragmentGridItem(title: Int, summary: Int, icon: Int, fragment: Fragment) :
+        GridItem(title, summary, icon) {
+        val gridFragment: Fragment = fragment
+    }
 
-        init {
-            gridText = text
-            gridIcon = icon
-            gridFragment = fragment
-        }
+    class IntentGridItem(title: Int, summary: Int, icon: Int, intent: Intent) :
+        GridItem(title, summary, icon) {
+        val gridIntent: Intent = intent
     }
 
     class GridViewAdapter(context: Context, gridItems: List<GridItem>) :
         ArrayAdapter<GridItem>(context, 0, gridItems) {
 
-        val vi: LayoutInflater
-
-        init {
-            this.vi = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
-        }
+        private val vi: LayoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
 
         override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
-            val viewItem: View = if (convertView == null) {
-                vi.inflate(R.layout.grid_item, null)
-            } else {
-                convertView
-            }
+            val viewItem: View = convertView ?: vi.inflate(R.layout.grid_item, null)
 
-            val gridItem: GridItem? = getItem(position)
-            viewItem.findViewById<TextView>(R.id.grid_item_text).setText(gridItem?.gridText!!)
+            val gridItem: GridItem = getItem(position)!!
+
+            viewItem.findViewById<TextView>(R.id.grid_item_title).setText(gridItem.gridTitle)
             viewItem.findViewById<ImageView>(R.id.grid_item_icon)
-                .setImageResource(gridItem?.gridIcon!!)
-
+                .setImageResource(gridItem.gridIcon)
+            val summary = context.resources.getString(gridItem.gridSummary)
+            if (summary.isNotEmpty())
+                viewItem.findViewById<TextView>(R.id.grid_item_summary)
+                    .setText(gridItem.gridSummary)
+            else
+                viewItem.findViewById<TextView>(R.id.grid_item_summary).visibility = View.GONE
             return viewItem
         }
     }
 
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+
+        gridItems.add(
+            FragmentGridItem(
+                R.string.applist_settings_title,
+                R.string.applist_settings_summary,
+                R.drawable.applist_icon,
+                AppListFragment()
+            )
+        )
+        gridItems.add(
+            FragmentGridItem(
+                R.string.bars_settings_title,
+                R.string.bars_settings_summary,
+                R.drawable.ic_bars_tile,
+                BarsSettingsFragment()
+            )
+        )
+        gridItems.add(
+            FragmentGridItem(
+                R.string.button_settings_title,
+                R.string.button_settings_summary,
+                R.drawable.ic_settings_buttons,
+                ButtonSettingsFragment()
+            )
+        )
+        if (Utils.isAvailableApp(requireContext(), "org.omnirom.omnistyle")) {
+            val wallpaperIntent = Intent()
+            wallpaperIntent.component = ComponentName(
+                "org.omnirom.omnistyle",
+                "org.omnirom.omnistyle.WallpaperActivity"
+            )
+            gridItems.add(
+                IntentGridItem(
+                    R.string.wallpaper_title,
+                    R.string.wallpaper_summary,
+                    R.drawable.ic_wallpaper,
+                    wallpaperIntent
+                )
+            )
+        }
+        gridItems.add(
+            FragmentGridItem(
+                R.string.more_settings_title,
+                R.string.more_settings_summary,
+                R.drawable.ic_settings_more,
+                MoreSettingsFragment()
+            )
+        )
+    }
+
     override fun onResume() {
         super.onResume()
         (activity as? AppCompatActivity)?.supportActionBar?.setDisplayHomeAsUpEnabled(false)
@@ -93,17 +141,19 @@
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         gridView = view.findViewById(R.id.grid_view)
-
+        gridView.numColumns = resources.getInteger(R.integer.grid_view_columns)
         gridView.adapter = GridViewAdapter(requireContext(), gridItems)
-
         gridView.onItemClickListener =
-            AdapterView.OnItemClickListener { parent, view, position, id ->
+            AdapterView.OnItemClickListener { _, _, position, _ ->
                 val gridItem: GridItem = gridItems.get(position)
-                requireActivity().supportFragmentManager
-                    .beginTransaction()
-                    .replace(R.id.settings, gridItem.gridFragment)
-                    .addToBackStack(null)
-                    .commit()
+                if (gridItem is FragmentGridItem)
+                    requireActivity().supportFragmentManager
+                        .beginTransaction()
+                        .replace(R.id.settings, gridItem.gridFragment)
+                        .addToBackStack(null)
+                        .commit()
+                else if (gridItem is IntentGridItem)
+                    requireActivity().startActivity(gridItem.gridIntent)
             }
     }
 
diff --git a/app/src/main/java/org/omnirom/control/MoreSettingsFragment.kt b/app/src/main/java/org/omnirom/control/MoreSettingsFragment.kt
index c7dea2f..77a337c 100644
--- a/app/src/main/java/org/omnirom/control/MoreSettingsFragment.kt
+++ b/app/src/main/java/org/omnirom/control/MoreSettingsFragment.kt
@@ -1,3 +1,20 @@
+/*
+ *  Copyright (C) 2021 The OmniROM Project
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
 package org.omnirom.control
 
 import android.os.Bundle
diff --git a/app/src/main/java/org/omnirom/control/SettingsActivity.kt b/app/src/main/java/org/omnirom/control/SettingsActivity.kt
index 6fa9ada..c628e9e 100644
--- a/app/src/main/java/org/omnirom/control/SettingsActivity.kt
+++ b/app/src/main/java/org/omnirom/control/SettingsActivity.kt
@@ -1,3 +1,20 @@
+/*
+ *  Copyright (C) 2021 The OmniROM Project
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
 package org.omnirom.control
 
 import android.os.Bundle
@@ -5,38 +22,50 @@
 import android.widget.TextView
 import androidx.appcompat.app.AppCompatActivity
 import androidx.appcompat.widget.Toolbar
-import com.google.android.material.bottomnavigation.BottomNavigationView
-import org.w3c.dom.Text
+import androidx.fragment.app.Fragment
 
 
 class SettingsActivity : AppCompatActivity() {
 
     lateinit var titleView: TextView
+    private val CURRENT_FRAGMENT = "current_fragment"
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.settings_activity)
-        if (savedInstanceState == null) {
-            supportFragmentManager
-                    .beginTransaction()
-                    .replace(R.id.settings, GridViewFragment())
-                    .commit()
+
+        var fragment: Fragment = GridViewFragment()
+        if (savedInstanceState != null) {
+            val savedFragment =
+                supportFragmentManager.getFragment(savedInstanceState, CURRENT_FRAGMENT);
+            if (savedFragment != null)
+                fragment = savedFragment
         }
+        supportFragmentManager.beginTransaction()
+            .replace(R.id.settings, fragment)
+            .commit()
+
         val toolbar: Toolbar = findViewById(R.id.toolbar)
-        toolbar.setTitle("")
+        toolbar.title = ""
         setSupportActionBar(toolbar)
 
-        titleView = findViewById<TextView>(R.id.fragment_title)
+        titleView = findViewById(R.id.fragment_title)
     }
 
     override fun onOptionsItemSelected(item: MenuItem): Boolean {
-        when (item.getItemId()) {
+        when (item.itemId) {
             android.R.id.home -> onBackPressed()
         }
         return super.onOptionsItemSelected(item)
     }
 
     fun updateFragmentTitle(title: String) {
-        titleView.setText(title)
+        titleView.text = title
+    }
+
+    override fun onSaveInstanceState(outState: Bundle) {
+        super.onSaveInstanceState(outState)
+        val currentFragment = supportFragmentManager.fragments.last()
+        supportFragmentManager.putFragment(outState, CURRENT_FRAGMENT, currentFragment)
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/org/omnirom/control/Utils.kt b/app/src/main/java/org/omnirom/control/Utils.kt
new file mode 100644
index 0000000..bb4e9bf
--- /dev/null
+++ b/app/src/main/java/org/omnirom/control/Utils.kt
@@ -0,0 +1,17 @@
+package org.omnirom.control;
+
+import android.content.Context
+import android.content.pm.PackageManager
+
+object Utils {
+    fun isAvailableApp(context: Context, packageName: String): Boolean {
+            val pm: PackageManager = context.getPackageManager()
+            return try {
+                    val enabled = pm.getApplicationEnabledSetting(packageName)
+                    enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED &&
+                            enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER
+            } catch (e: PackageManager.NameNotFoundException) {
+                    false
+            }
+    }
+}
diff --git a/app/src/main/res/drawable/grid_item_background_shape.xml b/app/src/main/res/drawable/grid_item_background_shape.xml
index 15d518c..5321c0e 100644
--- a/app/src/main/res/drawable/grid_item_background_shape.xml
+++ b/app/src/main/res/drawable/grid_item_background_shape.xml
@@ -17,5 +17,5 @@
 
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
     <corners android:radius="@dimen/grid_item_corner_radius" />
-    <solid android:color="?android:colorAccent" />
+    <solid android:color="@color/colorPrimary" />
 </shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_settings_buttons.xml b/app/src/main/res/drawable/ic_settings_buttons.xml
new file mode 100644
index 0000000..de85da8
--- /dev/null
+++ b/app/src/main/res/drawable/ic_settings_buttons.xml
@@ -0,0 +1,26 @@
+<!--
+    Copyright (C) 2016 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:tint="?android:textColorPrimary"
+
+    android:viewportHeight="24">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M4,5A2,2 0 0,0 2,7V17A2,2 0 0,0 4,19H20A2,2 0 0,0 22,17V7A2,2 0 0,0 20,5H4M4,7H20V17H4V7M5,8V10H7V8H5M8,8V10H10V8H8M11,8V10H13V8H11M14,8V10H16V8H14M17,8V10H19V8H17M5,11V13H7V11H5M8,11V13H10V11H8M11,11V13H13V11H11M14,11V13H16V11H14M17,11V13H19V11H17M8,14V16H16V14H8Z" />
+</vector>
diff --git a/app/src/main/res/drawable/ic_wallpaper.xml b/app/src/main/res/drawable/ic_wallpaper.xml
new file mode 100644
index 0000000..c0e41a6
--- /dev/null
+++ b/app/src/main/res/drawable/ic_wallpaper.xml
@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:tint="?android:textColorPrimary"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M4,4h7L11,2L4,2c-1.1,0 -2,0.9 -2,2v7h2L4,4zM10,13l-4,5h12l-3,-4 -2.03,2.71L10,13zM17,8.5c0,-0.83 -0.67,-1.5 -1.5,-1.5S14,7.67 14,8.5s0.67,1.5 1.5,1.5S17,9.33 17,8.5zM20,2h-7v2h7v7h2L22,4c0,-1.1 -0.9,-2 -2,-2zM20,20h-7v2h7c1.1,0 2,-0.9 2,-2v-7h-2v7zM4,13L2,13v7c0,1.1 0.9,2 2,2h7v-2L4,20v-7z" />
+</vector>
diff --git a/app/src/main/res/layout/grid_fragment.xml b/app/src/main/res/layout/grid_fragment.xml
index 2555dde..a5f25e3 100644
--- a/app/src/main/res/layout/grid_fragment.xml
+++ b/app/src/main/res/layout/grid_fragment.xml
@@ -8,10 +8,9 @@
         android:id="@+id/grid_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:numColumns="auto_fit"
+        android:numColumns="@integer/grid_view_columns"
         android:verticalSpacing="@dimen/grip_view_spacing"
         android:horizontalSpacing="@dimen/grip_view_spacing"
         android:stretchMode="columnWidth"
-        android:columnWidth="200dp"
         android:gravity="center" />
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/grid_item.xml b/app/src/main/res/layout/grid_item.xml
index ae3852d..11cfddb 100644
--- a/app/src/main/res/layout/grid_item.xml
+++ b/app/src/main/res/layout/grid_item.xml
@@ -7,7 +7,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_margin="20dp"
-        android:orientation="vertical">
+        android:orientation="horizontal">
 
         <ImageView
             android:id="@+id/grid_item_icon"
@@ -15,12 +15,31 @@
             android:layout_height="48dp"
             android:layout_gravity="center" />
 
-        <TextView
-            android:id="@+id/grid_item_text"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:textAlignment="center" />
+        <LinearLayout
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_gravity="start|center_vertical"
+            android:layout_marginStart="20dp"
+            android:layout_weight="1"
+            android:orientation="vertical">
 
+            <TextView
+                android:id="@+id/grid_item_title"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:text="foo"
+                android:layout_weight="1"
+                android:gravity="center_vertical"
+                android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"/>
+
+            <TextView
+                android:id="@+id/grid_item_summary"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="bar"
+                android:gravity="center_vertical"
+                android:textAppearance="@style/TextAppearance.MaterialComponents.Body2"/>
+
+        </LinearLayout>
     </LinearLayout>
-
 </FrameLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values-land/config.xml b/app/src/main/res/values-land/config.xml
new file mode 100644
index 0000000..93ab955
--- /dev/null
+++ b/app/src/main/res/values-land/config.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <integer name="grid_view_columns">2</integer>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values-land/dimens.xml b/app/src/main/res/values-land/dimens.xml
new file mode 100644
index 0000000..55344e5
--- /dev/null
+++ b/app/src/main/res/values-land/dimens.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/config.xml b/app/src/main/res/values/config.xml
new file mode 100644
index 0000000..517aa97
--- /dev/null
+++ b/app/src/main/res/values/config.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <integer name="grid_view_columns">1</integer>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8622e01..9abf480 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -24,8 +24,11 @@
     <string name="device_settings_summary">Advanced device specific settings</string>
 
     <string name="bars_settings_title">Bars</string>
+    <string name="bars_settings_summary">Status bar options</string>
     <string name="more_settings_title">More</string>
+    <string name="more_settings_summary"></string>
     <string name="applist_settings_title">Applications</string>
+    <string name="applist_settings_summary">OmniROM applications</string>
 
     <string name="navigationbar_title">Navigation bar</string>
     <string name="navigation_bar_show_title">Show navigation bar</string>
@@ -35,4 +38,9 @@
     <string name="status_bar_clock_seconds_title">Show clock seconds</string>
     <string name="status_bar_clock_seconds_summary">Show seconds on status bar clock</string>
 
+    <string name="button_settings_title">Buttons</string>
+    <string name="button_settings_summary"></string>
+    <string name="global_actions_power_title">Power</string>
+    <string name="global_actions_advanced_reboot_title">Enable advanced restart</string>
+    <string name="global_actions_advanced_reboot_summary_new">Show more options in restart menu if not locked</string>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/xml/button_settings_preferences.xml b/app/src/main/res/xml/button_settings_preferences.xml
new file mode 100644
index 0000000..fd0e52d
--- /dev/null
+++ b/app/src/main/res/xml/button_settings_preferences.xml
@@ -0,0 +1,18 @@
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:key="button_settings"
+    android:title="@string/button_settings_title" >
+
+    <PreferenceCategory
+        android:key="button_power"
+        android:title="@string/global_actions_power_title" >
+
+        <org.omnirom.control.preference.SystemSettingSwitchPreference
+            android:key="advanced_reboot"
+            android:title="@string/global_actions_advanced_reboot_title"
+            android:summary="@string/global_actions_advanced_reboot_summary_new"
+            android:defaultValue="false" />
+
+    </PreferenceCategory>
+
+</PreferenceScreen>
diff --git a/app/src/main/res/xml/more_settings_preferences.xml b/app/src/main/res/xml/more_settings_preferences.xml
index 7123145..0a14d53 100644
--- a/app/src/main/res/xml/more_settings_preferences.xml
+++ b/app/src/main/res/xml/more_settings_preferences.xml
@@ -4,4 +4,10 @@
     <Preference
         android:key="bar"
         android:title="bar" />
+
+    <ListPreference
+        android:entries="@array/reply_entries"
+        android:entryValues="@array/reply_values"
+        android:key="list"
+        android:title="list" />
 </PreferenceScreen>
