diff --git a/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/form/fields/filechooserfield/IRwtScoutFileUploadField.java b/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/form/fields/filechooserfield/IRwtScoutFileUploadField.java
index 6b15db9..417d248 100644
--- a/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/form/fields/filechooserfield/IRwtScoutFileUploadField.java
+++ b/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/form/fields/filechooserfield/IRwtScoutFileUploadField.java
@@ -17,7 +17,7 @@
 
 public interface IRwtScoutFileUploadField extends IRwtScoutFormField<IFileChooserField> {
 
-  String VARIANT_FILECHOOSER = "filechooserfield";
+  String VARIANT_FILECHOOSER = "filechooserfield_file";
   String VARIANT_DISABLED_SUFFIX = "-disabled";
 
   IDropDownFileUploadForPatch getUiBrowseButton();
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 4ab1340..a54d088 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
@@ -12,10 +12,12 @@
 
 import java.io.File;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.rap.rwt.RWT;
+import org.eclipse.rap.rwt.service.ServerPushSession;
 import org.eclipse.rap.rwt.supplemental.fileupload.DiskFileUploadReceiver;
 import org.eclipse.rap.rwt.supplemental.fileupload.FileUploadEvent;
 import org.eclipse.rap.rwt.supplemental.fileupload.FileUploadHandler;
@@ -74,7 +76,7 @@
   private TextFieldEditableSupport m_editableSupport;
 
   private FileUploadHandler m_handler;
-  private FileUploadListener m_uploadListener;
+  private P_FileUploadListener m_uploadListener;
   private File m_uploadedFile = null;
 
   private String m_originalVariant = "";
@@ -115,16 +117,13 @@
     setUiLabel(label);
     setUiField(textField);
 
-    createProgressBar();
     createBrowseButton();
 
     // prevent the button from grabbing focus
     m_fileContainer.setTabList(new Control[]{textField});
 
     // context menu
-    m_contextMenu = new Menu(getUiBrowseButton().getShell(), SWT.POP_UP);
-    m_contextMenu.addMenuListener(new P_ContextMenuListener());
-    getUiBrowseButton().setMenu(m_contextMenu);
+    createContextMenu(getUiBrowseButton());
 
     // layout
     container.setLayout(new LogicalGridLayout(1, 0));
@@ -139,6 +138,15 @@
     textField.setLayoutData(textLayoutData);
   }
 
+  private void createContextMenu(IDropDownFileUploadForPatch uiBrowseButton) {
+    if (m_contextMenu != null && !m_contextMenu.isDisposed()) {
+      m_contextMenu.dispose();
+    }
+    m_contextMenu = new Menu(uiBrowseButton.getShell(), SWT.POP_UP);
+    m_contextMenu.addMenuListener(new P_ContextMenuListener());
+    uiBrowseButton.setMenu(m_contextMenu);
+  }
+
   private void createBrowseButton() {
     m_browseButton = getUiEnvironment().getFormToolkit().createDropDownFileUpload(m_fileContainer, SWT.DROP_DOWN);
     m_browseButton.setData(RWT.CUSTOM_VARIANT, VARIANT_FILECHOOSER);
@@ -185,6 +193,7 @@
     getUiBrowseButton().setLayoutData(buttonLayoutData);
 
     setEnabledFromScout(getScoutObject().isEnabled());
+    m_browseButton.setDropdownEnabled(calculateDropDownButtonEnabled());
     m_fileContainer.layout();
   }
 
