Adjust to JSON-related changes in RAP, code cleanup
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid.snippets/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java b/bundles/org.eclipse.rap.nebula.widgets.grid.snippets/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java
index a403e89..680407d 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid.snippets/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid.snippets/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java
@@ -333,7 +333,7 @@
       @Override
       public void widgetSelected( SelectionEvent event ) {
         grid.setHeaderVisible( button.getSelection() );
-      };
+      }
     } );
   }
 
@@ -345,7 +345,7 @@
       @Override
       public void widgetSelected( SelectionEvent event ) {
         grid.setFooterVisible( button.getSelection() );
-      };
+      }
     } );
   }
 
@@ -372,4 +372,5 @@
       }
     }
   }
+
 }
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 2d6c7ec..04bfc94 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
@@ -10,8 +10,8 @@
  ******************************************************************************/
 package org.eclipse.nebula.widgets.grid.internal.gridcolumngroupkit;
 
-import static org.eclipse.rap.rwt.internal.json.JsonUtil.createJsonArray;
 import static org.eclipse.rap.rwt.internal.protocol.ClientObjectFactory.getClientObject;
+import static org.eclipse.rap.rwt.internal.protocol.JsonUtil.createJsonArray;
 import static org.eclipse.rap.rwt.internal.protocol.ProtocolUtil.getJsonForFont;
 import static org.eclipse.rap.rwt.lifecycle.WidgetLCAUtil.getStyles;
 import static org.eclipse.rap.rwt.lifecycle.WidgetLCAUtil.hasChanged;
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java
index a1e6028..0cbd12b 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java
@@ -10,11 +10,11 @@
  ******************************************************************************/
 package org.eclipse.nebula.widgets.grid.internal.gridkit;
 
-import static org.eclipse.rap.rwt.internal.json.JsonUtil.createJsonArray;
 import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_PARAM_DETAIL;
 import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_PARAM_INDEX;
 import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_PARAM_ITEM;
 import static org.eclipse.rap.rwt.internal.protocol.ClientObjectFactory.getClientObject;
+import static org.eclipse.rap.rwt.internal.protocol.JsonUtil.createJsonArray;
 import static org.eclipse.rap.rwt.internal.protocol.ProtocolUtil.readCallPropertyValueAsString;
 import static org.eclipse.rap.rwt.internal.protocol.ProtocolUtil.readPropertyValueAsStringArray;
 import static org.eclipse.rap.rwt.internal.protocol.ProtocolUtil.wasCallReceived;
@@ -34,8 +34,8 @@
 import org.eclipse.nebula.widgets.grid.GridColumn;
 import org.eclipse.nebula.widgets.grid.GridItem;
 import org.eclipse.nebula.widgets.grid.internal.IGridAdapter;
+import org.eclipse.rap.json.JsonArray;
 import org.eclipse.rap.rwt.RWT;
-import org.eclipse.rap.rwt.internal.json.JsonArray;
 import org.eclipse.rap.rwt.internal.protocol.ClientMessageConst;
 import org.eclipse.rap.rwt.internal.protocol.IClientObject;
 import org.eclipse.rap.rwt.internal.util.NumberFormatUtil;
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/.settings/GridAllTests.launch b/tests/org.eclipse.rap.nebula.widgets.grid.test/.settings/GridAllTests.launch
index 03c338c..d743d73 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/.settings/GridAllTests.launch
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/.settings/GridAllTests.launch
@@ -17,7 +17,7 @@
 <stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=org.eclipse.rap.nebula.widgets.grid.test"/>
 <booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
 <stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
-<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
 <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.rap.nebula.widgets.grid.test"/>
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-DsleepTime=20 -Xmx128m"/>
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/META-INF/MANIFEST.MF b/tests/org.eclipse.rap.nebula.widgets.grid.test/META-INF/MANIFEST.MF
index 47b6a7d..b6f2f7a 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/META-INF/MANIFEST.MF
@@ -17,3 +17,8 @@
  org.eclipse.rap.rwt.testfixture.internal;version="[2.0.0,3.0.0)",
  org.eclipse.rap.rwt.testfixture.internal.engine;version="[2.0.0,3.0.0)",
  org.eclipse.rap.rwt.testfixture.internal.service;version="[2.0.0,3.0.0)"
+Export-Package: org.eclipse.nebula.widgets.grid,
+ org.eclipse.nebula.widgets.grid.internal.gridcolumngroupkip;x-internal:=true,
+ org.eclipse.nebula.widgets.grid.internal.gridcolumnkit;x-internal:=true,
+ org.eclipse.nebula.widgets.grid.internal.griditemkit;x-internal:=true,
+ org.eclipse.nebula.widgets.grid.internal.gridkit;x-internal:=true
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkip/GridColumnGroupLCA_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkip/GridColumnGroupLCA_Test.java
index c5239fe..4bb381b 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkip/GridColumnGroupLCA_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkip/GridColumnGroupLCA_Test.java
@@ -12,7 +12,6 @@
 
 import static org.eclipse.nebula.widgets.grid.GridTestUtil.createGridColumns;
 import static org.eclipse.nebula.widgets.grid.GridTestUtil.loadImage;
-import static org.eclipse.nebula.widgets.grid.internal.gridkit.GridLCATestUtil.jsonEquals;
 import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId;
 
 import java.io.IOException;
@@ -25,9 +24,10 @@
 import org.eclipse.nebula.widgets.grid.Grid;
 import org.eclipse.nebula.widgets.grid.GridColumnGroup;
 import org.eclipse.nebula.widgets.grid.internal.gridcolumngroupkit.GridColumnGroupLCA;
+import org.eclipse.rap.json.JsonArray;
+import org.eclipse.rap.json.JsonObject;
+import org.eclipse.rap.json.JsonValue;
 import org.eclipse.rap.rwt.RWT;
-import org.eclipse.rap.rwt.internal.json.JsonArray;
-import org.eclipse.rap.rwt.internal.json.JsonObject;
 import org.eclipse.rap.rwt.internal.protocol.ClientMessageConst;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
 import org.eclipse.rap.rwt.testfixture.Fixture;
@@ -119,7 +119,7 @@
     lca.renderChanges( group );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( "foo", message.findSetProperty( group, "text" ) );
