diff --git a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/internal/resources/AutoSuggest.js b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/internal/resources/AutoSuggest.js
index 8b6d2e5..dbb090b 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/internal/resources/AutoSuggest.js
+++ b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/internal/resources/AutoSuggest.js
@@ -45,7 +45,7 @@
 // Event Handling
 
 function onChangeDataSource( event ) {
-  processDataSource.apply( this );
+  this.set( "elements", null );
 }
 
 function onChangeElements( event ) {
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo.examples/META-INF/MANIFEST.MF b/examples/org.eclipse.rap.addons.dropdown.demo.examples/META-INF/MANIFEST.MF
index e52c0be..2a7698c 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo.examples/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.rap.addons.dropdown.demo.examples/META-INF/MANIFEST.MF
@@ -4,12 +4,10 @@
 Bundle-SymbolicName: org.eclipse.rap.addons.dropdown.demo.examples
 Bundle-Version: 1.0.0.qualifier
 Import-Package: org.eclipse.rap.addons.dropdown;version="0.1.0",
- org.eclipse.rap.addons.dropdown.viewer;version="0.1.0",
  org.osgi.framework;version="1.3.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Vendor: Eclipse.org - RAP
 Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.1.0",
- org.eclipse.rap.examples;bundle-version="2.1.0",
- org.eclipse.rap.jface;bundle-version="2.1.0"
+ org.eclipse.rap.examples;bundle-version="2.1.0"
 Export-Package: org.eclipse.rap.addons.dropdown.demo.examples;version="0.1.0"
 Bundle-Activator: org.eclipse.rap.addons.dropdown.demo.examples.Activator
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/CountryInfo.java b/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/CountryInfo.java
index 1758e69..41c19f9 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/CountryInfo.java
+++ b/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/CountryInfo.java
@@ -36,6 +36,15 @@
     return countries;
   }
 
