diff --git a/src/main/java/bdv/tools/HelpDialog.java b/src/main/java/bdv/tools/HelpDialog.java
index 4ccd0fcbd32270429b621fa8cfd7c101815e0581..61edcb7ed41fdb417c49f216def1d1f7fa9b5a6b 100644
--- a/src/main/java/bdv/tools/HelpDialog.java
+++ b/src/main/java/bdv/tools/HelpDialog.java
@@ -28,7 +28,7 @@
  */
 package bdv.tools;
 
-import bdv.util.MemoryFixedDialog;
+import bdv.util.DelayedPackDialog;
 
 import java.awt.BorderLayout;
 import java.awt.Dimension;
@@ -48,9 +48,8 @@ import javax.swing.JEditorPane;
 import javax.swing.JScrollPane;
 import javax.swing.KeyStroke;
 import javax.swing.ScrollPaneConstants;
-import javax.swing.WindowConstants;
 
-public class HelpDialog extends MemoryFixedDialog
+public class HelpDialog extends DelayedPackDialog
 {
 	private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/bdv/tools/RecordMaxProjectionDialog.java b/src/main/java/bdv/tools/RecordMaxProjectionDialog.java
index dcc42668172a2277d0a04afa581aee655de121f5..3ec543035640a7494229a28b3e862ba33cc40d46 100644
--- a/src/main/java/bdv/tools/RecordMaxProjectionDialog.java
+++ b/src/main/java/bdv/tools/RecordMaxProjectionDialog.java
@@ -30,7 +30,7 @@ package bdv.tools;
 
 import bdv.cache.CacheControl;
 import bdv.export.ProgressWriter;
-import bdv.util.MemoryFixedDialog;
+import bdv.util.DelayedPackDialog;
 import bdv.util.Prefs;
 import bdv.viewer.BasicViewerState;
 import bdv.viewer.ViewerPanel;
@@ -64,7 +64,6 @@ import javax.swing.JSpinner;
 import javax.swing.JTextField;
 import javax.swing.KeyStroke;
 import javax.swing.SpinnerNumberModel;
-import javax.swing.WindowConstants;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import net.imglib2.Cursor;
@@ -77,7 +76,7 @@ import bdv.viewer.OverlayRenderer;
 import bdv.viewer.render.RenderTarget;
 import net.imglib2.util.LinAlgHelpers;
 
-public class RecordMaxProjectionDialog extends MemoryFixedDialog implements OverlayRenderer
+public class RecordMaxProjectionDialog extends DelayedPackDialog implements OverlayRenderer
 {
 	private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/bdv/tools/RecordMovieDialog.java b/src/main/java/bdv/tools/RecordMovieDialog.java
index ae5c564f509274844d17347984df56e1d23ab5ba..cf35bcbd141638108ea1cde6d74bec026dd63084 100644
--- a/src/main/java/bdv/tools/RecordMovieDialog.java
+++ b/src/main/java/bdv/tools/RecordMovieDialog.java
@@ -30,7 +30,7 @@ package bdv.tools;
 
 import bdv.cache.CacheControl;
 import bdv.export.ProgressWriter;
-import bdv.util.MemoryFixedDialog;
+import bdv.util.DelayedPackDialog;
 import bdv.util.Prefs;
 import bdv.viewer.BasicViewerState;
 import bdv.viewer.ViewerPanel;
@@ -63,14 +63,13 @@ import javax.swing.JSpinner;
 import javax.swing.JTextField;
 import javax.swing.KeyStroke;
 import javax.swing.SpinnerNumberModel;
-import javax.swing.WindowConstants;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import net.imglib2.realtransform.AffineTransform3D;
 import bdv.viewer.OverlayRenderer;
 import bdv.viewer.render.RenderTarget;
 
-public class RecordMovieDialog extends MemoryFixedDialog implements OverlayRenderer
+public class RecordMovieDialog extends DelayedPackDialog implements OverlayRenderer
 {
 	private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/bdv/tools/VisibilityAndGroupingDialog.java b/src/main/java/bdv/tools/VisibilityAndGroupingDialog.java
index 9b5b2bacd33a6deb883a8fd77df7fd698ab933a8..b1da27e26f79a5bd9cfe80c2da58c2047b44cbee 100644
--- a/src/main/java/bdv/tools/VisibilityAndGroupingDialog.java
+++ b/src/main/java/bdv/tools/VisibilityAndGroupingDialog.java
@@ -28,7 +28,7 @@
  */
 package bdv.tools;
 
-import bdv.util.MemoryFixedDialog;
+import bdv.util.DelayedPackDialog;
 import bdv.viewer.SourceAndConverter;
 import bdv.viewer.ViewerState;
 import bdv.viewer.VisibilityAndGrouping;
@@ -68,12 +68,11 @@ import javax.swing.JRadioButton;
 import javax.swing.JTextField;
 import javax.swing.KeyStroke;
 import javax.swing.SwingUtilities;
-import javax.swing.WindowConstants;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
 
 @Deprecated
-public class VisibilityAndGroupingDialog extends MemoryFixedDialog
+public class VisibilityAndGroupingDialog extends DelayedPackDialog
 {
 	private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/bdv/tools/brightness/BrightnessDialog.java b/src/main/java/bdv/tools/brightness/BrightnessDialog.java
index aabaeea494471bbcb2a2b90462774a30a87dec13..ce98337f48a7fe79259fc397cb4b68e5892fb93e 100644
--- a/src/main/java/bdv/tools/brightness/BrightnessDialog.java
+++ b/src/main/java/bdv/tools/brightness/BrightnessDialog.java
@@ -60,12 +60,11 @@ import javax.swing.JSpinner;
 import javax.swing.KeyStroke;
 import javax.swing.SpinnerNumberModel;
 import javax.swing.SwingUtilities;
-import javax.swing.WindowConstants;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 
 import bdv.util.InvokeOnEDT;
-import bdv.util.MemoryFixedDialog;
+import bdv.util.DelayedPackDialog;
 import mpicbg.spim.data.generic.sequence.BasicViewSetup;
 import net.imglib2.type.numeric.ARGBType;
 
@@ -76,7 +75,7 @@ import net.imglib2.type.numeric.ARGBType;
  * @author Tobias Pietzsch <tobias.pietzsch@gmail.com>
  */
 @Deprecated
-public class BrightnessDialog extends MemoryFixedDialog
+public class BrightnessDialog extends DelayedPackDialog
 {
 	public BrightnessDialog( final Frame owner, final SetupAssignments setupAssignments )
 	{
diff --git a/src/main/java/bdv/util/MemoryFixedDialog.java b/src/main/java/bdv/util/DelayedPackDialog.java
similarity index 54%
rename from src/main/java/bdv/util/MemoryFixedDialog.java
rename to src/main/java/bdv/util/DelayedPackDialog.java
index 9f60c07b398f24d7fb1d4a90fc9baaada73aa7d4..3d3d178758cbb8635f8df5488f2e473366da556a 100644
--- a/src/main/java/bdv/util/MemoryFixedDialog.java
+++ b/src/main/java/bdv/util/DelayedPackDialog.java
@@ -3,17 +3,14 @@ package bdv.util;
 import javax.swing.*;
 import java.awt.*;
 
-public class MemoryFixedDialog extends JDialog
+/**
+ * A {@code JDialog} that delays {@code pack()} calls until the dialog is made visible.
+ */
+public class DelayedPackDialog extends JDialog
 {
-	private boolean packIsPending = false;
+	private volatile boolean packIsPending = false;
 
-	public MemoryFixedDialog()
-	{
-		super();
-		super.setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE );
-	}
-
-	public MemoryFixedDialog( Frame owner, String title, boolean modal )
+	public DelayedPackDialog( Frame owner, String title, boolean modal )
 	{
 		super( owner, title, modal );
 	}
@@ -40,10 +37,4 @@ public class MemoryFixedDialog extends JDialog
 		}
 		super.setVisible( visible );
 	}
-
-	@Override
-	public void setDefaultCloseOperation( int operation )
-	{
-		// do nothing
-	}
 }