diff --git a/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/form/fields/filechooserfield/RwtScoutFileDownloadField.java b/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/form/fields/filechooserfield/RwtScoutFileDownloadField.java
index 74fde58..92713c4 100644
--- a/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/form/fields/filechooserfield/RwtScoutFileDownloadField.java
+++ b/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/form/fields/filechooserfield/RwtScoutFileDownloadField.java
@@ -11,7 +11,9 @@
 package org.eclipse.scout.rt.ui.rap.form.fields.filechooserfield;
 
 import java.io.File;
+import java.util.List;
 
+import org.eclipse.scout.commons.CollectionUtility;
 import org.eclipse.scout.commons.IOUtility;
 import org.eclipse.scout.commons.logger.IScoutLogger;
 import org.eclipse.scout.commons.logger.ScoutLogManager;
@@ -82,8 +84,8 @@
           IFileChooser chooser = getScoutObject().getFileChooser();
           String fileName = chooser.getFileName();
           if (fileName == null) {
-            String[] exts = getScoutObject().getFileExtensions();
-            fileName = "download." + (exts != null && exts.length > 0 ? exts[0] : "tmp");
+            List<String> exts = getScoutObject().getFileExtensions();
+            fileName = "download." + (CollectionUtility.hasElements(exts) ? CollectionUtility.firstElement(exts) : "tmp");
           }
           final File tempFile = new File(IOUtility.createTempDirectory("download"), fileName);
           tempFile.deleteOnExit();
diff --git a/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/window/filechooser/RwtScoutFileChooser.java b/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/window/filechooser/RwtScoutFileChooser.java
index 2e0fad1..c8c7d58 100644
--- a/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/window/filechooser/RwtScoutFileChooser.java
+++ b/org.eclipse.scout.rt.ui.rap.incubator.filechooser/src/org/eclipse/scout/rt/ui/rap/window/filechooser/RwtScoutFileChooser.java
@@ -12,6 +12,8 @@
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 import org.eclipse.scout.commons.logger.IScoutLogger;
 import org.eclipse.scout.commons.logger.ScoutLogManager;
@@ -47,22 +49,22 @@
 
   @Override
   public void showFileChooser() {
-    File[] files = null;
+    List<File> files = null;
     try {
       if (getScoutFileChooser().isFolderMode()) {
         LOG.error("IFileChooserField.isFolderMode() == true is not possible in RAP");
-        files = new File[0];
+        files = Collections.emptyList();
       }
       else if (!getScoutFileChooser().isTypeLoad()) {
         LOG.info("IFileChooserField.isTypeLoad() == false (SAVE) is not possible in RAP, doing nothing");
-        files = new File[0];
+        files = Collections.emptyList();
       }
       else {
         files = uploadFiles();
       }
     }
     finally {
-      final File[] finalFiles = files;
+      final List<File> finalFiles = files;
       Runnable job = new Runnable() {
         @Override
         public void run() {
@@ -73,7 +75,7 @@
     }
   }
 
-  protected File[] uploadFiles() {
+  protected List<File> uploadFiles() {
     int style = SWT.NONE;
     if (getScoutFileChooser().isTypeLoad()) {
       style |= SWT.OPEN;
@@ -86,7 +88,7 @@
     }
     String[] extensions = new String[]{"*.*"};
     if (getScoutFileChooser().getFileExtensions() != null) {
-      ArrayList<String> extensionList = new ArrayList<String>();
+      List<String> extensionList = new ArrayList<String>();
       for (String ext : getScoutFileChooser().getFileExtensions()) {
         extensionList.add("*." + ext);
       }
@@ -102,10 +104,10 @@
     }
     String selectedFile = dialog.open();
     if (selectedFile != null && selectedFile.length() > 0) {
-      return new File[]{new File(selectedFile)};
+      return Collections.singletonList(new File(selectedFile));
     }
     else {
-      return new File[0];
+      return Collections.emptyList();
     }
   }
 