+    assertEquals( "foo", message.findSetProperty( group, "text" ).asString() );
   }
 
   public void testRenderTextUnchanged() throws IOException {
@@ -150,8 +150,8 @@
     Message message = Fixture.getProtocolMessage();
     String imageLocation = ImageFactory.getImagePath( image );
     String expected = "[\"" + imageLocation + "\", 100, 50 ]";
-    JsonArray actual = ( JsonArray )message.findSetProperty( group, "image" );
-    assertTrue( jsonEquals( expected, actual ) );
+    JsonArray actual = message.findSetProperty( group, "image" ).asArray();
+    assertEquals( JsonArray.readFrom( expected ), actual );
   }
 
   public void testRenderImageUnchanged() throws IOException {
@@ -194,11 +194,8 @@
     lca.renderChanges( group );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( group, "font" );
-    assertTrue( jsonEquals( "[\"Arial\"]", actual.get( 0 ).asArray() ) );
-    assertEquals( 20, actual.get( 1 ).asInt() );
-    assertTrue( actual.get( 2 ).asBoolean() );
-    assertFalse( actual.get( 3 ).asBoolean() );
+    JsonArray expected = JsonArray.readFrom( "[[\"Arial\"], 20, true, false]" );
+    assertEquals( expected, message.findSetProperty( group, "font" ) );
   }
 
   public void testRenderFontUnchanged() throws IOException {
@@ -226,7 +223,7 @@
     lca.renderChanges( group );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.FALSE, message.findSetProperty( group, "expanded" ) );
+    assertEquals( JsonValue.FALSE, message.findSetProperty( group, "expanded" ) );
   }
 
   public void testRenderExpandedUnchanged() throws IOException {
@@ -269,14 +266,14 @@
   public void testReadExpanded_Expanded() {
     group.setExpanded( false );
 
-    Fixture.fakeSetParameter( getId( group ), "expanded", Boolean.TRUE );
+    Fixture.fakeSetProperty( getId( group ), "expanded", true );
     Fixture.readDataAndProcessAction( group );
 
     assertTrue( group.getExpanded() );
   }
 
   public void testReadExpanded_Collapsed() {
-    Fixture.fakeSetParameter( getId( group ), "expanded", Boolean.FALSE );
+    Fixture.fakeSetProperty( getId( group ), "expanded", false );
     Fixture.readDataAndProcessAction( group );
 
     assertFalse( group.getExpanded() );
@@ -299,7 +296,7 @@
     lca.renderChanges( group );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 90 ), message.findSetProperty( group, "left" ) );
+    assertEquals( 90, message.findSetProperty( group, "left" ).asInt() );
   }
 
   public void testRenderLeftUnchanged() throws IOException {
@@ -331,7 +328,7 @@
     lca.renderChanges( group );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 20 ), message.findSetProperty( group, "width" ) );
+    assertEquals( 20, message.findSetProperty( group, "width" ).asInt() );
   }
 
   public void testRenderWidthUnchanged() throws IOException {
@@ -361,7 +358,7 @@
     lca.renderChanges( group );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 31 ), message.findSetProperty( group, "height" ) );
+    assertEquals( 31, message.findSetProperty( group, "height" ).asInt() );
   }
 
   public void testRenderHeightUnchanged() throws IOException {
@@ -394,7 +391,7 @@
     lca.renderChanges( group );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.FALSE, message.findSetProperty( group, "visibility" ) );
+    assertEquals( JsonValue.FALSE, message.findSetProperty( group, "visibility" ) );
   }
 
   public void testRenderVisibleUnchanged() throws IOException {
@@ -423,7 +420,7 @@
     lca.renderChanges( group );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( "variant_blue", message.findSetProperty( group, "customVariant" ) );
+    assertEquals( "variant_blue", message.findSetProperty( group, "customVariant" ).asString() );
   }
 
   public void testRenderCustomVariantUnchanged() throws IOException {
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumnkit/GridColumnLCA_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumnkit/GridColumnLCA_Test.java
index ea622f2..16408b7 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumnkit/GridColumnLCA_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumnkit/GridColumnLCA_Test.java
@@ -12,23 +12,21 @@
 
 import static org.eclipse.nebula.widgets.grid.GridTestUtil.createGridColumns;
 import static org.eclipse.nebula.widgets.grid.GridTestUtil.loadImage;
-import static org.eclipse.nebula.widgets.grid.internal.gridkit.GridLCATestUtil.jsonEquals;
 import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId;
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
 
 import junit.framework.TestCase;
 
 import org.eclipse.nebula.widgets.grid.Grid;
 import org.eclipse.nebula.widgets.grid.GridColumn;
 import org.eclipse.nebula.widgets.grid.GridColumnGroup;
+import org.eclipse.rap.json.JsonArray;
+import org.eclipse.rap.json.JsonObject;
+import org.eclipse.rap.json.JsonValue;
 import org.eclipse.rap.rwt.RWT;
-import org.eclipse.rap.rwt.internal.json.JsonArray;
-import org.eclipse.rap.rwt.internal.json.JsonObject;
 import org.eclipse.rap.rwt.internal.protocol.ClientMessageConst;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
 import org.eclipse.rap.rwt.testfixture.Fixture;
@@ -91,7 +89,7 @@
     Message message = Fixture.getProtocolMessage();
     CreateOperation operation = message.findCreateOperation( column );
     assertTrue( operation.getPropertyNames().indexOf( "style" ) == -1 );
-    assertEquals( "right", message.findCreateProperty( column, "alignment" ) );
+    assertEquals( "right", message.findCreateProperty( column, "alignment" ).asString() );
   }
 
   public void testRenderParent() throws IOException {
@@ -135,7 +133,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( "foo", message.findSetProperty( column, "toolTip" ) );
+    assertEquals( "foo", message.findSetProperty( column, "toolTip" ).asString() );
   }
 
   public void testRenderToolTipUnchanged() throws IOException {
@@ -163,7 +161,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( "variant_blue", message.findSetProperty( column, "customVariant" ) );
+    assertEquals( "variant_blue", message.findSetProperty( column, "customVariant" ).asString() );
   }
 
   public void testRenderCustomVariantUnchanged() throws IOException {
@@ -191,7 +189,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( "foo", message.findSetProperty( column, "text" ) );
+    assertEquals( "foo", message.findSetProperty( column, "text" ).asString() );
   }
 
   public void testRenderTextUnchanged() throws IOException {
@@ -222,8 +220,8 @@
     Message message = Fixture.getProtocolMessage();
     String imageLocation = ImageFactory.getImagePath( image );
     String expected = "[\"" + imageLocation + "\", 100, 50 ]";
-    JsonArray actual = ( JsonArray )message.findSetProperty( column, "image" );
-    assertTrue( jsonEquals( expected, actual ) );
+    JsonValue actual = message.findSetProperty( column, "image" );
+    assertEquals( JsonArray.readFrom( expected ), actual );
   }
 
   public void testRenderImageUnchanged() throws IOException {
@@ -266,7 +264,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 1 ), message.findSetProperty( column, "index" ) );
+    assertEquals( 1, message.findSetProperty( column, "index" ).asInt() );
   }
 
   public void testRenderIndexUnchanged() throws IOException {
@@ -295,7 +293,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 50 ), message.findSetProperty( column, "left" ) );
+    assertEquals( 50, message.findSetProperty( column, "left" ).asInt() );
   }
 
   public void testRenderLeftUnchanged() throws IOException {
@@ -315,7 +313,7 @@
     lca.render( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 10 ), message.findCreateProperty( column, "width" ) );
