diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumn.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumn.java
index 4f14a6d..865777b 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumn.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumn.java
@@ -912,6 +912,8 @@
   public void setHeaderWordWrap( boolean wordWrap ) {
     checkWidget();
     this.headerWordWrap = wordWrap;
+    parent.layoutCache.invalidateHeaderHeight();
+    parent.scheduleRedraw();
   }
 
   /**
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumnGroup.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumnGroup.java
index a32eec6..43f29d4 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumnGroup.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumnGroup.java
@@ -47,6 +47,7 @@
   private List<GridColumn> columns = new ArrayList<GridColumn>();
   private boolean expanded = true;
   private Font headerFont;
+  private boolean headerWordWrap;
 
   /**
    * Constructs a new instance of this class given its parent (which must be a Grid) and a style
@@ -268,6 +269,30 @@
     parent.scheduleRedraw();
   }
 
+  /**
+   * Sets whether or not text is word-wrapped in the header for this column group.
+   * If Grid.setAutoHeight(true) is set, the row height is adjusted to accommodate
+   * word-wrapped text.
+   * @param wordWrap Set to true to wrap the text, false otherwise
+   * @see #getHeaderWordWrap()
+   */
+  public void setHeaderWordWrap( boolean wordWrap ) {
+    checkWidget();
+    headerWordWrap = wordWrap;
+    parent.layoutCache.invalidateHeaderHeight();
+    parent.scheduleRedraw();
+  }
+
+  /**
+   * Returns whether or not text is word-wrapped in the header for this column group.
+   * @return true if the header wraps its text.
+   * @see GridColumn#setHeaderWordWrap(boolean)
+   */
+  public boolean getHeaderWordWrap() {
+    checkWidget();
+    return headerWordWrap;
+  }
+
   void newColumn( GridColumn column ) {
     columns.add( column );
   }
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA.java
index 9681cac..963854d 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA.java
@@ -47,6 +47,7 @@
   private static final String PROP_VISIBLE = "visibility";
   private static final String PROP_FONT = "font";
   private static final String PROP_EXPANDED = "expanded";
+  private static final String PROP_HEADER_WORD_WRAP = "headerWordWrap";
   private static final String PROP_EXPAND_LISTENER = "Expand";
   private static final String PROP_COLLAPSE_LISTENER = "Collapse";
 
@@ -72,6 +73,7 @@
     preserveProperty( group, PROP_VISIBLE, isVisible( group ) );
     preserveProperty( group, PROP_FONT, group.getHeaderFont() );
     preserveProperty( group, PROP_EXPANDED, group.getExpanded() );
+    preserveProperty( group, PROP_HEADER_WORD_WRAP, group.getHeaderWordWrap() );
     preserveListener( group, PROP_EXPAND_LISTENER, hasExpandListener( group ) );
     preserveListener( group, PROP_COLLAPSE_LISTENER, hasCollapseListener( group ) );
   }
@@ -87,6 +89,7 @@
     renderProperty( group, PROP_VISIBLE, isVisible( group ), true );
     renderFont( group, PROP_FONT, group.getHeaderFont() );
     renderProperty( group, PROP_EXPANDED, group.getExpanded(), true );
+    renderProperty( group, PROP_HEADER_WORD_WRAP, group.getHeaderWordWrap(), false );
     renderListener( group, PROP_EXPAND_LISTENER, hasExpandListener( group ), false );
     renderListener( group, PROP_COLLAPSE_LISTENER, hasCollapseListener( group ), false );
   }
diff --git a/examples/org.eclipse.rap.nebula.widgets.grid.demo.standalone/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java b/examples/org.eclipse.rap.nebula.widgets.grid.demo.standalone/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java
index 8c49f31..1451773 100644
--- a/examples/org.eclipse.rap.nebula.widgets.grid.demo.standalone/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java
+++ b/examples/org.eclipse.rap.nebula.widgets.grid.demo.standalone/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java
@@ -408,6 +408,9 @@
         for( GridColumn column : grid.getColumns() ) {
           column.setHeaderWordWrap( button.getSelection() );
         }
+        for( GridColumnGroup group : grid.getColumnGroups() ) {
+          group.setHeaderWordWrap( button.getSelection() );
+        }
       }
     } );
   }
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumnGroup_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumnGroup_Test.java
index e6fa3ca..e332043 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumnGroup_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumnGroup_Test.java
@@ -168,4 +168,25 @@
     group.setHeaderFont( font );
   }
 
+  @Test
+  public void testGetHeaderWordWrap_Initial() {
+    assertFalse( group.getHeaderWordWrap() );
+  }
+
+  @Test
+  public void testGetHeaderWordWrap() {
+    group.setHeaderWordWrap( true );
+
+    assertTrue( group.getHeaderWordWrap() );
+  }
+
+  @Test
+  public void testGetHeaderWordWrap_invalidatesCachedHeaderHeight() {
+    grid.getHeaderHeight();
+
+    group.setHeaderWordWrap( true );
+
+    assertFalse( grid.layoutCache.hasHeaderHeight() );
+  }
+
 }
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumn_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumn_Test.java
index eab0f5b..e514d27 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumn_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumn_Test.java
@@ -771,6 +771,15 @@
   }
 
   @Test
+  public void testGetHeaderWordWrap_invalidatesCachedHeaderHeight() {
+    grid.getHeaderHeight();
+
+    column.setHeaderWordWrap( true );
+
+    assertFalse( grid.layoutCache.hasHeaderHeight() );
+  }
+
+  @Test
   public void testGetWordWrap_Initial() {
     assertFalse( column.getWordWrap() );
   }
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA_Test.java
index 66f4501..47e753e 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA_Test.java
@@ -436,4 +436,35 @@
     assertNull( message.findSetOperation( group, "customVariant" ) );
   }
 
+  @Test
+  public void testRenderInitialHeaderWordWrap() throws IOException {
+    lca.render( group );
+
+    TestMessage message = Fixture.getProtocolMessage();
+    CreateOperation operation = message.findCreateOperation( group );
+    assertTrue( operation.getProperties().names().indexOf( "headerWordWrap" ) == -1 );
+  }
+
+  @Test
+  public void testRenderHeaderWordWrap() throws IOException {
+    group.setHeaderWordWrap( true );
+    lca.renderChanges( group );
+
+    TestMessage message = Fixture.getProtocolMessage();
+    assertEquals( JsonValue.TRUE, message.findSetProperty( group, "headerWordWrap" ) );
+  }
+
+  @Test
+  public void testRenderHeaderWordWrapUnchanged() throws IOException {
+    Fixture.markInitialized( display );
+    Fixture.markInitialized( group );
+
+    group.setHeaderWordWrap( true );
+    Fixture.preserveWidgets();
+    lca.renderChanges( group );
+
+    TestMessage message = Fixture.getProtocolMessage();
+    assertNull( message.findSetOperation( group, "headerWordWrap" ) );
+  }
+
 }
