diff --git a/chunky/src/java/se/llbit/chunky/renderer/postprocessing/PostProcessingFilters.java b/chunky/src/java/se/llbit/chunky/renderer/postprocessing/PostProcessingFilters.java
index 4c54162d91..640de9bb09 100644
--- a/chunky/src/java/se/llbit/chunky/renderer/postprocessing/PostProcessingFilters.java
+++ b/chunky/src/java/se/llbit/chunky/renderer/postprocessing/PostProcessingFilters.java
@@ -24,13 +24,6 @@ public static Optional<PostProcessingFilter> getPostProcessingFilterFromId(Strin
     return Optional.ofNullable(filters.get(id));
   }
 
-  // TODO Create a ChoiceBox that can use different string as ID and as visual representation
-  // so this isn't needed
-  @Deprecated
-  public static Optional<PostProcessingFilter> getPostProcessingFilterFromName(String name) {
-    return Optional.ofNullable(filtersByName.get(name));
-  }
-
   public static Collection<PostProcessingFilter> getFilters() {
     return filtersByName.values();
   }
diff --git a/chunky/src/java/se/llbit/chunky/ui/render/tabs/PostprocessingTab.java b/chunky/src/java/se/llbit/chunky/ui/render/tabs/PostprocessingTab.java
index b83f900e77..d4a7e2bc9e 100644
--- a/chunky/src/java/se/llbit/chunky/ui/render/tabs/PostprocessingTab.java
+++ b/chunky/src/java/se/llbit/chunky/ui/render/tabs/PostprocessingTab.java
@@ -20,10 +20,11 @@
 import javafx.fxml.FXMLLoader;
 import javafx.fxml.Initializable;
 import javafx.scene.Node;
-import javafx.scene.control.ChoiceBox;
+import javafx.scene.control.ComboBox;
 import javafx.scene.control.ScrollPane;
 import javafx.scene.control.Separator;
 import javafx.scene.control.Tooltip;
+import javafx.scene.control.SingleSelectionModel;
 import javafx.util.StringConverter;
 import se.llbit.chunky.renderer.postprocessing.PostProcessingFilter;
 import se.llbit.chunky.renderer.postprocessing.PostProcessingFilters;
@@ -32,20 +33,22 @@
 import se.llbit.chunky.ui.DoubleAdjuster;
 import se.llbit.chunky.ui.controller.RenderControlsFxController;
 import se.llbit.chunky.ui.render.RenderControlsTab;
+import se.llbit.chunky.ui.RegisterableCellAdapter;
+import se.llbit.fxutil.CustomizedListCellFactory;
 import se.llbit.util.ProgressListener;
 import se.llbit.util.TaskTracker;
+import se.llbit.util.TaskTracker.Task;
 
 import java.io.IOException;
 import java.net.URL;
 import java.util.ResourceBundle;