+    assertEquals( 10, message.findCreateProperty( column, "width" ).asInt() );
   }
 
   public void testRenderWidth() throws IOException {
@@ -323,7 +321,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 50 ), message.findSetProperty( column, "width" ) );
+    assertEquals( 50, message.findSetProperty( column, "width" ).asInt() );
   }
 
   public void testRenderWidthUnchanged() throws IOException {
@@ -351,7 +349,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( "right", message.findSetProperty( column, "alignment" ) );
+    assertEquals( "right", message.findSetProperty( column, "alignment" ).asString() );
   }
 
   public void testRenderAlignmentUnchanged() throws IOException {
@@ -379,7 +377,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.FALSE, message.findSetProperty( column, "resizable" ) );
+    assertEquals( JsonValue.FALSE, message.findSetProperty( column, "resizable" ) );
   }
 
   public void testRenderResizableUnchanged() throws IOException {
@@ -407,7 +405,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findSetProperty( column, "moveable" ) );
+    assertEquals( JsonValue.TRUE, message.findSetProperty( column, "moveable" ) );
   }
 
   public void testRenderMoveableUnchanged() throws IOException {
@@ -435,7 +433,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.FALSE, message.findSetProperty( column, "visibility" ) );
+    assertEquals( JsonValue.FALSE, message.findSetProperty( column, "visibility" ) );
   }
 
   public void testRenderVisibleUnchanged() throws IOException {
@@ -464,7 +462,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findSetProperty( column, "check" ) );
+    assertEquals( JsonValue.TRUE, message.findSetProperty( column, "check" ) );
   }
 
   public void testRenderCheckUnchanged() throws IOException {
@@ -488,7 +486,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findListenProperty( column, "Selection" ) );
+    assertEquals( JsonValue.TRUE, message.findListenProperty( column, "Selection" ) );
   }
 
   public void testRenderRemoveSelectionListener() throws Exception {
@@ -502,7 +500,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.FALSE, message.findListenProperty( column, "Selection" ) );
+    assertEquals( JsonValue.FALSE, message.findListenProperty( column, "Selection" ) );
   }
 
   public void testRenderSelectionListenerUnchanged() throws Exception {
@@ -531,8 +529,7 @@
     int newWidth = columns[ 0 ].getWidth() + 2;
     int newLeft = column.getWidth() + newWidth;
     Fixture.fakeNewRequest();
-    Map<String, Object> parameters = new HashMap<String, Object>();
-    parameters.put( "width", Integer.valueOf( newWidth ) );
+    JsonObject parameters = new JsonObject().add( "width", newWidth );
     Fixture.fakeCallOperation( getId( columns[ 0 ] ), "resize", parameters );
     Fixture.executeLifeCycleFromServerThread();
 
@@ -543,8 +540,8 @@
     event = events.get( 1 );
     assertSame( columns[ 1 ], event.widget );
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( newWidth ), message.findSetProperty( columns[ 0 ], "width" ) );
-    assertEquals( Integer.valueOf( newLeft ), message.findSetProperty( columns[ 1 ], "left" ) );
+    assertEquals( newWidth, message.findSetProperty( columns[ 0 ], "width" ).asInt() );
+    assertEquals( newLeft, message.findSetProperty( columns[ 1 ], "left" ).asInt() );
   }
 
   public void testReadLeft() {
@@ -560,8 +557,7 @@
     // Simulate request that changes column left
     int newLeft = 3;
     Fixture.fakeNewRequest();
-    Map<String, Object> parameters = new HashMap<String, Object>();
-    parameters.put( "left", Integer.valueOf( newLeft ) );
+    JsonObject parameters = new JsonObject().add( "left", newLeft );
     Fixture.fakeCallOperation( getId( columns[ 0 ] ), "move", parameters );
     Fixture.executeLifeCycleFromServerThread();
 
@@ -571,8 +567,8 @@
     event = events.get( 1 );
     assertSame( column, event.widget );
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 20 ), message.findSetProperty( column, "left" ) );
-    assertEquals( Integer.valueOf( 0 ), message.findSetProperty( columns[ 0 ], "left" ) );
+    assertEquals( 20, message.findSetProperty( column, "left" ).asInt() );
+    assertEquals( 0, message.findSetProperty( columns[ 0 ], "left" ).asInt() );
   }
 
   public void testMoveColumn_1() {
@@ -848,11 +844,8 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( column, "font" );
-    assertTrue( jsonEquals( "[\"Arial\"]", actual.get( 0 ).asArray() ) );
-    assertEquals( 20, actual.get( 1 ).asInt() );
-    assertTrue( actual.get( 2 ).asBoolean() );
-    assertFalse( actual.get( 3 ).asBoolean() );
+    JsonValue actual = message.findSetProperty( column, "font" );
+    assertEquals( JsonArray.readFrom( "[[\"Arial\"], 20, true, false]" ), actual );
   }
 
   public void testRenderFontUnchanged() throws IOException {
@@ -880,11 +873,8 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( column, "footerFont" );
-    assertTrue( jsonEquals( "[\"Arial\"]", actual.get( 0 ).asArray() ) );
-    assertEquals( 20, actual.get( 1 ).asInt() );
-    assertTrue( actual.get( 2 ).asBoolean() );
-    assertFalse( actual.get( 3 ).asBoolean() );
+    JsonValue actual = message.findSetProperty( column, "footerFont" );
+    assertEquals( JsonArray.readFrom( "[[\"Arial\"], 20, true, false]" ), actual );
   }
 
   public void testRenderFooterFontUnchanged() throws IOException {
@@ -912,7 +902,7 @@
     lca.renderChanges( column );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( "foo", message.findSetProperty( column, "footerText" ) );
+    assertEquals( "foo", message.findSetProperty( column, "footerText" ).asString() );
   }
 
   public void testRenderFooterTextUnchanged() throws IOException {
@@ -942,9 +932,8 @@
 
     Message message = Fixture.getProtocolMessage();
     String imageLocation = ImageFactory.getImagePath( image );
-    String expected = "[\"" + imageLocation + "\", 100, 50 ]";
-    JsonArray actual = ( JsonArray )message.findSetProperty( column, "footerImage" );
-    assertTrue( jsonEquals( expected, actual ) );
+    JsonArray expected = JsonArray.readFrom( "[\"" + imageLocation + "\", 100, 50 ]" );
+    assertEquals( expected, message.findSetProperty( column, "footerImage" ) );
   }
 
   public void testRenderFooterImageUnchanged() throws IOException {
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA_Test.java
index 1023960..3a4c214 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA_Test.java
@@ -13,26 +13,24 @@
 import static org.eclipse.nebula.widgets.grid.GridTestUtil.createGridColumns;
 import static org.eclipse.nebula.widgets.grid.GridTestUtil.createGridItems;
 import static org.eclipse.nebula.widgets.grid.GridTestUtil.loadImage;
-import static org.eclipse.nebula.widgets.grid.internal.gridkit.GridLCATestUtil.jsonEquals;
 import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
 
 import junit.framework.TestCase;
 
 import org.eclipse.nebula.widgets.grid.Grid;
 import org.eclipse.nebula.widgets.grid.GridItem;
+import org.eclipse.rap.json.JsonArray;
+import org.eclipse.rap.json.JsonObject;
+import org.eclipse.rap.json.JsonValue;
 import org.eclipse.rap.rwt.RWT;
 import org.eclipse.rap.rwt.client.Client;
 import org.eclipse.rap.rwt.internal.client.WidgetDataWhiteList;
-import org.eclipse.rap.rwt.internal.json.JsonArray;
-import org.eclipse.rap.rwt.internal.json.JsonObject;
 import org.eclipse.rap.rwt.internal.protocol.ClientMessageConst;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
 import org.eclipse.rap.rwt.testfixture.Fixture;
@@ -154,7 +152,7 @@
     lca.renderChanges( item );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( "variant_blue", message.findSetProperty( item, "customVariant" ) );
+    assertEquals( "variant_blue", message.findSetProperty( item, "customVariant" ).asString() );
   }
 
   public void testRenderCustomVariantUnchanged() throws IOException {
@@ -182,7 +180,7 @@
     lca.renderChanges( items[ 0 ] );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 10 ), message.findSetProperty( items[ 0 ], "itemCount" ) );
