diff --git a/bundles/org.eclipse.rap.addons.fileupload/src/org/eclipse/rap/addons/fileupload/internal/FileUploadHandlerStore.java b/bundles/org.eclipse.rap.addons.fileupload/src/org/eclipse/rap/addons/fileupload/internal/FileUploadHandlerStore.java
index 3e1fe0a..53847a6 100644
--- a/bundles/org.eclipse.rap.addons.fileupload/src/org/eclipse/rap/addons/fileupload/internal/FileUploadHandlerStore.java
+++ b/bundles/org.eclipse.rap.addons.fileupload/src/org/eclipse/rap/addons/fileupload/internal/FileUploadHandlerStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2012 EclipseSource and others.
+ * Copyright (c) 2011, 2014 EclipseSource 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
@@ -10,6 +10,9 @@
  ******************************************************************************/
 package org.eclipse.rap.addons.fileupload.internal;
 
+import static org.eclipse.rap.rwt.SingletonUtil.getUniqueInstance;
+
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -19,49 +22,28 @@
 
 public final class FileUploadHandlerStore {
 
-  private static final String ATTR_NAME = FileUploadHandlerStore.class.getName() + ".instance";
-
-  private static final Object LOCK = new Object();
-  private final Map< String, FileUploadHandler > handlers;
-  private final Object lock;
-  private boolean registered;
+  private final Map<String, FileUploadHandler> handlers;
 
   private FileUploadHandlerStore() {
-    handlers = new HashMap< String, FileUploadHandler >();
-    lock = new Object();
+    handlers = Collections.synchronizedMap( new HashMap<String, FileUploadHandler>() );
+    RWT.getServiceManager().registerServiceHandler( FileUploadServiceHandler.SERVICE_HANDLER_ID,
+                                                    new FileUploadServiceHandler() );
   }
 
   public static FileUploadHandlerStore getInstance() {
-    FileUploadHandlerStore result;
-    synchronized( LOCK ) {
-      result = ( FileUploadHandlerStore )RWT.getApplicationContext().getAttribute( ATTR_NAME );
-      if( result == null ) {
-        result = new FileUploadHandlerStore();
-        RWT.getApplicationContext().setAttribute( ATTR_NAME, result );
-      }
-    }
-    return result;
+    return getUniqueInstance( FileUploadHandlerStore.class, RWT.getApplicationContext() );
   }
 
   public void registerHandler( String token, FileUploadHandler fileUploadHandler ) {
-    ensureServiceHandler();
-    synchronized( lock ) {
-      handlers.put( token, fileUploadHandler );
-    }
+    handlers.put( token, fileUploadHandler );
   }
 
   public void deregisterHandler( String token ) {
-    synchronized( lock ) {
-      handlers.remove( token );
-    }
+    handlers.remove( token );
   }
 
   public FileUploadHandler getHandler( String token ) {
-    FileUploadHandler result;
-    synchronized( lock ) {
-      result = handlers.get( token );
-    }
-    return result;
+    return handlers.get( token );
   }
 
   public static String createToken() {
@@ -70,13 +52,4 @@
     return Integer.toHexString( random1 ) + Integer.toHexString( random2 );
   }
 
-  private void ensureServiceHandler() {
-    synchronized( lock ) {
-      if( !registered ) {
-        RWT.getServiceManager().registerServiceHandler( FileUploadServiceHandler.SERVICE_HANDLER_ID,
-                                                        new FileUploadServiceHandler() );
-        registered = true;
-      }
-    }
-  }
 }