-import se.llbit.util.TaskTracker.Task;
 
 public class PostprocessingTab extends ScrollPane implements RenderControlsTab, Initializable {
   private Scene scene;
   private RenderControlsFxController controller;
 
   @FXML private DoubleAdjuster exposure;
-  @FXML private ChoiceBox<PostProcessingFilter> postprocessingFilter;
+  @FXML private ComboBox<PostProcessingFilter> postprocessingFilter;
 
   public PostprocessingTab() throws IOException {
     FXMLLoader loader = new FXMLLoader(getClass().getResource("PostprocessingTab.fxml"));
@@ -84,21 +87,13 @@ public PostprocessingTab() throws IOException {
     postprocessingFilter.getSelectionModel().select(Scene.DEFAULT_POSTPROCESSING_FILTER);
     postprocessingFilter.getSelectionModel().selectedItemProperty().addListener(
         (observable, oldValue, newValue) -> {
-          scene.setPostprocess(newValue);
-          scene.postProcessFrame(new TaskTracker(ProgressListener.NONE));
-          controller.getCanvas().forceRepaint();
+          if (!(newValue instanceof Separator)) {
+            scene.setPostprocess(newValue);
+            scene.postProcessFrame(new TaskTracker(ProgressListener.NONE));
+            controller.getCanvas().forceRepaint();
+          }
         });
-    postprocessingFilter.setConverter(new StringConverter<PostProcessingFilter>() {
-      @Override
-      public String toString(PostProcessingFilter object) {
-        return object == null ? null : object.getName();
-      }
-
-      @Override
-      public PostProcessingFilter fromString(String string) {
-        return PostProcessingFilters.getPostProcessingFilterFromName(string).orElse(Scene.DEFAULT_POSTPROCESSING_FILTER);
-      }
-    });
+    CustomizedListCellFactory.install(postprocessingFilter, RegisterableCellAdapter.INSTANCE);
     exposure.setName("Exposure");
     exposure.setTooltip("Linear exposure of the image.");
     exposure.setRange(Scene.MIN_EXPOSURE, Scene.MAX_EXPOSURE);
diff --git a/chunky/src/res/se/llbit/chunky/ui/render/tabs/PostprocessingTab.fxml b/chunky/src/res/se/llbit/chunky/ui/render/tabs/PostprocessingTab.fxml
index af17ccfcad..6a71132f65 100644
--- a/chunky/src/res/se/llbit/chunky/ui/render/tabs/PostprocessingTab.fxml
+++ b/chunky/src/res/se/llbit/chunky/ui/render/tabs/PostprocessingTab.fxml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <?import javafx.geometry.Insets?>
-<?import javafx.scene.control.ChoiceBox?>
+<?import javafx.scene.control.ComboBox?>
 <?import javafx.scene.control.Label?>
 <?import javafx.scene.layout.HBox?>
 <?import javafx.scene.layout.VBox?>
@@ -14,7 +14,7 @@
     <DoubleAdjuster fx:id="exposure" />
     <HBox alignment="CENTER_LEFT" prefWidth="200.0" spacing="10.0">
       <Label text="Postprocessing filter:" />
-      <ChoiceBox fx:id="postprocessingFilter" prefWidth="150.0" />
+      <ComboBox fx:id="postprocessingFilter" prefWidth="150.0" />
     </HBox>
     <Text strokeType="OUTSIDE" strokeWidth="0.0" wrappingWidth="275"
       text="Postprocessing affects performance when Render Preview tab is visible. Switching to the Map tab mitigates this." />
diff --git a/lib/src/se/llbit/fxutil/CustomizedListCellFactory.java b/lib/src/se/llbit/fxutil/CustomizedListCellFactory.java
index 54b87cfdc0..53218b49c8 100644
--- a/lib/src/se/llbit/fxutil/CustomizedListCellFactory.java
+++ b/lib/src/se/llbit/fxutil/CustomizedListCellFactory.java
@@ -16,11 +16,11 @@
  */
 package se.llbit.fxutil;
 
-import javafx.scene.control.ComboBox;
-import javafx.scene.control.ListCell;
-import javafx.scene.control.ListView;
-import javafx.scene.control.Tooltip;
+import javafx.geometry.Insets;
+import javafx.scene.Node;
+import javafx.scene.control.*;
 import javafx.util.Callback;
+import javafx.util.StringConverter;
 
 /**
  * A list cell factory that shows labels and tooltips.
@@ -66,7 +66,13 @@ protected void updateItem(T item, boolean empty) {
             super.updateItem(item, empty);
             if (item == null || empty || adapter == null) {
                 setGraphic(null);
+            } else if (item instanceof Separator) {
+                setDisabled(true);
+                setMouseTransparent(true);
+                setGraphic((Node) item);
+                setPadding(Insets.EMPTY);
             } else {
+                setGraphic(null);
                 setText(adapter.getLabel(item));
                 setTooltip(adapter.getTooltip(item));
             }