diff --git a/src/main/java/gregtech/api/cover/CoverWithUI.java b/src/main/java/gregtech/api/cover/CoverWithUI.java
index 7ddf250bbca..2ad525d3e3e 100644
--- a/src/main/java/gregtech/api/cover/CoverWithUI.java
+++ b/src/main/java/gregtech/api/cover/CoverWithUI.java
@@ -1,11 +1,22 @@
 package gregtech.api.cover;
 
+import com.cleanroommc.modularui.utils.Alignment;
+import com.cleanroommc.modularui.utils.MouseData;
+import com.cleanroommc.modularui.widget.Widget;
+import com.cleanroommc.modularui.widgets.ToggleButton;
+
 import gregtech.api.gui.IUIHolder;
 import gregtech.api.gui.ModularUI;
+import gregtech.api.mui.GTGuiTextures;
 import gregtech.api.mui.GTGuiTheme;
 import gregtech.api.mui.GregTechGuiScreen;
 import gregtech.api.mui.factory.CoverGuiFactory;
 
+import gregtech.common.covers.CoverConveyor;
+import gregtech.common.covers.FluidFilterMode;
+import gregtech.common.covers.ItemFilterMode;
+import gregtech.common.covers.ManualImportExportMode;
+
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.entity.player.EntityPlayerMP;
 import net.minecraft.item.ItemStack;
@@ -107,6 +118,97 @@ default ParentWidget<?> createSettingsRow() {
         return new ParentWidget<>().height(16).widthRel(1.0f).marginBottom(2);
     }
 