diff --git a/tests/org.eclipse.rap.addons.fileupload.test/src/org/eclipse/rap/addons/fileupload/internal/FileUploadHandlerStore_Test.java b/tests/org.eclipse.rap.addons.fileupload.test/src/org/eclipse/rap/addons/fileupload/internal/FileUploadHandlerStore_Test.java
index 89aff17..1f6ad51 100644
--- a/tests/org.eclipse.rap.addons.fileupload.test/src/org/eclipse/rap/addons/fileupload/internal/FileUploadHandlerStore_Test.java
+++ b/tests/org.eclipse.rap.addons.fileupload.test/src/org/eclipse/rap/addons/fileupload/internal/FileUploadHandlerStore_Test.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2013 EclipseSource and others.
+ * Copyright (c) 2011, 2014 EclipseSource 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
@@ -10,11 +10,7 @@
  ******************************************************************************/
 package org.eclipse.rap.addons.fileupload.internal;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 import org.eclipse.rap.addons.fileupload.FileUploadHandler;
 import org.eclipse.rap.addons.fileupload.internal.FileUploadHandlerStore;
@@ -27,13 +23,13 @@
 
 public class FileUploadHandlerStore_Test {
 
-  private FileUploadHandlerStore itemStore;
+  private FileUploadHandlerStore handlerStore;
   private FileUploadHandler testHandler;
 
   @Before
   public void setUp() {
     Fixture.setUp();
-    itemStore = FileUploadHandlerStore.getInstance();
+    handlerStore = FileUploadHandlerStore.getInstance();
     testHandler = new FileUploadHandler( new TestFileUploadReceiver() );
   }
 
@@ -41,47 +37,68 @@
   public void tearDown() {
     testHandler.dispose();
     testHandler = null;
-    itemStore = null;
+    handlerStore = null;
     Fixture.tearDown();
   }
 
   @Test
-  public void testGetInstance() {
-    assertNotNull( itemStore );
-    assertSame( itemStore, FileUploadHandlerStore.getInstance() );
+  public void testGetInstance_returnsInstance() {
+    FileUploadHandlerStore instance = FileUploadHandlerStore.getInstance();
+
+    assertNotNull( instance );
+  }
+
+  @Test
+  public void testGetInstance_sameInstanceInDifferentUISession() {
+    Fixture.disposeOfServiceContext();
+    Fixture.createServiceContext();
+
+    assertSame( handlerStore, FileUploadHandlerStore.getInstance() );
+  }
+
+  @Test
+  public void testGetInstance_differentInstanceInOtherApplication() {
+    Fixture.disposeOfApplicationContext();
+    Fixture.createApplicationContext();
+    Fixture.createServiceContext();
+
+    FileUploadHandlerStore instance = FileUploadHandlerStore.getInstance();
+
+    assertNotNull( instance );
+    assertNotSame( handlerStore, instance );
   }
 
   @Test
   public void testGetNotExistingHandler() {
-    FileUploadHandler result = itemStore.getHandler( "testId" );
+    FileUploadHandler result = handlerStore.getHandler( "testId" );
 
     assertNull( result );
   }
 
   @Test
   public void testRegisterAndGetHandler() {
-    itemStore.registerHandler( "testId", testHandler );
+    handlerStore.registerHandler( "testId", testHandler );
 
-    FileUploadHandler result = itemStore.getHandler( "testId" );
+    FileUploadHandler result = handlerStore.getHandler( "testId" );
 
     assertSame( testHandler, result );
   }
 
   @Test
   public void testGetHandlerWithDifferentId() {
-    itemStore.registerHandler( "testId", testHandler );
+    handlerStore.registerHandler( "testId", testHandler );
 
-    FileUploadHandler result = itemStore.getHandler( "anotherId" );
+    FileUploadHandler result = handlerStore.getHandler( "anotherId" );
 
     assertNull( result );
   }
 
   @Test
   public void testDeregisterHandler() {
-    itemStore.registerHandler( "testId", testHandler );
+    handlerStore.registerHandler( "testId", testHandler );
 
-    itemStore.deregisterHandler( "testId" );
-    FileUploadHandler result = itemStore.getHandler( "testId" );
+    handlerStore.deregisterHandler( "testId" );
+    FileUploadHandler result = handlerStore.getHandler( "testId" );
 
     assertNull( result );
   }
