diff --git a/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/dialogs/UriSchemeHandlerPreferencePage.java b/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/dialogs/UriSchemeHandlerPreferencePage.java
index 8c8c59a..9a5d339 100644
--- a/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/dialogs/UriSchemeHandlerPreferencePage.java
+++ b/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/dialogs/UriSchemeHandlerPreferencePage.java
@@ -44,9 +44,9 @@
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 import org.eclipse.ui.statushandlers.StatusManager;
 import org.eclipse.urischeme.IOperatingSystemRegistration;
+import org.eclipse.urischeme.IScheme;
 import org.eclipse.urischeme.ISchemeInformation;
 import org.eclipse.urischeme.IUriSchemeExtensionReader;
-import org.eclipse.urischeme.IUriSchemeExtensionReader.Scheme;
 
 /**
  * This page contributes to URL handler for URISchemes in preference page of
@@ -149,7 +149,7 @@
 	 */
 	private Collection<UiSchemeInformation> retrieveSchemeInformationList() throws Exception {
 		Collection<UiSchemeInformation> returnList = new ArrayList<>();
-		Collection<Scheme> schemes = IUriSchemeExtensionReader.INSTANCE.getSchemes();
+		Collection<IScheme> schemes = IUriSchemeExtensionReader.INSTANCE.getSchemes();
 		if (operatingSystemRegistration != null) {
 			for (ISchemeInformation info : operatingSystemRegistration.getSchemesInformation(schemes)) {
 				returnList.add(new UiSchemeInformation(info.isHandled(), info));
@@ -177,8 +177,8 @@
 			return true;
 		}
 
-		List<ISchemeInformation> toAdd = new ArrayList<>();
-		List<ISchemeInformation> toRemove = new ArrayList<>();
+		List<IScheme> toAdd = new ArrayList<>();
+		List<IScheme> toRemove = new ArrayList<>();
 		for (UiSchemeInformation info : schemeInformationList) {
 			if (info.checked && !info.information.isHandled()) {
 				toAdd.add(info.information);
@@ -251,7 +251,7 @@
 							IDEWorkbenchMessages.UriHandlerPreferencePage_Warning_OtherApp,
 							NLS.bind(IDEWorkbenchMessages.UriHandlerPreferencePage_Warning_OtherApp_Description,
 									schemeInformation.information.getHandlerInstanceLocation(),
-									schemeInformation.information.getScheme()));
+									schemeInformation.information.getName()));
 					return;
 				}
 				schemeInformation.checked = tableItem.getChecked();
