diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
index c477314de..9482e05d6 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
@@ -660,7 +660,7 @@ public void drawBoxText(INode n, BoxTextElement bs) {
             } else throw new AssertionError();
         }
 
-        displayText(n, text, s, bounds, new MapViewPositionAndRotation(mapState.getForView(x, y), 0));
+        displayText(n, text, s, bounds, new MapViewPositionAndRotation(mapState.getForView(x, y), text.rotationAngle.getRotationAngle(n)));
         g.setFont(defaultFont);
     }
 
diff --git a/src/org/openstreetmap/josm/gui/mappaint/StyleKeys.java b/src/org/openstreetmap/josm/gui/mappaint/StyleKeys.java
index 1b45272cb..53a216257 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/StyleKeys.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/StyleKeys.java
@@ -90,6 +90,10 @@
      * MapCSS icon-rotation property key
      */
     String ICON_ROTATION = "icon-rotation";
+    /**
+     * MapCSS text-rotation property key
+     */
+    String TEXT_ROTATION = "text-rotation";
     /**
      * MapCSS icon-width property key
      */
diff --git a/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java
index a0a184537..f89530a00 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java
@@ -86,14 +86,22 @@ static NodeElement create(Environment env, float defaultMajorZindex, boolean all
      * @since 11670
      */
     public static RotationAngle createRotationAngle(Environment env) {
+        return createRotationAngle(env, ICON_ROTATION);
+    }
+
+    public static RotationAngle createTextRotationAngle(Environment env) {
+        return createRotationAngle(env, TEXT_ROTATION);
+    }
+
+    private static RotationAngle createRotationAngle(Environment env, String key) {
         Cascade c = env.mc.getCascade(env.layer);
 
         RotationAngle rotationAngle = RotationAngle.NO_ROTATION;
-        final Float angle = c.get(ICON_ROTATION, null, Float.class, true);
+        final Float angle = c.get(key, null, Float.class, true);
         if (angle != null) {
             rotationAngle = RotationAngle.buildStaticRotation(angle);
         } else {
-            final Keyword rotationKW = c.get(ICON_ROTATION, null, Keyword.class);
+            final Keyword rotationKW = c.get(key, null, Keyword.class);
             if (rotationKW != null) {
                 if ("way".equals(rotationKW.val)) {
                     rotationAngle = RotationAngle.buildWayDirectionRotation();
diff --git a/src/org/openstreetmap/josm/gui/mappaint/styleelement/TextLabel.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/TextLabel.java
index 829385f8a..a45b0b0dc 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/styleelement/TextLabel.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/styleelement/TextLabel.java
@@ -17,6 +17,7 @@
 import org.openstreetmap.josm.gui.mappaint.styleelement.LabelCompositionStrategy.StaticLabelCompositionStrategy;
 import org.openstreetmap.josm.gui.mappaint.styleelement.LabelCompositionStrategy.TagLookupCompositionStrategy;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.RotationAngle;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -38,6 +39,7 @@
      * the font to be used when rendering
      */
     public Font font;
+    public RotationAngle rotationAngle;
     /**
      * The color to draw the text in, includes alpha.
      */
@@ -57,14 +59,16 @@
      * @param strategy the strategy indicating how the text is composed for a specific {@link OsmPrimitive} to be rendered.
      * If null, no label is rendered.
      * @param font the font to be used. Must not be null.
+     * @param rotationAngle the rotation angle to be used. Must not be null.
      * @param color the color to be used. Must not be null
      * @param haloRadius halo radius
      * @param haloColor halo color
      */
-    protected TextLabel(LabelCompositionStrategy strategy, Font font, Color color, Float haloRadius,
-            Color haloColor) {
+    protected TextLabel(LabelCompositionStrategy strategy, Font font, RotationAngle rotationAngle, Color color, Float haloRadius,
+                        Color haloColor) {
         this.labelCompositionStrategy = strategy;
         this.font = Objects.requireNonNull(font, "font");
+        this.rotationAngle = Objects.requireNonNull(rotationAngle, "rotationAngle");
         this.color = Objects.requireNonNull(color, "color");
         this.haloRadius = haloRadius;
         this.haloColor = haloColor;
@@ -78,6 +82,7 @@ protected TextLabel(LabelCompositionStrategy strategy, Font font, Color color, F
     public TextLabel(TextLabel other) {
         this.labelCompositionStrategy = other.labelCompositionStrategy;
         this.font = other.font;
+        this.rotationAngle = other.rotationAngle;
         this.color = other.color;
         this.haloColor = other.haloColor;
         this.haloRadius = other.haloRadius;
@@ -136,6 +141,7 @@ public static TextLabel create(Environment env, Color defaultTextColor, boolean
         String s = strategy.compose(env.osm);
         if (s == null) return null;
         Font font = StyleElement.getFont(c, s);
+        RotationAngle rotationAngle = NodeElement.createTextRotationAngle(env);
 
         Color color = c.get(TEXT_COLOR, defaultTextColor, Color.class);
         float alpha = c.get(TEXT_OPACITY, 1f, Float.class);
@@ -152,7 +158,7 @@ public static TextLabel create(Environment env, Color defaultTextColor, boolean
             haloColor = Utils.alphaMultiply(haloColor, haloAlphaFactor);
         }
 
-        return new TextLabel(strategy, font, color, haloRadius, haloColor);
+        return new TextLabel(strategy, font, rotationAngle, color, haloRadius, haloColor);
     }
 
     /**
@@ -198,7 +204,8 @@ protected String toStringImpl() {
         StringBuilder sb = new StringBuilder(96);
         sb.append("labelCompositionStrategy=").append(labelCompositionStrategy)
           .append(" font=").append(font)
-          .append(" color=").append(Utils.toString(color));
+          .append(" color=").append(Utils.toString(color))
+          .append(" rotationAngle=").append(rotationAngle);
         if (haloRadius != null) {
             sb.append(" haloRadius=").append(haloRadius)
               .append(" haloColor=").append(haloColor);
@@ -208,7 +215,7 @@ protected String toStringImpl() {
 
     @Override
     public int hashCode() {
-        return Objects.hash(labelCompositionStrategy, font, color, haloRadius, haloColor);
+        return Objects.hash(labelCompositionStrategy, font, rotationAngle, color, haloRadius, haloColor);
     }
 
     @Override
@@ -218,6 +225,7 @@ public boolean equals(Object obj) {
         TextLabel textLabel = (TextLabel) obj;
         return Objects.equals(labelCompositionStrategy, textLabel.labelCompositionStrategy) &&
                 Objects.equals(font, textLabel.font) &&
+                Objects.equals(rotationAngle, textLabel.rotationAngle) &&
                 Objects.equals(color, textLabel.color) &&
                 Objects.equals(haloRadius, textLabel.haloRadius) &&
                 Objects.equals(haloColor, textLabel.haloColor);
diff --git a/styles/standard/elemstyles.mapcss b/styles/standard/elemstyles.mapcss
index 9d7a62948..7b23d5424 100644
--- a/styles/standard/elemstyles.mapcss
+++ b/styles/standard/elemstyles.mapcss
@@ -2585,6 +2585,7 @@ node[amenity=cafe] {
     set icon_z17;
 }
 node[amenity=restaurant] {
+    text-rotation: 45;
     icon-image: "presets/food/restaurant.svg";
     set icon_z17;
 }
