diff --git a/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/form/fields/filechooserfield/RwtScoutFileUploadField.java b/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/form/fields/filechooserfield/RwtScoutFileUploadField.java
index cc0e455..7de0d31 100644
--- a/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/form/fields/filechooserfield/RwtScoutFileUploadField.java
+++ b/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/form/fields/filechooserfield/RwtScoutFileUploadField.java
@@ -188,6 +188,7 @@
         }
 
         getUiField().setText(filename);
+        resetUpload();
         handleUpload();
       }
     });
@@ -421,39 +422,50 @@
     if (m_uploadListener == null) {
       m_uploadListener = new P_FileUploadListener();
     }
-    m_uploadListener.startUpload();
     m_handler.addUploadListener(m_uploadListener);
+    m_uploadListener.startUpload();
     createProgressBar();
     getUiBrowseButton().submit(url);
   }
 
+  private void resetUpload() {
+    disposeHandler();
+    disposeProgressBar();
+    initializeFileUpload();
+  }
+
   private boolean cancelUpload() {
-    if (m_uploadedFile != null) {
-      return false;
+    disposeHandler();
+    disposeBrowseButton();
+    disposeProgressBar();
+    getUiField().setText("");
+
+    initializeFileUpload();
+    createBrowseButton();
+    return true;
+  }
+
+  private void disposeBrowseButton() {
+    DropDownFileUpload uiBrowseButton = getUiBrowseButton();
+    if (uiBrowseButton != null && !uiBrowseButton.isDisposed()) {
+      uiBrowseButton.dispose();
     }
+  }
+
+  private void disposeProgressBar() {
+    ProgressBar uiProgressBar = getUiProgressBar();
+    if (uiProgressBar != null && !uiProgressBar.isDisposed()) {
+      uiProgressBar.dispose();
+    }
+  }
+
+  private void disposeHandler() {
     if (m_uploadListener != null) {
       m_handler.removeUploadListener(m_uploadListener);
       m_uploadListener.cancelUpload();
       m_uploadListener = null;
     }
     m_handler.dispose();
-
-    DropDownFileUpload uiBrowseButton = getUiBrowseButton();
-    if (uiBrowseButton != null && !uiBrowseButton.isDisposed()) {
-      uiBrowseButton.dispose();
-    }
-
-    ProgressBar uiProgressBar = getUiProgressBar();
-    if (uiProgressBar != null && !uiProgressBar.isDisposed()) {
-      uiProgressBar.dispose();
-    }
-    getUiField().setText("");
-
-    initializeFileUpload();
-
-    createBrowseButton();
-
-    return true;
   }
 
   @Override