+    default Widget<ToggleButton> createManualIoButton(EnumSyncValue<ManualImportExportMode> value, ManualImportExportMode mode) {
+        return new ToggleButton().size(18)
+                .marginRight(2)
+                .value(boolValueOf(value, mode))
+                .background(GTGuiTextures.MC_BUTTON_DISABLED)
+                .selectedBackground(GTGuiTextures.MC_BUTTON)
+                .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()])
+                .addTooltipLine(switch (mode) {
+                    case DISABLED -> IKey.lang("cover.universal.manual_import_export.mode.disabled");
+                    case UNFILTERED -> IKey.lang("cover.universal.manual_import_export.mode.unfiltered");
+                    case FILTERED -> IKey.lang("cover.universal.manual_import_export.mode.filtered");
+                });
+    }
+
+
+    default Widget<ToggleButton> createConveyorModeButton(EnumSyncValue<CoverConveyor.ConveyorMode> value, CoverConveyor.ConveyorMode mode) {
+        return new ToggleButton().size(18)
+                .marginRight(2)
+                .value(boolValueOf(value, mode))
+                .background(GTGuiTextures.MC_BUTTON_DISABLED)
+                .selectedBackground(GTGuiTextures.MC_BUTTON)
+                .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY[mode.ordinal()])
+                .addTooltipLine(switch (mode) {
+                    case EXPORT -> IKey.lang("cover.conveyor.mode.export");
+                    case IMPORT -> IKey.lang("cover.conveyor.mode.import");
+                });
+    }
+
+    default Row createItemFilterModeRow(EnumSyncValue<ItemFilterMode> filteringMode) {
+        return new Row().coverChildrenHeight()
+                .widthRel(1f).left(0)
+                .child(createItemFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT))
+                .child(createItemFilterModeButton(filteringMode, ItemFilterMode.FILTER_EXTRACT))
+                .child(createItemFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH))
+                .child(IKey.str("Filter Mode").asWidget().align(Alignment.CenterRight));
+    }
+
+    default Widget<ToggleButton> createItemFilterModeButton(EnumSyncValue<ItemFilterMode> value, ItemFilterMode mode) {
+        return new ToggleButton().size(18)
+                .value(boolValueOf(value, mode))
+                .background(GTGuiTextures.MC_BUTTON_DISABLED)
+                .selectedBackground(GTGuiTextures.MC_BUTTON)
+                .marginRight(2)
+//                .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) todo new overlays
+                .addTooltipLine(IKey.lang(mode.localeName));
+    }
+
+    default Row createFluidFilterModeRow(EnumSyncValue<FluidFilterMode> filteringMode) {
+        return new Row().coverChildrenHeight()
+                .widthRel(1f).left(0)
+                .child(createFluidFilterModeButton(filteringMode, FluidFilterMode.FILTER_FILL))
+                .child(createFluidFilterModeButton(filteringMode, FluidFilterMode.FILTER_DRAIN))
+                .child(createFluidFilterModeButton(filteringMode, FluidFilterMode.FILTER_BOTH))
+                .child(IKey.str("Filter Mode").asWidget().align(Alignment.CenterRight));
+    }
+
+    default Widget<ToggleButton> createFluidFilterModeButton(EnumSyncValue<FluidFilterMode> value, FluidFilterMode mode) {
+        return new ToggleButton().size(18)
+                .value(boolValueOf(value, mode))
+                .background(GTGuiTextures.MC_BUTTON_DISABLED)
+                .selectedBackground(GTGuiTextures.MC_BUTTON)
+                .marginRight(2)
+//                .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) todo new overlays
+                .addTooltipLine(IKey.lang(mode.localeName));
+    }
+
+    default int getIncrementValue(MouseData data) {
+        int adjust = 1;
+        if (data.shift) adjust *= 4;
+        if (data.ctrl) adjust *= 16;
+        if (data.alt) adjust *= 64;
+        return adjust;
+    }
+
+    default IKey createAdjustOverlay(boolean increment) {
+        final StringBuilder builder = new StringBuilder();
+        builder.append(increment ? '+' : '-');
+        builder.append(getIncrementValue(MouseData.create(-1)));
+
+        float scale = 1f;
+        if (builder.length() == 3) {
+            scale = 0.8f;
+        } else if (builder.length() == 4) {
+            scale = 0.6f;
+        } else if (builder.length() > 4) {
+            scale = 0.5f;
+        }
+        return IKey.str(builder.toString())
+                .scale(scale);
+    }
+
     /**
      * Get a BoolValue for use with toggle buttons which are "linked together,"
      * meaning only one of them can be pressed at a time.
diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java
index 6dc0537f1db..f637c98d967 100644
--- a/src/main/java/gregtech/common/covers/CoverConveyor.java
+++ b/src/main/java/gregtech/common/covers/CoverConveyor.java
@@ -606,58 +606,6 @@ protected ParentWidget<Column> createUI(ModularPanel mainPanel, GuiSyncManager g
                                 .height(18)));
     }
 
-    private Widget<ToggleButton> createManualIoButton(EnumSyncValue<ManualImportExportMode> value, ManualImportExportMode mode) {
-        return new ToggleButton().size(18)
-                .marginRight(2)
-                .value(boolValueOf(value, mode))
-                .background(GTGuiTextures.MC_BUTTON_DISABLED)
-                .selectedBackground(GTGuiTextures.MC_BUTTON)
-                .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()])
-                .addTooltipLine(switch (mode) {
-                    case DISABLED -> IKey.lang("cover.universal.manual_import_export.mode.disabled");
-                    case UNFILTERED -> IKey.lang("cover.universal.manual_import_export.mode.unfiltered");
-                    case FILTERED -> IKey.lang("cover.universal.manual_import_export.mode.filtered");
-                });
-    }
-
-    private Widget<ToggleButton> createConveyorModeButton(EnumSyncValue<ConveyorMode> value, ConveyorMode mode) {
-        return new ToggleButton().size(18)
-                .marginRight(2)
-                .value(boolValueOf(value, mode))
-                .background(GTGuiTextures.MC_BUTTON_DISABLED)
-                .selectedBackground(GTGuiTextures.MC_BUTTON)
-                .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY[mode.ordinal()])
-                .addTooltipLine(switch (mode) {
-                    case EXPORT -> IKey.lang("cover.conveyor.mode.export");
-                    case IMPORT -> IKey.lang("cover.conveyor.mode.import");
-                });
-    }
-
-    protected int getIncrementValue(MouseData data) {
-        int adjust = 1;
-        if (data.shift) adjust *= 4;
-        if (data.ctrl) adjust *= 16;
-        if (data.alt) adjust *= 64;
-        return adjust;
-    }
-
-    protected IKey createAdjustOverlay(boolean increment) {
-        final StringBuilder builder = new StringBuilder();
-        builder.append(increment ? '+' : '-');
-        builder.append(getIncrementValue(MouseData.create(-1)));
-
-        float scale = 1f;
-        if (builder.length() == 3) {
-            scale = 0.8f;
-        } else if (builder.length() == 4) {
-            scale = 0.6f;
-        } else if (builder.length() > 4) {
-            scale = 0.5f;
-        }
-        return IKey.str(builder.toString())
-                .scale(scale);
-    }
-
     protected int getMaxStackSize() {
         return 1;
     }
diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java
index 038983c7015..2742df9ad7e 100644
--- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java
+++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java
@@ -1,5 +1,12 @@
 package gregtech.common.covers;
 
+import com.cleanroommc.modularui.drawable.Rectangle;
+
+import com.cleanroommc.modularui.utils.Alignment;
+import com.cleanroommc.modularui.value.sync.EnumSyncValue;
+
+import com.cleanroommc.modularui.widgets.layout.Column;
+
 import gregtech.api.capability.impl.FluidHandlerDelegate;
 import gregtech.api.cover.CoverBase;
 import gregtech.api.cover.CoverDefinition;
@@ -147,9 +154,16 @@ public boolean usesMui2() {
 
     @Override
     public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) {
-        return getFluidFilter().createPanel(guiSyncManager).padding(7)
+        var filteringMode = new EnumSyncValue<>(FluidFilterMode.class, this::getFilterMode, this::setFilterMode);
+
+        return getFluidFilter().createPanel(guiSyncManager)
+                .size(176, 194).padding(7)
                 .child(CoverWithUI.createTitleRow(getPickItem()))
-                .child(getFluidFilter().createWidgets(guiSyncManager).top(22))
+                .child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight()
+                        .child(createFluidFilterModeRow(filteringMode))
+                        .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget()
+                                .height(1).widthRel(0.95f).margin(0, 4))
+                        .child(getFluidFilter().createWidgets(guiSyncManager)))
                 .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7));
     }
 
diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java
index 0f253f1b376..62bb5a66d9c 100644
--- a/src/main/java/gregtech/common/covers/CoverItemFilter.java
+++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java
@@ -162,32 +162,13 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag
                 .size(176, 194).padding(7)
                 .child(CoverWithUI.createTitleRow(getPickItem()).left(4))
                 .child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight()
-                        .child(new Row().coverChildrenHeight()
-                                .widthRel(1f).left(0)
-                                .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT))
-                                .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_EXTRACT))
-                                .child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH))
-                                .child(IKey.str("Filter Mode").asWidget().align(Alignment.CenterRight)))
+                        .child(createItemFilterModeRow(filteringMode))
                         .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget()
                                 .height(1).widthRel(0.95f).margin(0, 4))
                         .child(getItemFilter().createWidgets(guiSyncManager).left(0)))
                 .child(SlotGroupWidget.playerInventory(0).bottom(7).left(7));
     }
 
-    private Widget<ToggleButton> createFilterModeButton(EnumSyncValue<ItemFilterMode> value, ItemFilterMode mode) {
-        return new ToggleButton().size(18)
-                .value(boolValueOf(value, mode))
-                .background(GTGuiTextures.MC_BUTTON_DISABLED)
-                .selectedBackground(GTGuiTextures.MC_BUTTON)
-                .marginRight(2)
-//                .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()]) todo new overlays
-                .addTooltipLine(switch (mode) {
-                    case FILTER_INSERT -> IKey.lang("cover.universal.manual_import_export.mode.disabled");
-                    case FILTER_EXTRACT -> IKey.lang("cover.universal.manual_import_export.mode.unfiltered");
-                    case FILTER_BOTH -> IKey.lang("cover.universal.manual_import_export.mode.filtered");
-                });
-    }
-
     @Override
     public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline,
                             Cuboid6 plateBox, BlockRenderLayer layer) {
diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java
index a626a325566..aea1769028b 100644
--- a/src/main/java/gregtech/common/covers/CoverPump.java
+++ b/src/main/java/gregtech/common/covers/CoverPump.java
@@ -321,67 +321,6 @@ protected ParentWidget<?> createUI(ModularPanel mainPanel, GuiSyncManager syncMa
                                 .height(18)));
     }
 
-    private Widget<ToggleButton> createManualIoButton(EnumSyncValue<ManualImportExportMode> value, ManualImportExportMode mode) {
-        return new ToggleButton().size(18)
-                .value(boolValueOf(value, mode))
-                .background(GTGuiTextures.MC_BUTTON_DISABLED)
-                .selectedBackground(GTGuiTextures.MC_BUTTON)
-                .overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()])
-                .addTooltipLine(switch (mode) {
-                    case DISABLED -> IKey.lang("cover.universal.manual_import_export.mode.disabled");
-                    case UNFILTERED -> IKey.lang("cover.universal.manual_import_export.mode.unfiltered");
-                    case FILTERED -> IKey.lang("cover.universal.manual_import_export.mode.filtered");
-                });
-    }
-
-    protected int getIncrementValue(MouseData data) {
-        int adjust = 1;
-        if (data.shift) adjust *= 4;
-        if (data.ctrl) adjust *= 16;
-        if (data.alt) adjust *= 64;
-        return adjust;
-    }
-
-    protected IKey createAdjustOverlay(boolean increment) {
-        final StringBuilder builder = new StringBuilder();
-        builder.append(increment ? '+' : '-');
-        builder.append(getIncrementValue(MouseData.create(-1)));
-
-        float scale = 1f;
-        if (builder.length() == 3) {
-            scale = 0.8f;
-        } else if (builder.length() == 4) {
-            scale = 0.6f;
-        } else if (builder.length() > 4) {
-            scale = 0.5f;
-        }
-        return IKey.str(builder.toString())
-                .scale(scale);
-    }
-
-    public static Function<String, String> getTextFieldValidator(IntSupplier maxSupplier) {
-        int min = 1;
-        return val -> {
-            if (val.isEmpty()) {
-                return String.valueOf(min);
-            }
-            int max = maxSupplier.getAsInt();
-            int num;
-            try {
-                num = Integer.parseInt(val);
-            } catch (NumberFormatException ignored) {
-                return String.valueOf(max);
-            }
-            if (num < min) {
-                return String.valueOf(min);
-            }
-            if (num > max) {
-                return String.valueOf(max);
-            }
-            return val;
-        };
-    }
-
     @Override
     public @NotNull EnumActionResult onScrewdriverClick(@NotNull EntityPlayer playerIn, @NotNull EnumHand hand,
                                                         @NotNull CuboidRayTraceResult hitResult) {