diff --git a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/AbstractDataProvider.java b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/AbstractDataProvider.java
new file mode 100644
index 0000000..0f31dff
--- /dev/null
+++ b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/AbstractDataProvider.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2013 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:
+ *    EclipseSource - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.rap.addons.dropdown;
+
+import org.eclipse.rap.json.JsonArray;
+import org.eclipse.rap.rwt.RWT;
+import org.eclipse.rap.rwt.remote.Connection;
+import org.eclipse.rap.rwt.remote.RemoteObject;
+
+
+public abstract class AbstractDataProvider {
+
+  private static final String REMOTE_TYPE = "rwt.remote.Model";
+
+  private RemoteObject remoteObject;
+
+  public AbstractDataProvider() {
+    Connection connection = RWT.getUISession().getConnection();
+    remoteObject = connection.createRemoteObject( REMOTE_TYPE );
+  }
+
+  public String getId() {
+    return remoteObject.getId();
+  }
+
+  protected void setData( JsonArray elements ) {
+    if( elements == null ) {
+      throw new NullPointerException( "Parameter must not be null: elements" );
+    }
+    remoteObject.set( "data", elements );
+  }
+
+}
diff --git a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/AutoSuggest.java b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/AutoSuggest.java
index 74063ff..1fa3f1a 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/AutoSuggest.java
+++ b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/AutoSuggest.java
@@ -54,7 +54,7 @@
     } );
   }
 
-  public void setDataProvider( SimpleDataProvider dataProvider ) {
+  public void setDataProvider( AbstractDataProvider dataProvider ) {
     if( dataProvider == null ) {
       throw new NullPointerException( "Data must not be null" );
     }
diff --git a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/SimpleDataProvider.java b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/SimpleDataProvider.java
index 367a151..0ad6e2d 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/SimpleDataProvider.java
+++ b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/SimpleDataProvider.java
@@ -11,28 +11,12 @@
 package org.eclipse.rap.addons.dropdown;
 
 import org.eclipse.rap.json.JsonArray;
-import org.eclipse.rap.rwt.RWT;
-import org.eclipse.rap.rwt.remote.Connection;
-import org.eclipse.rap.rwt.remote.RemoteObject;
 
 
-public class SimpleDataProvider {
-
-  private static final String REMOTE_TYPE = "rwt.remote.Model";
-  private RemoteObject remoteObject;
+public class SimpleDataProvider extends AbstractDataProvider {
 
   public SimpleDataProvider( String[] data ) {
-    if( data == null ) {
-      throw new NullPointerException( "Data must not be null" );
-    }
-    Connection connection = RWT.getUISession().getConnection();
-    remoteObject = connection.createRemoteObject( REMOTE_TYPE );
-    JsonArray array = createJsonArray( data );
-    remoteObject.set( "data", array );
-  }
-
-  public String getId() {
-    return remoteObject.getId();
+    setData( createJsonArray( data ) );
   }
 
   private static JsonArray createJsonArray( String[] data ) {
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/AbstractDataProvider_Test.java b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/AbstractDataProvider_Test.java
new file mode 100644
index 0000000..bfe42df
--- /dev/null
+++ b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/AbstractDataProvider_Test.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2013 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:
+ *    EclipseSource - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.rap.addons.dropdown;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.eclipse.rap.json.JsonArray;
+import org.eclipse.rap.rwt.remote.Connection;
+import org.eclipse.rap.rwt.remote.RemoteObject;
+import org.eclipse.rap.rwt.testfixture.Fixture;
+import org.junit.*;
+
+
+public class AbstractDataProvider_Test {
+
+  private static final String REMOTE_TYPE = "rwt.remote.Model";
+
+  private Connection connection;
+
+  private RemoteObject remoteObject;
+
+  @Before
+  public void setUp() {
+    Fixture.setUp();
+    connection = mock( Connection.class );
+    remoteObject = mock( RemoteObject.class );
+    when( connection.createRemoteObject( anyString() ) ).thenReturn( remoteObject );
+    when( remoteObject.getId() ).thenReturn( "idFoo" );
+    Fixture.fakeConnection( connection );
+  }
+
+  @After
+  public void tearDown() {
+    Fixture.tearDown();
+  }
+
+  @Test
+  public void testConstructor_createsRemoteObject() {
+    new AbstractDataProvider(){};
+
+    verify( connection ).createRemoteObject( eq( REMOTE_TYPE ) );
+  }
+
+  @Test
+  public void testGetId() {
+    AbstractDataProvider dataProvider = new AbstractDataProvider(){};
+    assertEquals( "idFoo", dataProvider.getId() );
+  }
+
+  @Test ( expected = NullPointerException.class )
+  public void testSetData_failsWithNullArgument() {
+    AbstractDataProvider dataProvider = new AbstractDataProvider(){};
+
+    dataProvider.setData( null );
+  }
+
+  @Test
+  public void testSetData_setsDataOnRemoteObject() {
+    JsonArray array = new JsonArray().add( "foo" ).add( "bar" );
+    AbstractDataProvider dataProvider = new AbstractDataProvider(){};
+
+    dataProvider.setData( array );
+
+    verify( remoteObject ).set( eq( "data" ), eq( array ) );
+  }
+
+}
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/SimpleDataProvider_Test.java b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/SimpleDataProvider_Test.java
index 2e4e69e..a19499c 100644
--- a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/SimpleDataProvider_Test.java
+++ b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/SimpleDataProvider_Test.java
@@ -10,27 +10,23 @@
  ******************************************************************************/
 package org.eclipse.rap.addons.dropdown;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
 import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import java.util.concurrent.atomic.AtomicReference;
+
 import org.eclipse.rap.json.JsonArray;
 import org.eclipse.rap.rwt.remote.Connection;
 import org.eclipse.rap.rwt.remote.RemoteObject;
 import org.eclipse.rap.rwt.testfixture.Fixture;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.*;
 
 
 public class SimpleDataProvider_Test {
 
-  private static final String REMOTE_TYPE = "rwt.remote.Model";
-
   private Connection connection;
-
   private RemoteObject remoteObject;
 
   @Before
@@ -43,29 +39,27 @@
     Fixture.fakeConnection( connection );
   }
 
+  @After
+  public void tearDown() {
+    Fixture.tearDown();
+  }
+
   @Test ( expected = NullPointerException.class )
   public void testConstructor_failsWithNullArgument() {
     new SimpleDataProvider( null );
   }
 
   @Test
-  public void testConstructor_createsRemoteObject() {
-    new SimpleDataProvider( new String[ 0 ] );
+  public void testConstructor_setsData() {
+    final AtomicReference<JsonArray> captor = new AtomicReference<JsonArray>();
+    new SimpleDataProvider( new String[]{ "foo", "bar" } ) {
+      @Override
+      protected void setData( JsonArray array ) {
+        captor.set( array );
+      }
+    };
 
-    verify( connection ).createRemoteObject( eq( REMOTE_TYPE ) );
-  }
-
-  @Test
-  public void testConstructor_setsDataOnRemoteObject() {
-    new SimpleDataProvider( new String[]{ "foo", "bar" } );
-
-    verify( remoteObject ).set( eq( "data" ), eq( new JsonArray().add( "foo" ).add( "bar" ) ) );
-  }
-
-  @Test
-  public void testGetId() {
-    SimpleDataProvider dataProvider = new SimpleDataProvider( new String[]{ "foo", "bar" } );
-    assertEquals( "idFoo", dataProvider.getId() );
+    assertEquals( new JsonArray().add( "foo" ).add( "bar" ), captor.get() );
   }
 
 }
