diff --git a/bundles/org.eclipse.rap.addons.chart/js/chart/nv/nv-bar.js b/bundles/org.eclipse.rap.addons.chart/js/chart/nv/nv-bar.js
new file mode 100644
index 0000000..3268982
--- /dev/null
+++ b/bundles/org.eclipse.rap.addons.chart/js/chart/nv/nv-bar.js
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2016 EclipseSource and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ralf Sternberg - initial API and implementation
+ ******************************************************************************/
+
+rwt.chart.register( "nv-bar", function( widget ) {
+  var chart = nv.models.discreteBarChart()
+    .x( function( d ) { return d.label; } )
+    .y( function( d ) { return d.value; } )
+    .showValues( true );
+  chart.discretebar.dispatch.on( "elementClick.rap", function( item ) {
+    widget.notifySelection( item.index );
+  });
+  return chart;
+});
diff --git a/bundles/org.eclipse.rap.addons.chart/src/org/eclipse/rap/addons/chart/basic/BarChart.java b/bundles/org.eclipse.rap.addons.chart/src/org/eclipse/rap/addons/chart/basic/BarChart.java
new file mode 100644
index 0000000..291db0e
--- /dev/null
+++ b/bundles/org.eclipse.rap.addons.chart/src/org/eclipse/rap/addons/chart/basic/BarChart.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2016 EclipseSource and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ralf Sternberg - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.rap.addons.chart.basic;
+
+import org.eclipse.rap.addons.chart.NvChart;
+import org.eclipse.swt.widgets.Composite;
+
+
+public class BarChart extends NvChart {
+
+  private boolean showValues = true;
+
+  public BarChart( Composite parent, int style ) {
+    super( parent, style, "nv-bar" );
+    requireJs( registerResource( "chart/nv/nv-bar.js" ) );
+  }
+
+  public void setShowValues( boolean show ) {
+    checkWidget();
+    if( show != showValues ) {
+      showValues = show;
+      setOption( "showValues", show );
+    }
+  }
+
+  public boolean getShowValues() {
+    checkWidget();
+    return showValues;
+  }
+
+}
diff --git a/examples/org.eclipse.rap.addons.chart.demo/src/org/eclipse/rap/addons/chart/nv/demo/BarChartSnippet.java b/examples/org.eclipse.rap.addons.chart.demo/src/org/eclipse/rap/addons/chart/nv/demo/BarChartSnippet.java
new file mode 100644
index 0000000..62544b0
--- /dev/null
+++ b/examples/org.eclipse.rap.addons.chart.demo/src/org/eclipse/rap/addons/chart/nv/demo/BarChartSnippet.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2016 EclipseSource and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ralf Sternberg - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.rap.addons.chart.nv.demo;
+
+import org.eclipse.rap.addons.chart.basic.BarChart;
+import org.eclipse.rap.json.JsonArray;
+import org.eclipse.rap.json.JsonObject;
+import org.eclipse.rap.rwt.application.AbstractEntryPoint;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+
+
+public class BarChartSnippet extends AbstractEntryPoint {
+
+  private BarChart barChart;
+
+  @Override
+  public void createContents( Composite parent ) {
+    parent.setLayout( new GridLayout() );
+    createBarChart( parent );
+    createUpdateButton( parent );
+    update();
+  }
+
+  private void createBarChart( Composite parent ) {
+    barChart = new BarChart( parent, SWT.NONE );
+    barChart.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
+    barChart.setShowValues( true );
+    barChart.addListener( SWT.Selection, new Listener() {
+      @Override
+      public void handleEvent( Event event ) {
+        System.out.println( "Selected bar item #" + event.index );
+      }
+    } );
+  }
+
+  private void createUpdateButton( Composite parent ) {
+    Button button = new Button( parent, SWT.PUSH );
+    button.setText( "Change data" );
+    button.addListener( SWT.Selection, new Listener() {
+      @Override
+      public void handleEvent( Event event ) {
+        update();
+      }
+    } );
+  }
+
+  private void update() {
+    barChart.setChartData( createData() );
+  }
+
+  private static JsonArray createData() {
+    return new JsonArray()
+      .add( new JsonObject().add( "key", "foo" ).add( "values", createRandomValues() ) );
+  }
+
+  private static JsonArray createRandomValues() {
+    return new JsonArray()
+      .add( createItem( "Item 1", "#ff0000", Math.random() * 100 ) )
+      .add( createItem( "Item 2", "#00ff00", Math.random() * 100 ) )
+      .add( createItem( "Item 3", "#0000ff", Math.random() * 100 ) )
+      .add( createItem( "Item 4", "#ffff00", Math.random() * 100 ) )
+      .add( createItem( "Item 5", "#00ffff", Math.random() * 100 ) );
+  }
+
+  private static JsonObject createItem( String text, String color, double value ) {
+    return new JsonObject()
+      .add( "label", text )
+      .add( "color", color )
+      .add( "value", value );
+  }
+
+}
diff --git a/examples/org.eclipse.rap.addons.chart.demo/src/org/eclipse/rap/addons/chart/nv/demo/ChartSnippetPage.java b/examples/org.eclipse.rap.addons.chart.demo/src/org/eclipse/rap/addons/chart/nv/demo/ChartSnippetPage.java
index f8d3d13..76ebc92 100644
--- a/examples/org.eclipse.rap.addons.chart.demo/src/org/eclipse/rap/addons/chart/nv/demo/ChartSnippetPage.java
+++ b/examples/org.eclipse.rap.addons.chart.demo/src/org/eclipse/rap/addons/chart/nv/demo/ChartSnippetPage.java
@@ -22,11 +22,20 @@
 
   @Override
   public void createContents( Composite parent ) {
-    parent.setLayout( new GridLayout() );
+    parent.setLayout( new GridLayout( 2, true ) );
+    createBarChart( parent );
     createPieChart( parent );
     createLineChart( parent );
   }
 