+    assertEquals( 10, message.findSetProperty( items[ 0 ], "itemCount" ).asInt() );
   }
 
   public void testRenderItemCountUnchanged() throws IOException {
@@ -211,7 +209,7 @@
     lca.renderChanges( item );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 10 ), message.findSetProperty( item, "height" ) );
+    assertEquals( 10, message.findSetProperty( item, "height" ).asInt() );
   }
 
   public void testRenderHeightUnchanged() throws IOException {
@@ -244,8 +242,8 @@
     lca.renderChanges( item );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( item, "texts" );
-    assertTrue( jsonEquals( "[\"item 0.0\",\"item 0.1\"]", actual ) );
+    JsonArray expected = JsonArray.readFrom( "[\"item 0.0\", \"item 0.1\"]" );
+    assertEquals( expected, message.findSetProperty( item, "texts" ) );
   }
 
   public void testRenderTextsUnchanged() throws IOException {
@@ -280,10 +278,9 @@
     lca.renderChanges( item );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( item, "images" );
-    String expected = "[\"rwt-resources/generated/90fb0bfe.gif\",58,12]";
-    assertEquals( JsonObject.NULL, actual.get( 0 ) );
-    assertTrue( jsonEquals( expected, actual.get( 1 ).asArray() ) );
+    JsonValue actual = message.findSetProperty( item, "images" );
+    String expected = "[null, [\"rwt-resources/generated/90fb0bfe.gif\",58,12]]";
+    assertEquals( JsonArray.readFrom( expected ), actual );
   }
 
   public void testRenderImagesUnchanged() throws IOException {
@@ -313,8 +310,8 @@
     lca.renderChanges( item );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( item, "background" );
-    assertTrue( jsonEquals( "[0,255,0,255]", actual ) );
+    JsonValue actual = message.findSetProperty( item, "background" );
+    assertEquals( JsonArray.readFrom( "[0,255,0,255]" ), actual );
   }
 
   public void testRenderBackgroundUnchanged() throws IOException {
@@ -342,8 +339,8 @@
     lca.renderChanges( item );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( item, "foreground" );
-    assertTrue( jsonEquals( "[0,255,0,255]", actual ) );
+    JsonValue actual = message.findSetProperty( item, "foreground" );
+    assertEquals( JsonArray.readFrom( "[0,255,0,255]" ), actual );
   }
 
   public void testRenderForegroundUnchanged() throws IOException {
@@ -371,11 +368,8 @@
     lca.renderChanges( item );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( item, "font" );
-    assertTrue( jsonEquals( "[\"Arial\"]", actual.get( 0 ).asArray() ) );
-    assertEquals( 20, actual.get( 1 ).asInt() );
-    assertTrue( actual.get( 2 ).asBoolean() );
-    assertFalse( actual.get( 3 ).asBoolean() );
+    JsonValue actual = message.findSetProperty( item, "font" );
+    assertEquals( JsonArray.readFrom( "[[\"Arial\"], 20, true, false]" ), actual );
   }
 
   public void testRenderFontUnchanged() throws IOException {
@@ -407,9 +401,8 @@
     lca.renderChanges( item );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( item, "cellBackgrounds" );
-    assertEquals( JsonObject.NULL, actual.get( 0 ) );
-    assertTrue( jsonEquals( "[0,255,0,255]", actual.get( 1 ).asArray() ) );
+    JsonValue actual = message.findSetProperty( item, "cellBackgrounds" );
+    assertEquals( JsonArray.readFrom( "[null, [0,255,0,255]]" ), actual );
   }
 
   public void testRenderCellBackgroundsUnchanged() throws IOException {
@@ -442,9 +435,8 @@
     lca.renderChanges( item );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( item, "cellForegrounds" );
-    assertEquals( JsonObject.NULL, actual.get( 0 ) );
-    assertTrue( jsonEquals( "[0,255,0,255]", actual.get( 1 ).asArray() ) );
+    JsonValue actual = message.findSetProperty( item, "cellForegrounds" );
+    assertEquals( JsonArray.readFrom( "[null, [0,255,0,255]]" ), actual );
   }
 
   public void testRenderCellForegroundsUnchanged() throws IOException {
@@ -477,13 +469,8 @@
     lca.renderChanges( item );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( item, "cellFonts" );
-    assertEquals( JsonObject.NULL, actual.get( 0 ) );
-    JsonArray cellFont = actual.get( 1 ).asArray();
-    assertTrue( jsonEquals( "[\"Arial\"]", cellFont.get( 0 ).asArray() ) );
-    assertEquals( 20, cellFont.get( 1 ).asInt() );
-    assertTrue( cellFont.get( 2 ).asBoolean() );
-    assertFalse( cellFont.get( 3 ).asBoolean() );
+    JsonValue actual = message.findSetProperty( item, "cellFonts" );
+    assertEquals( JsonArray.readFrom( "[null, [[\"Arial\"], 20, true, false]]" ), actual );
   }
 
   public void testRenderCellFontsUnchanged() throws IOException {
@@ -514,7 +501,7 @@
     lca.renderChanges( item );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findSetProperty( item, "expanded" ) );