@@ -280,7 +280,7 @@
 				UiSchemeInformation schemeInfo = (UiSchemeInformation) element;
 				switch (columnIndex) {
 				case 0:
-					return schemeInfo.information.getScheme();
+					return schemeInfo.information.getName();
 				case 1:
 					return schemeInfo.information.getDescription();
 				default:
diff --git a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/IOperatingSystemRegistration.java b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/IOperatingSystemRegistration.java
index 84dc609..605cb61 100644
--- a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/IOperatingSystemRegistration.java
+++ b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/IOperatingSystemRegistration.java
@@ -14,7 +14,6 @@
 import java.util.List;
 
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.urischeme.IUriSchemeExtensionReader.Scheme;
 import org.eclipse.urischeme.internal.registration.RegistrationLinux;
 import org.eclipse.urischeme.internal.registration.RegistrationMacOsX;
 import org.eclipse.urischeme.internal.registration.RegistrationWindows;
@@ -51,7 +50,7 @@
 	 * @param toRemove the uri schemes which this Eclipse should not handle anymore
 	 * @throws Exception something went wrong
 	 */
-	void handleSchemes(Collection<ISchemeInformation> toAdd, Collection<ISchemeInformation> toRemove) throws Exception;
+	void handleSchemes(Collection<IScheme> toAdd, Collection<IScheme> toRemove) throws Exception;
 
 	/**
 	 * Takes the given schemes and fills information like whether they are
@@ -61,7 +60,7 @@
 	 * @return schemes with information
 	 * @throws Exception something went wrong
 	 */
-	List<ISchemeInformation> getSchemesInformation(Collection<Scheme> schemes) throws Exception;
+	List<ISchemeInformation> getSchemesInformation(Collection<IScheme> schemes) throws Exception;
 
 	/**
 	 * @return the Eclipse executable
diff --git a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/IScheme.java b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/IScheme.java
new file mode 100644
index 0000000..bed6fb9
--- /dev/null
+++ b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/IScheme.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2018 SAP SE and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP SE - initial version
+ *******************************************************************************/
+package org.eclipse.urischeme;
+
+/**
+ * The basic information of an URI scheme like name and description.
+ *
+ */
+public interface IScheme {
+
+	/**
+	 * @return the name of the scheme
+	 */
+	String getName();
+
+	/**
+	 * @return the description of the scheme
+	 */
+	String getDescription();
+}
diff --git a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/ISchemeInformation.java b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/ISchemeInformation.java
index e366541..4c8ee8e 100644
--- a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/ISchemeInformation.java
+++ b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/ISchemeInformation.java
@@ -10,23 +10,11 @@
  *******************************************************************************/
 package org.eclipse.urischeme;
 
-import org.eclipse.urischeme.internal.registration.SchemeInformation;
-
 /**
  * The basic information of an URI scheme with regards to the handler.
  *
  */
-public interface ISchemeInformation {
-
-	/**
-	 * @return the name of the scheme
-	 */
-	String getScheme();
-
-	/**
-	 * @return the description of the scheme
-	 */
-	String getDescription();
+public interface ISchemeInformation extends IScheme {
 
 	/**
 	 * @return true if the scheme is handled by the running Eclipse installation;
@@ -35,31 +23,7 @@
 	boolean isHandled();
 
 	/**
-	 * Sets the handled value to true if scheme is handled by current Eclipse
-	 * installation and false otherwise
-	 * @param value
-	 */
-	void setHandled(boolean value);
-
-	/**
 	 * @return the path of the application
 	 */
 	String getHandlerInstanceLocation();
-
-	/**
-	 * @param location
-	 */
-	void setHandlerLocation(String location);
-
-	/**
-	 * Returns the instance of ISchemeInformation interface.
-	 *
-	 * @param schemeName
-	 * @param schemeDescription
-	 * @param handlerLocation
-	 * @return instance of ISchemeInformation
-	 */
-	static ISchemeInformation getInstance(String schemeName, String schemeDescription, String handlerLocation) {
-		return new SchemeInformation(schemeName, schemeDescription, handlerLocation);
-	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/IUriSchemeExtensionReader.java b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/IUriSchemeExtensionReader.java
index 511ab4b..fcc1dea 100644
--- a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/IUriSchemeExtensionReader.java
+++ b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/IUriSchemeExtensionReader.java
@@ -12,45 +12,6 @@
 public interface IUriSchemeExtensionReader {
 
 	/**
-	 * Simple pojo holding information about an available URI scheme
-	 *
-	 */
-	public static class Scheme {
-
-		private String uriScheme;
-		private String uriSchemeDescription;
-
-		/**
-		 * Returns an instance of Scheme
-		 *
-		 * @param uriScheme            The URI scheme
-		 * @param uriSchemeDescription The description of the URI scheme
-		 */
-		public Scheme(String uriScheme, String uriSchemeDescription) {
-			super();
-			this.uriScheme = uriScheme;
-			this.uriSchemeDescription = uriSchemeDescription;
-		}
-
-		/**
-		 *
-		 * @return The URI scheme
-		 */
-		public String getUriScheme() {
-			return uriScheme;
-		}
-
-		/**
-		 *
-		 * @return The description of the URI scheme
-		 */
-		public String getUriSchemeDescription() {
-			return uriSchemeDescription;
-		}
-
-	}
-
-	/**
 	 * The instance of IUriSchemeExtensionReader
 	 */
 	IUriSchemeExtensionReader INSTANCE = UriSchemeExtensionReader.getInstance();
@@ -59,7 +20,7 @@
 	 *
 	 * @return The list of available URI schemes
 	 */
-	Collection<Scheme> getSchemes();
+	Collection<IScheme> getSchemes();
 
 	/**
 	 * Creates the handler for a given URI scheme as registered in extension point
diff --git a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/UriSchemeExtensionReader.java b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/UriSchemeExtensionReader.java
index f6a5496..2715a81 100644
--- a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/UriSchemeExtensionReader.java
+++ b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/UriSchemeExtensionReader.java
@@ -9,6 +9,7 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.RegistryFactory;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.urischeme.IScheme;
 import org.eclipse.urischeme.IUriSchemeExtensionReader;
 import org.eclipse.urischeme.IUriSchemeHandler;
 
@@ -54,13 +55,13 @@
 	}
 
 	@Override
-	public Collection<Scheme> getSchemes() {
+	public Collection<IScheme> getSchemes() {
 		IConfigurationElement[] elements = getOrReadConfigurationElements();
-		Collection<Scheme> schemes = new ArrayList<>();
+		Collection<IScheme> schemes = new ArrayList<>();
 		for (IConfigurationElement element : elements) {
 			String schemeName = element.getAttribute(EXT_POINT_ATTRIBUTE_URI_SCHEME);
 			String schemeDescription = element.getAttribute(EXT_POINT_ATTRIBUTE_URI_SCHEME_DESCRIPTION);
-			Scheme scheme = new Scheme(schemeName, schemeDescription);
+			IScheme scheme = new Scheme(schemeName, schemeDescription);
 			schemes.add(scheme);
 		}
 		return schemes;
@@ -96,4 +97,26 @@
 				"Registered class has wrong type: " + executableExtension.getClass())); //$NON-NLS-1$
 	}
 
+	private static class Scheme implements IScheme {
+
+		private String uriScheme;
+		private String uriSchemeDescription;
+
+		public Scheme(String uriScheme, String uriSchemeDescription) {
+			super();
+			this.uriScheme = uriScheme;
+			this.uriSchemeDescription = uriSchemeDescription;
+		}
+
+		@Override
+		public String getName() {
+			return uriScheme;
+		}
+
+		@Override
+		public String getDescription() {
+			return uriSchemeDescription;
+		}
+
+	}
 }
diff --git a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/RegistrationLinux.java b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/RegistrationLinux.java
index 1e3b2c8..6ecad0e 100644
--- a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/RegistrationLinux.java
+++ b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/RegistrationLinux.java
@@ -17,8 +17,8 @@
 import java.util.stream.Collectors;
 
 import org.eclipse.urischeme.IOperatingSystemRegistration;
+import org.eclipse.urischeme.IScheme;
 import org.eclipse.urischeme.ISchemeInformation;
-import org.eclipse.urischeme.IUriSchemeExtensionReader.Scheme;
 
 @SuppressWarnings("javadoc")
 public class RegistrationLinux implements IOperatingSystemRegistration {
@@ -46,7 +46,7 @@
 	}
 
 	@Override
-	public void handleSchemes(Collection<ISchemeInformation> toAdd, Collection<ISchemeInformation> toRemove)
+	public void handleSchemes(Collection<IScheme> toAdd, Collection<IScheme> toRemove)
 			throws Exception {
 		String desktopFileName = getDesktopFileName();
 
@@ -56,14 +56,14 @@
 	}
 
 	@Override
-	public List<ISchemeInformation> getSchemesInformation(Collection<Scheme> schemes) throws Exception {
+	public List<ISchemeInformation> getSchemesInformation(Collection<IScheme> schemes) throws Exception {
 		List<ISchemeInformation> returnList = new ArrayList<>();
 
-		for (Scheme scheme : schemes) {
-			SchemeInformation schemeInfo = new SchemeInformation(scheme.getUriScheme(),
-					scheme.getUriSchemeDescription(), null);
+		for (IScheme scheme : schemes) {
+			SchemeInformation schemeInfo = new SchemeInformation(scheme.getName(),
+					scheme.getDescription());
 
-			String location = determineHandlerLocation(scheme.getUriScheme());
+			String location = determineHandlerLocation(scheme.getName());
 			if (location.equals(getEclipseLauncher())) {
 				schemeInfo.setHandled(true);
 			}
@@ -81,17 +81,17 @@
 		return ""; //$NON-NLS-1$
 	}
 
-	private void changeDesktopFile(Iterable<ISchemeInformation> toAdd, Iterable<ISchemeInformation> toRemove,
+	private void changeDesktopFile(Iterable<IScheme> toAdd, Iterable<IScheme> toRemove,
 			String desktopFilePath) throws IOException {
 
 		List<String> lines = readFileOrGetInitialContent(desktopFilePath);
 
 		DesktopFileWriter writer = new DesktopFileWriter(lines);
-		for (ISchemeInformation add : toAdd) {
-			writer.addScheme(add.getScheme());
+		for (IScheme scheme : toAdd) {
+			writer.addScheme(scheme.getName());
 		}
-		for (ISchemeInformation remove : toRemove) {
-			writer.removeScheme(remove.getScheme());
+		for (IScheme scheme : toRemove) {
+			writer.removeScheme(scheme.getName());
 		}
 
 		fileProvider.write(desktopFilePath, writer.getResult());
@@ -105,13 +105,13 @@
 		}
 	}
 
-	private void registerSchemesWithXdgMime(Collection<ISchemeInformation> schemes, String desktopFilePath)
+	private void registerSchemesWithXdgMime(Collection<IScheme> schemes, String desktopFilePath)
 			throws Exception {
 		if (schemes.isEmpty()) {
 			return;
 		}
 		String scheme = schemes.stream(). //
-				map(s -> s.getScheme()). //
+				map(s -> s.getName()). //
 				collect(Collectors.joining(" " + X_SCHEME_HANDLER_PREFIX, X_SCHEME_HANDLER_PREFIX, "")); //$NON-NLS-1$ //$NON-NLS-2$
 		processExecutor.execute(XDG_MIME, DEFAULT, desktopFilePath, scheme);
 	}
diff --git a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/RegistrationMacOsX.java b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/RegistrationMacOsX.java
index 743ae08..2340f9a 100644
--- a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/RegistrationMacOsX.java
+++ b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/RegistrationMacOsX.java
@@ -20,8 +20,8 @@
 import java.util.stream.Stream;
 
 import org.eclipse.urischeme.IOperatingSystemRegistration;
+import org.eclipse.urischeme.IScheme;
 import org.eclipse.urischeme.ISchemeInformation;
-import org.eclipse.urischeme.IUriSchemeExtensionReader.Scheme;
 
 @SuppressWarnings("javadoc")
 public class RegistrationMacOsX implements IOperatingSystemRegistration {
@@ -45,7 +45,7 @@
 	}
 
 	@Override
-	public void handleSchemes(Collection<ISchemeInformation> toAdd, Collection<ISchemeInformation> toRemove)
+	public void handleSchemes(Collection<IScheme> toAdd, Collection<IScheme> toRemove)
 			throws Exception {
 		String pathToEclipseApp = getPathToEclipseApp();
 
@@ -55,19 +55,19 @@
 	}
 
 	@Override
-	public List<ISchemeInformation> getSchemesInformation(Collection<Scheme> schemes) throws Exception {
+	public List<ISchemeInformation> getSchemesInformation(Collection<IScheme> schemes) throws Exception {
 		List<ISchemeInformation> returnList = new ArrayList<>();
 
 		String lsRegisterOutput = processExecutor.execute(LSREGISTER, DUMP);
 
 		String[] lsRegisterEntries = lsRegisterOutput.split("-{80}\n"); //$NON-NLS-1$
 
-		for (Scheme scheme : schemes) {
+		for (IScheme scheme : schemes) {
 
-			SchemeInformation schemeInfo = new SchemeInformation(scheme.getUriScheme(),
-					scheme.getUriSchemeDescription(), null);
+			SchemeInformation schemeInfo = new SchemeInformation(scheme.getName(),
+					scheme.getDescription());
 
-			String location = determineHandlerLocation(lsRegisterEntries, scheme.getUriScheme());
+			String location = determineHandlerLocation(lsRegisterEntries, scheme.getName());
 			if (location != "" && getEclipseLauncher().startsWith(location)) { //$NON-NLS-1$
 				schemeInfo.setHandled(true);
 			}
@@ -114,18 +114,18 @@
 		processExecutor.execute(LSREGISTER, RECURSIVE, pathToEclipseApp);
 	}
 
-	private void changePlistFile(Collection<ISchemeInformation> toAdd, Collection<ISchemeInformation> toRemove,
+	private void changePlistFile(Collection<IScheme> toAdd, Collection<IScheme> toRemove,
 			String pathToEclipseApp) throws IOException {
 		String plistPath = pathToEclipseApp + PLIST_PATH_SUFFIX;
 
 		PlistFileWriter writer = getPlistFileWriter(plistPath);
 
-		for (ISchemeInformation scheme : toAdd) {
-			writer.addScheme(scheme.getScheme(), scheme.getDescription());
+		for (IScheme scheme : toAdd) {
+			writer.addScheme(scheme.getName(), scheme.getDescription());
 		}
 
-		for (ISchemeInformation scheme : toRemove) {
-			writer.removeScheme(scheme.getScheme());
+		for (IScheme scheme : toRemove) {
+			writer.removeScheme(scheme.getName());
 		}
 
 		writer.writeTo(fileProvider.newWriter(plistPath));
diff --git a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/RegistrationWindows.java b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/RegistrationWindows.java
index a5676a1..682a2a8 100644
--- a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/RegistrationWindows.java
+++ b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/RegistrationWindows.java
@@ -15,8 +15,8 @@
 import java.util.List;
 
 import org.eclipse.urischeme.IOperatingSystemRegistration;
+import org.eclipse.urischeme.IScheme;
 import org.eclipse.urischeme.ISchemeInformation;
-import org.eclipse.urischeme.IUriSchemeExtensionReader.Scheme;
 /**
  * Windows OS specific handling of schemes
  *
@@ -46,13 +46,13 @@
 	}
 
 	@Override
-	public void handleSchemes(Collection<ISchemeInformation> toAdd, Collection<ISchemeInformation> toRemove)
+	public void handleSchemes(Collection<IScheme> toAdd, Collection<IScheme> toRemove)
 			throws Exception {
-		for (ISchemeInformation scheme : toAdd) {
-			registryWriter.addScheme(scheme.getScheme());
+		for (IScheme scheme : toAdd) {
+			registryWriter.addScheme(scheme.getName());
 		}
-		for (ISchemeInformation scheme : toRemove) {
-			registryWriter.removeScheme(scheme.getScheme());
+		for (IScheme scheme : toRemove) {
+			registryWriter.removeScheme(scheme.getName());
 		}
 	}
 
@@ -67,15 +67,15 @@
 	 * @throws Exception
 	 */
 	@Override
-	public List<ISchemeInformation> getSchemesInformation(Collection<Scheme> schemes) throws Exception {
+	public List<ISchemeInformation> getSchemesInformation(Collection<IScheme> schemes) throws Exception {
 		String launcher = getEclipseLauncher();
 
 		List<ISchemeInformation> schemeInformations = new ArrayList<>();
 
-		for (Scheme scheme : schemes) {
-			SchemeInformation schemeInfo = new SchemeInformation(scheme.getUriScheme(),
-					scheme.getUriSchemeDescription(), null);
-			String path = registryWriter.getRegisteredHandlerPath(schemeInfo.getScheme());
+		for (IScheme scheme : schemes) {
+			SchemeInformation schemeInfo = new SchemeInformation(scheme.getName(),
+					scheme.getDescription());
+			String path = registryWriter.getRegisteredHandlerPath(schemeInfo.getName());
 			if (path == null) {
 				path = ""; //$NON-NLS-1$
 			}
diff --git a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/SchemeInformation.java b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/SchemeInformation.java
index 344909d..5dae9d0 100644
--- a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/SchemeInformation.java
+++ b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/SchemeInformation.java
@@ -18,22 +18,21 @@
  */
 public class SchemeInformation implements ISchemeInformation {
 
-	private String scheme;
-	private String schemeDescription;
+	private String name;
+	private String description;
 	private boolean handled;
 	private String handlerInstanceLocation;
 
 	@SuppressWarnings("javadoc")
-	public SchemeInformation(String schemeName, String schemeDescription, String handlerLocation) {
+	public SchemeInformation(String schemeName, String schemeDescription) {
 		super();
-		this.scheme = schemeName;
-		this.schemeDescription = schemeDescription;
-		setHandlerLocation(handlerLocation);
+		this.name = schemeName;
+		this.description = schemeDescription;
 	}
 
 	@Override
-	public String getScheme() {
-		return scheme;
+	public String getName() {
+		return name;
 	}
 
 	@Override
@@ -46,18 +45,23 @@
 		return handlerInstanceLocation;
 	}
 
-	@Override
+	/**
+	 * Sets the handled value to true if scheme is handled by current Eclipse
+	 * installation and false otherwise
+	 *
+	 * @param handled
+	 */
 	public void setHandled(boolean handled) {
 		this.handled = handled;
 	}
 
-	@Override
+	@SuppressWarnings("javadoc")
 	public void setHandlerLocation(String handlerInstanceLocation) {
 		this.handlerInstanceLocation = handlerInstanceLocation;
 	}
 
 	@Override
 	public String getDescription() {
-		return schemeDescription;
+		return description;
 	}
 }
diff --git a/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/UriSchemeExtensionReaderUnitTest.java b/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/UriSchemeExtensionReaderUnitTest.java
index b4a5406..4934862 100644
--- a/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/UriSchemeExtensionReaderUnitTest.java
+++ b/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/UriSchemeExtensionReaderUnitTest.java
@@ -20,7 +20,7 @@
 import org.eclipse.core.runtime.IContributor;
 import org.eclipse.core.runtime.IExtension;
 import org.eclipse.core.runtime.InvalidRegistryObjectException;
-import org.eclipse.urischeme.IUriSchemeExtensionReader.Scheme;
+import org.eclipse.urischeme.IScheme;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -73,14 +73,14 @@
 		ConfigurationElementMock element2 = new ConfigurationElementMock("xyz", "xyz Scheme", new Object());
 		setExtensionsInReader(element1, element2);
 
-		Collection<Scheme> schemes = extensionReader.getSchemes();
+		Collection<IScheme> schemes = extensionReader.getSchemes();
 		assertEquals(2, schemes.size());
 
-		Scheme[] schemesArray = schemes.toArray(new Scheme[0]);
-		assertEquals("abc", schemesArray[0].getUriScheme());
-		assertEquals("abc Scheme", schemesArray[0].getUriSchemeDescription());
-		assertEquals("xyz", schemesArray[1].getUriScheme());
-		assertEquals("xyz Scheme", schemesArray[1].getUriSchemeDescription());
+		IScheme[] schemesArray = schemes.toArray(new IScheme[0]);
+		assertEquals("abc", schemesArray[0].getName());
+		assertEquals("abc Scheme", schemesArray[0].getDescription());
+		assertEquals("xyz", schemesArray[1].getName());
+		assertEquals("xyz Scheme", schemesArray[1].getDescription());
 	}
 
 	private void setExtensionsInReader(IConfigurationElement... element) throws Exception {
diff --git a/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/UriSchemeProcessorUnitTest.java b/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/UriSchemeProcessorUnitTest.java
index cdda424..d651c83 100644
--- a/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/UriSchemeProcessorUnitTest.java
+++ b/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/UriSchemeProcessorUnitTest.java
@@ -22,6 +22,7 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.urischeme.IScheme;
 import org.eclipse.urischeme.IUriSchemeExtensionReader;
 import org.eclipse.urischeme.IUriSchemeHandler;
 import org.junit.Before;
@@ -80,7 +81,7 @@
 		public Map<String, Integer> readCount = new HashMap<>();
 
 		@Override
-		public Collection<Scheme> getSchemes() {
+		public Collection<IScheme> getSchemes() {
 			return null;
 		}
 
diff --git a/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/Scheme.java b/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/Scheme.java
new file mode 100644
index 0000000..8b22903
--- /dev/null
+++ b/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/Scheme.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2018 SAP SE and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP SE - initial version
+ *******************************************************************************/
+package org.eclipse.urischeme.internal.registration;
+
+import org.eclipse.urischeme.IScheme;
+
+/**
+ * Implementation of {@link IScheme} for testing purpose.
+ *
+ */
+public class Scheme implements IScheme {
+
+	private String name;
+	private String desription;
+
+	public Scheme(String name, String desription) {
+		this.name = name;
+		this.desription = desription;
+
+	}
+
+	@Override
+	public String getName() {
+		return name;
+	}
+
+	@Override
+	public String getDescription() {
+		return desription;
+	}
+
+}
diff --git a/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitRegistrationLinux.java b/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitRegistrationLinux.java
index d209d33..dd2ec51 100644
--- a/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitRegistrationLinux.java
+++ b/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitRegistrationLinux.java
@@ -23,8 +23,8 @@
 import java.util.stream.Collectors;
 
 import org.eclipse.urischeme.IOperatingSystemRegistration;
+import org.eclipse.urischeme.IScheme;
 import org.eclipse.urischeme.ISchemeInformation;
-import org.eclipse.urischeme.IUriSchemeExtensionReader.Scheme;
 import org.hamcrest.core.IsNot;
 import org.hamcrest.core.StringContains;
 import org.junit.AfterClass;
@@ -45,10 +45,10 @@
 	private static final String OWN_DESKTOP_FILE = "_home_myuser_Eclipse_.desktop";
 	private static final String PATH_OWN_DESKTOP_FILE = "~/.local/share/applications/" + OWN_DESKTOP_FILE;
 
-	private static final Scheme ADT_SCHEME = new Scheme("adt", "");
+	private static final IScheme ADT_SCHEME = new Scheme("adt", "");
 
-	private static final ISchemeInformation OTHER_SCHEME_INFO = new SchemeInformation("other", "", null);
-	private static final ISchemeInformation ADT_SCHEME_INFO = new SchemeInformation("adt", "", null);
+	private static final ISchemeInformation OTHER_SCHEME_INFO = new SchemeInformation("other", "");
+	private static final ISchemeInformation ADT_SCHEME_INFO = new SchemeInformation("adt", "");
 
 	private static String originalEclipseHomeLocation;
 	private static String originalEclipseLauncher;
@@ -166,7 +166,7 @@
 		List<ISchemeInformation> registeredSchemes = registration.getSchemesInformation(Arrays.asList(ADT_SCHEME));
 
 		assertEquals(1, registeredSchemes.size());
-		assertEquals("adt", registeredSchemes.get(0).getScheme());
+		assertEquals("adt", registeredSchemes.get(0).getName());
 		assertTrue("Scheme should be handled", registeredSchemes.get(0).isHandled());
 	}
 
@@ -182,7 +182,7 @@
 		List<ISchemeInformation> infos = registration.getSchemesInformation(Arrays.asList(ADT_SCHEME));
 
 		assertEquals(1, infos.size());
-		assertEquals("adt", infos.get(0).getScheme());
+		assertEquals("adt", infos.get(0).getName());
 		assertFalse(infos.get(0).isHandled());
 		assertEquals(OTHER_APP_EXECUTABLE_PATH, infos.get(0).getHandlerInstanceLocation());
 	}
@@ -203,7 +203,7 @@
 		List<ISchemeInformation> infos = registration.getSchemesInformation(Arrays.asList(ADT_SCHEME));
 
 		assertEquals(1, infos.size());
-		assertEquals("adt", infos.get(0).getScheme());
+		assertEquals("adt", infos.get(0).getName());
 		assertFalse(infos.get(0).isHandled());
 		assertEquals(OTHER_APP_EXECUTABLE_PATH, infos.get(0).getHandlerInstanceLocation());
 	}
@@ -220,7 +220,7 @@
 		List<ISchemeInformation> infos = registration.getSchemesInformation(Arrays.asList(ADT_SCHEME));
 
 		assertEquals(1, infos.size());
-		assertEquals("adt", infos.get(0).getScheme());
+		assertEquals("adt", infos.get(0).getName());
 		assertFalse(infos.get(0).isHandled());
 		assertEquals("", infos.get(0).getHandlerInstanceLocation());
 	}
@@ -236,7 +236,7 @@
 		List<ISchemeInformation> infos = registration.getSchemesInformation(Arrays.asList(ADT_SCHEME));
 
 		assertEquals(1, infos.size());
-		assertEquals("adt", infos.get(0).getScheme());
+		assertEquals("adt", infos.get(0).getName());
 		assertFalse(infos.get(0).isHandled());
 		assertEquals("", infos.get(0).getHandlerInstanceLocation());
 	}
@@ -252,7 +252,7 @@
 		List<ISchemeInformation> infos = registration.getSchemesInformation(Arrays.asList(ADT_SCHEME));
 
 		assertEquals(1, infos.size());
-		assertEquals("adt", infos.get(0).getScheme());
+		assertEquals("adt", infos.get(0).getName());
 		assertFalse(infos.get(0).isHandled());
 		assertEquals("", infos.get(0).getHandlerInstanceLocation());
 	}
@@ -268,7 +268,7 @@
 		List<ISchemeInformation> infos = registration.getSchemesInformation(Arrays.asList(ADT_SCHEME));
 
 		assertEquals(1, infos.size());
-		assertEquals("adt", infos.get(0).getScheme());
+		assertEquals("adt", infos.get(0).getName());
 		assertFalse(infos.get(0).isHandled());
 		assertEquals("", infos.get(0).getHandlerInstanceLocation());
 	}
diff --git a/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitRegistrationMacOsX.java b/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitRegistrationMacOsX.java
index 5fe77e4..3e9b0ae 100644
--- a/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitRegistrationMacOsX.java
+++ b/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitRegistrationMacOsX.java
@@ -27,8 +27,8 @@
 import java.util.Scanner;
 
 import org.eclipse.urischeme.IOperatingSystemRegistration;
+import org.eclipse.urischeme.IScheme;
 import org.eclipse.urischeme.ISchemeInformation;
-import org.eclipse.urischeme.IUriSchemeExtensionReader.Scheme;
 import org.hamcrest.core.IsNot;
 import org.hamcrest.core.StringContains;
 import org.junit.AfterClass;
@@ -42,9 +42,9 @@
 	private static final String OTHER_APP_PLIST_PATH = "/Users/myuser/Applications/OtherApp.app/Contents/Info.plist";
 	private static final String OTHER_APP_BUNDLE_PATH = "/Users/myuser/Applications/OtherApp.app";
 
-	private static final Scheme ADT_SCHEME = new Scheme("adt", "");
-	private static final ISchemeInformation OTHER_SCHEME_INFO = new SchemeInformation("other", "", null);
-	private static final ISchemeInformation ADT_SCHEME_INFO = new SchemeInformation("adt", "", null);
+	private static final IScheme ADT_SCHEME = new Scheme("adt", "");
+	private static final ISchemeInformation OTHER_SCHEME_INFO = new SchemeInformation("other", "");
+	private static final ISchemeInformation ADT_SCHEME_INFO = new SchemeInformation("adt", "");
 
 	private IOperatingSystemRegistration registration;
 	private FileProviderMock fileProvider;
@@ -144,7 +144,7 @@
 		List<ISchemeInformation> infos = registration.getSchemesInformation(Arrays.asList(ADT_SCHEME));
 
 		assertEquals(1, infos.size());
-		assertEquals("adt", infos.get(0).getScheme());
+		assertEquals("adt", infos.get(0).getName());
 		assertTrue(infos.get(0).isHandled());
 	}
 
@@ -157,7 +157,7 @@
 		List<ISchemeInformation> infos = registration.getSchemesInformation(Arrays.asList(ADT_SCHEME));
 
 		assertEquals(1, infos.size());
-		assertEquals("adt", infos.get(0).getScheme());
+		assertEquals("adt", infos.get(0).getName());
 		assertFalse(infos.get(0).isHandled());
 		assertEquals(OTHER_APP_BUNDLE_PATH, infos.get(0).getHandlerInstanceLocation());
 	}
@@ -172,7 +172,7 @@
 		List<ISchemeInformation> infos = registration.getSchemesInformation(Arrays.asList(ADT_SCHEME));
 
 		assertEquals(1, infos.size());
-		assertEquals("adt", infos.get(0).getScheme());
+		assertEquals("adt", infos.get(0).getName());
 		assertFalse(infos.get(0).isHandled());
 		assertEquals(OTHER_APP_BUNDLE_PATH, infos.get(0).getHandlerInstanceLocation());
 	}
diff --git a/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitRegistrationWindows.java b/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitRegistrationWindows.java
index 7c5e93a..71f41a2 100644
--- a/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitRegistrationWindows.java
+++ b/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitRegistrationWindows.java
@@ -17,8 +17,8 @@
 import java.util.Collections;
 import java.util.List;
 
+import org.eclipse.urischeme.IScheme;
 import org.eclipse.urischeme.ISchemeInformation;
-import org.eclipse.urischeme.IUriSchemeExtensionReader.Scheme;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -28,10 +28,10 @@
 
 	private static final String PATH_TO_OTHER_APPLICATION_EXE = "/path/to/otherApplication.exe";
 	private static final String PATH_TO_ECLIPSE_EXE = "/path/to/Eclipse.exe";
-	private static final Scheme OTHER_SCHEME = new Scheme("other", "");
-	private static final Scheme ADT_SCHEME = new Scheme("adt", "");
-	private static final ISchemeInformation OTHER_SCHEME_INFO = new SchemeInformation("other", "", null);
-	private static final ISchemeInformation ADT_SCHEME_INFO = new SchemeInformation("adt", "", null);
+	private static final IScheme OTHER_SCHEME = new Scheme("other", "");
+	private static final IScheme ADT_SCHEME = new Scheme("adt", "");
+	private static final ISchemeInformation OTHER_SCHEME_INFO = new SchemeInformation("other", "");
+	private static final ISchemeInformation ADT_SCHEME_INFO = new SchemeInformation("adt", "");
 
 	RegistryWriterMock registryWriter;
 	private static String originalEclipseLauncher;
@@ -59,8 +59,8 @@
 		registrationWindows.handleSchemes(Arrays.asList(OTHER_SCHEME_INFO, ADT_SCHEME_INFO), Collections.emptyList());
 
 		assertEquals("Too many schemes added", 2, registryWriter.addedSchemes.size());
-		assertTrue("Scheme not added", registryWriter.addedSchemes.contains(OTHER_SCHEME_INFO.getScheme()));
-		assertTrue("Scheme not added", registryWriter.addedSchemes.contains(ADT_SCHEME_INFO.getScheme()));
+		assertTrue("Scheme not added", registryWriter.addedSchemes.contains(OTHER_SCHEME_INFO.getName()));
+		assertTrue("Scheme not added", registryWriter.addedSchemes.contains(ADT_SCHEME_INFO.getName()));
 
 		assertEquals("Too many schemes removed", 0, registryWriter.removedSchemes.size());
 	}