+  private static void createBarChart( Composite parent ) {
+    Composite composite = new Composite( parent, SWT.NONE );
+    composite.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
+    composite.setBackground( new Color( parent.getDisplay(), 250, 250, 250 ) );
+    composite.setBackgroundMode( SWT.INHERIT_DEFAULT );
+    new BarChartSnippet().createContents( composite );
+  }
+
   private static void createPieChart( Composite parent ) {
     Composite composite = new Composite( parent, SWT.NONE );
     composite.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
@@ -37,7 +46,7 @@
 
   private static void createLineChart( Composite parent ) {
     Composite composite = new Composite( parent, SWT.NONE );
-    composite.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
+    composite.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true, 2, 1 ) );
     composite.setBackground( new Color( parent.getDisplay(), 250, 250, 250 ) );
     composite.setBackgroundMode( SWT.INHERIT_DEFAULT );
     new LineChartSnippet().createContents( composite );
diff --git a/tests/org.eclipse.rap.addons.chart.test/src/org/eclipse/rap/addons/chart/basic/BarChart_Test.java b/tests/org.eclipse.rap.addons.chart.test/src/org/eclipse/rap/addons/chart/basic/BarChart_Test.java
new file mode 100644
index 0000000..069ad1e
--- /dev/null
+++ b/tests/org.eclipse.rap.addons.chart.test/src/org/eclipse/rap/addons/chart/basic/BarChart_Test.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2016 EclipseSource and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ralf Sternberg - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.rap.addons.chart.basic;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+
+import org.eclipse.rap.json.JsonObject;
+import org.eclipse.rap.rwt.internal.remote.ConnectionImpl;
+import org.eclipse.rap.rwt.remote.Connection;
+import org.eclipse.rap.rwt.remote.RemoteObject;
+import org.eclipse.rap.rwt.testfixture.TestContext;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+
+@SuppressWarnings( "restriction" )
+public class BarChart_Test {
+
+  private Display display;
+  private Shell shell;
+  private RemoteObject remoteObject;
+  private Connection connection;
+  private BarChart chart;
+
+  @Rule
+  public TestContext context = new TestContext();
+
+  @Before
+  public void setUp() {
+    display = new Display();
+    shell = new Shell( display );
+    remoteObject = mock( RemoteObject.class );
+    connection = fakeConnection( remoteObject );
+    chart = new BarChart( shell, SWT.NONE );
+  }
+
+  @Test
+  public void testCreate_createsRemoteObject() {
+    verify( connection ).createRemoteObject( eq( "rwt.chart.Chart" ) );
+  }
+
+  @Test
+  public void testCreate_setsRenderer() {
+    verify( remoteObject ).set( "renderer", "nv-bar" );
+  }
+
+  @Test
+  public void testGetShowValues_defaultsToTrue() {
+    assertTrue( chart.getShowValues() );
+  }
+
+  @Test
+  public void testSetShowValues_changesValue() {
+    chart.setShowValues( false );
+
+    assertFalse( chart.getShowValues() );
+  }
+
+  @Test
+  public void testSetShowValues_isRendered() {
+    reset( remoteObject );
+
+    chart.setShowValues( false );
+
+    verify( remoteObject ).call( "setOptions", new JsonObject().add( "showValues", false ) );
+  }
+
+  private Connection fakeConnection( RemoteObject remoteObject ) {
+    ConnectionImpl connection = mock( ConnectionImpl.class );
+    when( connection.createRemoteObject( anyString() ) ).thenReturn( remoteObject );
+    when( connection.createServiceObject( anyString() ) ).thenReturn( mock( RemoteObject.class ) );
+    context.replaceConnection( connection );
+    return connection;
+  }
+
+}
