diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java
index 40ec001..cdde05d 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java
@@ -75,7 +75,7 @@
     if( dataSource == null ) {
       throw new NullPointerException( "Data must not be null" );
     }
-    model.set( "dataSource", dataSource.getId() );
+    model.set( "dataSourceId", dataSource.getId() );
   }
 
   public void setVisibleItemCount( int itemCount ) {
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggest.js b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggest.js
index dbb090b..cf8be3b 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggest.js
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggest.js
@@ -19,22 +19,22 @@
     onAcceptSuggestion.apply( event.source, [ event ] );
   } else {
     switch( event.property ) {
-      case "dataSource":
-        onChangeDataSource.apply( event.source, [ event ] );
+      case "dataSourceId":
+        onChangeDataSourceId.apply( event.source, [ event ] );
       break;
-      case "elements":
-        onChangeElements.apply( event.source, [ event ] );
+      case "suggestions":
+        onChangeSuggestions.apply( event.source, [ event ] );
       break;
       case "userText":
         onChangeUserText.apply( event.source, [ event ] );
       break;
-      case "results":
+      case "currentSuggestions":
         onChangeResults.apply( event.source, [ event ] );
       break;
-      case "resultSelection":
+      case "selectedSuggestionIndex":
         onChangeResultSelection.apply( event.source, [ event ] );
       break;
-      case "suggestion":
+      case "replacementText":
         onChangeSuggestion.apply( event.source, [ event ] );
       break;
     }
@@ -44,31 +44,31 @@
 //////////////////
 // Event Handling
 
-function onChangeDataSource( event ) {
-  this.set( "elements", null );
+function onChangeDataSourceId( event ) {
+  this.set( "suggestions", null );
 }
 
-function onChangeElements( event ) {
+function onChangeSuggestions( event ) {
   this.set( "elementSelection", -1, { "nosync" : true } );
   // NOTE: Nothing else to do if not visible, but would need to update when it becomes visible.
   //       Currently only onChangeUserText can set resultsVisible to true, which updates implicitly.
-  if( this.get( "resultsVisible" ) ) {
+  if( this.get( "suggestionsVisible" ) ) {
     filter.apply( this, [ { "action" : "refresh" } ] );
   }
 }
 
 function onChangeUserText( event ) {
-  this.set( "resultsVisible", event.value != null && event.value.length > 0  );
+  this.set( "suggestionsVisible", event.value != null && event.value.length > 0  );
   filter.apply( this, [ event.options ] );
 }
 
 function onChangeResults( event ) {
   var action = event.options.action;
   if( this.get( "autoComplete" ) && ( action === "typing" || action === "refresh" ) ) {
-    var items = this.get( "results" ).items;
+    var items = this.get( "currentSuggestions" ).items;
     var common = commonText( items );
     if( common && common.length > this.get( "userText" ).length ) {
-      this.set( "suggestion", common );
+      this.set( "replacementText", common );
     }
   }
 }
@@ -76,9 +76,9 @@
 function onChangeResultSelection( event ) {
   var suggestion = null;
   if( event.value !== -1 ) {
-    suggestion = this.get( "results" ).items[ event.value ] || "";
+    suggestion = this.get( "currentSuggestions" ).items[ event.value ] || "";
   }
-  this.set( "suggestion", suggestion, { "action" : "selection" } );
+  this.set( "replacementText", suggestion, { "action" : "selection" } );
 }
 
 function onChangeSuggestion( event ) {
@@ -99,15 +99,15 @@
 }
 
 function onAcceptSuggestion( event ) {
-  var results = this.get( "results" );
+  var results = this.get( "currentSuggestions" );
   if( results ) {
-    var index = this.get( "resultSelection" );
+    var index = this.get( "selectedSuggestionIndex" );
     if( typeof index === "number" && index > -1 ) {
       this.set( "elementSelection", results.indicies[ index ] );
-      this.set( "resultsVisible", false );
+      this.set( "suggestionsVisible", false );
     } else if( this.get( "autoComplete" ) && results.indicies.length === 1 ) {
       this.set( "elementSelection", results.indicies[ 0 ] );
-      this.set( "resultsVisible", false );
+      this.set( "suggestionsVisible", false );
     }
   }
   var text = this.get( "text" ) || "";
@@ -115,20 +115,20 @@
 }
 
 function filter( options ) {
-  if( this.get( "elements" ) == null ) {
+  if( this.get( "suggestions" ) == null ) {
     processDataSource.apply( this );
   }
   var userText = this.get( "userText" ) || "";
-  this.set( "suggestion", null, { "action" : "sync" } );
+  this.set( "replacementText", null, { "action" : "sync" } );
   var query = createQuery( userText.toLowerCase() );
-  var results = searchItems( this.get( "elements" ), query );
-  this.set( "results", results, { "action" : options.action } );
+  var results = searchItems( this.get( "suggestions" ), query );
+  this.set( "currentSuggestions", results, { "action" : options.action } );
 }
 
 function processDataSource() {
-  if( this.get( "dataSource" ) != null ) {
-    var dataSource = rap.getObject( this.get( "dataSource" ) );
-    this.set( "elements", dataSource.get( "data" ) );
+  if( this.get( "dataSourceId" ) != null ) {
+    var dataSource = rap.getObject( this.get( "dataSourceId" ) );
+    this.set( "suggestions", dataSource.get( "data" ) );
   }
 }
 
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/DataBinding.js b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/DataBinding.js
index dbd761d..6feabca 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/DataBinding.js
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/DataBinding.js
@@ -65,11 +65,11 @@
     case "textSelection":
       onModelChangeTextSelection( textWidget, model, event );
     break;
-    case "results":
-      onModelChangeResults( dropDown, model, event );
+    case "currentSuggestions":
+      onModelChangeCurrentSuggestions( dropDown, model, event );
     break;
-    case "resultsVisible":
-      onModelChangeResultsVisible( dropDown, model, event );
+    case "suggestionsVisible":
+      onModelChangeSuggestionsVisible( dropDown, model, event );
     break;
   }
 }
@@ -100,23 +100,23 @@
 }
 
 function onDropDownChangeVisible( model, event ) {
-  model.set( "resultsVisible", event.widget.getVisible(), { "action" : "sync" }  );
+  model.set( "suggestionsVisible", event.widget.getVisible(), { "action" : "sync" }  );
 }
 
 function onDropDownSelection( model, event ) {
-  model.set( "resultSelection", event.index, { "action" : "sync" }  );
+  model.set( "selectedSuggestionIndex", event.index, { "action" : "sync" }  );
 }
 
 function onDropDownDefaultSelection( model, event ) {
   model.notify( "accept", { type : "accept", "source" : model }  );
 }
 
-function onModelChangeResults( dropDown, model, event ) {
-  var results = model.get( "results" );
+function onModelChangeCurrentSuggestions( dropDown, model, event ) {
+  var results = model.get( "currentSuggestions" );
   dropDown.setItems( results.items );
 }
 
-function onModelChangeResultsVisible( dropDown, model, event ) {
+function onModelChangeSuggestionsVisible( dropDown, model, event ) {
   if( event.options.action !== "sync" ) {
     dropDown.setVisible( event.value );
   }
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/AutoSuggestSpec.js b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/AutoSuggestSpec.js
index 559c942..c388590 100644
--- a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/AutoSuggestSpec.js
+++ b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/AutoSuggestSpec.js
@@ -191,7 +191,7 @@
     beforeEach( function() {
       rap = new RapMock();
       model = rap.typeHandler[ "rwt.remote.Model" ].factory(); // make model "public"
-      model.set( "elements", [ "foo", "bar", "foobar", "banana", "apple", "cherry" ] );
+      model.set( "suggestions", [ "foo", "bar", "foobar", "banana", "apple", "cherry" ] );
       log = [];
       logger = function() {
         log.push( arguments );
@@ -202,72 +202,71 @@
       model.destroy();
     } );
 
-    describe( "change:dataSource", function() {
+    describe( "change:dataSourceId", function() {
 
-      it( "sets elements to null", function() {
-        model.addListener( "change:dataSource", createClientListener( "AutoSuggest" ) );
-        model.set( "elements", [] );
+      it( "sets suggestions to null", function() {
+        model.addListener( "change:dataSourceId", createClientListener( "AutoSuggest" ) );
+        model.set( "suggestions", [] );
 
-        model.set( "dataSource", "fooId" );
+        model.set( "dataSourceId", "fooId" );
 
-        expect( model.get( "elements" ) ).toBeNull();
+        expect( model.get( "suggestions" ) ).toBeNull();
       } );
 
     } );
 
     describe( "change:userText", function() {
 
-      it( "clears suggestion", function() {
+      it( "clears replacementText", function() {
         model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
-        model.set( "suggestion", "banana" );
-        model.addListener( "change:suggestion", logger );
+        model.set( "replacementText", "banana" );
 
         model.set( "userText", "ba" );
 
-        expect( model.get( "suggestion" ) ).toBeNull();
+        expect( model.get( "replacementText" ) ).toBeNull();
       } );
 
-      it( "shows results", function() {
+      it( "shows suggestions", function() {
         model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
 
         model.set( "userText", "ba" );
 
-        expect( model.get( "resultsVisible" ) ).toBe( true );
+        expect( model.get( "suggestionsVisible" ) ).toBe( true );
       } );
 
       it( "hides results if text length is zero", function() {
         model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
-        model.set( "resultsVisible", true );
+        model.set( "suggestionsVisible", true );
 
         model.set( "userText", "" );
 
-        expect( model.get( "resultsVisible" ) ).toBe( false );
+        expect( model.get( "suggestionsVisible" ) ).toBe( false );
       } );
 
-      it( "updates results", function() {
+      it( "updates currentSuggestions", function() {
         model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
 
         model.set( "userText", "ba" );
 
-        expect( model.get( "results" ).items ).toEqual( [ "bar", "banana" ] );
+        expect( model.get( "currentSuggestions" ).items ).toEqual( [ "bar", "banana" ] );
       } );
 
-      it( "updates results from data provider if no elements are set", function() {
+      it( "updates results from data provider if suggestions is not set", function() {
         model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
-        model.set( "elements", null );
+        model.set( "suggestions", null );
         var dataSource = rap.typeHandler[ "rwt.remote.Model" ].factory();
         dataSource.set( "data", [ "foo", "bar", "foobar", "banana", "apple", "cherry" ] );
         spyOn( rap, "getObject" ).andReturn( dataSource );
-        model.set( "dataSource", "fooId" );
+        model.set( "dataSourceId", "fooId" );
 
         model.set( "userText", "ba" );
 
-        expect( model.get( "results" ).items ).toEqual( [ "bar", "banana" ] );
+        expect( model.get( "currentSuggestions" ).items ).toEqual( [ "bar", "banana" ] );
       } );
 
       it( "forwards action option", function() {
         model.addListener( "change:userText", createClientListener( "AutoSuggest" ) );
-        model.addListener( "change:results", logger );
+        model.addListener( "change:currentSuggestions", logger );
 
         model.set( "userText", "ba", { "action" : "foo" } );
 
@@ -276,273 +275,273 @@
 
     } );
 
-    describe( "change:elements", function() {
+    describe( "change:suggestions", function() {
 
       it( "clears suggestion", function() {
-        model.addListener( "change:elements", createClientListener( "AutoSuggest" ) );
-        model.set( "suggestion", "banana" );
-        model.set( "resultsVisible", true );
-        model.addListener( "change:suggestion", logger );
+        model.addListener( "change:suggestions", createClientListener( "AutoSuggest" ) );
+        model.set( "replacementText", "banana" );
+        model.set( "suggestionsVisible", true );
+        model.addListener( "change:replacementText", logger );
 
-        model.set( "elements", [] );
+        model.set( "suggestions", [] );
 
-        expect( model.get( "suggestion" ) ).toBeNull();
+        expect( model.get( "replacementText" ) ).toBeNull();
       } );
 
       it( "clears elementSelection with nosync", function() {
-        model.addListener( "change:elements", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:suggestions", createClientListener( "AutoSuggest" ) );
         model.set( "elementSelection", 1 );
         model.addListener( "change:elementSelection", logger );
 
-        model.set( "elements", [ "foo" ] );
+        model.set( "suggestions", [ "foo" ] );
 
         expect( model.get( "elementSelection" ) ).toBe( -1 );
         expect( log[ 0 ][ 0 ].options.nosync ).toBe( true );
       } );
 
-      it( "updates results", function() {
-        model.addListener( "change:elements", createClientListener( "AutoSuggest" ) );
+      it( "updates suggestions", function() {
+        model.addListener( "change:suggestions", createClientListener( "AutoSuggest" ) );
         model.set( "userText", "ba" );
-        model.set( "resultsVisible", true );
+        model.set( "suggestionsVisible", true );
 
-        model.set( "elements", [ "foo", "bar" ] );
+        model.set( "suggestions", [ "foo", "bar" ] );
 
-        expect( model.get( "results" ).items ).toEqual( [ "bar" ] );
+        expect( model.get( "currentSuggestions" ).items ).toEqual( [ "bar" ] );
       } );
 
-      it( "does not update results if not visible", function() {
-        model.addListener( "change:elements", createClientListener( "AutoSuggest" ) );
-        model.set( "resultsVisible", false );
-        model.addListener( "change:results", logger );
+      it( "does not update suggestions if not visible", function() {
+        model.addListener( "change:suggestions", createClientListener( "AutoSuggest" ) );
+        model.set( "suggestionsVisible", false );
+        model.addListener( "change:currentSuggestions", logger );
 
-        model.set( "elements", [ "foo", "bar" ] );
+        model.set( "suggestions", [ "foo", "bar" ] );
 
         expect( log.length ).toBe( 0 );
       } );
 
-      it( "sets results with refresh option", function() {
-        model.addListener( "change:elements", createClientListener( "AutoSuggest" ) );
-        model.addListener( "change:results", logger );
-        model.set( "resultsVisible", true );
+      it( "sets suggestions with refresh option", function() {
+        model.addListener( "change:suggestions", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", logger );
+        model.set( "suggestionsVisible", true );
         model.set( "userText", "ba" );
 
-        model.set( "elements", [ "foo", "bar" ] );
+        model.set( "suggestions", [ "foo", "bar" ] );
 
         expect( log[ 0 ][ 0 ].options.action ).toBe( "refresh" );
       } );
 
     } );
 
-    describe( "change:resultSelection", function() {
+    describe( "change:selectedSuggestionIndex", function() {
 
-      it( "sets suggestion to selected result", function() {
-        model.addListener( "change:resultSelection", createClientListener( "AutoSuggest" ) );
-        model.set( "results", { "items" : [ "bar", "banana" ] } );
+      it( "sets replacementText to selected suggestion", function() {
+        model.addListener( "change:selectedSuggestionIndex", createClientListener( "AutoSuggest" ) );
+        model.set( "currentSuggestions", { "items" : [ "bar", "banana" ] } );
 
-        model.set( "resultSelection", 1 );
+        model.set( "selectedSuggestionIndex", 1 );
 
-        expect( model.get( "suggestion" ) ).toEqual( "banana" );
+        expect( model.get( "replacementText" ) ).toEqual( "banana" );
       } );
 
       it( "resets suggestion when selection index is -1", function() {
-        model.addListener( "change:resultSelection", createClientListener( "AutoSuggest" ) );
-        model.set( "results", { "items" : [ "bar", "banana" ] } );
-        model.set( "suggestion", "banana" );
+        model.addListener( "change:selectedSuggestionIndex", createClientListener( "AutoSuggest" ) );
+        model.set( "currentSuggestions", { "items" : [ "bar", "banana" ] } );
+        model.set( "replacementText", "banana" );
 
-        model.set( "resultSelection", -1 );
+        model.set( "selectedSuggestionIndex", -1 );
 
-        expect( model.get( "suggestion" ) ).toBeNull();
+        expect( model.get( "replacementText" ) ).toBeNull();
       } );
 
       it( "sets action option", function() {
-        model.addListener( "change:resultSelection", createClientListener( "AutoSuggest" ) );
-        model.addListener( "change:suggestion", logger );
-        model.set( "results", { "items" : [ "bar", "banana" ] } );
+        model.addListener( "change:selectedSuggestionIndex", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:replacementText", logger );
+        model.set( "currentSuggestions", { "items" : [ "bar", "banana" ] } );
 
-        model.set( "resultSelection", 1 );
+        model.set( "selectedSuggestionIndex", 1 );
 
         expect( log[ 0 ][ 0 ].options.action ).toBe( "selection" );
       } );
 
     } );
 
-    describe( "change:suggestion", function() {
+    describe( "change:replacementText", function() {
 
       it( "ignores events from change:userText", function() {
-        model.addListener( "change:suggestion", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:replacementText", createClientListener( "AutoSuggest" ) );
         model.set( "text", "bar" );
         model.set( "textSelection", [ 0, 0 ] );
 
-        model.set( "suggestion", "foo", { "action" : "sync" } );
+        model.set( "replacementText", "foo", { "action" : "sync" } );
 
         expect( model.get( "text" ) ).toEqual( "bar" );
         expect( model.get( "textSelection" ) ).toEqual( [ 0, 0 ] );
       } );
 
       it( "sets text to suggestion", function() {
-        model.addListener( "change:suggestion", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:replacementText", createClientListener( "AutoSuggest" ) );
 
-        model.set( "suggestion", "foo" );
+        model.set( "replacementText", "foo" );
 
         expect( model.get( "text" ) ).toEqual( "foo" );
       } );
 
-      it( "sets textSelection for result selection", function() {
-        model.addListener( "change:suggestion", createClientListener( "AutoSuggest" ) );
+      it( "sets textSelection for replacementText", function() {
+        model.addListener( "change:replacementText", createClientListener( "AutoSuggest" ) );
 
-        model.set( "suggestion", "foo", { "action" : "selection" } );
+        model.set( "replacementText", "foo", { "action" : "selection" } );
 
         expect( model.get( "textSelection" ) ).toEqual( [ 0, 3 ] );
       } );
 
       it( "sets textSelection for auto complete", function() {
-        model.addListener( "change:suggestion", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:replacementText", createClientListener( "AutoSuggest" ) );
         model.set( "userText", "foo" );
 
-        model.set( "suggestion", "foobar" );
+        model.set( "replacementText", "foobar" );
 
         expect( model.get( "textSelection" ) ).toEqual( [ 3, 6 ] );
       } );
 
       it( "resets text to userText", function() {
-        model.addListener( "change:suggestion", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:replacementText", createClientListener( "AutoSuggest" ) );
         model.set( "userText", "bar" );
 
-        model.set( "suggestion", null, { "action" : "selection" } );
+        model.set( "replacementText", null, { "action" : "selection" } );
 
         expect( model.get( "text" ) ).toEqual( "bar" );
       } );
 
       it( "resets selection to userText end", function() {
-        model.addListener( "change:suggestion", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:replacementText", createClientListener( "AutoSuggest" ) );
         model.set( "userText", "bar" );
 
-        model.set( "suggestion", null, { "action" : "selection" } );
+        model.set( "replacementText", null, { "action" : "selection" } );
 
         expect( model.get( "textSelection" ) ).toEqual( [ 3, 3 ] );
       } );
 
     } );
 
-    describe( "change:results", function() {
+    describe( "change:currentSuggestions", function() {
 
       it( "does nothing without autocomplete", function() {
-        model.set( "suggestion", "ban" );
-        model.addListener( "change:results", createClientListener( "AutoSuggest" ) );
+        model.set( "replacementText", "ban" );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
 
-        model.set( "results", { "items" : [ "banana" ] } );
+        model.set( "currentSuggestions", { "items" : [ "banana" ] } );
 
-        expect( model.get( "suggestion" ) ).toEqual( "ban" );
+        expect( model.get( "replacementText" ) ).toEqual( "ban" );
       } );
 
       it( "does nothing if not typing", function() {
-        model.set( "suggestion", "ban" );
-        model.addListener( "change:results", createClientListener( "AutoSuggest" ) );
+        model.set( "replacementText", "ban" );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
         model.set( "autoComplete", true );
 
-        model.set( "results", { "items" : [ "banana" ] } );
+        model.set( "currentSuggestions", { "items" : [ "banana" ] } );
 
-        expect( model.get( "suggestion" ) ).toEqual( "ban" );
+        expect( model.get( "replacementText" ) ).toEqual( "ban" );
       } );
 
-      it( "autocompletes suggestion while typing on single result", function() {
-        model.set( "suggestion", "ban" );
+      it( "autocompletes text while typing on single currentSuggestion", function() {
+        model.set( "replacementText", "ban" );
         model.set( "userText", "b" );
         model.set( "autoComplete", true );
-        model.addListener( "change:results", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
 
-        model.set( "results", { "items" : [ "banana" ] }, { "action" : "typing" } );
+        model.set( "currentSuggestions", { "items" : [ "banana" ] }, { "action" : "typing" } );
 
-        expect( model.get( "suggestion" ) ).toEqual( "banana" );
+        expect( model.get( "replacementText" ) ).toEqual( "banana" );
       } );
 
-      it( "autocompletes suggestion while refreshing on single result", function() {
-        model.set( "suggestion", "ban" );
+      it( "autocompletes suggestion while refreshing on single currentSuggestion", function() {
+        model.set( "replacementText", "ban" );
         model.set( "userText", "b" );
         model.set( "autoComplete", true );
-        model.addListener( "change:results", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
 
-        model.set( "results", { "items" : [ "banana" ] }, { "action" : "refresh" } );
+        model.set( "currentSuggestions", { "items" : [ "banana" ] }, { "action" : "refresh" } );
 
-        expect( model.get( "suggestion" ) ).toEqual( "banana" );
+        expect( model.get( "replacementText" ) ).toEqual( "banana" );
       } );
 
       it( "partially autocompletes suggestion for common text", function() {
         model.set( "autoComplete", true );
         model.set( "userText", "b" );
-        model.addListener( "change:results", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
 
         var items = [ "banana foo", "banana bar" ];
-        model.set( "results", { "items" : items }, { "action" : "typing" } );
+        model.set( "currentSuggestions", { "items" : items }, { "action" : "typing" } );
 
-        expect( model.get( "suggestion" ) ).toEqual( "banana " );
+        expect( model.get( "replacementText" ) ).toEqual( "banana " );
       } );
 
       it( "does not autocomplete if common text is shorter than userText", function() {
-        model.set( "suggestion", null );
+        model.set( "replacementText", null );
         model.set( "autoComplete", true );
         model.set( "userText", "banana xxx" );
-        model.addListener( "change:results", createClientListener( "AutoSuggest" ) );
+        model.addListener( "change:currentSuggestions", createClientListener( "AutoSuggest" ) );
 
         var items = [ "banana foo", "banana bar" ];
-        model.set( "results", { "items" : items }, { "action" : "typing" } );
+        model.set( "currentSuggestions", { "items" : items }, { "action" : "typing" } );
 
-        expect( model.get( "suggestion" ) ).toBe( null );
+        expect( model.get( "replacementText" ) ).toBe( null );
       } );
 
     } );
 
     describe( "accept", function() {
 
-      it( "sets elementSelection for resultSelection", function() {
+      it( "sets elementSelection for selectedSuggestionIndex", function() {
         model.addListener( "accept", createClientListener( "AutoSuggest" ) );
-        model.set( "results", { "items" : [ "bar", "banana" ], "indicies" : [ 1, 3 ] } );
-        model.set( "resultSelection", 1 );
+        model.set( "currentSuggestions", { "items" : [ "bar", "banana" ], "indicies" : [ 1, 3 ] } );
+        model.set( "selectedSuggestionIndex", 1 );
 
         model.notify( "accept", { source : model, type : "accept" } );
 
         expect( model.get( "elementSelection" ) ).toBe( 3 );
-        expect( model.get( "resultsVisible" ) ).toBe( false );
+        expect( model.get( "suggestionsVisible" ) ).toBe( false );
       } );
 
-      it( "sets elementSelection for single result and autoComplete", function() {
+      it( "sets elementSelection for single currentSuggestion and autoComplete", function() {
         model.addListener( "accept", createClientListener( "AutoSuggest" ) );
-        model.set( "results", { "items" : [ "banana" ], "indicies" : [ 3 ] } );
-        model.set( "resultSelection", -1 );
+        model.set( "currentSuggestions", { "items" : [ "banana" ], "indicies" : [ 3 ] } );
+        model.set( "selectedSuggestionIndex", -1 );
         model.set( "autoComplete", true );
 
         model.notify( "accept", { source : model, type : "accept" } );
 
         expect( model.get( "elementSelection" ) ).toBe( 3 );
-        expect( model.get( "resultsVisible" ) ).toBe( false );
+        expect( model.get( "suggestionsVisible" ) ).toBe( false );
       } );
 
-      it( "does nothing for single result without autoComplete", function() {
+      it( "does nothing for single currentSuggestion without autoComplete", function() {
         model.addListener( "accept", createClientListener( "AutoSuggest" ) );
-        model.set( "results", { "items" : [ "banana" ], "indicies" : [ 3 ] } );
-        model.set( "resultSelection", -1 );
+        model.set( "currentSuggestions", { "items" : [ "banana" ], "indicies" : [ 3 ] } );
+        model.set( "selectedSuggestionIndex", -1 );
         model.set( "elementSelection", 0 );
-        model.set( "resultsVisible", true );
+        model.set( "suggestionsVisible", true );
 
 
         model.notify( "accept", { source : model, type : "accept" } );
 
         expect( model.get( "elementSelection" ) ).toBe( 0 );
-        expect( model.get( "resultsVisible" ) ).toBe( true );
+        expect( model.get( "suggestionsVisible" ) ).toBe( true );
       } );
 
-      it( "does nothing for multiple result without resultSelection", function() {
+      it( "does nothing for multiple result without selectedSuggestionIndex", function() {
         model.addListener( "accept", createClientListener( "AutoSuggest" ) );
-        model.set( "results", { "items" : [ "banana", "banu" ], "indicies" : [ 3 ] } );
-        model.set( "resultSelection", -1 );
+        model.set( "currentSuggestions", { "items" : [ "banana", "banu" ], "indicies" : [ 3 ] } );
+        model.set( "selectedSuggestionIndex", -1 );
         model.set( "elementSelection", 0 );
-        model.set( "resultsVisible", true );
+        model.set( "suggestionsVisible", true );
 
 
         model.notify( "accept", { source : model, type : "accept" } );
 
         expect( model.get( "elementSelection" ) ).toBe( 0 );
-        expect( model.get( "resultsVisible" ) ).toBe( true );
+        expect( model.get( "suggestionsVisible" ) ).toBe( true );
       } );
 
       it( "clears text selection", function() {
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/AutoSuggest_Test.java b/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/AutoSuggest_Test.java
index 0b3f39a..961ce26 100644
--- a/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/AutoSuggest_Test.java
+++ b/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/AutoSuggest_Test.java
@@ -55,8 +55,7 @@
 public class AutoSuggest_Test {
 
   private static final String REMOTE_TYPE = "rwt.remote.Model";
-  private static final String MODEL_ID_KEY =
-      "org.eclipse.rap.addons.dropdown.viewer.DropDownViewer#viewer";
+  private static final String MODEL_ID_KEY = "org.eclipse.rap.addons.autosuggest#Model";
 
   private Text text;
   private RemoteObject remoteObject;
@@ -309,7 +308,7 @@
 
     autoSuggest.setDataSource( dataSource );
 
-    verify( remoteObject ).set( eq( "dataSource" ), eq( "providerId" ) );
+    verify( remoteObject ).set( eq( "dataSourceId" ), eq( "providerId" ) );
   }
 
   @Test
