diff --git a/bundles/org.eclipse.e4.tools.services/src/org/eclipse/e4/tools/services/IResourceService.java b/bundles/org.eclipse.e4.tools.services/src/org/eclipse/e4/tools/services/IResourceService.java
index 93324df..a52c0fb 100644
--- a/bundles/org.eclipse.e4.tools.services/src/org/eclipse/e4/tools/services/IResourceService.java
+++ b/bundles/org.eclipse.e4.tools.services/src/org/eclipse/e4/tools/services/IResourceService.java
@@ -19,6 +19,7 @@
 public interface IResourceService {
 	public interface IPooledResource<T> {
 		public T getResource();
+		public String getId();
 		public void dispose();
 	}
 	
diff --git a/bundles/org.eclipse.e4.tools.services/src/org/eclipse/e4/tools/services/impl/ResourceService.java b/bundles/org.eclipse.e4.tools.services/src/org/eclipse/e4/tools/services/impl/ResourceService.java
index 7606412..468cfaf 100644
--- a/bundles/org.eclipse.e4.tools.services/src/org/eclipse/e4/tools/services/impl/ResourceService.java
+++ b/bundles/org.eclipse.e4.tools.services/src/org/eclipse/e4/tools/services/impl/ResourceService.java
@@ -49,17 +49,21 @@
 		private Display display;
 		private int count;
 		private T resource;
-		private String imageKey;
+		private String id;
 		private ResourceService resourceService;
 
 		PooledResource(Display display, ResourceService resourceService,
-				String imageKey, T resource) {
+				String id, T resource) {
 			this.display = display;
-			this.imageKey = imageKey;
+			this.id = id;
 			this.count = 1;
 			this.resourceService = resourceService;
 			this.resource = resource;
 		}
+		
+		public String getId() {
+			return id;
+		}
 
 		public T getResource() {
 			return resource;
@@ -73,18 +77,18 @@
 					resource.dispose();
 				}
 				resource = null;
-				imageKey = null;
+				id = null;
 				resourceService = null;
 			}
 		}
 	}
 
 	public static class ResourcePool implements IDiposeableResourcePool {
-		private ResourceService resourceService;
+		private IResourceService resourceService;
 
-		private List<PooledResource<Image>> pooledImages = new ArrayList<PooledResource<Image>>();
-		private List<PooledResource<Font>> pooledFonts = new ArrayList<PooledResource<Font>>();
-		private List<PooledResource<Color>> pooledColors = new ArrayList<PooledResource<Color>>();
+		private List<IPooledResource<Image>> pooledImages = new ArrayList<IPooledResource<Image>>();
+		private List<IPooledResource<Font>> pooledFonts = new ArrayList<IPooledResource<Font>>();
+		private List<IPooledResource<Color>> pooledColors = new ArrayList<IPooledResource<Color>>();
 		private Display display;
 
 		@Inject
@@ -100,10 +104,10 @@
 								"org.eclipse.e4.tools.services",
 								"The pool is disposed"));
 			}
-			PooledResource<Image> image = null;
+			IPooledResource<Image> image = null;
 
-			for (PooledResource<Image> img : pooledImages) {
-				if (img.imageKey.equals(key)) {
+			for (IPooledResource<Image> img : pooledImages) {
+				if (img.getId().equals(key)) {
 					image = img;
 				}
 			}
@@ -123,9 +127,9 @@
 								"The pool is disposed"));
 			}
 			
-			PooledResource<Font> font = null;
-			for (PooledResource<Font> fon : pooledFonts) {
-				if (fon.imageKey.equals(key)) {
+			IPooledResource<Font> font = null;
+			for (IPooledResource<Font> fon : pooledFonts) {
+				if (fon.getId().equals(key)) {
 					font = fon;
 				}
 			}
@@ -143,10 +147,10 @@
 								"org.eclipse.e4.tools.services",
 								"The pool is disposed"));
 			}
-			PooledResource<Color> color = null;
+			IPooledResource<Color> color = null;
 			
-			for (PooledResource<Color> col : pooledColors) {
-				if (col.imageKey.equals(key)) {
+			for (IPooledResource<Color> col : pooledColors) {
+				if (col.getId().equals(key)) {
 					color = col;
 				}
 			}
@@ -244,11 +248,11 @@
 
 	protected void removePooledResource(PooledResource<?> resource) {
 		if (resource.getResource() instanceof Image) {
-			displayPool.get(resource.display).getImagePool().remove(resource.imageKey);
+			displayPool.get(resource.display).getImagePool().remove(resource.getId());
 		} else if (resource.getResource() instanceof Color) {
-			displayPool.get(resource.display).getColorPool().remove(resource.imageKey);
+			displayPool.get(resource.display).getColorPool().remove(resource.getId());
 		} else if (resource.getResource() instanceof Font) {
-			displayPool.get(resource.display).getFontPool().remove(resource.imageKey);
+			displayPool.get(resource.display).getFontPool().remove(resource.getId());
 		}
 	}
 
