SCIFIO may not be failing nicely
The intended behavior when SCIFIO fails to open a dataset is that it passes control back to ImageJ 1.x.

However, it seems like this may not be the case, due to the number of SCIFIO failure bug reports that we're seeing.

diff --git a/pom.xml b/pom.xml
index d7141dd..d78c496 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,6 +15,11 @@
 	<name>ImageJ Legacy Bridge</name>
 	<description>The legacy component enables backward compatibility with the legacy version of ImageJ (1.x). It contains the code necessary to translate ImageJ images into ImageJ1 format and back, so that legacy plugins can be executed faithfully.</description>
 
+	<properties>
+		<!-- TEMP: only needed until pom-imagej 2.16 comes out -->
+		<ij1-patcher.version>0.5.1-SNAPSHOT</ij1-patcher.version>
+	</properties>
+
 	<scm>
 		<connection>scm:git:git://github.com/imagej/imagej-legacy</connection>
 		<developerConnection>scm:git:git@github.com:imagej/imagej-legacy</developerConnection>
diff --git a/src/main/java/net/imagej/legacy/DefaultLegacyHooks.java b/src/main/java/net/imagej/legacy/DefaultLegacyHooks.java
index 10b8ee2..0a6c926 100644
--- a/src/main/java/net/imagej/legacy/DefaultLegacyHooks.java
+++ b/src/main/java/net/imagej/legacy/DefaultLegacyHooks.java
@@ -33,6 +33,7 @@ package net.imagej.legacy;
 
 import ij.ImagePlus;
 
+import java.awt.event.KeyEvent;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileInputStream;
@@ -42,6 +43,8 @@ import java.net.URL;
 import java.util.Date;
 import java.util.List;
 
+import javax.swing.KeyStroke;
+
 import net.imagej.display.ImageDisplay;
 import net.imagej.legacy.plugin.LegacyAppConfiguration;
 import net.imagej.legacy.plugin.LegacyEditor;
@@ -402,4 +405,15 @@ public class DefaultLegacyHooks extends LegacyHooks {
 		}
 		return null;
 	}	
+
+	/** @inherit */
+	@Override
+	public boolean interceptKeyPressed(final KeyEvent e) {
+		String accelerator = KeyStroke.getKeyStrokeForEvent(e).toString();
+		if (accelerator.startsWith("pressed ")) {
+			accelerator = accelerator.substring("pressed ".length());
+		}
+		return legacyService.handleShortcut(accelerator) ||
+				(!e.isControlDown() && legacyService.handleShortcut("control " + accelerator));
+	}
 }
diff --git a/src/main/java/net/imagej/legacy/DefaultLegacyService.java b/src/main/java/net/imagej/legacy/DefaultLegacyService.java
index e62654a..a57633a 100644
--- a/src/main/java/net/imagej/legacy/DefaultLegacyService.java
+++ b/src/main/java/net/imagej/legacy/DefaultLegacyService.java
@@ -65,9 +65,12 @@ import org.scijava.display.event.input.KyPressedEvent;
 import org.scijava.display.event.input.KyReleasedEvent;
 import org.scijava.event.EventHandler;
 import org.scijava.event.EventService;
+import org.scijava.input.Accelerator;
 import org.scijava.input.KeyCode;
 import org.scijava.log.LogService;
 import org.scijava.menu.MenuService;
+import org.scijava.module.Module;
+import org.scijava.module.ModuleInfo;
 import org.scijava.module.ModuleService;
 import org.scijava.options.OptionsService;
 import org.scijava.options.event.OptionsEvent;
@@ -546,6 +549,15 @@ public final class DefaultLegacyService extends AbstractService implements
 		ij1Helper.addMenuItems(commands);
 	}
 
+	boolean handleShortcut(final String accelerator) {
+		final Accelerator acc = Accelerator.create(accelerator);
+		if (acc == null) return false;
+		final ModuleInfo module = moduleService.getModuleForAccelerator(acc);
+		if (module == null || module.is("no-legacy")) return false;
+		moduleService.run(module, true);
+		return true;
+	}
+
 	public synchronized UIService uiService() {
 		if (uiService == null) uiService = getContext().getService(UIService.class);
 		return uiService;
['src/main/java/net/imagej/legacy/DefaultLegacyService.java', 'pom.xml', 'src/main/java/net/imagej/legacy/DefaultLegacyHooks.java']