Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java	(revision 6736)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java	(revision 6737)
@@ -240,12 +240,18 @@
         /**
          * Assembles the strings to one.
+         * @see Utils#join
          */
         @NullableArguments
         public static String concat(Object... args) {
-            StringBuilder res = new StringBuilder();
-            for (Object f : args) {
-                res.append(String.valueOf(f));
-            }
-            return res.toString();
+            return Utils.join("", Arrays.asList(args));
+        }
+
+        /**
+         * Assembles the strings to one, where the first entry is used as separator.
+         * @see Utils#join
+         */
+        @NullableArguments
+        public static String join(String... args) {
+            return Utils.join(args[0], Arrays.asList(args).subList(1, args.length));
         }
 
Index: trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.groovy
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.groovy	(revision 6736)
+++ trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.groovy	(revision 6737)
@@ -199,3 +199,21 @@
         assert mc.getCascade(Environment.DEFAULT_LAYER).get("width") == 15
     }
+
+    @Test
+    public void testTicket80711() throws Exception {
+        def sheet = new MapCSSStyleSource("")
+        getParser("*[rcn_ref], *[name] {text: concat(tag(rcn_ref), \" \", tag(name)); }").sheet(sheet)
+        def mc = new MultiCascade()
+        sheet.apply(mc, TestUtils.createPrimitive("way name=Foo"), 20, null, false)
+        assert mc.getCascade(Environment.DEFAULT_LAYER).get("text") == " Foo"
+        sheet.apply(mc, TestUtils.createPrimitive("way rcn_ref=15"), 20, null, false)
+        assert mc.getCascade(Environment.DEFAULT_LAYER).get("text") == "15 "
+        sheet.apply(mc, TestUtils.createPrimitive("way rcn_ref=15 name=Foo"), 20, null, false)
+        assert mc.getCascade(Environment.DEFAULT_LAYER).get("text") == "15 Foo"
+
+        sheet = new MapCSSStyleSource("")
+        getParser("*[rcn_ref], *[name] {text: join(\" - \", tag(rcn_ref), tag(ref), tag(name)); }").sheet(sheet)
+        sheet.apply(mc, TestUtils.createPrimitive("way rcn_ref=15 ref=1.5 name=Foo"), 20, null, false)
+        assert mc.getCascade(Environment.DEFAULT_LAYER).get("text") == "15 - 1.5 - Foo"
+    }
 }
