diff --git a/org.eclipse.lsp4e.test/fragment.xml b/org.eclipse.lsp4e.test/fragment.xml
index b4d226c..dc26039 100644
--- a/org.eclipse.lsp4e.test/fragment.xml
+++ b/org.eclipse.lsp4e.test/fragment.xml
@@ -184,7 +184,7 @@
             class="org.eclipse.lsp4e.test.CreateAndRegisterContentTypeLSPLaunchConfigMapping">
       </startup>
    </extension>
-   
+
   <extension
          point="org.eclipse.core.expressions.propertyTesters">
       <propertyTester
@@ -195,7 +195,7 @@
             type="java.lang.Object">
       </propertyTester>
       </extension>
-  <extension 
+  <extension
          point="org.eclipse.core.filesystem.filesystems">
 	<filesystem scheme="other">
 	   <run class="org.eclipse.lsp4e.test.OtherFileSystem" />
@@ -221,4 +221,14 @@
          </adapter>
       </factory>
   </extension>
+  <extension
+         point="org.eclipse.core.runtime.adapters">
+      <factory
+            adaptableType="org.eclipse.core.resources.IFile"
+            class="org.eclipse.lsp4e.test.UriToResourceAdapterFactory">
+         <adapter
+               type="java.net.URI">
+         </adapter>
+      </factory>
+  </extension>
 </fragment>
diff --git a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/UriToResourceAdapterFactory.java b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/UriToResourceAdapterFactory.java
index c050154..74a4a65 100644
--- a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/UriToResourceAdapterFactory.java
+++ b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/UriToResourceAdapterFactory.java
@@ -26,15 +26,15 @@
  *
  */
 public class UriToResourceAdapterFactory implements IAdapterFactory{
-	
-	
+
+
 	private static final String A_SEGMENT = "/a/";
 
 	@SuppressWarnings("unchecked")
 	  @Override
 	  public <T> T getAdapter(final Object adaptableObject, final Class<T> adapterType) {
 	    if (adaptableObject instanceof String) {
-	        URI uri = URI.create(((String) adaptableObject).replace(A_SEGMENT, ""));	        
+	        URI uri = URI.create(((String) adaptableObject).replace(A_SEGMENT, ""));
 	        String path = uri.getPath();
 	        IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(LSPEclipseUtilsTest.class.getSimpleName() + uri.getScheme());
 	        if (path != null) {
@@ -44,12 +44,18 @@
 	            return (T) project.getFile(path);
 	          }
 	        }
+	    } else if (adaptableObject instanceof IFile) {
+	    	URI uri = ((IResource)adaptableObject).getLocationURI();
+	        IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(LSPEclipseUtilsTest.class.getSimpleName() + uri.getScheme());
+	        if (project != null && uri.getScheme().equals("other")) {
+	        	return (T) URI.create(uri.toString().replaceAll("//", "/" + A_SEGMENT));
+	        }
 	    }
 	    return null;
 	  }
 
 	  @Override
 	  public Class<?>[] getAdapterList() {
-	    return new Class<?>[] {IResource.class, IFile.class};
+	    return new Class<?>[] {IResource.class, IFile.class, URI.class};
 	  }
 }
diff --git a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java
index d7ce489..86f83d7 100644
--- a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java
+++ b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java
@@ -156,7 +156,7 @@
 			IFile file = project1.getFile("res");
 			file.create(new ByteArrayInputStream(new byte[0]), true, new NullProgressMonitor());
 			Assert.assertEquals(file, LSPEclipseUtils.findResourceFor(file.getLocationURI().toString()));
-			
+
 			project1.getFile("suffix").create(new ByteArrayInputStream(new byte[0]), true, new NullProgressMonitor());
 			project2 = TestUtils.createProject(project1.getName() + "suffix");
 			Assert.assertEquals(project2, LSPEclipseUtils.findResourceFor(project2.getLocationURI().toString()));
@@ -167,7 +167,7 @@
 	}
 
 	@Test
-	public void testURIToLinkedResourceMapping() throws CoreException { // bug 576425
+	public void testCustomURIToResourceMapping() throws CoreException { // bug 576425
 	   IProject project = null;
 	   try {
 		    URI uri = URI.create("other://a/res.txt");
@@ -180,7 +180,21 @@
 			if (project != null) { project.delete(true, new NullProgressMonitor()); }
 		}
 	}
-	
+
+	@Test
+	public void testCustomResourceToURIMapping() throws CoreException { // bug 576425
+	   IProject project = null;
+	   try {
+		    URI uri = URI.create("other://res.txt");
+			project = TestUtils.createProject(getClass().getSimpleName() + uri.getScheme());
+			IFile file = project.getFile("res.txt");
+			file.createLink(uri, IResource.REPLACE | IResource.ALLOW_MISSING_LOCAL, new NullProgressMonitor());
+			Assert.assertEquals(LSPEclipseUtils.toUri(file).toString(), "other://a/res.txt");
+		} finally {
+			if (project != null) { project.delete(true, new NullProgressMonitor()); }
+		}
+	}
+
 	@Test
 	public void testApplyTextEditLongerThanOrigin() throws Exception {
 		IProject project = null;
@@ -199,7 +213,7 @@
 			if (project != null) { project.delete(true, new NullProgressMonitor()); }
 		}
 	}
-	
+
 	@Test
 	public void testApplyTextEditShorterThanOrigin() throws Exception {
 		IProject project = null;
diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java
index f75a06e..e6f2d32 100644
--- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java
+++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java
@@ -769,6 +769,10 @@
 	}
 
 	public static URI toUri(IResource resource) {
+		URI adaptedURI = Adapters.adapt(resource, URI.class, true);
+		if (adaptedURI != null) {
+			return adaptedURI;
+		}
 		IPath location = resource.getLocation();
 		if (location != null) {
 			return toUri(location);
