diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmFunctionImportImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmFunctionImportImplProv.java
index 76346dc..cddca94 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmFunctionImportImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmFunctionImportImplProv.java
@@ -18,12 +18,7 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.core.edm.provider;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 import org.apache.olingo.odata2.api.edm.EdmAnnotatable;
 import org.apache.olingo.odata2.api.edm.EdmAnnotations;
@@ -67,10 +62,8 @@
 
     List<FunctionImportParameter> parameters = functionImport.getParameters();
     if (parameters != null) {
-      FunctionImportParameter functionImportParameter;
-      for (Iterator<FunctionImportParameter> iterator = parameters.iterator(); iterator.hasNext();) {
-        functionImportParameter = iterator.next();
-        this.parameters.put(functionImportParameter.getName(), functionImportParameter);
+      for (FunctionImportParameter parameter : parameters) {
+        this.parameters.put(parameter.getName(), parameter);
       }
     }
   }
@@ -102,10 +95,11 @@
     if (parametersList == null) {
       parametersList = new ArrayList<String>();
 
-      Set<String> keySet = parameters.keySet();
-      Iterator<String> iterator = keySet.iterator();
-      while (iterator.hasNext()) {
-        parametersList.add(iterator.next());
+      List<FunctionImportParameter> parameters = functionImport.getParameters();
+      if(parameters != null) {
+        for (FunctionImportParameter parameter : parameters) {
+          parametersList.add(parameter.getName());
+        }
       }
     }
 
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmFunctionImportImplProvTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmFunctionImportImplProvTest.java
index 84cab5e..ec1be65 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmFunctionImportImplProvTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmFunctionImportImplProvTest.java
@@ -144,6 +144,31 @@
     assertEquals("fooParameter3", parameter.getName());
   }
 
+
+  @Test
+  public void parametersAreSorted() throws Exception {
+    List<String> parameterNames = edmFunctionImport.getParameterNames();
+    assertEquals("fooParameter1", parameterNames.get(0));
+    assertEquals("fooParameter2", parameterNames.get(1));
+    assertEquals("fooParameter3", parameterNames.get(2));
+
+    EdmParameter parameter = edmFunctionImport.getParameter("fooParameter1");
+    assertNotNull(parameter);
+    assertEquals("fooParameter1", parameter.getName());
+
+    parameter = edmFunctionImport.getParameter("fooParameter1");
+    assertNotNull(parameter);
+    assertEquals("fooParameter1", parameter.getName());
+
+    parameter = edmFunctionImport.getParameter("fooParameter2");
+    assertNotNull(parameter);
+    assertEquals("fooParameter2", parameter.getName());
+
+    parameter = edmFunctionImport.getParameter("fooParameter3");
+    assertNotNull(parameter);
+    assertEquals("fooParameter3", parameter.getName());
+  }
+
   @Test
   public void parameterNotExisting() throws Exception {
     assertNotNull(edmFunctionImportWithoutParameters.getParameterNames());