@@ -265,7 +274,7 @@
   protected void attachScout() {
     super.attachScout();
     setFileIconIdFromScout(getScoutObject().getFileIconId());
-    getUiBrowseButton().setDropdownEnabled(getScoutObject().hasMenus());
+    getUiBrowseButton().setDropdownEnabled(calculateDropDownButtonEnabled());
     if (getScoutObject().isFolderMode()) {
       String msg = "IFileChooserField.isFolderMode() == true is not possible in RAP";
       LOG.error(msg);
@@ -275,6 +284,7 @@
 
   @Override
   protected void setDisplayTextFromScout(String s) {
+    getUiBrowseButton().setDropdownEnabled(calculateDropDownButtonEnabled());
     if (s == null) {
       s = "";
     }
@@ -283,6 +293,24 @@
     getUiField().setCaretOffset(0);
   }
 
+  private boolean calculateDropDownButtonEnabled() {
+    final AtomicBoolean hasValidMenus = new AtomicBoolean(false);
+    Runnable t = new Runnable() {
+      @Override
+      public void run() {
+        hasValidMenus.set(getScoutObject().getUIFacade().hasValidMenusFromUI());
+      }
+    };
+    JobEx job = getUiEnvironment().invokeScoutLater(t, 1200);
+    try {
+      job.join(1200);
+    }
+    catch (InterruptedException ex) {
+      //nop
+    }
+    return hasValidMenus.get();
+  }
+
   @Override
   protected void setEnabledFromScout(boolean b) {
     super.setEnabledFromScout(b);
@@ -362,7 +390,9 @@
     if (m_uploadListener == null) {
       m_uploadListener = new P_FileUploadListener();
     }
+    m_uploadListener.startUpload();
     m_handler.addUploadListener(m_uploadListener);
+    createProgressBar();
     getUiBrowseButton().submit(url);
   }
 
@@ -372,6 +402,7 @@
     }
     if (m_uploadListener != null) {
       m_handler.removeUploadListener(m_uploadListener);
+      m_uploadListener.cancelUpload();
       m_uploadListener = null;
     }
     m_handler.dispose();
@@ -381,8 +412,9 @@
 
     initializeFileUpload();
 
-    createProgressBar();
     createBrowseButton();
+    createContextMenu(getUiBrowseButton());
+
     return true;
   }
 
@@ -456,14 +488,36 @@
 
   private class P_FileUploadListener implements FileUploadListener {
 
+    private final ServerPushSession m_pushSession;
+    private int m_oldPercentage = 0;
+
+    public P_FileUploadListener() {
+      m_pushSession = new ServerPushSession();
+    }
+
+    public void startUpload() {
+      m_pushSession.start();
+    }
+
+    public void cancelUpload() {
+      m_pushSession.stop();
+    }
+
+    private int getPercentage(FileUploadEvent uploadEvent) {
+      double bytesRead = uploadEvent.getBytesRead();
+      double contentLength = uploadEvent.getContentLength();
+      double fraction = bytesRead / contentLength;
+      return (int) Math.floor(fraction * 100);
+    }
+
     @Override
     public void uploadProgress(final FileUploadEvent uploadEvent) {
       getUiEnvironment().getDisplay().asyncExec(new Runnable() {
         @Override
         public void run() {
-          double fraction = uploadEvent.getBytesRead() / (double) uploadEvent.getContentLength();
-          int percent = (int) Math.floor(fraction * 100);
-          if (getUiProgressBar() != null && !getUiProgressBar().isDisposed()) {
+          int percent = getPercentage(uploadEvent);
+          if (percent != m_oldPercentage && getUiProgressBar() != null && !getUiProgressBar().isDisposed()) {
+            m_oldPercentage = percent;
             getUiProgressBar().setSelection(percent);
             getUiProgressBar().setToolTipText("Upload progress: " + percent + "%");
           }
@@ -487,14 +541,13 @@
       getUiEnvironment().getDisplay().asyncExec(new Runnable() {
         @Override
         public void run() {
-          int percent = 0;
           if (getUiProgressBar() != null && !getUiProgressBar().isDisposed()) {
-            getUiProgressBar().setSelection(percent);
-            getUiProgressBar().setToolTipText("");
+            getUiProgressBar().dispose();
           }
           m_handler.removeUploadListener(m_uploadListener);
         }
       });
+      m_pushSession.stop();
     }
 
     @Override
@@ -505,9 +558,13 @@
           if (getUiLabel() != null) {
             getUiLabel().setStatus(new ScoutFieldStatus(uploadEvent.getException().getMessage(), IStatus.ERROR));
           }
+          if (getUiProgressBar() != null && !getUiProgressBar().isDisposed()) {
+            getUiProgressBar().dispose();
+          }
           m_handler.removeUploadListener(m_uploadListener);
         }
       });
+      m_pushSession.stop();
     }
   }
 }