+    assertEquals( JsonValue.TRUE, message.findSetProperty( item, "expanded" ) );
   }
 
   public void testRenderExpandedUnchanged() throws IOException {
@@ -551,8 +538,9 @@
     lca.renderChanges( item );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( item, "cellChecked" );
-    assertTrue( jsonEquals( "[false,true]", actual ) );  }
+    JsonArray expected = JsonArray.readFrom( "[false,true]" );
+    assertEquals( expected, message.findSetProperty( item, "cellChecked" ) );
+  }
 
   public void testRenderCellCheckedUnchanged() throws IOException {
     grid = new Grid( shell, SWT.CHECK );
@@ -590,8 +578,8 @@
     lca.renderChanges( item );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( item, "cellGrayed" );
-    assertTrue( jsonEquals( "[false,true]", actual ) );
+    JsonArray expected = JsonArray.readFrom( "[false, true]" );
+    assertEquals( expected, message.findSetProperty( item, "cellGrayed" ) );
   }
 
   public void testRenderGrayedUnchanged() throws IOException {
@@ -630,8 +618,9 @@
     lca.renderChanges( item );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( item, "cellCheckable" );
-    assertTrue( jsonEquals( "[true,false]", actual ) );  }
+    JsonArray expected = JsonArray.readFrom( "[true, false]" );
+    assertEquals( expected, message.findSetProperty( item, "cellCheckable" ) );
+  }
 
   public void testRenderCellCheckableUnchanged() throws IOException {
     grid = new Grid( shell, SWT.CHECK );
@@ -653,7 +642,11 @@
     createGridColumns( grid, 3, SWT.NONE );
     item = new GridItem( grid, SWT.NONE );
 
-    Fixture.fakeSetParameter( getId( item ), "cellChecked", new boolean[] { true, false, true } );
+    JsonArray cellChecked = new JsonArray()
+      .add( true )
+      .add( false )
+      .add( true );
+    Fixture.fakeSetProperty( getId( item ), "cellChecked", cellChecked );
     Fixture.readDataAndProcessAction( item );
 
     assertTrue( item.getChecked( 0 ) );
@@ -666,7 +659,7 @@
     grid.addListener( SWT.Expand, new LoggingTreeListener( events ) );
     new GridItem( item, SWT.NONE );
 
-    Fixture.fakeSetParameter( getId( item ), "expanded", Boolean.TRUE );
+    Fixture.fakeSetProperty( getId( item ), "expanded", true );
     fakeTreeEvent( item, ClientMessageConst.EVENT_EXPAND );
     Fixture.readDataAndProcessAction( display );
 
@@ -683,7 +676,7 @@
     new GridItem( item, SWT.NONE );
     item.setExpanded( true );
 
-    Fixture.fakeSetParameter( getId( item ), "expanded", Boolean.FALSE );
+    Fixture.fakeSetProperty( getId( item ), "expanded", false );
     fakeTreeEvent( item, ClientMessageConst.EVENT_COLLAPSE );
     Fixture.readDataAndProcessAction( display );
 
@@ -700,7 +693,7 @@
     GridItem[] items = createGridItems( grid, 5, 10 );
 
     Fixture.markInitialized( grid );
-    Fixture.fakeSetParameter( getId( items[ 0 ] ), "expanded", Boolean.TRUE );
+    Fixture.fakeSetProperty( getId( items[ 0 ] ), "expanded", true );
     Fixture.executeLifeCycleFromServerThread();
 
     Message message = Fixture.getProtocolMessage();
@@ -736,8 +729,8 @@
   }
 
   private static void fakeTreeEvent( GridItem item, String eventName ) {
-    Map<String, Object> parameters = new HashMap<String, Object>();
-    parameters.put( ClientMessageConst.EVENT_PARAM_ITEM, getId( item ) );
+    JsonObject parameters = new JsonObject()
+      .add( ClientMessageConst.EVENT_PARAM_ITEM, getId( item ) );
     Fixture.fakeNotifyOperation( getId( item.getParent() ), eventName, parameters );
   }
 
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCATestUtil.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCATestUtil.java
deleted file mode 100644
index eb6dc63..0000000
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCATestUtil.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012, 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.nebula.widgets.grid.internal.gridkit;
-
-import org.eclipse.rap.rwt.internal.json.JsonArray;
-import org.eclipse.rap.rwt.internal.json.JsonObject;
-
-
-@SuppressWarnings( "restriction" )
-public class GridLCATestUtil {
-
-  public static boolean jsonEquals( String json, JsonArray actualArray ) {
-    boolean result = true;
-    JsonArray expectedArray = JsonArray.readFrom( json );
-    if( expectedArray.size() == actualArray.size() ) {
-      for( int i = 0; i < expectedArray.size(); i++ ) {
-        Object expected = expectedArray.get( i );
-        Object actual = actualArray.get( i );
-        boolean equal =    ( expected == null && actual == JsonObject.NULL )
-                        || ( expected != null && expected.equals( actual ) );
-        if( !equal ) {
-          result = false;
-        }
-      }
-    } else {
-      result = false;
-    }
-    return result;
-  }
-
-  public static String join( JsonArray array, String separator ) {
-    StringBuilder result = new StringBuilder();
-    for( int i = 0; i < array.size(); i++ ) {
-      if( i > 0 ) {
-        result.append( separator );
-      }
-      result.append( array.get( i ).toString() );
-    }
-    return result.toString();
-  }
-
-}
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java
index b755e3a..a3e4fce 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java
@@ -13,17 +13,12 @@
 import static org.eclipse.nebula.widgets.grid.GridTestUtil.createGridColumns;
 import static org.eclipse.nebula.widgets.grid.GridTestUtil.createGridItems;
 import static org.eclipse.nebula.widgets.grid.GridTestUtil.loadImage;