+  public Country findCountry( String name ) {
+    for( Country country : countries ) {
+      if( country.name.equals( name ) ) {
+        return country;
+      }
+    }
+    return null;
+  }
+
   private CountryInfo() {
     try {
       countries = readCountries();
@@ -116,6 +125,15 @@
       return cities;
     }
 
+    public City findCity( String name ) {
+      for( City city : cities ) {
+        if( city.name.equals( name ) ) {
+          return city;
+        }
+      }
+      return null;
+    }
+
   }
 
   static class City {
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/DropDownExamplePage.java b/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/DropDownExamplePage.java
index f136811..bb40e82 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/DropDownExamplePage.java
+++ b/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/DropDownExamplePage.java
@@ -10,14 +10,14 @@
  ******************************************************************************/
 package org.eclipse.rap.addons.dropdown.demo.examples;
 
-import org.eclipse.jface.viewers.ArrayContentProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
+import java.util.Arrays;
+
+import org.eclipse.rap.addons.dropdown.AutoSuggest;
+import org.eclipse.rap.addons.dropdown.DataProvider;
+import org.eclipse.rap.addons.dropdown.DataSource;
+import org.eclipse.rap.addons.dropdown.SuggestionSelectedListener;
 import org.eclipse.rap.addons.dropdown.demo.examples.CountryInfo.City;
 import org.eclipse.rap.addons.dropdown.demo.examples.CountryInfo.Country;
-import org.eclipse.rap.addons.dropdown.viewer.DropDownViewer;
 import org.eclipse.rap.examples.ExampleUtil;
 import org.eclipse.rap.examples.IExamplePage;
 import org.eclipse.swt.SWT;
@@ -34,6 +34,10 @@
 public class DropDownExamplePage implements IExamplePage {
 
   private CityMap cityMap;
+  private Text countryText;
+  private Text cityText;
+  private AutoSuggest cityAutoSuggest;
+  private Country currentCountry = null;
 
   public void createControl( Composite parent ) {
     parent.setLayout( ExampleUtil.createMainLayout( 2 ) );
@@ -46,46 +50,54 @@
     group.setText( "City Selection" );
     group.setLayout( new GridLayout( 2, false ) );
     group.setLayoutData( new GridData( SWT.LEFT, SWT.TOP, false, false ) );
-    Label countryLabel = new Label( group, SWT.NONE );
+    createCountryText( group );
+    createCityText( group );
+    createCityAutoSuggest();
+    createCountryAutoSuggest();
+  }
+
+  public void createCountryText( Composite parent ) {
+    Label countryLabel = new Label( parent, SWT.NONE );
     countryLabel.setText( "Country:" );
-    Text countryText = new Text( group, SWT.BORDER );
+    countryText = new Text( parent, SWT.BORDER );
     countryText.setLayoutData( new GridData( 300, SWT.DEFAULT ) );
-    Label cityLabel = new Label( group, SWT.NONE );
-    cityLabel.setText( "City:" );
-    Text cityText = new Text( group, SWT.BORDER );
-    cityText.setLayoutData( new GridData( 300, SWT.DEFAULT ) );
-    DropDownViewer cityViewer = createCityViewer( cityText );
-    createCountryViewer( countryText, cityViewer );
     countryText.setFocus();
+  }
+
+  public void createCityText( Composite parent ) {
+    Label cityLabel = new Label( parent, SWT.NONE );
+    cityLabel.setText( "City:" );
+    cityText = new Text( parent, SWT.BORDER );
+    cityText.setLayoutData( new GridData( 300, SWT.DEFAULT ) );
     cityText.setEnabled( false );
   }
 
-  private DropDownViewer createCityViewer( Text cityText ) {
-    DropDownViewer cityViewer = new DropDownViewer( cityText );
-    cityViewer.setContentProvider( new ArrayContentProvider() );
-    cityViewer.setLabelProvider( new LabelProvider() );
-    cityViewer.addSelectionChangedListener( new ISelectionChangedListener() {
-      public void selectionChanged( SelectionChangedEvent event ) {
-        IStructuredSelection selection = ( IStructuredSelection )event.getSelection();
-        cityMap.visit( ( City )selection.getFirstElement() );
+  private void createCountryAutoSuggest() {
+    AutoSuggest countryAutoSuggest = new AutoSuggest( countryText );
+    countryAutoSuggest.setAutoComplete( true );
+    countryAutoSuggest.setDataSource( createCountriesDataSource() );
+    countryAutoSuggest.addSelectionListener( new SuggestionSelectedListener() {
+      public void suggestionSelected() {
+        setCurrentCountry( countryText.getText() );
       }
     } );
-    return cityViewer;
   }
 
-  private void createCountryViewer( Text countryText, final DropDownViewer cityViewer ) {
-    DropDownViewer countryViewer = new DropDownViewer( countryText );
-    countryViewer.setContentProvider( new ArrayContentProvider() );
-    countryViewer.setLabelProvider( new LabelProvider() );
-    countryViewer.setInput( CountryInfo.getInstance().getCountries() );
-    countryViewer.addSelectionChangedListener( new ISelectionChangedListener() {
-      public void selectionChanged( SelectionChangedEvent event ) {
-        IStructuredSelection selection = ( IStructuredSelection )event.getSelection();
-        Country country = ( Country )selection.getFirstElement();
-        Text text = ( Text )cityViewer.getControl();
-        text.setText( "" );
-        text.setEnabled( true );
-        cityViewer.setInput( country.getCities() );
+  private void setCurrentCountry( String name ) {
+    cityText.setText( "" );
+    cityText.setEnabled( true );
+    currentCountry = CountryInfo.getInstance().findCountry( name );
+    cityAutoSuggest.setDataSource( createDataSource( currentCountry ) );
+  }
+
+  private void createCityAutoSuggest() {
+    cityAutoSuggest = new AutoSuggest( cityText );
+    cityAutoSuggest.setAutoComplete( true );
+    cityAutoSuggest.addSelectionListener( new SuggestionSelectedListener() {
+      public void suggestionSelected() {
+        String name = cityText.getText();
+        City city = currentCountry.findCity( name );
+        cityMap.visit( city );
       }
     } );
   }
@@ -99,4 +111,33 @@
     cityMap = new CityMap( browser );
   }
 
+  // TODO [tb] : re-use data sources
+  private static DataSource createCountriesDataSource() {
+    DataSource countriesDataSource = new DataSource();
+    countriesDataSource.setDataProvider( new DataProvider() {
+      public Iterable<?> getSuggestions() {
+        return Arrays.asList( CountryInfo.getInstance().getCountries() );
+      }
+      public String getValue( Object element ) {
+        return ( ( Country )element ).name;
+      }
+    } );
+    return countriesDataSource;
+  }
+
+   // TODO [tb] : re-use data sources
+   private static DataSource createDataSource( Country country ) {
+     DataSource dataSource = new DataSource();
+     final City[] cities = country.getCities();
+     dataSource.setDataProvider( new DataProvider() {
+       public Iterable< ? > getSuggestions() {
+         return Arrays.asList( cities );
+       }
+       public String getValue( Object element ) {
+         return element.toString();
+       }
+    } );
+     return dataSource;
+   }
+
 }
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch b/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch
index 70e1b17..54fd9fe 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch
+++ b/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch
@@ -40,9 +40,9 @@
 <booleanAttribute key="org.eclipse.rap.launch.useSessionTimeout" value="false"/>
 <stringAttribute key="pde.version" value="3.3"/>
 <booleanAttribute key="show_selected_only" value="true"/>
-<stringAttribute key="target_bundles" value="com.ibm.icu.base,javax.servlet@default:default,javax.xml,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.eclipse.core.commands,org.eclipse.core.jobs,org.eclipse.equinox.common,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.util@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.rap.jface,org.eclipse.rap.rwt.osgi@default:default,org.eclipse.rap.rwt@default:default"/>
+<stringAttribute key="target_bundles" value="com.ibm.icu.base@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.util@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.rap.rwt.osgi@default:default,org.eclipse.rap.rwt@default:default"/>
 <booleanAttribute key="tracing" value="false"/>
 <booleanAttribute key="useCustomFeatures" value="false"/>
 <booleanAttribute key="useDefaultConfigArea" value="true"/>
-<stringAttribute key="workspace_bundles" value="org.eclipse.rap.addons.dropdown,org.eclipse.rap.addons.dropdown.demo,org.eclipse.rap.addons.dropdown.viewer,org.eclipse.rap.clientscripting"/>
+<stringAttribute key="workspace_bundles" value="org.eclipse.rap.addons.dropdown.demo@default:default,org.eclipse.rap.addons.dropdown@default:default,org.eclipse.rap.clientscripting@default:default"/>
 </launchConfiguration>
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/jasmine/jasmine/specs/AutoSuggestSpec.js b/tests/org.eclipse.rap.addons.dropdown.test/jasmine/jasmine/specs/AutoSuggestSpec.js
index d693c4f..559c942 100644
--- a/tests/org.eclipse.rap.addons.dropdown.test/jasmine/jasmine/specs/AutoSuggestSpec.js
+++ b/tests/org.eclipse.rap.addons.dropdown.test/jasmine/jasmine/specs/AutoSuggestSpec.js
@@ -204,16 +204,13 @@
 
     describe( "change:dataSource", function() {
 
-      it( "sets elements", function() {
+      it( "sets elements to null", function() {
         model.addListener( "change:dataSource", createClientListener( "AutoSuggest" ) );
-        var dataSource = rap.typeHandler[ "rwt.remote.Model" ].factory();
-        dataSource.set( "data", [ "foo", "bar" ] );
-        spyOn( rap, "getObject" ).andReturn( dataSource );
+        model.set( "elements", [] );
 
         model.set( "dataSource", "fooId" );
 
-        expect( rap.getObject ).toHaveBeenCalledWith( "fooId" );
-        expect( model.get( "elements" ) ).toEqual( [ "foo", "bar" ] );
+        expect( model.get( "elements" ) ).toBeNull();
       } );
 
     } );
