diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ImportHyperlink.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ImportHyperlink.java
index 77d7f2c..51d6277 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ImportHyperlink.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ImportHyperlink.java
@@ -8,13 +8,18 @@
  */
 package com.google.eclipse.protobuf.ui.editor.hyperlinking;
 
+import static org.eclipse.emf.common.util.URI.createURI;
+
 import org.apache.log4j.Logger;
 import org.eclipse.emf.common.util.URI;
-import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.*;
 import org.eclipse.jface.text.hyperlink.IHyperlink;
 import org.eclipse.ui.PartInitException;
+import org.eclipse.xtext.nodemodel.INode;
 
+import com.google.eclipse.protobuf.protobuf.Import;
 import com.google.eclipse.protobuf.ui.editor.FileOpener;
+import com.google.inject.Inject;
 
 /**
  * A hyperlink for imported .proto files.
@@ -24,14 +29,14 @@
 class ImportHyperlink implements IHyperlink {
   private static Logger logger = Logger.getLogger(ImportHyperlink.class);
 
-  private final URI importUri;
-  private final IRegion region;
-  private final FileOpener fileOpener;
+  @Inject private FileOpener fileOpener;
 
-  ImportHyperlink(URI importUri, IRegion region, FileOpener fileOpener) {
-    this.importUri = importUri;
-    this.region = region;
-    this.fileOpener = fileOpener;
+  private URI importUri;
+  private IRegion region;
+
+  void update(Import anImport, INode importUriNode) {
+    importUri = createURI(anImport.getImportURI());
+    region = new Region(importUriNode.getOffset(), importUriNode.getLength());
   }
 
   @Override public void open() {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ProtobufHyperlinkDetector.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ProtobufHyperlinkDetector.java
index db92a2e..3347629 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ProtobufHyperlinkDetector.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ProtobufHyperlinkDetector.java
@@ -9,7 +9,6 @@
 package com.google.eclipse.protobuf.ui.editor.hyperlinking;
 
 import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.IMPORT__IMPORT_URI;
-import static org.eclipse.emf.common.util.URI.createURI;
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.text.*;
@@ -23,8 +22,7 @@
 
 import com.google.eclipse.protobuf.model.util.*;
 import com.google.eclipse.protobuf.protobuf.Import;
-import com.google.eclipse.protobuf.ui.editor.FileOpener;
-import com.google.inject.Inject;
+import com.google.inject.*;
 
 /**
  * Represents an implementation of interface <code>{@link IHyperlinkDetector}</code> to find and convert
@@ -37,8 +35,8 @@
 
   @Inject private INodes nodes;
   @Inject private EObjectAtOffsetHelper eObjectAtOffsetHelper;
-  @Inject private FileOpener fileOpener;
   @Inject private Imports imports;
+  @Inject private Provider<ImportHyperlink> importHyperlinkProvider;
 
   @Override public IHyperlink[] detectHyperlinks(ITextViewer textViewer, final IRegion region,
       final boolean canShowMultipleHyperlinks) {
@@ -66,12 +64,11 @@
           return NO_HYPERLINKS;
         }
         INode importUriNode = nodes.firstNodeForFeature(anImport, IMPORT__IMPORT_URI);
-        int importUriLength = importUriNode.getLength();
-        if (importUriLength == 0) {
+        if (importUriNode.getLength() == 0) {
           return NO_HYPERLINKS;
         }
-        IRegion importUriRegion = new Region(importUriNode.getOffset(), importUriLength);
-        IHyperlink hyperlink = new ImportHyperlink(createURI(anImport.getImportURI()), importUriRegion, fileOpener);
+        ImportHyperlink hyperlink = importHyperlinkProvider.get();
+        hyperlink.update(anImport, importUriNode);
         return new IHyperlink[] { hyperlink };
       }
     });