@@ -70,10 +70,10 @@
 		registrationWindows.handleSchemes(Arrays.asList(OTHER_SCHEME_INFO), Arrays.asList(OTHER_SCHEME_INFO));
 
 		assertEquals("Too many schemes added", 1, registryWriter.addedSchemes.size());
-		assertTrue("Scheme not added", registryWriter.addedSchemes.contains(OTHER_SCHEME_INFO.getScheme()));
+		assertTrue("Scheme not added", registryWriter.addedSchemes.contains(OTHER_SCHEME_INFO.getName()));
 
 		assertEquals("Too many schemes removed", 1, registryWriter.removedSchemes.size());
-		assertTrue("Scheme not removed", registryWriter.removedSchemes.contains(OTHER_SCHEME_INFO.getScheme()));
+		assertTrue("Scheme not removed", registryWriter.removedSchemes.contains(OTHER_SCHEME_INFO.getName()));
 	}
 
 	@Test
@@ -82,12 +82,12 @@
 				Arrays.asList(OTHER_SCHEME_INFO, ADT_SCHEME_INFO), Arrays.asList(ADT_SCHEME_INFO, OTHER_SCHEME_INFO));
 
 		assertEquals("Too many schemes added", 2, registryWriter.addedSchemes.size());
-		assertTrue("Scheme not added", registryWriter.addedSchemes.contains(OTHER_SCHEME_INFO.getScheme()));
-		assertTrue("Scheme not added", registryWriter.addedSchemes.contains(ADT_SCHEME_INFO.getScheme()));
+		assertTrue("Scheme not added", registryWriter.addedSchemes.contains(OTHER_SCHEME_INFO.getName()));
+		assertTrue("Scheme not added", registryWriter.addedSchemes.contains(ADT_SCHEME_INFO.getName()));
 
 		assertEquals("Too many schemes removed", 2, registryWriter.removedSchemes.size());