-import static org.eclipse.nebula.widgets.grid.internal.gridkit.GridLCATestUtil.jsonEquals;
-import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_DEFAULT_SELECTION;
-import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_SELECTION;
 import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId;
 
 import java.io.IOException;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
 
 import junit.framework.TestCase;
 
@@ -32,9 +27,10 @@
 import org.eclipse.nebula.widgets.grid.GridItem;
 import org.eclipse.nebula.widgets.grid.internal.IGridAdapter;
 import org.eclipse.nebula.widgets.grid.internal.gridkit.GridLCA.ItemMetrics;
+import org.eclipse.rap.json.JsonArray;
+import org.eclipse.rap.json.JsonObject;
+import org.eclipse.rap.json.JsonValue;
 import org.eclipse.rap.rwt.RWT;
-import org.eclipse.rap.rwt.internal.json.JsonArray;
-import org.eclipse.rap.rwt.internal.protocol.ClientMessageConst;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
 import org.eclipse.rap.rwt.testfixture.Fixture;
 import org.eclipse.rap.rwt.testfixture.Message;
@@ -52,7 +48,6 @@
 import org.eclipse.swt.widgets.Shell;
 
 
-@SuppressWarnings("restriction")
 public class GridLCA_Test extends TestCase {
 
   private Display display;
@@ -93,7 +88,7 @@
 
     Message message = Fixture.getProtocolMessage();
     CreateOperation operation = message.findCreateOperation( grid );
-    assertEquals( WidgetUtil.getId( grid.getParent() ), operation.getParent() );
+    assertEquals( getId( grid.getParent() ), operation.getParent() );
   }
 
   public void testRenderCreateWithVirtualMulti() throws IOException {
@@ -106,7 +101,7 @@
     List<Object> styles = Arrays.asList( operation.getStyles() );
     assertTrue( styles.contains( "VIRTUAL" ) );
     assertTrue( styles.contains( "MULTI" ) );
-    assertEquals( Boolean.TRUE, message.findListenProperty( grid, "SetData" ) );
+    assertEquals( JsonValue.TRUE, message.findListenProperty( grid, "SetData" ) );
   }
 
   public void testRenderDispose() throws IOException {
@@ -115,7 +110,7 @@
     Message message = Fixture.getProtocolMessage();
     Operation operation = message.getOperation( 0 );
     assertTrue( operation instanceof DestroyOperation );
-    assertEquals( WidgetUtil.getId( grid ), operation.getTarget() );
+    assertEquals( getId( grid ), operation.getTarget() );
   }
 
   public void testRenderInitialItemCount() throws IOException {
@@ -131,7 +126,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 10 ), message.findSetProperty( grid, "itemCount" ) );
+    assertEquals( 10, message.findSetProperty( grid, "itemCount" ).asInt() );
   }
 
   public void testRenderItemCountUnchanged() throws IOException {
@@ -158,7 +153,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 40 ), message.findSetProperty( grid, "itemHeight" ) );
+    assertEquals( 40, message.findSetProperty( grid, "itemHeight" ).asInt() );
   }
 
   public void testRenderItemHeightUnchanged() throws IOException {
@@ -189,8 +184,8 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( grid, "itemMetrics" );
-    assertTrue( jsonEquals( "[0,0,50,0,0,0,44,0,0]", actual.get( 0 ).asArray() ) );
+    JsonArray actual = message.findSetProperty( grid, "itemMetrics" ).asArray();
+    assertEquals( JsonArray.readFrom( "[0, 0, 50, 0, 0, 0, 44, 0, 0]" ), actual.get( 0 ) );
   }
 
   public void testRenderItemMetrics_WithCheck() throws IOException {
@@ -201,9 +196,9 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( grid, "itemMetrics" );
-    assertTrue( jsonEquals( "[0,0,20,23,0,23,0,0,21]", actual.get( 0 ).asArray() ) );
-    assertTrue( jsonEquals( "[1,20,40,49,0,49,5,26,21]", actual.get( 1 ).asArray() ) );
+    JsonArray actual = message.findSetProperty( grid, "itemMetrics" ).asArray();
+    assertEquals( JsonArray.readFrom( "[0, 0, 20, 23, 0, 23, 0, 0, 21]" ), actual.get( 0 ) );
+    assertEquals( JsonArray.readFrom( "[1, 20, 40, 49, 0, 49, 5, 26, 21]" ), actual.get( 1 ) );
   }
 
   public void testRenderItemMetricsUnchanged() throws IOException {
@@ -233,7 +228,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 1 ), message.findSetProperty( grid, "columnCount" ) );
+    assertEquals( 1, message.findSetProperty( grid, "columnCount" ).asInt() );
   }
 
   public void testRenderColumnCountUnchanged() throws IOException {
@@ -265,7 +260,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 1 ), message.findSetProperty( grid, "treeColumn" ) );
+    assertEquals( 1, message.findSetProperty( grid, "treeColumn" ).asInt() );
   }
 
   public void testRenderTreeColumnUnchanged() throws IOException {
@@ -298,7 +293,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 31 ), message.findSetProperty( grid, "headerHeight" ) );
+    assertEquals( 31, message.findSetProperty( grid, "headerHeight" ).asInt() );
   }
 
   public void testRenderHeaderHeightUnchanged() throws IOException {
@@ -327,7 +322,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findSetProperty( grid, "headerVisible" ) );
+    assertEquals( JsonValue.TRUE, message.findSetProperty( grid, "headerVisible" ) );
   }
 
   public void testRenderHeaderVisibleUnchanged() throws IOException {
@@ -359,7 +354,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 31 ), message.findSetProperty( grid, "footerHeight" ) );
+    assertEquals( 31, message.findSetProperty( grid, "footerHeight" ).asInt() );
   }
 
   public void testRenderFooterHeightUnchanged() throws IOException {
@@ -388,7 +383,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findSetProperty( grid, "footerVisible" ) );
+    assertEquals( JsonValue.TRUE, message.findSetProperty( grid, "footerVisible" ) );
   }
 
   public void testRenderFooterVisibleUnchanged() throws IOException {
@@ -407,7 +402,7 @@
     lca.render( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findSetProperty( grid, "linesVisible" ) );
+    assertEquals( JsonValue.TRUE, message.findSetProperty( grid, "linesVisible" ) );
   }
 
   public void testRenderLinesVisible() throws IOException {
@@ -416,7 +411,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.FALSE, message.findSetProperty( grid, "linesVisible" ) );
+    assertEquals( JsonValue.FALSE, message.findSetProperty( grid, "linesVisible" ) );
   }
 
   public void testRenderLinesVisibleUnchanged() throws IOException {
@@ -450,7 +445,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 2 ), message.findSetProperty( grid, "topItemIndex" ) );
+    assertEquals( 2, message.findSetProperty( grid, "topItemIndex" ).asInt() );
   }
 
   public void testRenderTopItemIndexUnchanged() throws IOException {
@@ -482,7 +477,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( WidgetUtil.getId( items[ 1 ] ), message.findSetProperty( grid, "focusItem" ) );
+    assertEquals( getId( items[ 1 ] ), message.findSetProperty( grid, "focusItem" ).asString() );
   }
 
   public void testRenderFocusItemUnchanged() throws IOException {
@@ -513,7 +508,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Integer.valueOf( 10 ), message.findSetProperty( grid, "scrollLeft" ) );
+    assertEquals( 10, message.findSetProperty( grid, "scrollLeft" ).asInt() );
   }
 
   public void testRenderScrollLeftUnchanged() throws IOException {
@@ -544,14 +539,10 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    JsonArray actual = ( JsonArray )message.findSetProperty( grid, "selection" );
-    StringBuilder expected = new StringBuilder();
-    expected.append( "[\"" );
-    expected.append( WidgetUtil.getId( items[ 0 ] ) );
-    expected.append( "\",\"" );
-    expected.append( WidgetUtil.getId( items[ 4 ] ) );
-    expected.append( "\"]" );
-    assertTrue( jsonEquals( expected.toString(), actual ) );
+    Object expected = new JsonArray()
+      .add( getId( items[ 0 ] ) )
+      .add( getId( items[ 4 ] ) );
+    assertEquals( expected, message.findSetProperty( grid, "selection" ) );
   }
 
   public void testRenderSelectionUnchanged() throws IOException {
@@ -582,7 +573,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( "up", message.findSetProperty( grid, "sortDirection" ) );
+    assertEquals( "up", message.findSetProperty( grid, "sortDirection" ).asString() );
   }
 
   public void testRenderSortDirectionUnchanged() throws IOException {
@@ -613,7 +604,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( WidgetUtil.getId( columns[ 1 ] ), message.findSetProperty( grid, "sortColumn" ) );
+    assertEquals( getId( columns[ 1 ] ), message.findSetProperty( grid, "sortColumn" ).asString() );
   }
 
   public void testRenderSortColumnUnchanged() throws IOException {
@@ -648,7 +639,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findSetProperty( grid.getHorizontalBar(), "visibility" ) );
+    assertEquals( JsonValue.TRUE, message.findSetProperty( grid.getHorizontalBar(), "visibility" ) );
     assertNull( message.findSetOperation( grid.getVerticalBar(), "visibility" ) );
   }
 
