diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java
index 63943695afbcf603dab0e92177734426a91fd6bd..cb2af06909e15b9bfd83a438daf0e26228bcf12e 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java
@@ -31,11 +31,14 @@ import android.view.Menu;
 import android.view.MenuItem;
 import android.widget.FrameLayout;
 
+import com.afollestad.materialdialogs.MaterialDialog;
 import com.mikepenz.materialdrawer.AccountHeader;
 import com.mikepenz.materialdrawer.AccountHeaderBuilder;
 import com.mikepenz.materialdrawer.Drawer;
 import com.mikepenz.materialdrawer.model.ProfileDrawerItem;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import butterknife.Bind;
@@ -43,6 +46,8 @@ import butterknife.ButterKnife;
 import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.events.ConnectionChangeEvent;
 import de.kuschku.libquassel.events.GeneralErrorEvent;
+import de.kuschku.libquassel.localtypes.BacklogFilter;
+import de.kuschku.libquassel.message.Message;
 import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig;
 import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewManager;
 import de.kuschku.quasseldroid_ng.R;
@@ -155,6 +160,7 @@ public class MainActivity extends BoundActivity {
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case R.id.action_hide_events:
+                displayFilterDialog();
                 return true;
             case R.id.action_reauth:
                 context.settings().lastAccount.set("");
@@ -238,4 +244,56 @@ public class MainActivity extends BoundActivity {
         if (thread == null)
             connectToServer(manager.account(context.settings().lastAccount.get()));
     }
+
+    public void displayFilterDialog() {
+        if (context.client() != null) {
+            List<Integer> filterSettings = Arrays.asList(
+                    Message.Type.Join.value,
+                    Message.Type.Part.value,
+                    Message.Type.Quit.value,
+                    Message.Type.Nick.value,
+                    Message.Type.Mode.value,
+                    Message.Type.Topic.value
+            );
+            int[] filterSettingsInts = new int[filterSettings.size()];
+            for (int i = 0; i < filterSettingsInts.length; i++) {
+                filterSettingsInts[i] = filterSettings.get(i);
+            }
+
+            BacklogFilter backlogFilter = context.client().backlogManager().filter(context.client().backlogManager().open());
+            int oldFilters = backlogFilter.getFilters();
+            List<Integer> oldFiltersList = new ArrayList<>();
+            for (int type : filterSettings) {
+                if ((type & oldFilters) != 0)
+                    oldFiltersList.add(filterSettings.indexOf(type));
+            }
+            Integer[] selectedIndices = oldFiltersList.toArray(new Integer[oldFiltersList.size()]);
+            new MaterialDialog.Builder(this)
+                    .items(
+                            "Joins",
+                            "Parts",
+                            "Quits",
+                            "Nick Changes",
+                            "Mode Changes",
+                            "Topic Changes"
+                    )
+                    .itemsIds(filterSettingsInts)
+                    .itemsCallbackMultiChoice(
+                            selectedIndices,
+                            (dialog, which, text) -> false
+                    )
+                    .positiveText("Select")
+                    .negativeText("Cancel")
+                    .onPositive((dialog, which) -> {
+                        int filters = 0x00000000;
+                        if (dialog.getSelectedIndices() != null)
+                            for (int i : dialog.getSelectedIndices()) {
+                                filters |= filterSettings.get(i);
+                            }
+                        backlogFilter.setFilters(filters);
+                    })
+                    .build()
+                    .show();
+        }
+    }
 }