-		assertTrue("Scheme not removed", registryWriter.removedSchemes.contains(OTHER_SCHEME_INFO.getScheme()));
-		assertTrue("Scheme not removed", registryWriter.removedSchemes.contains(ADT_SCHEME_INFO.getScheme()));
+		assertTrue("Scheme not removed", registryWriter.removedSchemes.contains(OTHER_SCHEME_INFO.getName()));
+		assertTrue("Scheme not removed", registryWriter.removedSchemes.contains(ADT_SCHEME_INFO.getName()));
 	}
 
 	@Test
@@ -102,7 +102,7 @@
 
 	@Test
 	public void returnsRegisteredSchemeInformationForThisEclipse() throws Exception {
-		registryWriter.schemeToHandlerPath.put(ADT_SCHEME.getUriScheme(), PATH_TO_ECLIPSE_EXE);
+		registryWriter.schemeToHandlerPath.put(ADT_SCHEME.getName(), PATH_TO_ECLIPSE_EXE);
 
 		List<ISchemeInformation> schemeInformation = registrationWindows
 				.getSchemesInformation(Arrays.asList(ADT_SCHEME));
@@ -113,7 +113,7 @@
 
 	@Test
 	public void returnsRegisteredSchemeInformationForOtherApplication() throws Exception {
-		registryWriter.schemeToHandlerPath.put(ADT_SCHEME.getUriScheme(), PATH_TO_OTHER_APPLICATION_EXE);
+		registryWriter.schemeToHandlerPath.put(ADT_SCHEME.getName(), PATH_TO_OTHER_APPLICATION_EXE);
 
 		List<ISchemeInformation> schemeInformation = registrationWindows
 				.getSchemesInformation(Arrays.asList(ADT_SCHEME));
@@ -122,10 +122,10 @@
 		assertSchemeInformation(schemeInformation.get(0), ADT_SCHEME, PATH_TO_OTHER_APPLICATION_EXE, false);
 	}
 
-	private void assertSchemeInformation(ISchemeInformation schemeInformation, Scheme scheme, String handlerlocation,
+	private void assertSchemeInformation(ISchemeInformation schemeInformation, IScheme scheme, String handlerlocation,
 			boolean isHandled) {
-		assertEquals("Scheme not set correctly", scheme.getUriScheme(), schemeInformation.getScheme());
-		assertEquals("Scheme description not set correctly", scheme.getUriSchemeDescription(),
+		assertEquals("Scheme not set correctly", scheme.getName(), schemeInformation.getName());
+		assertEquals("Scheme description not set correctly", scheme.getDescription(),
 				schemeInformation.getDescription());
 		assertEquals("Handler location not set correctly", handlerlocation,
 				schemeInformation.getHandlerInstanceLocation());