@@ -662,7 +653,7 @@
 
     Message message = Fixture.getProtocolMessage();
     assertNull( message.findSetOperation( grid.getHorizontalBar(), "visibility" ) );
-    assertEquals( Boolean.TRUE, message.findSetProperty( grid.getVerticalBar(), "visibility" ) );
+    assertEquals( JsonValue.TRUE, message.findSetProperty( grid.getVerticalBar(), "visibility" ) );
   }
 
   public void testRenderScrollBarsVisibleUnchanged() throws IOException {
@@ -695,7 +686,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findListenProperty( hScroll, "Selection" ) );
+    assertEquals( JsonValue.TRUE, message.findListenProperty( hScroll, "Selection" ) );
   }
 
   public void testRenderRemoveScrollBarsSelectionListener_Horizontal() throws Exception {
@@ -711,7 +702,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.FALSE, message.findListenProperty( hScroll, "Selection" ) );
+    assertEquals( JsonValue.FALSE, message.findListenProperty( hScroll, "Selection" ) );
   }
 
   public void testRenderScrollBarsSelectionListenerUnchanged_Horizontal() throws Exception {
@@ -740,7 +731,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findListenProperty( vScroll, "Selection" ) );
+    assertEquals( JsonValue.TRUE, message.findListenProperty( vScroll, "Selection" ) );
   }
 
   public void testRenderRemoveScrollBarsSelectionListener_Vertical() throws Exception {
@@ -756,7 +747,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.FALSE, message.findListenProperty( vScroll, "Selection" ) );
+    assertEquals( JsonValue.FALSE, message.findListenProperty( vScroll, "Selection" ) );
   }
 
   public void testRenderScrollBarsSelectionListenerUnchanged_Vertical() throws Exception {
@@ -783,8 +774,8 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findListenProperty( grid, "Selection" ) );
-    assertEquals( Boolean.TRUE, message.findListenProperty( grid, "DefaultSelection" ) );
+    assertEquals( JsonValue.TRUE, message.findListenProperty( grid, "Selection" ) );
+    assertEquals( JsonValue.TRUE, message.findListenProperty( grid, "DefaultSelection" ) );
   }
 
   public void testRenderRemoveSelectionListener() throws Exception {
@@ -798,8 +789,8 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.FALSE, message.findListenProperty( grid, "Selection" ) );
-    assertEquals( Boolean.FALSE, message.findListenProperty( grid, "DefaultSelection" ) );
+    assertEquals( JsonValue.FALSE, message.findListenProperty( grid, "Selection" ) );
+    assertEquals( JsonValue.FALSE, message.findListenProperty( grid, "DefaultSelection" ) );
   }
 
   public void testRenderSelectionListenerUnchanged() throws Exception {
@@ -832,7 +823,7 @@
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findSetProperty( grid, "enableCellToolTip" ) );
+    assertEquals( JsonValue.TRUE, message.findSetProperty( grid, "enableCellToolTip" ) );
   }
 
   public void testRenderEnableCellToolTipUnchanged() throws IOException {
@@ -856,19 +847,19 @@
     Fixture.markInitialized( display );
     Fixture.markInitialized( grid );
 
-    String itemId = WidgetUtil.getId( item );
+    String itemId = getId( item );
     processCellToolTipRequest( grid, itemId, 1 );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( "foo", message.findSetProperty( grid, "cellToolTipText" ) );
+    assertEquals( "foo", message.findSetProperty( grid, "cellToolTipText" ).asString() );
   }
 
   public void testReadSelection() {
     GridItem[] items = createGridItems( grid, 3, 0 );
     Fixture.fakeNewRequest();
-    Fixture.fakeSetParameter( getId( grid ),
+    Fixture.fakeSetProperty( getId( grid ),
                               "selection",
-                              new String[] { getId( items[ 0 ] ), getId( items[ 2 ] ) } );
+                              createArray( getId( items[ 0 ] ), getId( items[ 2 ] ) ) );
     Fixture.readDataAndProcessAction( grid );
 
     GridItem[] selectedItems = grid.getSelection();
@@ -882,9 +873,9 @@
     items[ 0 ].dispose();
 
     Fixture.fakeNewRequest();
-    Fixture.fakeSetParameter( getId( grid ),
+    Fixture.fakeSetProperty( getId( grid ),
                               "selection",
-                              new String[] { getId( items[ 0 ] ), getId( items[ 2 ] ) } );
+                              createArray( getId( items[ 0 ] ), getId( items[ 2 ] ) ) );
     Fixture.readDataAndProcessAction( grid );
 
     GridItem[] selectedItems = grid.getSelection();
@@ -898,7 +889,7 @@
     createGridItems( grid, 10, 0 );
 
     Fixture.fakeNewRequest();
-    Fixture.fakeSetParameter( getId( grid ), "scrollLeft", Integer.valueOf( 30 ) );
+    Fixture.fakeSetProperty( getId( grid ), "scrollLeft", 30 );
     Fixture.readDataAndProcessAction( grid );
 
     assertEquals( 30, grid.getHorizontalBar().getSelection() );
@@ -911,7 +902,7 @@
     items[ 4 ].setExpanded( true );
 
     Fixture.fakeNewRequest();
-    Fixture.fakeSetParameter( getId( grid ), "topItemIndex", Integer.valueOf( 3 ) );
+    Fixture.fakeSetProperty( getId( grid ), "topItemIndex", 3 );
     Fixture.readDataAndProcessAction( grid );
 
     assertEquals( 3, grid.getVerticalBar().getSelection() );
@@ -924,9 +915,8 @@
     grid.addListener( SWT.Selection, new LoggingListener( events ) );
 
     Fixture.fakeNewRequest();
-    Map<String, Object> parameters = new HashMap<String, Object>();
-    parameters.put( ClientMessageConst.EVENT_PARAM_ITEM, getId( item ) );
-    Fixture.fakeNotifyOperation( getId( grid ), EVENT_SELECTION, parameters );
+    JsonObject parameters = new JsonObject().add( "item", getId( item ) );
+    Fixture.fakeNotifyOperation( getId( grid ), "Selection", parameters );
     Fixture.readDataAndProcessAction( display );
 
     assertEquals( 1, events.size() );
@@ -943,11 +933,11 @@
     grid.addListener( SWT.Selection, new LoggingListener( events ) );
 
     Fixture.fakeNewRequest();
-    Map<String, Object> parameters = new HashMap<String, Object>();
-    parameters.put( ClientMessageConst.EVENT_PARAM_ITEM, getId( item ) );
-    parameters.put( ClientMessageConst.EVENT_PARAM_DETAIL, "check" );
-    parameters.put( ClientMessageConst.EVENT_PARAM_INDEX, Integer.valueOf( 3 ) );
-    Fixture.fakeNotifyOperation( getId( grid ), EVENT_SELECTION, parameters );
+    JsonObject parameters = new JsonObject()
+      .add( "item", getId( item ) )
+      .add( "detail", "check" )
+      .add( "index", 3 );
+    Fixture.fakeNotifyOperation( getId( grid ), "Selection", parameters );
     Fixture.readDataAndProcessAction( display );
 
     assertEquals( 1, events.size() );
@@ -965,9 +955,8 @@
     grid.addListener( SWT.DefaultSelection, new LoggingListener( events ) );
 
     Fixture.fakeNewRequest();
-    Map<String, Object> parameters = new HashMap<String, Object>();
-    parameters.put( ClientMessageConst.EVENT_PARAM_ITEM, getId( item ) );
-    Fixture.fakeNotifyOperation( getId( grid ), EVENT_DEFAULT_SELECTION, parameters );
+    JsonObject parameters = new JsonObject().add( "item", getId( item ) );
+    Fixture.fakeNotifyOperation( getId( grid ), "DefaultSelection", parameters );
     Fixture.readDataAndProcessAction( display );
 
     assertEquals( 1, events.size() );
@@ -1094,21 +1083,21 @@
     lca.render( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findCreateProperty( grid, "markupEnabled" ) );
+    assertEquals( JsonValue.TRUE, message.findCreateProperty( grid, "markupEnabled" ) );
   }
 
   public void testRenderAddExpandListener() throws Exception {
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findListenProperty( grid, "Expand" ) );
+    assertEquals( JsonValue.TRUE, message.findListenProperty( grid, "Expand" ) );
   }
 
   public void testRenderAddCollapseListener() throws Exception {
     lca.renderChanges( grid );
 
     Message message = Fixture.getProtocolMessage();
-    assertEquals( Boolean.TRUE, message.findListenProperty( grid, "Collapse" ) );
+    assertEquals( JsonValue.TRUE, message.findListenProperty( grid, "Collapse" ) );
   }
 
   public void testDontRenderSetDataListenerTwice() throws Exception {
@@ -1137,20 +1126,28 @@
   public void testReadFocusItem() {
     GridItem[] items = createGridItems( grid, 3, 1 );
 
-    Fixture.fakeSetParameter( getId( grid ), "focusItem", getId( items[ 2 ] ) );
+    Fixture.fakeSetProperty( getId( grid ), "focusItem", getId( items[ 2 ] ) );
     lca.readData( grid );
 
     assertSame( items[ 2 ], grid.getFocusItem() );
   }
 
+  private static JsonValue createArray( String... values ) {
+    JsonArray array = new JsonArray();
+    for( int i = 0; i < values.length; i++ ) {
+      array.add( values[ i ] );
+    }
+    return array;
+  }
+
   //////////////////
   // Helping methods
 
   private static void processCellToolTipRequest( Grid grid, String itemId, int column ) {
     Fixture.fakeNewRequest();
-    Map<String, Object> parameters = new HashMap<String, Object>();
-    parameters.put( "item", itemId );
-    parameters.put( "column", Integer.valueOf( column ) );
+    JsonObject parameters = new JsonObject()
+      .add( "item", itemId )
+      .add( "column", column );
     Fixture.fakeCallOperation( getId( grid ), "renderToolTipText", parameters );
     Fixture.executeLifeCycleFromServerThread();
   }