Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java	(revision 15271)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java	(revision 15275)
@@ -339,22 +339,32 @@
             Object[] convertedArgs;
 
+            int start = 0;
+            int offset = 0;
             if (needsEnvironment) {
-                convertedArgs = new Object[args.size()+1];
+                start = 1;
+                offset = 1;
+                convertedArgs = new Object[args.size() + 1];
                 convertedArgs[0] = env;
-                for (int i = 1; i < convertedArgs.length; ++i) {
-                    convertedArgs[i] = Cascade.convertTo(args.get(i-1).evaluate(env), expectedParameterTypes[i]);
-                    if (convertedArgs[i] == null && !nullable) {
-                        return null;
-                    }
-                }
             } else {
                 convertedArgs = new Object[args.size()];
-                for (int i = 0; i < convertedArgs.length; ++i) {
-                    convertedArgs[i] = Cascade.convertTo(args.get(i).evaluate(env), expectedParameterTypes[i]);
-                    if (convertedArgs[i] == null && !nullable) {
-                        return null;
+            }
+
+            for (int i = start; i < convertedArgs.length; ++i) {
+                if (!expectedParameterTypes[i].isArray()) {
+                    convertedArgs[i] = Cascade.convertTo(args.get(i - offset).evaluate(env), expectedParameterTypes[i]);
+                } else {
+                    Class<?> clazz = expectedParameterTypes[i].getComponentType();
+                    Object[] varargs = (Object[]) Array.newInstance(clazz, args.size() - i + 1);
+                    for (int j = 0; j < args.size() - i + 1; ++j) {
+                        varargs[j] = Cascade.convertTo(args.get(j + i - 1).evaluate(env), clazz);
                     }
-                }
-            }
+                    convertedArgs[i] = expectedParameterTypes[i].cast(varargs);
+                    break;
+                }
+                if (convertedArgs[i] == null && !nullable) {
+                    return null;
+                }
+            }
+
             Object result = null;
             try {
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java	(revision 15271)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java	(revision 15275)
@@ -505,5 +505,5 @@
 
     /**
-     * Returns true if role is in relation. Returns false if not a relation or it does not have the role.
+     * Returns the number of primitives in a relation with the specified roles.
      * @param env the environment
      * @param roles The roles to count in the relation
