diff --git a/bundles/org.eclipse.rap.rwt.excanvas/src/org/eclipse/rap/rwt/excanvas/ExCanvasResource.java b/bundles/org.eclipse.rap.rwt.excanvas/src/org/eclipse/rap/rwt/excanvas/ExCanvasResource.java
index 13a09ad..50c794c 100644
--- a/bundles/org.eclipse.rap.rwt.excanvas/src/org/eclipse/rap/rwt/excanvas/ExCanvasResource.java
+++ b/bundles/org.eclipse.rap.rwt.excanvas/src/org/eclipse/rap/rwt/excanvas/ExCanvasResource.java
@@ -16,8 +16,7 @@
  *****************************************************************************/
 package org.eclipse.rap.rwt.excanvas;
 
-import org.eclipse.rap.rwt.resources.IResource;
-import org.eclipse.rap.rwt.resources.IResourceManager.RegisterOptions;
+import org.eclipse.rap.ui.resources.IResource;
 
 
 public class ExCanvasResource implements IResource {
@@ -32,10 +31,6 @@
     return this.getClass().getClassLoader();
   }
 
-  public RegisterOptions getOptions() {
-    return RegisterOptions.VERSION_AND_COMPRESS;
-  }
-
   public String getLocation() {
     if( location == null ) {
       location = "org/eclipse/rap/rwt/excanvas/excanvas.compiled.js";
diff --git a/bundles/org.eclipse.rap.rwt.visualization.google.demo/RAP Google Visualizations Demo.launch b/bundles/org.eclipse.rap.rwt.visualization.google.demo/RAP Google Visualizations Demo.launch
index 7f42a57..3966a6a 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.google.demo/RAP Google Visualizations Demo.launch
+++ b/bundles/org.eclipse.rap.rwt.visualization.google.demo/RAP Google Visualizations Demo.launch
@@ -1,43 +1,43 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.rap.ui.launch.RAPLauncher">
-<booleanAttribute key="append.args" value="true"/>
-<booleanAttribute key="askclear" value="false"/>
-<booleanAttribute key="automaticAdd" value="false"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<stringAttribute key="checked" value="[NONE]"/>
-<booleanAttribute key="clearConfig" value="false"/>
-<booleanAttribute key="clearws" value="false"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/RAP Google Visualizations Demo"/>
-<booleanAttribute key="default" value="true"/>
-<booleanAttribute key="default_auto_start" value="true"/>
-<intAttribute key="default_start_level" value="4"/>
-<booleanAttribute key="includeOptional" value="false"/>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6.0_27"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console -consolelog"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true&#13;&#10;-Dorg.eclipse.equinox.http.jetty.customizer.class=org.eclipse.rap.jettycustomizer.internal.SessionCookieCustomizer"/>
-<stringAttribute key="org.eclipse.rap.launch.browserMode" value="INTERNAL"/>
-<stringAttribute key="org.eclipse.rap.launch.contextpath" value=""/>
-<stringAttribute key="org.eclipse.rap.launch.dataLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.rap.ui.launch/RAPGoogleVisualizationsDemo"/>
-<stringAttribute key="org.eclipse.rap.launch.entryPoint" value="demo"/>
-<stringAttribute key="org.eclipse.rap.launch.libraryVariant" value="DEBUG"/>
-<stringAttribute key="org.eclipse.rap.launch.logLevel" value="ALL"/>
-<booleanAttribute key="org.eclipse.rap.launch.openBrowser" value="true"/>
-<intAttribute key="org.eclipse.rap.launch.port" value="9090"/>
-<stringAttribute key="org.eclipse.rap.launch.servletName" value="googlevis"/>
-<intAttribute key="org.eclipse.rap.launch.sessionTimeout" value="0"/>
-<booleanAttribute key="org.eclipse.rap.launch.terminatePrevious" value="true"/>
-<booleanAttribute key="org.eclipse.rap.launch.useDefaultDataLocation" value="true"/>
-<booleanAttribute key="org.eclipse.rap.launch.useManualContextPath" value="false"/>
-<booleanAttribute key="org.eclipse.rap.launch.useManualPort" value="false"/>
-<booleanAttribute key="org.eclipse.rap.launch.useSessionTimeout" value="false"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="target_bundles" value="com.ibm.icu.base@default:default,javax.servlet@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.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime@default:true,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.help@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"/>
-<booleanAttribute key="tracing" value="false"/>
-<booleanAttribute key="useCustomFeatures" value="false"/>
-<booleanAttribute key="useDefaultConfigArea" value="true"/>
-<stringAttribute key="workspace_bundles" value="org.eclipse.rap.jettycustomizer@default:default,org.eclipse.rap.jface.databinding@default:default,org.eclipse.rap.jface@default:default,org.eclipse.rap.rwt.excanvas@default:default,org.eclipse.rap.rwt.osgi@default:default,org.eclipse.rap.rwt.visualization.google.demo@default:default,org.eclipse.rap.rwt.visualization.google@default:default,org.eclipse.rap.rwt@default:default,org.eclipse.rap.ui.workbench@default:default,org.eclipse.rap.ui@default:default,org.json@default:default"/>
-</launchConfiguration>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.rap.ui.launch.RAPLauncher">
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="false"/>
+<booleanAttribute key="clearws" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/RAP Google Visualizations Demo"/>
+<booleanAttribute key="default" value="true"/>
+<booleanAttribute key="default_auto_start" value="true"/>
+<intAttribute key="default_start_level" value="4"/>
+<booleanAttribute key="includeOptional" value="false"/>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6.0_27"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console -consolelog"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true&#13;&#10;-Dorg.eclipse.equinox.http.jetty.customizer.class=org.eclipse.rap.jettycustomizer.internal.SessionCookieCustomizer"/>
+<stringAttribute key="org.eclipse.rap.launch.browserMode" value="INTERNAL"/>
+<stringAttribute key="org.eclipse.rap.launch.contextpath" value=""/>
+<stringAttribute key="org.eclipse.rap.launch.dataLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.rap.ui.launch/RAPGoogleVisualizationsDemo"/>
+<stringAttribute key="org.eclipse.rap.launch.entryPoint" value=""/>
+<stringAttribute key="org.eclipse.rap.launch.libraryVariant" value="DEBUG"/>
+<stringAttribute key="org.eclipse.rap.launch.logLevel" value="ALL"/>
+<booleanAttribute key="org.eclipse.rap.launch.openBrowser" value="true"/>
+<intAttribute key="org.eclipse.rap.launch.port" value="9090"/>
+<stringAttribute key="org.eclipse.rap.launch.servletName" value="googlevis"/>
+<intAttribute key="org.eclipse.rap.launch.sessionTimeout" value="0"/>
+<booleanAttribute key="org.eclipse.rap.launch.terminatePrevious" value="true"/>
+<booleanAttribute key="org.eclipse.rap.launch.useDefaultDataLocation" value="true"/>
+<booleanAttribute key="org.eclipse.rap.launch.useManualContextPath" value="false"/>
+<booleanAttribute key="org.eclipse.rap.launch.useManualPort" value="false"/>
+<booleanAttribute key="org.eclipse.rap.launch.useSessionTimeout" value="false"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="target_bundles" value="com.ibm.icu.base@default:default,javax.servlet@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.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime@default:true,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.servletbridge.extensionbundle@default:false,org.eclipse.help@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"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<stringAttribute key="workspace_bundles" value="org.eclipse.rap.jettycustomizer@default:false,org.eclipse.rap.jface.databinding@default:default,org.eclipse.rap.jface@default:default,org.eclipse.rap.rwt.excanvas@default:default,org.eclipse.rap.rwt.osgi@default:default,org.eclipse.rap.rwt.visualization.google.demo@default:default,org.eclipse.rap.rwt.visualization.google@default:default,org.eclipse.rap.rwt@default:default,org.eclipse.rap.ui.workbench@default:default,org.eclipse.rap.ui@default:default,org.json@default:default"/>
+</launchConfiguration>
diff --git a/bundles/org.eclipse.rap.rwt.visualization.google.demo/plugin.xml b/bundles/org.eclipse.rap.rwt.visualization.google.demo/plugin.xml
index 0f99ab8..5010f9a 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.google.demo/plugin.xml
+++ b/bundles/org.eclipse.rap.rwt.visualization.google.demo/plugin.xml
@@ -6,8 +6,8 @@
          point="org.eclipse.rap.ui.entrypoint">
       <entrypoint
             class="org.eclipse.rap.rwt.visualization.google.demo.Application"
-            parameter="demo"
-            id="org.eclipse.rap.rwt.visualization.google.demo.Application">
+            id="org.eclipse.rap.rwt.visualization.google.demo.Application"
+            path="/googlevis">
       </entrypoint>
    </extension>
    <extension
@@ -15,7 +15,6 @@
       <branding
             defaultEntrypointId="org.eclipse.rap.rwt.visualization.google.demo.Application"
             id="org.eclipse.rap.rwt.visualization.google.demo.branding"
-            servletName="googlevis"
             title="RWT Google Visualizations">
       </branding>
    </extension>
diff --git a/bundles/org.eclipse.rap.rwt.visualization.google/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.rwt.visualization.google/META-INF/MANIFEST.MF
index a20a6ca..eac453e 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.google/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.rap.rwt.visualization.google/META-INF/MANIFEST.MF
@@ -7,7 +7,8 @@
 Require-Bundle: org.eclipse.rap.rwt,
  org.json;bundle-version="1.0.0"
 Import-Package: javax.servlet;version="2.5.0",
- javax.servlet.http;version="2.5.0"
+ javax.servlet.http;version="2.5.0",
+ org.eclipse.rap.ui.resources;version="2.0.0"
 Export-Package: 
  org.eclipse.rap.rwt.visualization.google,
  org.eclipse.rap.rwt.visualization.google.json
diff --git a/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/BaseChart.js b/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/BaseChart.js
index b85f24f..5a786d1 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/BaseChart.js
+++ b/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/BaseChart.js
@@ -13,33 +13,33 @@
 //The reason this is still a qooxdoo widget is because google embeds the chart in an iframe. 
 qx.Class.define( "org.eclipse.rap.rwt.visualization.google.BaseChart", {
     type: "abstract",
-    extend: qx.ui.layout.CanvasLayout,
+    extend: rwt.widgets.base.Parent,
     
     statics : 
     { 
       registerAdapter : function(className, constructor) {
-    	  org.eclipse.rwt.protocol.AdapterRegistry.add( className, {
+    	  rwt.protocol.AdapterRegistry.add( className, {
 
     		  factory : function( properties ) {
     		    var result = new constructor();
-    		    org.eclipse.rwt.protocol.AdapterUtil.addStatesForStyles( result, properties.style );
+    		    rwt.protocol.AdapterUtil.addStatesForStyles( result, properties.style );
     		    result.setUserData( "isControl", true );
-    		    org.eclipse.rwt.protocol.AdapterUtil.setParent( result, properties.parent );
+    		    rwt.protocol.AdapterUtil.setParent( result, properties.parent );
     		    return result;
     		  },
     		  
-    		  destructor : org.eclipse.rwt.protocol.AdapterUtil.getControlDestructor(),
+    		  destructor : rwt.protocol.AdapterUtil.getControlDestructor(),
 
-    		  properties : org.eclipse.rwt.protocol.AdapterUtil.extendControlProperties( [
+    		  properties : rwt.protocol.AdapterUtil.extendControlProperties( [
     		    "widgetData",
     		    "widgetOptions",
     		  ] ),
 
-    		  propertyHandler : org.eclipse.rwt.protocol.AdapterUtil.extendControlPropertyHandler( {} ),   
+    		  propertyHandler : rwt.protocol.AdapterUtil.extendControlPropertyHandler( {} ),   
 
-    		  listeners : org.eclipse.rwt.protocol.AdapterUtil.extendControlListeners( [] ),
+    		  listeners : rwt.protocol.AdapterUtil.extendControlListeners( [] ),
 
-    		  listenerHandler : org.eclipse.rwt.protocol.AdapterUtil.extendControlListenerHandler( {} ),
+    		  listenerHandler : rwt.protocol.AdapterUtil.extendControlListenerHandler( {} ),
 
     		  methods : [
     		    "redraw"
@@ -158,7 +158,7 @@
         
         refreshWidgetOptions : function() {
         	try {
-	        	qx.ui.core.Widget.flushGlobalQueues();
+        		rwt.widgets.base.Widget.flushGlobalQueues();
 	        	var opString = this.getWidgetOptions();
 	        	opString = opString.replace(new RegExp("~","g"), "\"");
 	        	var evalStr = "({" + opString;
@@ -171,7 +171,7 @@
         },
         
         redraw : function () {
-          qx.client.Timer.once( function() {
+          rwt.client.Timer.once( function() {
             try {
               this.initialize();
               this.info("Attempting to redraw: "+this._dataTable+", "+this._options);
diff --git a/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/GoogleAPIResource.java b/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/GoogleAPIResource.java
index c989f9b..5dfb0f1 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/GoogleAPIResource.java
+++ b/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/GoogleAPIResource.java
@@ -10,8 +10,8 @@
  ******************************************************************************/
 package org.eclipse.rap.rwt.visualization.google.internal;
 
-import org.eclipse.rap.rwt.resources.IResource;
-import org.eclipse.rap.rwt.resources.IResourceManager.RegisterOptions;
+import org.eclipse.rap.ui.resources.IResource;
+
 
 public class GoogleAPIResource implements IResource {
 
@@ -25,10 +25,6 @@
     return this.getClass().getClassLoader();
   }
 
-  public RegisterOptions getOptions() {
-    return RegisterOptions.VERSION;
-  }
-
   public String getLocation() {
     //TODO this should be converted to use bundle properties 
     return System.getProperty(API_KEY, "https://www.google.com/jsapi");
diff --git a/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/GoogleVisualizationResource.java b/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/GoogleVisualizationResource.java
index 5507cde..0e90bc8 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/GoogleVisualizationResource.java
+++ b/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/GoogleVisualizationResource.java
@@ -10,8 +10,7 @@
  ******************************************************************************/
 package org.eclipse.rap.rwt.visualization.google.internal;
 
-import org.eclipse.rap.rwt.resources.IResource;
-import org.eclipse.rap.rwt.resources.IResourceManager.RegisterOptions;
+import org.eclipse.rap.ui.resources.IResource;
 
 /**
  * <p>Base type for visualization resources.</p>
@@ -27,10 +26,6 @@
     return this.getClass().getClassLoader();
   }
 
-  public RegisterOptions getOptions() {
-    return RegisterOptions.VERSION;
-  }
-
   public abstract String getLocation();
 
   public boolean isJSLibrary() {
diff --git a/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/VisualizationWidgetLCA.java b/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/VisualizationWidgetLCA.java
index 708a565..a6852dc 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/VisualizationWidgetLCA.java
+++ b/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/VisualizationWidgetLCA.java
@@ -51,7 +51,8 @@
   public void renderInitialization( final Widget widget ) throws IOException {
     Control control = (Control)widget;
     IClientObject clientObject = ClientObjectFactory.getClientObject( control );
-    clientObject.create( getWidgetType().getCanonicalName() );
+    String canonicalName = getWidgetType().getCanonicalName();
+    clientObject.create( canonicalName );
 //    clientObject.set( "id", WidgetUtil.getId( control ) );
     clientObject.set( "parent", WidgetUtil.getId( control.getParent() ) );
     clientObject.set( "style", WidgetLCAUtil.getStyles( control, ALLOWED_STYLES ) );
diff --git a/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/geomapkit/Geomap.js b/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/geomapkit/Geomap.js
index 81e1f0d..c5e8cd2 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/geomapkit/Geomap.js
+++ b/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/geomapkit/Geomap.js
@@ -24,7 +24,7 @@
 }
 
 qx.Class.define( "org.eclipse.rap.rwt.visualization.google.Geomap", {
-    extend: qx.ui.layout.CanvasLayout,
+    extend: rwt.widgets.base.Parent,
     
     construct: function() {
         this.base( arguments );
@@ -118,7 +118,7 @@
         
         refreshWidgetOptions : function() {
         	try {
-	        	qx.ui.core.Widget.flushGlobalQueues();
+        		rwt.widgets.base.Widget.flushGlobalQueues();
 	        	var opString = this.getWidgetOptions();
 	        	opString = opString.replace(new RegExp("~","g"), "\"");
 	        	var evalStr = "({" + opString;
diff --git a/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/motionchartkit/MotionChart.js b/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/motionchartkit/MotionChart.js
index b709baf..ee10ce7 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/motionchartkit/MotionChart.js
+++ b/bundles/org.eclipse.rap.rwt.visualization.google/src/org/eclipse/rap/rwt/visualization/google/internal/motionchartkit/MotionChart.js
@@ -24,7 +24,7 @@
 }
 
 qx.Class.define( "org.eclipse.rap.rwt.visualization.google.MotionChart", {
-    extend: qx.ui.layout.CanvasLayout,
+    extend: rwt.widgets.base.Parent,
     
     construct: function( ) {
         this.base( arguments );
@@ -96,7 +96,7 @@
         
         refreshWidgetOptions : function() {
         	try {
-	        	qx.ui.core.Widget.flushGlobalQueues();
+        		rwt.widgets.base.Widget.flushGlobalQueues();
 	        	var opString = this.getWidgetOptions();
 	        	opString = opString.replace(new RegExp("~","g"), "\"");
 	        	var evalStr = "({" + opString;
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit.demo/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.rwt.visualization.jit.demo/META-INF/MANIFEST.MF
index 143ca00..0b88f27 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit.demo/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit.demo/META-INF/MANIFEST.MF
@@ -1,12 +1,12 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %Bundle-Name
-Bundle-SymbolicName: org.eclipse.rap.rwt.visualization.jit.demo;singleton:=true
-Bundle-Version: 1.5.0.qualifier
-Require-Bundle: org.eclipse.rap.ui,
- org.eclipse.rap.rwt.visualization.jit;bundle-version="1.0.0"
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
-Import-Package: javax.servlet;version="2.4.0",
- javax.servlet.http;version="2.4.0"
-Bundle-Vendor: %Bundle-Vendor
-Bundle-Activator: org.eclipse.rap.rwt.visualization.jit.demo.Activator
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.rap.rwt.visualization.jit.demo;singleton:=true
+Bundle-Version: 1.5.0.qualifier
+Require-Bundle: org.eclipse.rap.ui,
+ org.eclipse.rap.rwt.visualization.jit;bundle-version="1.0.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Import-Package: javax.servlet;version="2.4.0",
+ javax.servlet.http;version="2.4.0"
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Activator: org.eclipse.rap.rwt.visualization.jit.demo.Activator
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit.demo/RAP Javascript InfoVis Toolkit Demo.launch b/bundles/org.eclipse.rap.rwt.visualization.jit.demo/RAP Javascript InfoVis Toolkit Demo.launch
index a04ff0b..7635d1c 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit.demo/RAP Javascript InfoVis Toolkit Demo.launch
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit.demo/RAP Javascript InfoVis Toolkit Demo.launch
@@ -1,42 +1,43 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.rap.ui.launch.RAPLauncher">
-<booleanAttribute key="append.args" value="true"/>
-<booleanAttribute key="askclear" value="false"/>
-<booleanAttribute key="automaticAdd" value="false"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<stringAttribute key="checked" value="[NONE]"/>
-<booleanAttribute key="clearConfig" value="true"/>
-<booleanAttribute key="clearws" value="false"/>
-<stringAttribute key="configLocation" value="${system_property:java.io.tmpdir}/org.eclipse.rap.rwt.visualization.jit.demo"/>
-<booleanAttribute key="default" value="true"/>
-<booleanAttribute key="default_auto_start" value="true"/>
-<intAttribute key="default_start_level" value="4"/>
-<booleanAttribute key="includeOptional" value="false"/>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console -consolelog"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true&#13;&#10;-Dorg.eclipse.equinox.http.jetty.customizer.class=org.eclipse.rap.jettycustomizer.internal.SessionCookieCustomizer"/>
-<stringAttribute key="org.eclipse.rap.launch.browserMode" value="INTERNAL"/>
-<stringAttribute key="org.eclipse.rap.launch.contextpath" value=""/>
-<stringAttribute key="org.eclipse.rap.launch.dataLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.rap.ui.launch/RAPJavascriptInfoVisToolkitDemo"/>
-<stringAttribute key="org.eclipse.rap.launch.entryPoint" value="jit"/>
-<stringAttribute key="org.eclipse.rap.launch.libraryVariant" value="DEBUG"/>
-<stringAttribute key="org.eclipse.rap.launch.logLevel" value="ALL"/>
-<booleanAttribute key="org.eclipse.rap.launch.openBrowser" value="true"/>
-<intAttribute key="org.eclipse.rap.launch.port" value="9090"/>
-<stringAttribute key="org.eclipse.rap.launch.servletName" value="visualization"/>
-<intAttribute key="org.eclipse.rap.launch.sessionTimeout" value="0"/>
-<booleanAttribute key="org.eclipse.rap.launch.terminatePrevious" value="true"/>
-<booleanAttribute key="org.eclipse.rap.launch.useDefaultDataLocation" value="true"/>
-<booleanAttribute key="org.eclipse.rap.launch.useManualContextPath" value="false"/>
-<booleanAttribute key="org.eclipse.rap.launch.useManualPort" value="true"/>
-<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@default:default,javax.servlet@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.jobs*3.5.100.v20110404@default:default,org.eclipse.core.jobs*3.5.200.v20110721-1714@default:default,org.eclipse.core.runtime*3.7.0.v20110110@default:true,org.eclipse.core.runtime*3.8.0.v20110920-2042@default:true,org.eclipse.equinox.app*1.3.100.v20110321@default:default,org.eclipse.equinox.app*1.3.100.v20111010-1614@default:default,org.eclipse.equinox.common*3.6.0.v20110523@2:true,org.eclipse.equinox.common*3.6.100.v20111010-1614@2:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.preferences*3.4.0.v20110502@default:default,org.eclipse.equinox.preferences*3.4.100.v20111129-1548@default:default,org.eclipse.equinox.registry*3.5.100.v20110502@default:default,org.eclipse.equinox.registry*3.5.200.v20111010-1614@default:default,org.eclipse.help@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*3.7.0.v20110613@-1:true,org.eclipse.osgi*3.8.0.v20111111-1618@-1:true,org.eclipse.osgi.services*3.3.0.v20110513@default:default,org.eclipse.osgi.services*3.3.0.v20111117-1210@default:default,org.eclipse.rap.jettycustomizer@default:false,org.eclipse.rap.jface.databinding@default:default,org.eclipse.rap.jface@default:default,org.eclipse.rap.jface@default:default,org.eclipse.rap.rwt.excanvas@default:default,org.eclipse.rap.rwt.osgi@default:default,org.eclipse.rap.rwt.osgi@default:default,org.eclipse.rap.rwt@default:default,org.eclipse.rap.ui.cheatsheets@default:default,org.eclipse.rap.ui.cheatsheets@default:default,org.eclipse.rap.ui.forms@default:default,org.eclipse.rap.ui.forms@default:default,org.eclipse.rap.ui.views@default:default,org.eclipse.rap.ui.views@default:default,org.eclipse.rap.ui.workbench@default:default,org.eclipse.rap.ui.workbench@default:default,org.eclipse.rap.ui@default:default,org.eclipse.rap.ui@default:default"/>
-<booleanAttribute key="tracing" value="false"/>
-<booleanAttribute key="useCustomFeatures" value="false"/>
-<booleanAttribute key="useDefaultConfigArea" value="false"/>
-<stringAttribute key="workspace_bundles" value="org.eclipse.rap.rwt.visualization.jit.demo@default:default,org.eclipse.rap.rwt.visualization.jit@default:default"/>
-</launchConfiguration>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.rap.ui.launch.RAPLauncher">
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="false"/>
+<stringAttribute key="configLocation" value="${system_property:java.io.tmpdir}/org.eclipse.rap.rwt.visualization.jit.demo"/>
+<booleanAttribute key="default" value="true"/>
+<booleanAttribute key="default_auto_start" value="true"/>
+<intAttribute key="default_start_level" value="4"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6.0_27"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console -consolelog"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true&#13;&#10;-Dorg.eclipse.equinox.http.jetty.customizer.class=org.eclipse.rap.jettycustomizer.internal.SessionCookieCustomizer"/>
+<stringAttribute key="org.eclipse.rap.launch.browserMode" value="INTERNAL"/>
+<stringAttribute key="org.eclipse.rap.launch.contextpath" value=""/>
+<stringAttribute key="org.eclipse.rap.launch.dataLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.rap.ui.launch/RAPJavascriptInfoVisToolkitDemo"/>
+<stringAttribute key="org.eclipse.rap.launch.entryPoint" value=""/>
+<stringAttribute key="org.eclipse.rap.launch.libraryVariant" value="DEBUG"/>
+<stringAttribute key="org.eclipse.rap.launch.logLevel" value="ALL"/>
+<booleanAttribute key="org.eclipse.rap.launch.openBrowser" value="true"/>
+<intAttribute key="org.eclipse.rap.launch.port" value="9090"/>
+<stringAttribute key="org.eclipse.rap.launch.servletName" value="jit"/>
+<intAttribute key="org.eclipse.rap.launch.sessionTimeout" value="0"/>
+<booleanAttribute key="org.eclipse.rap.launch.terminatePrevious" value="true"/>
+<booleanAttribute key="org.eclipse.rap.launch.useDefaultDataLocation" value="true"/>
+<booleanAttribute key="org.eclipse.rap.launch.useManualContextPath" value="false"/>
+<booleanAttribute key="org.eclipse.rap.launch.useManualPort" value="false"/>
+<booleanAttribute key="org.eclipse.rap.launch.useSessionTimeout" value="false"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="target_bundles" value="com.ibm.icu.base@default:default,javax.servlet@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.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime@default:true,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.servletbridge.extensionbundle@default:false,org.eclipse.help@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.hamcrest.core@default:default"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<stringAttribute key="workspace_bundles" value="org.eclipse.rap.jettycustomizer@default:false,org.eclipse.rap.jface.databinding@default:default,org.eclipse.rap.jface@default:default,org.eclipse.rap.rwt.osgi@default:default,org.eclipse.rap.rwt.visualization.jit.demo@default:default,org.eclipse.rap.rwt.visualization.jit@default:default,org.eclipse.rap.rwt@default:default,org.eclipse.rap.ui.views@default:default,org.eclipse.rap.ui.workbench@default:default,org.eclipse.rap.ui@default:default"/>
+</launchConfiguration>
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit.demo/plugin.xml b/bundles/org.eclipse.rap.rwt.visualization.jit.demo/plugin.xml
index d5c3a83..7c36ad0 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit.demo/plugin.xml
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit.demo/plugin.xml
@@ -6,8 +6,8 @@
          point="org.eclipse.rap.ui.entrypoint">
       <entrypoint
             class="org.eclipse.rap.rwt.visualization.jit.demo.Application"
-            parameter="jit"
-            id="visualization.jit.Application">
+            id="visualization.jit.Application"
+            path="/jit">
       </entrypoint>
    </extension>
    <extension
@@ -15,7 +15,6 @@
       <branding
             defaultEntrypointId="visualization.jit.Application"
             id="visualization.jit.branding"
-            servletName="visualization"
             title="JIT Visualizations Demo">
       </branding>
    </extension>
@@ -53,6 +52,18 @@
             name="Space Tree"
             restorable="true">
       </view>
+       <view
+             class="org.eclipse.rap.rwt.visualization.jit.demo.Application$BarChartExample"
+             id="org.eclipse.rap.rwt.visualization.jit.demo.Application$BarChartExample"
+             name="Bar Chart"
+             restorable="true">
+       </view>
+       <view
+             class="org.eclipse.rap.rwt.visualization.jit.demo.Application$AreaChartExample"
+             id="org.eclipse.rap.rwt.visualization.jit.demo.Application$AreaChartExample"
+             name="Area Chart"
+             restorable="true">
+       </view>
    </extension>
    <extension
          point="org.eclipse.ui.perspectiveExtensions">
@@ -102,6 +113,28 @@
                showTitle="true"
                visible="true">
          </view>
+         <view
+               closeable="true"
+               id="org.eclipse.rap.rwt.visualization.jit.demo.Application$BarChartExample"
+               minimized="false"
+               moveable="true"
+               ratio="0.5"
+               relationship="stack"
+               relative="org.eclipse.rap.rwt.visualization.jit.demo.Application$SpaceTreeExample"
+               showTitle="true"
+               visible="true">
+         </view>
+         <view
+               closeable="true"
+               id="org.eclipse.rap.rwt.visualization.jit.demo.Application$AreaChartExample"
+               minimized="false"
+               moveable="true"
+               ratio="0.5"
+               relationship="stack"
+               relative="org.eclipse.rap.rwt.visualization.jit.demo.Application$BarChartExample"
+               showTitle="true"
+               visible="true">
+         </view>
       </perspectiveExtension>
    </extension>
 </plugin>
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit.demo/samples/areachart.json b/bundles/org.eclipse.rap.rwt.visualization.jit.demo/samples/areachart.json
new file mode 100644
index 0000000..67003b1
--- /dev/null
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit.demo/samples/areachart.json
@@ -0,0 +1,29 @@
+{  
+    'label': ['label A', 'label B', 'label C', 'label D'],  
+    'values': [  
+    {  
+      'label': 'date A',  
+      'values': [20, 40, 15, 5]  
+    },   
+    {  
+      'label': 'date B',  
+      'values': [30, 10, 45, 10]  
+    },   
+    {  
+      'label': 'date E',  
+      'values': [38, 20, 35, 17]  
+    },   
+    {  
+      'label': 'date F',  
+      'values': [58, 10, 35, 32]  
+    },   
+    {  
+      'label': 'date D',  
+      'values': [55, 60, 34, 38]  
+    },   
+    {  
+      'label': 'date C',  
+      'values': [26, 40, 25, 40]  
+    }]  
+      
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit.demo/samples/barchart.json b/bundles/org.eclipse.rap.rwt.visualization.jit.demo/samples/barchart.json
new file mode 100644
index 0000000..67003b1
--- /dev/null
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit.demo/samples/barchart.json
@@ -0,0 +1,29 @@
+{  
+    'label': ['label A', 'label B', 'label C', 'label D'],  
+    'values': [  
+    {  
+      'label': 'date A',  
+      'values': [20, 40, 15, 5]  
+    },   
+    {  
+      'label': 'date B',  
+      'values': [30, 10, 45, 10]  
+    },   
+    {  
+      'label': 'date E',  
+      'values': [38, 20, 35, 17]  
+    },   
+    {  
+      'label': 'date F',  
+      'values': [58, 10, 35, 32]  
+    },   
+    {  
+      'label': 'date D',  
+      'values': [55, 60, 34, 38]  
+    },   
+    {  
+      'label': 'date C',  
+      'values': [26, 40, 25, 40]  
+    }]  
+      
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit.demo/samples/treemap.json b/bundles/org.eclipse.rap.rwt.visualization.jit.demo/samples/treemap.json
index 90196d7..df577a1 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit.demo/samples/treemap.json
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit.demo/samples/treemap.json
@@ -1,530 +1,857 @@
 { 
-  "children" : [ { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "80",
-                  "$color" : "30",
-                  "image" : "http://images.amazon.com/images/P/B0007DAZW8.01.MZZZZZZZ.jpg"
-                },
-              "id" : "056e4f3e-d505-4dad-8ec1-d04f521cbb56Human After All",
-              "name" : "Human After All"
-            } ],
-        "data" : { "$area" : 80 },
-        "id" : "056e4f3e-d505-4dad-8ec1-d04f521cbb56a",
-        "name" : "Daft Punk"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "94",
-                  "$color" : "23",
-                  "image" : "http://cdn.last.fm/coverart/130x130/2393956.jpg"
-                },
-              "id" : "f2fa5cf6-e0b0-4559-8641-e033f1a9e6fcClearing the Channel",
-              "name" : "Clearing the Channel"
-            } ],
-        "data" : { "$area" : 94 },
-        "id" : "f2fa5cf6-e0b0-4559-8641-e033f1a9e6fca",
-        "name" : "Sinch"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "211",
-                  "$color" : "2",
-                  "image" : "http://cdn.last.fm/coverart/130x130/2564320-1193176651.jpg"
-                },
-              "id" : "4bd95eea-b9f6-4d70-a36c-cfea77431553Music Bank",
-              "name" : "Music Bank"
-            } ],
-        "data" : { "$area" : 211 },
-        "id" : "4bd95eea-b9f6-4d70-a36c-cfea77431553a",
-        "name" : "Alice in Chains"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "153",
-                  "$color" : "6",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/8590493.jpg"
-                },
-              "id" : "8bfac288-ccc5-448d-9573-c33ea2aa5c30One Hot Minute",
-              "name" : "One Hot Minute"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "69",
-                  "$color" : "35",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/8593509.jpg"
-                },
-              "id" : "8bfac288-ccc5-448d-9573-c33ea2aa5c30Californication",
-              "name" : "Californication"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "69",
-                  "$color" : "35",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/8672727.jpg"
-                },
-              "id" : "8bfac288-ccc5-448d-9573-c33ea2aa5c30Greatest Hits",
-              "name" : "Greatest Hits"
-            }
-          ],
-        "data" : { "$area" : 291 },
-        "id" : "8bfac288-ccc5-448d-9573-c33ea2aa5c30a",
-        "name" : "Red Hot Chili Peppers"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "114",
-                  "$color" : "15",
-                  "image" : "http://images.amazon.com/images/P/B0000UX5IY.01._SCMZZZZZZZ_.jpg"
-                },
-              "id" : "ff6e677f-91dd-4986-a174-8db0474b1799Thicker Than Water",
-              "name" : "Thicker Than Water"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "83",
-                  "$color" : "28",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/8599099.jpg"
-                },
-              "id" : "ff6e677f-91dd-4986-a174-8db0474b1799On and On",
-              "name" : "On and On"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "62",
-                  "$color" : "41",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/8664981.jpg"
-                },
-              "id" : "ff6e677f-91dd-4986-a174-8db0474b1799Brushfire Fairytales",
-              "name" : "Brushfire Fairytales"
-            }
-          ],
-        "data" : { "$area" : 259 },
-        "id" : "ff6e677f-91dd-4986-a174-8db0474b1799a",
-        "name" : "Jack Johnson"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "65",
-                  "$color" : "38",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/23727633.jpg"
-                },
-              "id" : "83b9cbe7-9857-49e2-ab8e-b57b01038103Vs.",
-              "name" : "Vs."
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "61",
-                  "$color" : "44",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/19611679.jpg"
-                },
-              "id" : "83b9cbe7-9857-49e2-ab8e-b57b01038103Riot Act",
-              "name" : "Riot Act"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "61",
-                  "$color" : "44",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/17492447.jpg"
-                },
-              "id" : "83b9cbe7-9857-49e2-ab8e-b57b01038103Yield",
-              "name" : "Yield"
-            }
-          ],
-        "data" : { "$area" : 187 },
-        "id" : "83b9cbe7-9857-49e2-ab8e-b57b01038103a",
-        "name" : "Pearl Jam"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "115",
-                  "$color" : "14",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/17484209.jpg"
-                },
-              "id" : "bfd085b8-0bbf-46b3-8ab9-193bca5c85e7Above",
-              "name" : "Above"
-            } ],
-        "data" : { "$area" : 115 },
-        "id" : "bfd085b8-0bbf-46b3-8ab9-193bca5c85e7a",
-        "name" : "Mad Season"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "108",
-                  "$color" : "17",
-                  "image" : "http://images.amazon.com/images/P/B000002J8M.01._SCMZZZZZZZ_.jpg"
-                },
-              "id" : "8c32bb01-58a3-453b-8050-8c0620edb0e5Tiny Music... Songs From the Vatican Gift Shop",
-              "name" : "Tiny Music... Songs From the Vatican Gift Shop"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "60",
-                  "$color" : "46",
-                  "image" : "http://images.amazon.com/images/P/B000002IU3.01.MZZZZZZZ.jpg"
-                },
-              "id" : "8c32bb01-58a3-453b-8050-8c0620edb0e5Core",
-              "name" : "Core"
-            }
-          ],
-        "data" : { "$area" : 168 },
-        "id" : "8c32bb01-58a3-453b-8050-8c0620edb0e5a",
-        "name" : "Stone Temple Pilots"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "63",
-                  "$color" : "40",
-                  "image" : "http://images.amazon.com/images/P/B00005NWLC.01.MZZZZZZZ.jpg"
-                },
-              "id" : "7b2f87f6-db90-464e-a27a-deb4f7219e90Leitmotif",
-              "name" : "Leitmotif"
-            } ],
-        "data" : { "$area" : 63 },
-        "id" : "7b2f87f6-db90-464e-a27a-deb4f7219e90a",
-        "name" : "dredg"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "188",
-                  "$color" : "3",
-                  "image" : "http://images.amazon.com/images/P/B000EULJLU.01._SCMZZZZZZZ_.jpg"
-                },
-              "id" : "66fc5bf8-daa4-4241-b378-9bc9077939d210,000 Days",
-              "name" : "10,000 Days"
-            } ],
-        "data" : { "$area" : 188 },
-        "id" : "66fc5bf8-daa4-4241-b378-9bc9077939d2a",
-        "name" : "Tool"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "62",
-                  "$color" : "41",
-                  "image" : "http://images.amazon.com/images/P/B00001P4TH.01._SCMZZZZZZZ_.jpg"
-                },
-              "id" : "b7ffd2af-418f-4be2-bdd1-22f8b48613daThe Fragile (Left)",
-              "name" : "The Fragile (Left)"
-            } ],
-        "data" : { "$area" : 62 },
-        "id" : "b7ffd2af-418f-4be2-bdd1-22f8b48613daa",
-        "name" : "Nine Inch Nails"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "240",
-                  "$color" : "1",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/21881921.jpg"
-                },
-              "id" : "a5585acd-9b65-49a7-a63b-3cc4ee18846eMother Love Bone",
-              "name" : "Mother Love Bone"
-            } ],
-        "data" : { "$area" : 240 },
-        "id" : "a5585acd-9b65-49a7-a63b-3cc4ee18846ea",
-        "name" : "Mother Love Bone"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "67",
-                  "$color" : "37",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/8634595.jpg"
-                },
-              "id" : "7527f6c2-d762-4b88-b5e2-9244f1e34c46Around the Fur",
-              "name" : "Around the Fur"
-            } ],
-        "data" : { "$area" : 67 },
-        "id" : "7527f6c2-d762-4b88-b5e2-9244f1e34c46a",
-        "name" : "Deftones"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "62",
-                  "$color" : "41",
-                  "image" : "http://images.amazon.com/images/P/B0000A5BYD.03.MZZZZZZZ.jpg"
-                },
-              "id" : "7bdb6921-8380-422c-8514-87cf30d5d8ccIt All Makes Sense Now",
-              "name" : "It All Makes Sense Now"
-            } ],
-        "data" : { "$area" : 62 },
-        "id" : "7bdb6921-8380-422c-8514-87cf30d5d8cca",
-        "name" : "Kr�m"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "57",
-                  "$color" : "48",
-                  "image" : "http://images-eu.amazon.com/images/P/B00005IABM.02.MZZZZZZZ.jpg"
-                },
-              "id" : "cb67438a-7f50-4f2b-a6f1-2bb2729fd53810,000 Hz Legend",
-              "name" : "10,000 Hz Legend"
-            } ],
-        "data" : { "$area" : 57 },
-        "id" : "cb67438a-7f50-4f2b-a6f1-2bb2729fd538a",
-        "name" : "Air"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "168",
-                  "$color" : "5",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/23091681.jpg"
-                },
-              "id" : "c5998351-be49-49d8-8593-3e96f129c1fcMamagubida",
-              "name" : "Mamagubida"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "141",
-                  "$color" : "7",
-                  "image" : "http://cdn.last.fm/flatness/catalogue/noimage/2/default_album_mega.png"
-                },
-              "id" : "c5998351-be49-49d8-8593-3e96f129c1fcReggae � Coup de Cirque",
-              "name" : "Reggae � Coup de Cirque"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "135",
-                  "$color" : "8",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/16799743.jpg"
-                },
-              "id" : "c5998351-be49-49d8-8593-3e96f129c1fcGrain de sable",
-              "name" : "Grain de sable"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "80",
-                  "$color" : "30",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/8635653.jpg"
-                },
-              "id" : "c5998351-be49-49d8-8593-3e96f129c1fcFaut qu'ils s'activent...",
-              "name" : "Faut qu'ils s'activent..."
-            }
-          ],
-        "data" : { "$area" : 524 },
-        "id" : "c5998351-be49-49d8-8593-3e96f129c1fca",
-        "name" : "Tryo"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "57",
-                  "$color" : "48",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/8634627.jpg"
-                },
-              "id" : "4bb4e4e4-5f66-4509-98af-62dbb90c45c5The Sickness",
-              "name" : "The Sickness"
-            } ],
-        "data" : { "$area" : 57 },
-        "id" : "4bb4e4e4-5f66-4509-98af-62dbb90c45c5a",
-        "name" : "Disturbed"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "72",
-                  "$color" : "34",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/8673813.jpg"
-                },
-              "id" : "95f5b748-d370-47fe-85bd-0af2dc450bc0Second-Hand Smoke",
-              "name" : "Second-Hand Smoke"
-            } ],
-        "data" : { "$area" : 72 },
-        "id" : "95f5b748-d370-47fe-85bd-0af2dc450bc0a",
-        "name" : "Sublime"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "73",
-                  "$color" : "33",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/7737695.jpg"
-                },
-              "id" : "020bfbb4-05c3-4c86-b372-17825c262094Audioslave",
-              "name" : "Audioslave"
-            } ],
-        "data" : { "$area" : 73 },
-        "id" : "020bfbb4-05c3-4c86-b372-17825c262094a",
-        "name" : "Audioslave"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "124",
-                  "$color" : "10",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/8605651.jpg"
-                },
-              "id" : "e9571c17-817f-4d34-ae3f-0c7a96f822c1Temple of the Dog",
-              "name" : "Temple of the Dog"
-            } ],
-        "data" : { "$area" : 124 },
-        "id" : "e9571c17-817f-4d34-ae3f-0c7a96f822c1a",
-        "name" : "Temple of the Dog"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "82",
-                  "$color" : "29",
-                  "image" : "http://images.amazon.com/images/P/B0002ZEUKO.01._SCMZZZZZZZ_.jpg"
-                },
-              "id" : "06fb1c8b-566e-4cb2-985b-b467c90781d4Are You Experienced?",
-              "name" : "Are You Experienced?"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "64",
-                  "$color" : "39",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/8729219.jpg"
-                },
-              "id" : "06fb1c8b-566e-4cb2-985b-b467c90781d4First Rays of the New Rising Sun",
-              "name" : "First Rays of the New Rising Sun"
-            }
-          ],
-        "data" : { "$area" : 146 },
-        "id" : "06fb1c8b-566e-4cb2-985b-b467c90781d4a",
-        "name" : "Jimi Hendrix"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "56",
-                  "$color" : "50",
-                  "image" : "http://images.amazon.com/images/P/B0000DZDYN.01.MZZZZZZZ.jpg"
-                },
-              "id" : "fbd2a255-1d57-4d31-ac11-65b671c19958The Singles 1992-2003",
-              "name" : "The Singles 1992-2003"
-            } ],
-        "data" : { "$area" : 56 },
-        "id" : "fbd2a255-1d57-4d31-ac11-65b671c19958a",
-        "name" : "No Doubt"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "123",
-                  "$color" : "11",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/11393921.jpg"
-                },
-              "id" : "078a9376-3c04-4280-b7d7-b20e158f345dMer de Noms",
-              "name" : "Mer de Noms"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "93",
-                  "$color" : "24",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/11403219.jpg"
-                },
-              "id" : "078a9376-3c04-4280-b7d7-b20e158f345dThirteenth Step",
-              "name" : "Thirteenth Step"
-            }
-          ],
-        "data" : { "$area" : 216 },
-        "id" : "078a9376-3c04-4280-b7d7-b20e158f345da",
-        "name" : "A Perfect Circle"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "109",
-                  "$color" : "16",
-                  "image" : "http://images.amazon.com/images/P/B00005LNP5.01._SCMZZZZZZZ_.jpg"
-                },
-              "id" : "1fc56cff-f0a0-4ce2-ab1f-ac49cf3b073fElija y Gane",
-              "name" : "Elija y Gane"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "85",
-                  "$color" : "26",
-                  "image" : "http://images.amazon.com/images/P/B0000B193V.01._SCMZZZZZZZ_.jpg"
-                },
-              "id" : "1fc56cff-f0a0-4ce2-ab1f-ac49cf3b073fPara los Arboles",
-              "name" : "Para los Arboles"
-            }
-          ],
-        "data" : { "$area" : 194 },
-        "id" : "1fc56cff-f0a0-4ce2-ab1f-ac49cf3b073fa",
-        "name" : "Luis Alberto Spinetta"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "87",
-                  "$color" : "25",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/8772827.jpg"
-                },
-              "id" : "e795e03d-b5d5-4a5f-834d-162cfb308a2c4-Track Demos",
-              "name" : "4-Track Demos"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "77",
-                  "$color" : "32",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/9929071.jpg"
-                },
-              "id" : "e795e03d-b5d5-4a5f-834d-162cfb308a2cRid of Me",
-              "name" : "Rid of Me"
-            }
-          ],
-        "data" : { "$area" : 164 },
-        "id" : "e795e03d-b5d5-4a5f-834d-162cfb308a2ca",
-        "name" : "PJ Harvey"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "102",
-                  "$color" : "19",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/7410551.jpg"
-                },
-              "id" : "e3e0abcd-7671-4482-a9d8-462f5acc9be5Make Yourself",
-              "name" : "Make Yourself"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "84",
-                  "$color" : "27",
-                  "image" : "http://images.amazon.com/images/P/B00018D5CQ.01._SCMZZZZZZZ_.jpg"
-                },
-              "id" : "e3e0abcd-7671-4482-a9d8-462f5acc9be5A Crow Left of the Murder",
-              "name" : "A Crow Left of the Murder"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "60",
-                  "$color" : "46",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/19681051.jpg"
-                },
-              "id" : "e3e0abcd-7671-4482-a9d8-462f5acc9be5Morning View",
-              "name" : "Morning View"
-            }
-          ],
-        "data" : { "$area" : 246 },
-        "id" : "e3e0abcd-7671-4482-a9d8-462f5acc9be5a",
-        "name" : "Incubus"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "130",
-                  "$color" : "9",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/15113951.jpg"
-                },
-              "id" : "38c5cdab-5d6d-43d1-85b0-dac41bde186eNico",
-              "name" : "Nico"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "120",
-                  "$color" : "12",
-                  "image" : "http://images.amazon.com/images/P/B00005V5PW.01.MZZZZZZZ.jpg"
-                },
-              "id" : "38c5cdab-5d6d-43d1-85b0-dac41bde186eClassic Masters",
-              "name" : "Classic Masters"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "103",
-                  "$color" : "18",
-                  "image" : "http://images.amazon.com/images/P/B000002TPF.01.MZZZZZZZ.jpg"
-                },
-              "id" : "38c5cdab-5d6d-43d1-85b0-dac41bde186eSoup",
-              "name" : "Soup"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "99",
-                  "$color" : "20",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/15157989.jpg"
-                },
-              "id" : "38c5cdab-5d6d-43d1-85b0-dac41bde186eBlind Melon",
-              "name" : "Blind Melon"
-            }
-          ],
-        "data" : { "$area" : 452 },
-        "id" : "38c5cdab-5d6d-43d1-85b0-dac41bde186ea",
-        "name" : "Blind Melon"
-      },
-      { "children" : [ { "children" : [  ],
-              "data" : { "$area" : "173",
-                  "$color" : "4",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/8590515.jpg"
-                },
-              "id" : "153c9281-268f-4cf3-8938-f5a4593e5df4Superunknown",
-              "name" : "Superunknown"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "117",
-                  "$color" : "13",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/5269310.jpg"
-                },
-              "id" : "153c9281-268f-4cf3-8938-f5a4593e5df4Louder Than Love",
-              "name" : "Louder Than Love"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "96",
-                  "$color" : "21",
-                  "image" : "http://userserve-ak.last.fm/serve/174s/8600371.jpg"
-                },
-              "id" : "153c9281-268f-4cf3-8938-f5a4593e5df4Down on the Upside",
-              "name" : "Down on the Upside"
-            },
-            { "children" : [  ],
-              "data" : { "$area" : "95",
-                  "$color" : "22",
-                  "image" : "http://images.amazon.com/images/P/B000000M4A.01.MZZZZZZZ.jpg"
-                },
-              "id" : "153c9281-268f-4cf3-8938-f5a4593e5df4Ultramega OK",
-              "name" : "Ultramega OK"
-            }
-          ],
-        "data" : { "$area" : 481 },
-        "id" : "153c9281-268f-4cf3-8938-f5a4593e5df4a",
-        "name" : "Soundgarden"
-      }
-    ],
-  "data" : { "$area" : 4949 },
-  "id" : "topAlbums",
-  "name" : "top albums"
+"children": [
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "276", 
+             "$color": "#8E7032", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/11403219.jpg", 
+             "$area": 276
+           }, 
+           "id": "album-Thirteenth Step", 
+           "name": "Thirteenth Step"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "271", 
+             "$color": "#906E32", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/11393921.jpg", 
+             "$area": 271
+           }, 
+           "id": "album-Mer De Noms", 
+           "name": "Mer De Noms"
+         }
+       ], 
+       "data": {
+         "playcount": 547, 
+         "$area": 547
+       }, 
+       "id": "artist_A Perfect Circle", 
+       "name": "A Perfect Circle"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "209", 
+             "$color": "#AA5532", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/32349839.jpg", 
+             "$area": 209
+           }, 
+           "id": "album-Above", 
+           "name": "Above"
+         }
+       ], 
+       "data": {
+         "playcount": 209, 
+         "$area": 209
+       }, 
+       "id": "artist_Mad Season", 
+       "name": "Mad Season"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "260", 
+             "$color": "#956932", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/38753425.jpg", 
+             "$area": 260
+           }, 
+           "id": "album-Tiny Music... Songs From the Vatican Gift Shop", 
+           "name": "Tiny Music... Songs From the Vatican Gift Shop"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "254", 
+             "$color": "#976732", 
+             "image": "http://images.amazon.com/images/P/B000002IU3.01.LZZZZZZZ.jpg", 
+             "$area": 254
+           }, 
+           "id": "album-Core", 
+           "name": "Core"
+         }
+       ], 
+       "data": {
+         "playcount": 514, 
+         "$area": 514
+       }, 
+       "id": "artist_Stone Temple Pilots", 
+       "name": "Stone Temple Pilots"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "181", 
+             "$color": "#B54932", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/8673371.jpg", 
+             "$area": 181
+           }, 
+           "id": "album-The Science of Things", 
+           "name": "The Science of Things"
+         }
+       ], 
+       "data": {
+         "playcount": 181, 
+         "$area": 181
+       }, 
+       "id": "artist_Bush", 
+       "name": "Bush"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "229", 
+             "$color": "#A15D32", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/32579429.jpg", 
+             "$area": 229
+           }, 
+           "id": "album-Echoes, Silence, Patience &amp; Grace", 
+           "name": "Echoes, Silence, Patience &amp; Grace"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "185", 
+             "$color": "#B34B32", 
+             "image": "http://images.amazon.com/images/P/B0009HLDFU.01.MZZZZZZZ.jpg", 
+             "$area": 185
+           }, 
+           "id": "album-In Your Honor (disc 2)", 
+           "name": "In Your Honor (disc 2)"
+         }
+       ], 
+       "data": {
+         "playcount": 414, 
+         "$area": 414
+       }, 
+       "id": "artist_Foo Fighters", 
+       "name": "Foo Fighters"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "398", 
+             "$color": "#5DA132", 
+             "image": "http://images.amazon.com/images/P/B00005LNP5.01._SCMZZZZZZZ_.jpg", 
+             "$area": 398
+           }, 
+           "id": "album-Elija Y Gane", 
+           "name": "Elija Y Gane"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "203", 
+             "$color": "#AC5232", 
+             "image": "http://images.amazon.com/images/P/B0000B193V.01._SCMZZZZZZZ_.jpg", 
+             "$area": 203
+           }, 
+           "id": "album-Para los Arboles", 
+           "name": "Para los Arboles"
+         }
+       ], 
+       "data": {
+         "playcount": 601, 
+         "$area": 601
+       }, 
+       "id": "artist_Luis Alberto Spinetta", 
+       "name": "Luis Alberto Spinetta"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "224", 
+             "$color": "#A35B32", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/26497553.jpg", 
+             "$area": 224
+           }, 
+           "id": "album-Music Bank", 
+           "name": "Music Bank"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "217", 
+             "$color": "#A65832", 
+             "image": "http://images.amazon.com/images/P/B0000296JW.01.MZZZZZZZ.jpg", 
+             "$area": 217
+           }, 
+           "id": "album-Music Bank (disc 1)", 
+           "name": "Music Bank (disc 1)"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "215", 
+             "$color": "#A75732", 
+             "image": "http://images.amazon.com/images/P/B0000296JW.01.MZZZZZZZ.jpg", 
+             "$area": 215
+           }, 
+           "id": "album-Music Bank (disc 2)", 
+           "name": "Music Bank (disc 2)"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "181", 
+             "$color": "#B54932", 
+             "image": "http://images.amazon.com/images/P/B0000296JW.01.MZZZZZZZ.jpg", 
+             "$area": 181
+           }, 
+           "id": "album-Music Bank (disc 3)", 
+           "name": "Music Bank (disc 3)"
+         }
+       ], 
+       "data": {
+         "playcount": 837, 
+         "$area": 837
+       }, 
+       "id": "artist_Alice in Chains", 
+       "name": "Alice in Chains"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "627", 
+             "$color": "#00FF32", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/8480501.jpg", 
+             "$area": 627
+           }, 
+           "id": "album-10,000 Days", 
+           "name": "10,000 Days"
+         }
+       ], 
+       "data": {
+         "playcount": 627, 
+         "$area": 627
+       }, 
+       "id": "artist_Tool", 
+       "name": "Tool"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "261", 
+             "$color": "#946A32", 
+             "image": "http://cdn.last.fm/flatness/catalogue/noimage/2/default_album_medium.png", 
+             "$area": 261
+           }, 
+           "id": "album-2006-09-07: O-Bar, Stockholm, Sweden", 
+           "name": "2006-09-07: O-Bar, Stockholm, Sweden"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "211", 
+             "$color": "#A95532", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/25402479.jpg", 
+             "$area": 211
+           }, 
+           "id": "album-Lost and Found", 
+           "name": "Lost and Found"
+         }
+       ], 
+       "data": {
+         "playcount": 472, 
+         "$area": 472
+       }, 
+       "id": "artist_Chris Cornell", 
+       "name": "Chris Cornell"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "197", 
+             "$color": "#AE5032", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/8634627.jpg", 
+             "$area": 197
+           }, 
+           "id": "album-The Sickness", 
+           "name": "The Sickness"
+         }
+       ], 
+       "data": {
+         "playcount": 197, 
+         "$area": 197
+       }, 
+       "id": "artist_Disturbed", 
+       "name": "Disturbed"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "493", 
+             "$color": "#36C832", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/8591345.jpg", 
+             "$area": 493
+           }, 
+           "id": "album-Mama's Gun", 
+           "name": "Mama's Gun"
+         }
+       ], 
+       "data": {
+         "playcount": 493, 
+         "$area": 493
+       }, 
+       "id": "artist_Erykah Badu", 
+       "name": "Erykah Badu"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "249", 
+             "$color": "#996532", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/32070871.jpg", 
+             "$area": 249
+           }, 
+           "id": "album-Audioslave", 
+           "name": "Audioslave"
+         }
+       ], 
+       "data": {
+         "playcount": 249, 
+         "$area": 249
+       }, 
+       "id": "artist_Audioslave", 
+       "name": "Audioslave"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "359", 
+             "$color": "#6C9232", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/15858421.jpg", 
+             "$area": 359
+           }, 
+           "id": "album-Comfort y M\u00fasica Para Volar", 
+           "name": "Comfort y M\u00fasica Para Volar"
+         }
+       ], 
+       "data": {
+         "playcount": 359, 
+         "$area": 359
+       }, 
+       "id": "artist_Soda Stereo", 
+       "name": "Soda Stereo"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "302", 
+             "$color": "#847A32", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/8776205.jpg", 
+             "$area": 302
+           }, 
+           "id": "album-Clearing the Channel", 
+           "name": "Clearing the Channel"
+         }
+       ], 
+       "data": {
+         "playcount": 302, 
+         "$area": 302
+       }, 
+       "id": "artist_Sinch", 
+       "name": "Sinch"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "177", 
+             "$color": "#B74732", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/32457599.jpg", 
+             "$area": 177
+           }, 
+           "id": "album-Crash", 
+           "name": "Crash"
+         }
+       ], 
+       "data": {
+         "playcount": 177, 
+         "$area": 177
+       }, 
+       "id": "artist_Dave Matthews Band", 
+       "name": "Dave Matthews Band"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "207", 
+             "$color": "#AA5432", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/30352203.jpg", 
+             "$area": 207
+           }, 
+           "id": "album-Vs.", 
+           "name": "Vs."
+         }
+       ], 
+       "data": {
+         "playcount": 207, 
+         "$area": 207
+       }, 
+       "id": "artist_Pearl Jam", 
+       "name": "Pearl Jam"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "486", 
+             "$color": "#39C532", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/26053425.jpg", 
+             "$area": 486
+           }, 
+           "id": "album-It All Makes Sense Now", 
+           "name": "It All Makes Sense Now"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "251", 
+             "$color": "#986632", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/9658733.jpg", 
+             "$area": 251
+           }, 
+           "id": "album-Air", 
+           "name": "Air"
+         }
+       ], 
+       "data": {
+         "playcount": 737, 
+         "$area": 737
+       }, 
+       "id": "artist_Kr\u00f8m", 
+       "name": "Kr\u00f8m"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "345", 
+             "$color": "#728C32", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/8605651.jpg", 
+             "$area": 345
+           }, 
+           "id": "album-Temple Of The Dog", 
+           "name": "Temple Of The Dog"
+         }
+       ], 
+       "data": {
+         "playcount": 345, 
+         "$area": 345
+       }, 
+       "id": "artist_Temple of the Dog", 
+       "name": "Temple of the Dog"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "318", 
+             "$color": "#7D8132", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/29274729.jpg", 
+             "$area": 318
+           }, 
+           "id": "album-And All That Could Have Been (Still)", 
+           "name": "And All That Could Have Been (Still)"
+         }
+       ], 
+       "data": {
+         "playcount": 318, 
+         "$area": 318
+       }, 
+       "id": "artist_Nine Inch Nails", 
+       "name": "Nine Inch Nails"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "256", 
+             "$color": "#966832", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/32595059.jpg", 
+             "$area": 256
+           }, 
+           "id": "album-Mamagubida", 
+           "name": "Mamagubida"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "220", 
+             "$color": "#A55932", 
+             "image": "http://cdn.last.fm/flatness/catalogue/noimage/2/default_album_medium.png", 
+             "$area": 220
+           }, 
+           "id": "album-Reggae \u00e0 Coup de Cirque", 
+           "name": "Reggae \u00e0 Coup de Cirque"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "181", 
+             "$color": "#B54932", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/16799743.jpg", 
+             "$area": 181
+           }, 
+           "id": "album-Grain de sable", 
+           "name": "Grain de sable"
+         }
+       ], 
+       "data": {
+         "playcount": 657, 
+         "$area": 657
+       }, 
+       "id": "artist_Tryo", 
+       "name": "Tryo"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "258", 
+             "$color": "#966832", 
+             "image": "http://cdn.last.fm/flatness/catalogue/noimage/2/default_album_medium.png", 
+             "$area": 258
+           }, 
+           "id": "album-Best Of", 
+           "name": "Best Of"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "176", 
+             "$color": "#B74732", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/5264426.jpg", 
+             "$area": 176
+           }, 
+           "id": "album-Robbin' The Hood", 
+           "name": "Robbin' The Hood"
+         }
+       ], 
+       "data": {
+         "playcount": 434, 
+         "$area": 434
+       }, 
+       "id": "artist_Sublime", 
+       "name": "Sublime"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "418", 
+             "$color": "#55AA32", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/8590493.jpg", 
+             "$area": 418
+           }, 
+           "id": "album-One Hot Minute", 
+           "name": "One Hot Minute"
+         }
+       ], 
+       "data": {
+         "playcount": 418, 
+         "$area": 418
+       }, 
+       "id": "artist_Red Hot Chili Peppers", 
+       "name": "Red Hot Chili Peppers"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "275", 
+             "$color": "#8F6F32", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/17597653.jpg", 
+             "$area": 275
+           }, 
+           "id": "album-Chinese Democracy", 
+           "name": "Chinese Democracy"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "203", 
+             "$color": "#AC5232", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/15231979.jpg", 
+             "$area": 203
+           }, 
+           "id": "album-Use Your Illusion II", 
+           "name": "Use Your Illusion II"
+         }
+       ], 
+       "data": {
+         "playcount": 478, 
+         "$area": 478
+       }, 
+       "id": "artist_Guns N' Roses", 
+       "name": "Guns N' Roses"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "208", 
+             "$color": "#AA5432", 
+             "image": "http://images.amazon.com/images/P/B0007LCNNE.01.MZZZZZZZ.jpg", 
+             "$area": 208
+           }, 
+           "id": "album-Tales of the Forgotten Melodies", 
+           "name": "Tales of the Forgotten Melodies"
+         }
+       ], 
+       "data": {
+         "playcount": 208, 
+         "$area": 208
+       }, 
+       "id": "artist_Wax Tailor", 
+       "name": "Wax Tailor"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "208", 
+             "$color": "#AA5432", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/7862623.png", 
+             "$area": 208
+           }, 
+           "id": "album-In Rainbows", 
+           "name": "In Rainbows"
+         }
+       ], 
+       "data": {
+         "playcount": 208, 
+         "$area": 208
+       }, 
+       "id": "artist_Radiohead", 
+       "name": "Radiohead"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "317", 
+             "$color": "#7E8032", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/8600371.jpg", 
+             "$area": 317
+           }, 
+           "id": "album-Down On The Upside", 
+           "name": "Down On The Upside"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "290", 
+             "$color": "#897532", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/8590515.jpg", 
+             "$area": 290
+           }, 
+           "id": "album-Superunknown", 
+           "name": "Superunknown"
+         }
+       ], 
+       "data": {
+         "playcount": 607, 
+         "$area": 607
+       }, 
+       "id": "artist_Soundgarden", 
+       "name": "Soundgarden"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "247", 
+             "$color": "#9A6432", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/15113951.jpg", 
+             "$area": 247
+           }, 
+           "id": "album-Nico", 
+           "name": "Nico"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "218", 
+             "$color": "#A65832", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/45729417.jpg", 
+             "$area": 218
+           }, 
+           "id": "album-Soup", 
+           "name": "Soup"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "197", 
+             "$color": "#AE5032", 
+             "image": "http://images.amazon.com/images/P/B00005V5PW.01.MZZZZZZZ.jpg", 
+             "$area": 197
+           }, 
+           "id": "album-Classic Masters", 
+           "name": "Classic Masters"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "194", 
+             "$color": "#B04E32", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/15157989.jpg", 
+             "$area": 194
+           }, 
+           "id": "album-Blind Melon", 
+           "name": "Blind Melon"
+         }
+       ], 
+       "data": {
+         "playcount": 856, 
+         "$area": 856
+       }, 
+       "id": "artist_Blind Melon", 
+       "name": "Blind Melon"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "537", 
+             "$color": "#24DA32", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/17594883.jpg", 
+             "$area": 537
+           }, 
+           "id": "album-Make Yourself", 
+           "name": "Make Yourself"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "258", 
+             "$color": "#966832", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/31550385.jpg", 
+             "$area": 258
+           }, 
+           "id": "album-Light Grenades", 
+           "name": "Light Grenades"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "181", 
+             "$color": "#B54932", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/32309285.jpg", 
+             "$area": 181
+           }, 
+           "id": "album-Morning View", 
+           "name": "Morning View"
+         }
+       ], 
+       "data": {
+         "playcount": 976, 
+         "$area": 976
+       }, 
+       "id": "artist_Incubus", 
+       "name": "Incubus"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "198", 
+             "$color": "#AE5032", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/8599099.jpg", 
+             "$area": 198
+           }, 
+           "id": "album-On And On", 
+           "name": "On And On"
+         }, 
+         {
+           "children": [], 
+           "data": {
+             "playcount": "186", 
+             "$color": "#B34B32", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/30082075.jpg", 
+             "$area": 186
+           }, 
+           "id": "album-Brushfire Fairytales", 
+           "name": "Brushfire Fairytales"
+         }
+       ], 
+       "data": {
+         "playcount": 384, 
+         "$area": 384
+       }, 
+       "id": "artist_Jack Johnson", 
+       "name": "Jack Johnson"
+     }, 
+     {
+       "children": [
+         {
+           "children": [], 
+           "data": {
+             "playcount": "349", 
+             "$color": "#718D32", 
+             "image": "http://userserve-ak.last.fm/serve/300x300/21881921.jpg", 
+             "$area": 349
+           }, 
+           "id": "album-Mother Love Bone", 
+           "name": "Mother Love Bone"
+         }
+       ], 
+       "data": {
+         "playcount": 349, 
+         "$area": 349
+       }, 
+       "id": "artist_Mother Love Bone", 
+       "name": "Mother Love Bone"
+     }
+   ], 
+   "data": {}, 
+   "id": "root", 
+   "name": "Top Albums"
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit.demo/src/org/eclipse/rap/rwt/visualization/jit/demo/Application.java b/bundles/org.eclipse.rap.rwt.visualization.jit.demo/src/org/eclipse/rap/rwt/visualization/jit/demo/Application.java
index 79a649f..92a1136 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit.demo/src/org/eclipse/rap/rwt/visualization/jit/demo/Application.java
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit.demo/src/org/eclipse/rap/rwt/visualization/jit/demo/Application.java
@@ -1,282 +1,326 @@
-/******************************************************************************
- * Copyright (C) 2010-2011 Texas Center for Applied Technology
- * Texas Engineering Experiment Station
- * The Texas A&M University System
- * 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:
- *     Austin Riddle (Texas Center for Applied Technology) -
- *       initial API and implementation
- * 
- *****************************************************************************/
-package org.eclipse.rap.rwt.visualization.jit.demo;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.rap.rwt.lifecycle.IEntryPoint;
-import org.eclipse.rap.rwt.visualization.jit.HyperTree;
-import org.eclipse.rap.rwt.visualization.jit.JITVisualizationWidget;
-import org.eclipse.rap.rwt.visualization.jit.RGraph;
-import org.eclipse.rap.rwt.visualization.jit.SpaceTree;
-import org.eclipse.rap.rwt.visualization.jit.TreeMap;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.part.ViewPart;
-import org.osgi.framework.Bundle;
-
-/**
- * This class controls all aspects of the application's execution
- * and is contributed through the plugin.xml.
- */
-public class Application implements IEntryPoint {
-   
-  public static Listener createSelectionListener () {
-    return new Listener() 
-    {
-      
-      public void handleEvent(Event event) 
-      {
-        JITVisualizationWidget widget = (JITVisualizationWidget)event.widget;
-        System.out.println( "Selected node id = " + widget.getSelectedNodeId()); 
-      }
-      
-    };
-  }
-   
-   
-  public int createUI() 
-  {
-    Display display = PlatformUI.createDisplay();
-    PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
-    return 0;
-  }
-  
-  public static class HyperTreeExample extends ViewPart 
-  {
-    
-    private SashForm mainSash;
-    protected HyperTree topTree;
-    protected HyperTree bottomTree;
-    
-    public void createPartControl (Composite parent) 
-    {
-      mainSash = new SashForm(parent, SWT.VERTICAL);
-      Group group = new Group(mainSash,SWT.NONE);
-      group.setText("Default");
-      group.setLayout(new GridLayout(1,false));
-      Button backBtn = new Button(group, SWT.PUSH);
-      backBtn.setText("Previous State");
-      backBtn.addSelectionListener(new SelectionAdapter() {
-        public void widgetSelected(SelectionEvent e) {
-          topTree.previousState();
-        }
-      });
-      backBtn.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
-      topTree = new HyperTree(group, SWT.BORDER);
-      String sampleData = loadSampleData("samples/hypertree.json");
-      topTree.setJSONData(sampleData);
-      topTree.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
-      topTree.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
-      //  leave this hyper tree with default colors
-      topTree.addListener(SWT.Selection, createSelectionListener());
-      topTree.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-      
-      group = new Group(mainSash,SWT.NONE);
-      group.setText("Weighted");
-      group.setLayout(new GridLayout(1,false));
-      backBtn = new Button(group, SWT.PUSH);
-      backBtn.setText("Previous State");
-      backBtn.addSelectionListener(new SelectionAdapter() {
-        public void widgetSelected(SelectionEvent e) {
-          bottomTree.previousState();
-        }
-      });
-      backBtn.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
-      bottomTree = new HyperTree(group, SWT.BORDER);
-      sampleData = loadSampleData("samples/hypertree-weighted.json");
-      bottomTree.setJSONData(sampleData);
-      bottomTree.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
-      bottomTree.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
-      
-      //Demo change of node and edge colors
-      //JSON data can override colors.
-      bottomTree.setNodeColor(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE).getRGB());
-      bottomTree.setEdgeColor(new RGB(51,34,102)); //purple
-      bottomTree.addListener(SWT.Selection, createSelectionListener());
-      bottomTree.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-    }
-    
-    public void setFocus()
-    {
-      topTree.setFocus();
-    }
-    
-  }
-  
-  public static class TreeMapExample extends ViewPart 
-  {
-    
-    private SashForm oneSash;
-    private SashForm twoSash;
-    private TreeMap sqViz;
-    private TreeMap sliceViz;
-    private TreeMap stripViz;
-    private int seedId = 0;
-    
-    public void createPartControl (Composite parent) 
-    {
-      String sampleData = loadSampleData("samples/treemap.json");
-      oneSash = new SashForm(parent, SWT.VERTICAL);
-      twoSash = new SashForm(oneSash, SWT.HORIZONTAL);
-      
-      Group group = new Group(twoSash,SWT.NONE);
-      group.setText("Squarified");
-      group.setLayout(new FillLayout());
-      sqViz = new TreeMap(group, TreeMap.SQUARIFY, SWT.BORDER);
-      sqViz.setJSONData(makeUnique(sampleData));
-      sqViz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
-      sqViz.addListener(SWT.Selection, createSelectionListener());
-      
-      group = new Group(twoSash,SWT.NONE);
-      group.setText("Strip");
-      group.setLayout(new FillLayout());
-      stripViz = new TreeMap(group, TreeMap.STRIP, SWT.BORDER);
-      stripViz.setJSONData(makeUnique(sampleData));
-      stripViz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
-      stripViz.addListener(SWT.Selection, createSelectionListener());
-      
-      group = new Group(oneSash,SWT.NONE);
-      group.setText("Slice and Dice");
-      group.setLayout(new FillLayout());
-      sliceViz = new TreeMap(group, TreeMap.SLICE_AND_DICE, SWT.BORDER);
-      sliceViz.setJSONData(makeUnique(sampleData));
-      sliceViz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
-      sliceViz.addListener(SWT.Selection, createSelectionListener());
-    }
-    
-    public void setFocus()
-    {
-      oneSash.setFocus();
-    }
-    
-    /**
-     * Replaces all of the ids in the srcJSON with a unique set.
-     * Widgets cannot share datasets with the same ids.
-     * @param srcJSON
-     * @return the JSON string with unique ids substituted for all ids
-     */
-    public String makeUnique (String srcJSON) {
-      String[] split = srcJSON.split("\"id\" : .*,");
-      StringBuffer sb = new StringBuffer();
-      for (int i = 0; i < split.length; i++) {
-        sb.append(split[i]);
-        if ((i+1) < split.length) {
-          seedId++;
-          sb.append("\"id\" : ").append("\"").append(seedId).append("\"").append(",");
-        }
-      }
-//      System.out.println(sb.toString());
-      return sb.toString();
-    }
-    
-  }
-  
-  public static class RGraphExample extends ViewPart 
-  {
-    
-    private RGraph viz;
-    
-    public void createPartControl (Composite parent) 
-    {
-      viz = new RGraph(parent, SWT.BORDER);
-      String sampleData = loadSampleData("samples/rgraph.json");
-      viz.setJSONData(sampleData);
-      viz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
-      viz.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
-      //Demo change of node colors
-      //JSON data can override colors.
-      viz.setNodeColor(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE).getRGB());
-      viz.addListener(SWT.Selection, createSelectionListener());
-    }
-    
-    public void setFocus()
-    {
-      viz.setFocus();
-    }
-    
-  }
-  
-  public static class SpaceTreeExample extends ViewPart 
-  {
-    
-    private SpaceTree viz;
-    
-    public void createPartControl (Composite parent) 
-    {
-      viz = new SpaceTree(parent, SWT.BORDER);
-      String sampleData = loadSampleData("samples/spacetree.json");
-      viz.setJSONData(sampleData);
-      viz.setProperty("orientation", "top");
-      viz.setEdgeProperty("type", "bezier");
-      viz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
-      viz.addListener(SWT.Selection, createSelectionListener());
-    }
-    
-    public void setFocus()
-    {
-      viz.setFocus();
-    }
-    
-  }
-  
-  public static String loadSampleData (String sampleFilePath) 
-  {
-    StringBuffer data = new StringBuffer();
-    try 
-    {
-      Bundle bundle = Activator.getDefault().getBundle();
-      InputStream in = FileLocator.openStream(bundle,new Path(sampleFilePath),true);
-      BufferedReader br = new BufferedReader(new InputStreamReader(in));
-      try 
-      {
-        String line = null;
-        while ((line = br.readLine()) != null) 
-        {
-          data.append(line).append("\n");
-        }
-      }
-      finally 
-      {
-        br.close();
-      }  
-    } 
-    catch (Exception e) 
-    {
-      e.printStackTrace();
-    }
-    return data.toString();
-  }
-  
-}
+/******************************************************************************
+ * Copyright � 2010-2011 Texas Center for Applied Technology
+ * Texas Engineering Experiment Station
+ * The Texas A&M University System
+ * 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:
+ *     Austin Riddle (Texas Center for Applied Technology) -
+ *       initial API and implementation
+ * 
+ *****************************************************************************/
+package org.eclipse.rap.rwt.visualization.jit.demo;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.rap.rwt.lifecycle.IEntryPoint;
+import org.eclipse.rap.rwt.visualization.jit.AreaChart;
+import org.eclipse.rap.rwt.visualization.jit.BarChart;
+import org.eclipse.rap.rwt.visualization.jit.HyperTree;
+import org.eclipse.rap.rwt.visualization.jit.JITVisualizationWidget;
+import org.eclipse.rap.rwt.visualization.jit.RGraph;
+import org.eclipse.rap.rwt.visualization.jit.SpaceTree;
+import org.eclipse.rap.rwt.visualization.jit.TreeMap;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.ViewPart;
+import org.osgi.framework.Bundle;
+
+/**
+ * This class controls all aspects of the application's execution
+ * and is contributed through the plugin.xml.
+ */
+public class Application implements IEntryPoint {
+   
+  public static Listener createSelectionListener () {
+    return new Listener() 
+    {
+      
+      public void handleEvent(Event event) 
+      {
+        JITVisualizationWidget widget = (JITVisualizationWidget)event.widget;
+        System.out.println( "Selected node id = " + widget.getSelectedNodeId()); 
+      }
+      
+    };
+  }
+   
+   
+  public int createUI() 
+  {
+    Display display = PlatformUI.createDisplay();
+    PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
+    return 0;
+  }
+  
+  public static class HyperTreeExample extends ViewPart 
+  {
+    
+    private SashForm mainSash;
+    protected HyperTree topTree;
+    protected HyperTree bottomTree;
+    
+    public void createPartControl (Composite parent) 
+    {
+      mainSash = new SashForm(parent, SWT.VERTICAL);
+      Group group = new Group(mainSash,SWT.NONE);
+      group.setText("Default");
+      group.setLayout(new GridLayout(1,false));
+      Button backBtn = new Button(group, SWT.PUSH);
+      backBtn.setText("Previous State");
+      backBtn.addSelectionListener(new SelectionAdapter() {
+        public void widgetSelected(SelectionEvent e) {
+          topTree.previousState();
+        }
+      });
+      backBtn.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
+      topTree = new HyperTree(group, SWT.BORDER);
+      String sampleData = loadSampleData("samples/hypertree.json");
+      topTree.setJSONData(sampleData);
+      topTree.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
+      topTree.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
+      //  leave this hyper tree with default colors
+      topTree.addListener(SWT.Selection, createSelectionListener());
+      topTree.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+      
+      group = new Group(mainSash,SWT.NONE);
+      group.setText("Weighted");
+      group.setLayout(new GridLayout(1,false));
+      backBtn = new Button(group, SWT.PUSH);
+      backBtn.setText("Previous State");
+      backBtn.addSelectionListener(new SelectionAdapter() {
+        public void widgetSelected(SelectionEvent e) {
+          bottomTree.previousState();
+        }
+      });
+      backBtn.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
+      bottomTree = new HyperTree(group, SWT.BORDER);
+      sampleData = loadSampleData("samples/hypertree-weighted.json");
+      bottomTree.setJSONData(sampleData);
+      bottomTree.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
+      bottomTree.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
+      
+      //Demo change of node and edge colors
+      //JSON data can override colors.
+      bottomTree.setNodeColor(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE).getRGB());
+      bottomTree.setEdgeColor(new RGB(51,34,102)); //purple
+      bottomTree.addListener(SWT.Selection, createSelectionListener());
+      bottomTree.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+    }
+    
+    public void setFocus()
+    {
+      topTree.setFocus();
+    }
+    
+  }
+  
+  public static class TreeMapExample extends ViewPart 
+  {
+    
+    private SashForm oneSash;
+    private SashForm twoSash;
+    private TreeMap sqViz;
+    private TreeMap sliceViz;
+    private TreeMap stripViz;
+    private int seedId = 0;
+    
+    public void createPartControl (Composite parent) 
+    {
+      String sampleData = loadSampleData("samples/treemap.json");
+      oneSash = new SashForm(parent, SWT.VERTICAL);
+      twoSash = new SashForm(oneSash, SWT.HORIZONTAL);
+      
+      Group group = new Group(twoSash,SWT.NONE);
+      group.setText("Squarified");
+      group.setLayout(new FillLayout());
+      sqViz = new TreeMap(group, TreeMap.SQUARIFY, SWT.BORDER);
+      sqViz.setJSONData(makeUnique(sampleData));
+      sqViz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
+      sqViz.addListener(SWT.Selection, createSelectionListener());
+      
+      group = new Group(twoSash,SWT.NONE);
+      group.setText("Strip");
+      group.setLayout(new FillLayout());
+      stripViz = new TreeMap(group, TreeMap.STRIP, SWT.BORDER);
+      stripViz.setJSONData(makeUnique(sampleData));
+      stripViz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
+      stripViz.addListener(SWT.Selection, createSelectionListener());
+      
+      group = new Group(oneSash,SWT.NONE);
+      group.setText("Slice and Dice");
+      group.setLayout(new FillLayout());
+      sliceViz = new TreeMap(group, TreeMap.SLICE_AND_DICE, SWT.BORDER);
+      sliceViz.setJSONData(makeUnique(sampleData));
+      sliceViz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
+      sliceViz.addListener(SWT.Selection, createSelectionListener());
+    }
+    
+    public void setFocus()
+    {
+      oneSash.setFocus();
+    }
+    
+    /**
+     * Replaces all of the ids in the srcJSON with a unique set.
+     * Widgets cannot share datasets with the same ids.
+     * @param srcJSON
+     * @return the JSON string with unique ids substituted for all ids
+     */
+    public String makeUnique (String srcJSON) {
+      String[] split = srcJSON.split("\"id\" : .*,");
+      StringBuffer sb = new StringBuffer();
+      for (int i = 0; i < split.length; i++) {
+        sb.append(split[i]);
+        if ((i+1) < split.length) {
+          seedId++;
+          sb.append("\"id\" : ").append("\"").append(seedId).append("\"").append(",");
+        }
+      }
+//      System.out.println(sb.toString());
+      return sb.toString();
+    }
+    
+  }
+  
+  public static class RGraphExample extends ViewPart 
+  {
+    
+    private RGraph viz;
+    
+    public void createPartControl (Composite parent) 
+    {
+      viz = new RGraph(parent, SWT.BORDER);
+      String sampleData = loadSampleData("samples/rgraph.json");
+      viz.setJSONData(sampleData);
+      viz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
+      viz.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
+      //Demo change of node colors
+      //JSON data can override colors.
+      viz.setNodeColor(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE).getRGB());
+      viz.addListener(SWT.Selection, createSelectionListener());
+    }
+    
+    public void setFocus()
+    {
+      viz.setFocus();
+    }
+    
+  }
+  
+  public static class SpaceTreeExample extends ViewPart 
+  {
+    
+    private SpaceTree viz;
+    
+    public void createPartControl (Composite parent) 
+    {
+      viz = new SpaceTree(parent, SWT.BORDER);
+      String sampleData = loadSampleData("samples/spacetree.json");
+      viz.setJSONData(sampleData);
+      viz.setProperty("orientation", "top");
+      viz.setEdgeProperty("type", "bezier");
+      viz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
+      viz.addListener(SWT.Selection, createSelectionListener());
+    }
+    
+    public void setFocus()
+    {
+      viz.setFocus();
+    }
+    
+  }
+  
+  public static class BarChartExample extends ViewPart 
+  {
+    
+    private BarChart viz;
+    
+    public void createPartControl (Composite parent) 
+    {
+      viz = new BarChart(parent, SWT.BORDER);
+      String sampleData = loadSampleData("samples/barchart.json");
+      viz.setJSONData(sampleData);
+      viz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
+      viz.addListener(SWT.Selection, createSelectionListener());
+    }
+    
+    public void setFocus()
+    {
+      viz.setFocus();
+    }
+    
+  }
+  
+  public static class AreaChartExample extends ViewPart 
+  {
+    
+    private AreaChart viz;
+    
+    public void createPartControl (Composite parent) 
+    {
+       viz = new AreaChart(parent, SWT.BORDER);
+       String sampleData = loadSampleData("samples/areachart.json");
+       viz.setJSONData(sampleData);
+       viz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
+       viz.addListener(SWT.Selection, createSelectionListener());
+    }
+    
+    public void setFocus()
+    {
+      viz.setFocus();
+    }
+    
+  }
+  
+  public static String loadSampleData (String sampleFilePath) 
+  {
+    StringBuffer data = new StringBuffer();
+    try 
+    {
+      Bundle bundle = Activator.getDefault().getBundle();
+      InputStream in = FileLocator.openStream(bundle,new Path(sampleFilePath),true);
+      BufferedReader br = new BufferedReader(new InputStreamReader(in));
+      try 
+      {
+        String line = null;
+        while ((line = br.readLine()) != null) 
+        {
+          data.append(line).append("\n");
+        }
+      }
+      finally 
+      {
+        br.close();
+      }  
+    } 
+    catch (Exception e) 
+    {
+      e.printStackTrace();
+    }
+    return data.toString();
+  }
+  
+}
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.rwt.visualization.jit/META-INF/MANIFEST.MF
index 0d2bc44..25739e8 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/META-INF/MANIFEST.MF
@@ -1,13 +1,13 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %Bundle-Name
-Bundle-SymbolicName: org.eclipse.rap.rwt.visualization.jit;singleton:=true
-Bundle-Version: 1.5.0.qualifier
-Bundle-Localization: plugin
-Require-Bundle: org.eclipse.rap.rwt,
- org.eclipse.rap.jface,
- org.eclipse.rap.ui.workbench,
- org.eclipse.equinox.http.registry
-Export-Package: org.eclipse.rap.rwt.visualization.jit
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
-Bundle-Vendor: %Bundle-Vendor
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.rap.rwt.visualization.jit;singleton:=true
+Bundle-Version: 1.5.0.qualifier
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.rap.rwt,
+ org.eclipse.rap.jface,
+ org.eclipse.rap.ui.workbench,
+ org.eclipse.equinox.http.registry
+Export-Package: org.eclipse.rap.rwt.visualization.jit
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Bundle-Vendor: %Bundle-Vendor
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/plugin.xml b/bundles/org.eclipse.rap.rwt.visualization.jit/plugin.xml
index e649b92..efe0a83 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/plugin.xml
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/plugin.xml
@@ -8,6 +8,9 @@
            class="org.eclipse.rap.rwt.visualization.jit.internal.JITAPIResource">
      </resource>
      <resource
+           class="org.eclipse.rap.rwt.visualization.jit.internal.BaseVisualizationResource">
+     </resource>
+     <resource
            class="org.eclipse.rap.rwt.visualization.jit.internal.hypertreekit.HyperTreeResource">
      </resource>
      <resource
@@ -19,5 +22,11 @@
      <resource
            class="org.eclipse.rap.rwt.visualization.jit.internal.spacetreekit.SpaceTreeResource">
      </resource>
+     <resource
+           class="org.eclipse.rap.rwt.visualization.jit.internal.barchartkit.BarChartResource">
+     </resource>
+     <resource
+           class="org.eclipse.rap.rwt.visualization.jit.internal.areachartkit.AreaChartResource">
+     </resource>
   </extension>
 </plugin>
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/AreaChart.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/AreaChart.java
new file mode 100644
index 0000000..6b648f2
--- /dev/null
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/AreaChart.java
@@ -0,0 +1,26 @@
+/******************************************************************************
+ * Copyright � 2010-2011 Austin Riddle
+ * 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:
+ *     Austin Riddle - initial API and implementation
+ * 
+ *****************************************************************************/
+package org.eclipse.rap.rwt.visualization.jit;
+
+import org.eclipse.swt.widgets.Composite;
+
+public class AreaChart extends JITVisualizationWidget
+{
+    
+    public AreaChart( final Composite parent, final int style )
+    {
+      super( parent, style );
+    }
+
+}
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/BarChart.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/BarChart.java
new file mode 100644
index 0000000..f93b7a8
--- /dev/null
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/BarChart.java
@@ -0,0 +1,26 @@
+/******************************************************************************
+ * Copyright � 2010-2011 Austin Riddle
+ * 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:
+ *     Austin Riddle - initial API and implementation
+ * 
+ *****************************************************************************/
+package org.eclipse.rap.rwt.visualization.jit;
+
+import org.eclipse.swt.widgets.Composite;
+
+public class BarChart extends JITVisualizationWidget
+{
+    
+    public BarChart( final Composite parent, final int style )
+    {
+      super( parent, style );
+    }
+
+}
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/HyperTree.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/HyperTree.java
index 6745ae5..202c904 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/HyperTree.java
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/HyperTree.java
@@ -13,6 +13,8 @@
  *****************************************************************************/
 package org.eclipse.rap.rwt.visualization.jit;
 
+import java.util.HashMap;
+
 import org.eclipse.swt.graphics.RGB;
 import org.eclipse.swt.widgets.Composite;
 
@@ -34,7 +36,9 @@
       }
       if (!navStack.isEmpty()) {
         Object id = navStack.pop();
-        addCommand("selectNode", new Object[] {id});
+        HashMap<String,Object> args = new HashMap<String,Object>();
+        args.put( "id", id );
+        addCommand("selectNode", args);
       }
     }
   }
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/JITGraphWidget.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/JITGraphWidget.java
index c49eea3..989b94b 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/JITGraphWidget.java
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/JITGraphWidget.java
@@ -1,5 +1,7 @@
 package org.eclipse.rap.rwt.visualization.jit;
 
+import java.util.HashMap;
+
 import org.eclipse.swt.graphics.RGB;
 import org.eclipse.swt.widgets.Composite;
 
@@ -55,7 +57,10 @@
    * @param propValue - the value of the property
    */
   public void setProperty (String propName, Object propValue) {
-     addCommand("setProperty", new Object[] {propName, propValue});
+    HashMap<String,Object> args = new HashMap<String,Object>();
+    args.put( "propName", propName );
+    args.put( "propValue", propValue );
+    addCommand("setProperty", args);
   }
   
   /**
@@ -67,7 +72,10 @@
    */
   public void setNodeProperty(String propName, Object propValue)
   {
-     addCommand("setNodeProperty", new Object[] {propName, propValue});
+    HashMap<String,Object> args = new HashMap<String,Object>();
+    args.put( "propName", propName );
+    args.put( "propValue", propValue );
+    addCommand("setNodeProperty", args);
   }
 
   /**
@@ -78,7 +86,10 @@
    */
   public void setEdgeProperty(String propName, Object propValue)
   {
-     addCommand("setEdgeProperty", new Object[] {propName, propValue});
+    HashMap<String,Object> args = new HashMap<String,Object>();
+    args.put( "propName", propName );
+    args.put( "propValue", propValue );
+    addCommand("setEdgeProperty", args);
   }
   
   /**
@@ -87,7 +98,9 @@
    * @param percent - the percentage zoom level
    */
   public void setZoom(double percent) {
-     addCommand("setZoom", new Object[] {Double.valueOf(percent)});
+    HashMap<String,Object> args = new HashMap<String,Object>();
+    args.put( "percent", Double.valueOf(percent) );
+    addCommand("setZoom", args);
   }
 
   protected String convertRGBToCSSString(RGB color) {
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/JITVisualizationWidget.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/JITVisualizationWidget.java
index 1e41b57..6d9bbf9 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/JITVisualizationWidget.java
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/JITVisualizationWidget.java
@@ -1,5 +1,7 @@
 package org.eclipse.rap.rwt.visualization.jit;
 
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Stack;
 
 import org.eclipse.rap.rwt.visualization.jit.internal.JITWidgetLCA.WidgetCommandQueue;
@@ -61,7 +63,9 @@
    */
   public void setSelectedNodeId (String selectedNodeId) {
     this.selectedNodeId = selectedNodeId;
-    addCommand("selectNode",new Object[]{selectedNodeId});
+    HashMap<String,Object> args = new HashMap<String,Object>();
+    args.put( "id", selectedNodeId );
+    addCommand("selectNode",args);
   }
   
   /**
@@ -77,7 +81,7 @@
    * @param cmd - the name of the function to execute.
    * @param args and array of function arguments. Can be <code>null</code>.
    */
-  protected synchronized void addCommand (String cmd, Object[] args) {
+  protected synchronized void addCommand (String cmd, Map<String,Object> args) {
     if (cmdQueue == null) {
       cmdQueue = new WidgetCommandQueue(); 
     }
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/BaseVisualization.js b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/BaseVisualization.js
new file mode 100644
index 0000000..a9084af
--- /dev/null
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/BaseVisualization.js
@@ -0,0 +1,233 @@
+/*******************************************************************************
+ * Copyright (c) 2009-2010 David Donahue 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:
+ *     David Donahue - initial API, implementation and documentation
+ *     Austin Riddle - improvements to widget hierarchy and data flow for 
+ *                     consistency with SWT behavior.
+ ******************************************************************************/
+//The reason this is still a qooxdoo widget is because google embeds the chart in an iframe. 
+qx.Class.define( "org.eclipse.rap.rwt.visualization.jit.BaseVisualization", {
+    type: "abstract",
+    extend: rwt.widgets.base.Parent,
+    
+    statics : 
+    { 
+      registerAdapter : function(className, constructor) {
+    	  rwt.protocol.AdapterRegistry.add( className, {
+
+    		  factory : function( properties ) {
+    		    var result = new constructor();
+    		    rwt.protocol.AdapterUtil.addStatesForStyles( result, properties.style );
+    		    result.setUserData( "isControl", true );
+    		    rwt.protocol.AdapterUtil.setParent( result, properties.parent );
+    		    return result;
+    		  },
+    		  
+    		  destructor : rwt.protocol.AdapterUtil.getControlDestructor(),
+
+    		  properties : rwt.protocol.AdapterUtil.extendControlProperties( [
+    		    "visible",
+    		    "widgetData"
+    		  ] ),
+
+    		  propertyHandler : rwt.protocol.AdapterUtil.extendControlPropertyHandler( {} ),   
+
+    		  listeners : rwt.protocol.AdapterUtil.extendControlListeners( [] ),
+
+    		  listenerHandler : rwt.protocol.AdapterUtil.extendControlListenerHandler( {} ),
+
+    		  methods : [
+    		    "setEdgeProperty",
+    		    "setNodeProperty",
+    		    "setProperty",
+    		    "selectNode",
+    		    "setZoom"
+    		  ],
+    		  
+    		  methodHandler : {
+    		    "setEdgeProperty" : function( widget, args ) {
+    		      widget.setEdgeProperty(args["propName"],args["propValue"]);
+    		    },
+    		    "setNodeProperty" : function( widget, args ) {
+      		      widget.setEdgeProperty(args["propName"],args["propValue"]);
+      		    },
+      		    "setProperty" : function( widget, args ) {
+    		      widget.setEdgeProperty(args["propName"],args["propValue"]);
+    		    },
+    		    "selectNode" : function( widget, args ) {
+      		      widget.setEdgeProperty(args["id"]);
+      		    },
+      		    "setZoom" : function( widget, args ) {
+    		      widget.setEdgeProperty(args["percent"]);
+    		    }
+    		  }
+          } );
+      }
+    },
+    
+    construct: function() {
+        this.base( arguments );
+        this._viz = null;
+    },
+    
+    destruct : function() {
+    },
+    
+    properties : {
+	  visible : {
+		init :"",
+		apply :"initialize"
+	  },
+	  widgetData : {
+	   	init :"",
+		apply :"refreshData"
+	  }
+	},
+    
+    members : {
+        _doActivate : function() {
+            var shell = null;
+            var parent = this.getParent();
+            while( shell == null && parent != null ) {
+                if( parent.classname == "org.eclipse.swt.widgets.Shell" ) {
+                    shell = parent;
+                }
+                parent = parent.getParent();
+            }
+            if( shell != null ) {
+                shell.setActiveChild( this );
+            }
+        },
+        
+        _createViz : function(domElement) {
+          
+        },
+        
+        initialize : function() {
+        	try {
+        		var viz = this._viz;
+        		if (this.getVisible() == "false") {
+        			// make invisible
+        			return;
+        		}
+        		rwt.widgets.base.Widget.flushGlobalQueues();
+        		if (viz == null) {
+        			this.info("Creating new visualization instance.");
+        			var wm = org.eclipse.swt.WidgetManager.getInstance();
+        			var widgetId = wm.findIdByWidget(this);
+        			this._getTargetNode().setAttribute("id",widgetId+"_targetNode");
+        			this._viz = this._createViz(this._getTargetNode());
+        			viz = this._viz;
+        		}
+        	}
+        	catch (e) {
+        		this.info(e);
+        	}
+        },
+        
+        refreshData : function () {
+  		  try {
+  		    var rg = this._viz;
+  		    if (rg != null) {
+  		      var data = this.getWidgetData();
+  		      if (data != null) {
+  		        this.info("Loading visualization data.");
+  		        rg.loadJSON(data);
+  		        this.info("Refreshing visualization.");
+  		        rg.refresh();
+  		        rg.controller.onAfterCompute();
+  		      }
+  		    }
+  		  }
+  		  catch (e) {
+  		    this.info(e);
+  		  }
+  		},
+  		
+  		addTreeEvent : function (obj, type, fn) {
+		    if (obj.addEventListener) obj.addEventListener(type, fn, false);
+		    else obj.attachEvent('on' + type, fn);
+		},
+  		
+  		setProperty : function (propName, propValue) {
+  			try {
+  				var st = this._viz;
+  				if (st != null) {
+  					st.controller[propName] = propValue;
+  					st.refresh();
+  				}
+  			}
+  			catch (e) {
+  				this.info(e);
+  			}
+  		},
+  		
+  		setNodeProperty : function (propName, propValue) {
+  			try {
+  				var st = this._viz;
+  				if (st != null) {
+  					st.controller.Node[propName] = propValue;
+  					st.refresh();
+  				}
+  			}
+  			catch (e) {
+  				this.info(e);
+  			}
+  		},
+  		
+  		setEdgeProperty : function (propName, propValue) {
+  			try {
+  				var st = this._viz;
+  				if (st != null) {
+  					st.controller.Edge[propName] = propValue;
+  					st.refresh();
+  				}
+  			}
+  			catch (e) {
+  				this.info(e);
+  			}
+  		},
+  		
+  		setZoom : function (percent) {
+  			try {
+  				var st = this._viz;
+  				if (st != null) {
+  					st.canvas.scale(percent,percent);
+  					st.refresh();
+  				}
+  			}
+  			catch (e) {
+  				this.info(e);
+  			}
+  		},
+  		
+  		selectNode : function (id) {
+  			try {
+  				this.info("Forcing selection to : "+id);
+  				var ht = this._viz;
+  				if (ht != null) {
+  					ht.onClick(id);
+  				}
+  			}
+  			catch (e) {
+  				this.info(e);
+  			}
+  		},
+        
+        _sendResponse : function(widget, field, value) {
+			//if (!org.eclipse.swt.EventUtil.getSuspended()) {
+				var wm = org.eclipse.swt.WidgetManager.getInstance();
+				var canvasId = wm.findIdByWidget(widget);
+				var req = org.eclipse.swt.Request.getInstance();
+				req.addParameter(canvasId + "." + field, value);
+				req.send();
+			//}
+		}
+    }
+    
+} );
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/BaseVisualizationResource.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/BaseVisualizationResource.java
new file mode 100644
index 0000000..4915c6a
--- /dev/null
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/BaseVisualizationResource.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2009-2010 David Donahue.
+ * 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:
+ *     David Donahue - initial API, implementation and documentation
+ ******************************************************************************/
+package org.eclipse.rap.rwt.visualization.jit.internal;
+
+
+public class BaseVisualizationResource extends JITVisualizationResource {
+  
+  @Override
+  public String getLocation() {
+    return "org/eclipse/rap/rwt/visualization/jit/internal/BaseVisualization.js";
+  }
+  
+}
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/JITAPIResource.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/JITAPIResource.java
index 1662831..727ab22 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/JITAPIResource.java
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/JITAPIResource.java
@@ -13,8 +13,7 @@
  *****************************************************************************/
 package org.eclipse.rap.rwt.visualization.jit.internal;
 
-import org.eclipse.rap.rwt.resources.IResource;
-import org.eclipse.rap.rwt.resources.IResourceManager.RegisterOptions;
+import org.eclipse.rap.ui.resources.IResource;
 
 
 public class JITAPIResource implements IResource {
@@ -30,10 +29,6 @@
     return this.getClass().getClassLoader();
   }
 
-  public RegisterOptions getOptions() {
-    return RegisterOptions.VERSION;
-  }
-
   public String getLocation() {
     if( location == null ) {
       location = System.getProperty( KEY_SYSTEM_PROPERTY, "org/eclipse/rap/rwt/visualization/jit/internal/jit.js"); 
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/JITVisualizationResource.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/JITVisualizationResource.java
index 948e857..2d2a370 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/JITVisualizationResource.java
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/JITVisualizationResource.java
@@ -10,8 +10,7 @@
  ******************************************************************************/
 package org.eclipse.rap.rwt.visualization.jit.internal;
 
-import org.eclipse.rap.rwt.resources.IResource;
-import org.eclipse.rap.rwt.resources.IResourceManager.RegisterOptions;
+import org.eclipse.rap.ui.resources.IResource;
 
 public abstract class JITVisualizationResource implements IResource {
 
@@ -23,10 +22,6 @@
     return this.getClass().getClassLoader();
   }
 
-  public RegisterOptions getOptions() {
-    return RegisterOptions.VERSION;
-  }
-
   public abstract String getLocation();
 
   public boolean isJSLibrary() {
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/JITWidgetLCA.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/JITWidgetLCA.java
index 23b73a4..59291ac 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/JITWidgetLCA.java
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/JITWidgetLCA.java
@@ -16,13 +16,14 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Map;
 import java.util.Vector;
 
+import org.eclipse.rap.rwt.internal.protocol.ClientObjectFactory;
+import org.eclipse.rap.rwt.internal.protocol.IClientObject;
 import org.eclipse.rap.rwt.lifecycle.AbstractWidgetLCA;
 import org.eclipse.rap.rwt.lifecycle.ControlLCAUtil;
 import org.eclipse.rap.rwt.lifecycle.IWidgetAdapter;
-import org.eclipse.rap.rwt.lifecycle.JSVar;
-import org.eclipse.rap.rwt.lifecycle.JSWriter;
 import org.eclipse.rap.rwt.lifecycle.WidgetLCAUtil;
 import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
 import org.eclipse.rap.rwt.visualization.jit.JITVisualizationWidget;
@@ -34,6 +35,8 @@
   private static final String WIDGET_DATA = "widgetData";
   private static final String PROP_VISIBLE = "visible";
 
+  private static final String[] ALLOWED_STYLES = new String[] { "BORDER" };
+  
   public abstract Class getWidgetType();
   
   protected Collection getInitializationParameters (JITVisualizationWidget vWidget) {
@@ -44,12 +47,12 @@
   }
   
   public void renderInitialization( final Widget widget ) throws IOException {
-     JITVisualizationWidget vWidget = (JITVisualizationWidget)widget;
-     JSWriter writer = JSWriter.getWriterFor( vWidget );
-     writer.newWidget( getWidgetType().getName(), getInitializationParameters(vWidget).toArray() );
-     writer.set( "appearance", "composite" );
-     writer.set( "overflow", "hidden" );
-     ControlLCAUtil.writeStyleFlags( ( Control ) widget );
+     Control control = (Control)widget;
+     IClientObject clientObject = ClientObjectFactory.getClientObject( control );
+     clientObject.create( getWidgetType().getCanonicalName() );
+//     clientObject.set( "id", WidgetUtil.getId( control ) );
+     clientObject.set( "parent", WidgetUtil.getId( control.getParent() ) );
+     clientObject.set( "style", WidgetLCAUtil.getStyles( control, ALLOWED_STYLES ) );
    }
   
   public void preserveValues( final Widget widget ) {
@@ -57,36 +60,38 @@
     ControlLCAUtil.preserveValues( vWidget );
     IWidgetAdapter adapter = WidgetUtil.getAdapter( vWidget );
     adapter.preserve( PROP_VISIBLE, String.valueOf(vWidget.isVisible()));
-    adapter.preserve( WIDGET_DATA, new JSVar(vWidget.getJSONData()));
+    adapter.preserve( WIDGET_DATA, vWidget.getJSONData());
     // only needed for custom variants (theming)
     WidgetLCAUtil.preserveCustomVariant( vWidget );
   }
 
   public void renderChanges( final Widget widget ) throws IOException {
+    ControlLCAUtil.renderChanges( ( Control )widget );
+    WidgetLCAUtil.renderCustomVariant( widget );
+    
     JITVisualizationWidget vWidget = ( JITVisualizationWidget )widget;
-    JSWriter writer = JSWriter.getWriterFor( vWidget );
-    writer.set( PROP_VISIBLE, PROP_VISIBLE, String.valueOf(vWidget.isVisible()));
-    //We compare the JSON text directly because JSVar does not override Object.equals();
-    IWidgetAdapter adapter = WidgetUtil.getAdapter( vWidget );
-    JSVar oldValue = (JSVar)adapter.getPreserved( WIDGET_DATA );
-    String jsonData = vWidget.getJSONData();
-    if (jsonData != null && (oldValue == null || !jsonData.equals(oldValue.toString()))) {
-      writer.set( WIDGET_DATA, WIDGET_DATA, new JSVar(jsonData));
+    IClientObject clientObject = ClientObjectFactory.getClientObject( vWidget );
+    IWidgetAdapter adapter = WidgetUtil.getAdapter(widget);
+    boolean changed = !adapter.isInitialized() || WidgetLCAUtil.hasChanged(widget, PROP_VISIBLE, vWidget.isVisible());
+    if (changed) {
+      clientObject.set(PROP_VISIBLE, vWidget.isVisible());
     }
-    ControlLCAUtil.writeChanges( vWidget );
+    changed = WidgetLCAUtil.hasChanged(widget, WIDGET_DATA, vWidget.getJSONData());
+    if (changed) {
+      clientObject.set(WIDGET_DATA, vWidget.getJSONData());
+    }
     
     WidgetCommandQueue cmdQueue = (WidgetCommandQueue) vWidget.getAdapter(WidgetCommandQueue.class);
     if (cmdQueue != null) {
       while (cmdQueue.peek() != null) {
         Object[] functionCall = (Object[])cmdQueue.poll();
-        writer.call((String)functionCall[0], (Object[])functionCall[1]);
+        clientObject.call((String)functionCall[0], (Map<String,Object>)functionCall[1]);
       }
     }
   }
 
   public void renderDispose( final Widget widget ) throws IOException {
-    JSWriter writer = JSWriter.getWriterFor( widget );
-    writer.dispose();
+    ClientObjectFactory.getClientObject( widget ).destroy();
   }
 
   public void createResetHandlerCalls( String typePoolId ) throws IOException {
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/areachartkit/AreaChart.js b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/areachartkit/AreaChart.js
new file mode 100644
index 0000000..3d21e37
--- /dev/null
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/areachartkit/AreaChart.js
@@ -0,0 +1,108 @@
+/******************************************************************************
+ * Copyright � 2010-2011 Texas Center for Applied Technology
+ * Texas Engineering Experiment Station
+ * The Texas A&M University System
+ * 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:
+ *     Austin Riddle (Texas Center for Applied Technology) -
+ *       initial API and implementation
+ * 
+ *****************************************************************************/
+qx.Class.define("org.eclipse.rap.rwt.visualization.jit.AreaChart",
+{ extend :org.eclipse.rap.rwt.visualization.jit.BaseVisualization,
+	
+	members : {
+		
+		_createViz : function(domElement) {
+			var vizId = domElement.getAttribute("id");
+			var parent = this;
+			var st = new $jit.AreaChart({
+				injectInto: vizId,
+				animate: true,
+				Margin: {
+					top:5,
+					left:5,
+					right:5,
+					bottom:5
+				},
+				labelOffset: 10,
+				type: 'stacked:gradient',
+				showAggregates:true,
+				showLabels:true,
+				Label: {  
+					type: "Native", //Native or HTML  
+					size: 13,  
+					family: 'Arial',  
+					color: 'white'  
+				},
+				Tips: {  
+					enable: true,
+					force: true,
+					type: 'auto',  
+					offsetX: 10,  
+					offsetY: 10,  
+					onShow: function(tip, node) {
+						tip.style.border = "1px solid #c0c0c0";
+						tip.style.backgroundColor = "#ddd";
+						tip.style.color = "#000";
+						tip.innerHTML = node.name;
+						tip.style.zIndex = 1000000000;
+					}  
+				}
+			});
+			this.addEventListener("changeWidth", function(e) {
+				if (domElement != null) {
+					domElement.width = e.getValue();
+					if (domElement.height != null && domElement.width != null) {
+						st.canvas.resize(domElement.width, domElement.height);
+						var size = st.delegate.canvas.getSize();
+						var margin = st.config.Margin;
+//                if(horz) {
+//                  delegate.config.offsetX = size.width/2 - margin.left
+//                    - (config.showLabels && (config.labelOffset + config.Label.size));    
+//                  delegate.config.offsetY = (margin.bottom - margin.top)/2;
+//                } else {
+						st.delegate.config.offsetY = -size.height/2 + margin.bottom 
+						+ (st.config.showLabels && (st.config.labelOffset + st.config.Label.size));
+						st.delegate.config.offsetX = (margin.right - margin.left)/2;
+//                }
+						st.normalizeDims();
+						st.delegate.refresh();
+					}
+				}
+			});
+			this.addEventListener("changeHeight", function(e) {
+				if (domElement != null) {
+					domElement.height = e.getValue();
+					if (domElement.height != null && domElement.width != null) {
+						st.canvas.resize(domElement.width, domElement.height);
+						var size = st.delegate.canvas.getSize();
+						var margin = st.config.Margin;
+//                if(horz) {
+//                  delegate.config.offsetX = size.width/2 - margin.left
+//                    - (config.showLabels && (config.labelOffset + config.Label.size));    
+//                  delegate.config.offsetY = (margin.bottom - margin.top)/2;
+//                } else {
+						st.delegate.config.offsetY = -size.height/2 + margin.bottom 
+						+ (st.config.showLabels && (st.config.labelOffset + st.config.Label.size));
+						st.delegate.config.offsetX = (margin.right - margin.left)/2;
+//                }
+						st.normalizeDims();
+						st.delegate.refresh();
+					}
+				}
+			});
+			return st;
+		}
+	}
+});
+
+org.eclipse.rap.rwt.visualization.jit.BaseVisualization.registerAdapter(
+		"org.eclipse.rap.rwt.visualization.jit.AreaChart",
+		org.eclipse.rap.rwt.visualization.jit.AreaChart);
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/areachartkit/AreaChartLCA.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/areachartkit/AreaChartLCA.java
new file mode 100644
index 0000000..cd58569
--- /dev/null
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/areachartkit/AreaChartLCA.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2011 Austin Riddle, 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:
+ *     Austin Riddle - initial API, implementation and documentation
+ *     Cole Markham (Texas Center for Applied Technology) - 
+ *        widget data passing to client side
+ ******************************************************************************/
+package org.eclipse.rap.rwt.visualization.jit.internal.areachartkit;
+
+import org.eclipse.rap.rwt.visualization.jit.AreaChart;
+import org.eclipse.rap.rwt.visualization.jit.internal.JITWidgetLCA;
+
+public class AreaChartLCA extends JITWidgetLCA {
+
+  @Override
+  public Class<?> getWidgetType() {
+    return AreaChart.class;
+  }
+}
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/areachartkit/AreaChartResource.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/areachartkit/AreaChartResource.java
new file mode 100644
index 0000000..ce1a8e7
--- /dev/null
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/areachartkit/AreaChartResource.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2011 Austin Riddle.
+ * 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:
+ *     Austin Riddle - initial API, implementation and documentation
+ ******************************************************************************/
+package org.eclipse.rap.rwt.visualization.jit.internal.areachartkit;
+
+import org.eclipse.rap.rwt.visualization.jit.internal.JITVisualizationResource;
+
+public class AreaChartResource extends JITVisualizationResource {
+
+  public String getLocation() {
+    return "org/eclipse/rap/rwt/visualization/jit/internal/areachartkit/AreaChart.js";
+  }
+  
+}
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/barchartkit/BarChart.js b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/barchartkit/BarChart.js
new file mode 100644
index 0000000..da039aa
--- /dev/null
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/barchartkit/BarChart.js
@@ -0,0 +1,109 @@
+/******************************************************************************
+ * Copyright � 2010-2011 Texas Center for Applied Technology
+ * Texas Engineering Experiment Station
+ * The Texas A&M University System
+ * 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:
+ *     Austin Riddle (Texas Center for Applied Technology) -
+ *       initial API and implementation
+ * 
+ *****************************************************************************/
+qx.Class.define("org.eclipse.rap.rwt.visualization.jit.BarChart",
+{ extend :org.eclipse.rap.rwt.visualization.jit.BaseVisualization,
+	
+	members : {
+		
+		_createViz : function(domElement) {
+			var vizId = domElement.getAttribute("id");
+			var parent = this;
+			
+			var st = new $jit.BarChart({
+				injectInto: vizId,
+				orientation: "vertical",  
+				barsOffset: 20,
+				Margin: {
+					top:5,
+					left:5,
+					right:5,
+					bottom:5
+				},
+				labelOffset: 5,
+				type: 'stacked:gradient',
+				showAggregates:true,
+				showLabels:true,
+				Label: {  
+					type: "Native", //Native or HTML  
+					size: 13,  
+					family: 'Arial',  
+					color: 'white'  
+				},
+				Tips: {  
+					enable: true,
+					force: true,
+					type: 'auto',  
+					offsetX: 10,  
+					offsetY: 10,  
+					onShow: function(tip, node) {
+						tip.style.border = "1px solid #c0c0c0";
+						tip.style.backgroundColor = "#ddd";
+						tip.style.color = "#000";
+						tip.innerHTML = node.name;
+						tip.style.zIndex = 1000000000;
+					}  
+				}
+			});
+			this.addEventListener("changeWidth", function(e) {
+				if (domElement != null) {
+					domElement.width = e.getValue();
+					if (domElement.height != null && domElement.width != null) {
+						st.canvas.resize(domElement.width, domElement.height);
+						var size = st.delegate.canvas.getSize();
+						var margin = st.config.Margin;
+//    		        if(horz) {
+//    		          delegate.config.offsetX = size.width/2 - margin.left
+//    		            - (config.showLabels && (config.labelOffset + config.Label.size));    
+//    		          delegate.config.offsetY = (margin.bottom - margin.top)/2;
+//    		        } else {
+						st.delegate.config.offsetY = -size.height/2 + margin.bottom 
+						+ (st.config.showLabels && (st.config.labelOffset + st.config.Label.size));
+						st.delegate.config.offsetX = (margin.right - margin.left)/2;
+//    		        }
+						st.normalizeDims();
+						st.delegate.refresh();
+					}
+				}
+			});
+			this.addEventListener("changeHeight", function(e) {
+				if (domElement != null) {
+					domElement.height = e.getValue();
+					if (domElement.height != null && domElement.width != null) {
+						st.canvas.resize(domElement.width, domElement.height);
+						var size = st.delegate.canvas.getSize();
+						var margin = st.config.Margin;
+//                if(horz) {
+//                  delegate.config.offsetX = size.width/2 - margin.left
+//                    - (config.showLabels && (config.labelOffset + config.Label.size));    
+//                  delegate.config.offsetY = (margin.bottom - margin.top)/2;
+//                } else {
+						st.delegate.config.offsetY = -size.height/2 + margin.bottom 
+						+ (st.config.showLabels && (st.config.labelOffset + st.config.Label.size));
+						st.delegate.config.offsetX = (margin.right - margin.left)/2;
+//                }
+						st.normalizeDims();
+						st.delegate.refresh();
+					}
+				}
+			});
+			return st;			
+		}
+	}
+});
+org.eclipse.rap.rwt.visualization.jit.BaseVisualization.registerAdapter(
+		"org.eclipse.rap.rwt.visualization.jit.BarChart",
+		org.eclipse.rap.rwt.visualization.jit.BarChart);
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/barchartkit/BarChartLCA.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/barchartkit/BarChartLCA.java
new file mode 100644
index 0000000..aa5e96a
--- /dev/null
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/barchartkit/BarChartLCA.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2011 Austin Riddle, 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:
+ *     Austin Riddle - initial API, implementation and documentation
+ *     Cole Markham (Texas Center for Applied Technology) - 
+ *        widget data passing to client side
+ ******************************************************************************/
+package org.eclipse.rap.rwt.visualization.jit.internal.barchartkit;
+
+import org.eclipse.rap.rwt.visualization.jit.BarChart;
+import org.eclipse.rap.rwt.visualization.jit.internal.JITWidgetLCA;
+
+public class BarChartLCA extends JITWidgetLCA {
+
+  @Override
+  public Class<?> getWidgetType() {
+    return BarChart.class;
+  }
+}
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/barchartkit/BarChartResource.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/barchartkit/BarChartResource.java
new file mode 100644
index 0000000..c31bcdc
--- /dev/null
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/barchartkit/BarChartResource.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2011 Austin Riddle.
+ * 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:
+ *     Austin Riddle - initial API, implementation and documentation
+ ******************************************************************************/
+package org.eclipse.rap.rwt.visualization.jit.internal.barchartkit;
+
+import org.eclipse.rap.rwt.visualization.jit.internal.JITVisualizationResource;
+
+public class BarChartResource extends JITVisualizationResource {
+
+  public String getLocation() {
+    return "org/eclipse/rap/rwt/visualization/jit/internal/barchartkit/BarChart.js";
+  }
+  
+}
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/hypertreekit/HyperTree.js b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/hypertreekit/HyperTree.js
index 6117b04..90d0ebc 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/hypertreekit/HyperTree.js
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/hypertreekit/HyperTree.js
@@ -12,273 +12,123 @@
  * 
  *****************************************************************************/
 qx.Class.define("org.eclipse.rap.rwt.visualization.jit.HyperTree",
-{ extend :qx.ui.layout.CanvasLayout,
+{ extend :org.eclipse.rap.rwt.visualization.jit.BaseVisualization,
 	
-	construct : function(id) {
-		this.base(arguments);
-		this.setHtmlProperty("id", id);
-		this._id = id;
-		this._viz = null;
-	},
-
-	properties : {
-		visible : {
-			init :"",
-			apply :"load"
-	  },
-	  widgetData : {
-	  	init :"",
-			apply :"refreshData"
-	  }
-	},
-
-	destruct : function() {
-
-	},
-
 	members : {
-
-		_doActivate : function() {
-			var shell = null;
-			var parent = this.getParent();
-			while (shell == null && parent != null) {
-				if (parent.classname == "org.eclipse.swt.widgets.Shell") {
-					shell = parent;
-				}
-				parent = parent.getParent();
-			}
-			if (shell != null) {
-				shell.setActiveChild(this);
-			}
-		},
 		
-		load : function() {
-		  var parent = this;
-		  try {
-		    var vis = this.getVisible();
-		    if (vis == "false") {
-		      // make invisible
-		      return;
-		    }
-		    qx.ui.core.Widget.flushGlobalQueues();
-		    if (this._viz == null) {
-		      this.info("Creating hypertree.");
-		      
-		      var qParent = document.getElementById(this._id);
-		      var vizParent = document.createElement("div");
-		      var vizId = "vizParent"+this._id;
-		      vizParent.setAttribute("id", vizId);
-		      qParent.appendChild(vizParent);
-		      vizParent.width = this.getWidth();
-		      vizParent.height = this.getHeight();
-		      var widgetId = this._id;
-		      var config = {
-		          injectInto: vizId,
-		          Navigation: {  
-	              enable:true,  
-	              panning:true,
-	              zooming: 20
-	            },
-		          //Change node and edge styles such as
-		          //color, width and dimensions.
-		          Node: {
-		            dim: 9,
-		            overridable: true,
-		            color: "#f00"
-		          },
-		          
-		          Edge: {
-		            overridable: true,
-		            lineWidth: 2,
-		            color: "#088"
-		          },
-		          
-		          onBeforeCompute: function(node){
-		            //Log.write("centering");
-		          },
-		          //Attach event handlers and add text to the
-		          //labels. This method is only triggered on label
-		          //creation
-		          onCreateLabel: function(domElement, node){
-		            domElement.innerHTML = node.name;
-		            domElement.style.cursor = "pointer";
-		            parent.addTreeEvent(domElement, 'click', function () {
-		              ht.onClick(node.id);
-		            });
-		          },
-		          
-		          //This method is called right before plotting an
-		          //edge. This method is useful for adding individual
-		          //styles to edges.
-		          onBeforePlotLine: function(adj){
-		            //Set lineWidth for edges.
+		_createViz : function(domElement) {
+			var vizId = domElement.getAttribute("id");
+			var parent = this;
+			var config = {
+					injectInto: vizId,
+					Navigation: {  
+						enable:true,  
+						panning:true,
+						zooming: 20
+					},
+					//Change node and edge styles such as
+					//color, width and dimensions.
+					Node: {
+						dim: 9,
+						overridable: true,
+						color: "#f00"
+					},
+					
+					Edge: {
+						overridable: true,
+						lineWidth: 2,
+						color: "#088"
+					},
+					
+					onBeforeCompute: function(node){
+						//Log.write("centering");
+					},
+					//Attach event handlers and add text to the
+					//labels. This method is only triggered on label
+					//creation
+					onCreateLabel: function(domElement, node){
+						domElement.innerHTML = node.name;
+						domElement.style.cursor = "pointer";
+						parent.addTreeEvent(domElement, 'click', function () {
+							ht.onClick(node.id);
+						});
+					},
+					
+					//This method is called right before plotting an
+					//edge. This method is useful for adding individual
+					//styles to edges.
+					onBeforePlotLine: function(adj){
+						//Set lineWidth for edges.
 //				            if (!adj.data.$lineWidth) 
 //				                adj.data.$lineWidth = Math.random() * 5 + 1;
-		          },
-		          //Change node styles when labels are placed
-		          //or moved.
-		          onPlaceLabel: function(domElement, node){
-		            var style = domElement.style;
-		            style.display = '';
-		            style.cursor = 'pointer';
-		            var font = parent.getFont();
-		            style.fontFamily = font.getFamily();
-		            try {
-		              style.fontStyle = font.generateStyle();
-		            }
-		            catch (e) {
-		              //ignore..some items are not cross - browser compatible
-		            }
-		            var color = parent.getTextColor();
-		            if (node._depth <= 1) {
-		              style.fontSize = font.getSize();
-		              style.color = color;
-		              
-		            } else if(node._depth == 2){
-		              style.fontSize = font.getSize()-2;
-		              style.color = "#555";
-		              
-		            } else {
-		              style.display = 'none';
-		            }
-		            
-		            var left = parseInt(style.left);
-		            var w = domElement.offsetWidth;
-		            style.left = (left - w / 2) + 'px';
-		          },
-		          
-		          onAfterCompute: function(){
-		            var node = $jit.Graph.Util.getClosestNodeToOrigin(ht.graph, "current");
-		            qParent.selection = node;
-		            //fire selection event
-		            parent.info("Sending selected node: "+node.id);
-		            var req = org.eclipse.swt.Request.getInstance();
-		            req.addParameter(widgetId + ".selectedNode", node.id);
-		            req.addEvent( "org.eclipse.swt.events.widgetSelected", widgetId );
-		            req.send();
-		          }
-		      };
-		      var ht = new $jit.Hypertree(config);
-		      
-		      this.addEventListener("changeWidth", function(e) {
-            if (vizParent != null) {
-              vizParent.width = e.getValue();
-              if (vizParent.height != null && vizParent.width != null) {
-                ht.canvas.resize(vizParent.width, vizParent.height);
-                ht.refresh();
-              }
-            }
-          });
-          this.addEventListener("changeHeight", function(e) {
-            if (vizParent != null) {
-              vizParent.height = e.getValue();
-              if (vizParent.height != null && vizParent.width != null) {
-                ht.canvas.resize(vizParent.width, vizParent.height);
-                ht.refresh();
-              }
-            }
-          });
-		      
-		      this._viz = ht;
-		      this._vizParent = vizParent;
-		    }
-		  }
-		  catch (e) {
-		    this.info(e);
-		  }
-		},
-		
-		addTreeEvent : function (obj, type, fn) {
-		    if (obj.addEventListener) obj.addEventListener(type, fn, false);
-		    else obj.attachEvent('on' + type, fn);
-		},
-		
-		refreshData : function (data) {
-			try {
-				var ht = this._viz;
-				if (ht != null) {
-					if (data != null) {
-						this.info("Loading hypertree data.");
-						ht.loadJSON(data);
-					    this.info("Refreshing hypertree.");
-					    ht.refresh();
-					    ht.controller.onAfterCompute();
+					},
+					//Change node styles when labels are placed
+					//or moved.
+					onPlaceLabel: function(domElement, node){
+						var style = domElement.style;
+						style.display = '';
+						style.cursor = 'pointer';
+						var font = parent.getFont();
+						style.fontFamily = font.getFamily();
+						try {
+							style.fontStyle = font.generateStyle();
+						}
+						catch (e) {
+							//ignore..some items are not cross - browser compatible
+						}
+						var color = parent.getTextColor();
+						if (node._depth <= 1) {
+							style.fontSize = font.getSize();
+							style.color = color;
+							
+						} else if(node._depth == 2){
+							style.fontSize = font.getSize()-2;
+							style.color = "#555";
+							
+						} else {
+							style.display = 'none';
+						}
+						
+						var left = parseInt(style.left);
+						var w = domElement.offsetWidth;
+						style.left = (left - w / 2) + 'px';
+					},
+					
+					onAfterCompute: function(){
+						var node = $jit.Graph.Util.getClosestNodeToOrigin(ht.graph, "current");
+						//qParent.selection = node;
+						//fire selection event
+						parent.info("Sending selected node: "+node.id);
+						var req = org.eclipse.swt.Request.getInstance();
+						req.addParameter(widgetId + ".selectedNode", node.id);
+						req.addEvent( "org.eclipse.swt.events.widgetSelected", widgetId );
+						req.send();
+					}
+			};
+			var ht = new $jit.Hypertree(config);
+			this.addEventListener("changeWidth", function(e) {
+				if (domElement != null) {
+					domElement.width = e.getValue();
+					if (domElement.height != null && domElement.width != null) {
+						ht.canvas.resize(domElement.width, domElement.height);
+						ht.refresh();
 					}
 				}
-			}
-			catch (e) {
-				this.info(e);
-			}
-		},
-		
-		setProperty : function (propName, propValue) {
-      try {
-        var st = this._viz;
-        if (st != null) {
-          st.controller[propName] = propValue;
-          st.refresh();
-        }
-      }
-      catch (e) {
-        this.info(e);
-      }
-    },
-    
-    setNodeProperty : function (propName, propValue) {
-      try {
-        var st = this._viz;
-        if (st != null) {
-          st.controller.Node[propName] = propValue;
-          st.refresh();
-        }
-      }
-      catch (e) {
-        this.info(e);
-      }
-    },
-    
-    setEdgeProperty : function (propName, propValue) {
-      try {
-        var st = this._viz;
-        if (st != null) {
-          st.controller.Edge[propName] = propValue;
-          st.refresh();
-        }
-      }
-      catch (e) {
-        this.info(e);
-      }
-    },
-    
-    setZoom : function (percent) {
-      try {
-        var st = this._viz;
-        if (st != null) {
-          st.canvas.scale(percent,percent);
-          st.refresh();
-        }
-      }
-      catch (e) {
-        this.info(e);
-      }
-    },
-		
-		selectNode : function (id) {
-			try {
-				this.info("Forcing selection to : "+id);
-				var ht = this._viz;
-				if (ht != null) {
-					ht.onClick(id);
+			});
+			this.addEventListener("changeHeight", function(e) {
+				if (domElement != null) {
+					domElement.height = e.getValue();
+					if (domElement.height != null && domElement.width != null) {
+						ht.canvas.resize(domElement.width, domElement.height);
+						ht.refresh();
+					}
 				}
-			}
-			catch (e) {
-				this.info(e);
-			}
-		},
-		
-		_doResize : function() {
-			qx.ui.core.Widget.flushGlobalQueues();
-			
+			});
+			return ht;
 		}
 	}
-});
\ No newline at end of file
+});
+
+org.eclipse.rap.rwt.visualization.jit.BaseVisualization.registerAdapter(
+		"org.eclipse.rap.rwt.visualization.jit.HyperTree",
+		org.eclipse.rap.rwt.visualization.jit.HyperTree);
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/hypertreekit/HyperTreeLCA.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/hypertreekit/HyperTreeLCA.java
index c59a328..0461484 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/hypertreekit/HyperTreeLCA.java
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/hypertreekit/HyperTreeLCA.java
@@ -17,8 +17,8 @@
 
 public class HyperTreeLCA extends JITGraphLCA {
 
-  public Class getWidgetType () {
+  @Override
+  public Class<?> getWidgetType() {
     return HyperTree.class;
   }
-  
 }
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/rgraphkit/RGraph.js b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/rgraphkit/RGraph.js
index 96069b7..04088be 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/rgraphkit/RGraph.js
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/rgraphkit/RGraph.js
@@ -15,285 +15,136 @@
  * 
  *****************************************************************************/
 qx.Class.define("org.eclipse.rap.rwt.visualization.jit.RGraph",
-{ extend :qx.ui.layout.CanvasLayout,
+{ extend :org.eclipse.rap.rwt.visualization.jit.BaseVisualization,
 	
-	construct : function(id) {
-		this.base(arguments);
-		this.setHtmlProperty("id", id);
-		this._id = id;
-		this._viz = null;
-	},
-
-	properties : {
-		visible : {
-			init :"",
-			apply :"load"
-	  },
-	  widgetData : {
-	   	init :"",
-			apply :"refreshData"
-	  }
-	},
-
-	destruct : function() {
-
-	},
-
 	members : {
 
-		_doActivate : function() {
-			var shell = null;
-			var parent = this.getParent();
-			while (shell == null && parent != null) {
-				if (parent.classname == "org.eclipse.swt.widgets.Shell") {
-					shell = parent;
-				}
-				parent = parent.getParent();
-			}
-			if (shell != null) {
-				shell.setActiveChild(this);
-			}
-		},
-		
-		load : function() {
-		  var parent = this;
-		  try {
-		    var vis = this.getVisible();
-		    if (vis == "false") {
-		      // make invisible
-		      return;
-		    }
-		    qx.ui.core.Widget.flushGlobalQueues();
-		    if (this._viz == null) {
-		      this.info("Creating rgraph.");
-		      var qParent = document.getElementById(this._id);
-		      var vizParent = document.createElement("div");
-		      var vizId = "vizParent"+this._id;
-		      vizParent.setAttribute("id", vizId);
-		      qParent.appendChild(vizParent);
-		      var widgetId = this._id;
-		      vizParent.width = this.getWidth();
-		      vizParent.height = this.getHeight();
-		      var rg = new $jit.RGraph({
-		        injectInto: vizId,
-		        //Optional: create a background canvas that plots  
-		        //concentric circles.  
-		        background: {  
-		          CanvasStyles: {  
-		            strokeStyle: '#555'  
-		          }  
-		        }, 
-		        //interpolation type, can be linear or polar  
-		        //interpolation: 'linear',  
-		        //parent-children distance  
-		        //levelDistance: 100,  
-		        //withLabels: true,
-		        duration: 1000,  
-		        fps: 25,
-		        Navigation: {  
-              enable:true,  
-              panning:true,
-              zooming: 20
-            },
-		        Node: {  
+		_createViz : function(domElement) {
+			var vizId = domElement.getAttribute("id");
+			var parent = this;
+			var rg = new $jit.RGraph({
+				injectInto: vizId,
+				//Optional: create a background canvas that plots  
+				//concentric circles.  
+				background: {  
+					CanvasStyles: {  
+						strokeStyle: '#555'  
+					}  
+				}, 
+				//interpolation type, can be linear or polar  
+				//interpolation: 'linear',  
+				//parent-children distance  
+				//levelDistance: 100,  
+				//withLabels: true,
+				duration: 1000,  
+				fps: 25,
+				Navigation: {  
+					enable:true,  
+					panning:true,
+					zooming: 20
+				},
+				Node: {  
 //			            overridable: false,  
 //			            type: 'circle',
-		          color: '#ccddee'
+					color: '#ccddee'
 //			            lineWidth: 1,  
 //			            height: 5,  
 //			            width: 5,  
 //			            dim: 3  
-		        },  
-		        Edge: {  
+				},  
+				Edge: {  
 //			            overridable: false,  
 //			            type: 'line',  
-		          color: '#772277' 
+					color: '#772277' 
 //			            lineWidth: 1  
-		        },  
-		        onBeforeCompute: function(node) {  
-		          //do something onBeforeCompute  
-		        },  
-		        onAfterCompute: function(){
-		          var node = $jit.Graph.Util.getClosestNodeToOrigin(rg.graph, "current");
-		          qParent.selection = node;
-		          //fire selection event
-		          parent.info("Sending selected node: "+node.id);
-		          var req = org.eclipse.swt.Request.getInstance();
-		          req.addParameter(widgetId + ".selectedNode", node.id);
-		          req.addEvent( "org.eclipse.swt.events.widgetSelected", widgetId );
-		          req.send();
-		        },  
-		        //Change some label dom properties.
-		        //This method is called each time a label is plotted.
-		        onPlaceLabel: function(domElement, node){
-		          var style = domElement.style;
-		          style.display = '';
-		          style.cursor = 'pointer';
-		          var font = parent.getFont();
-		          style.fontFamily = font.getFamily();
-		          try {
-		            style.fontStyle = font.generateStyle();
-		          }
-		          catch (e) {
-		            //ignore..some items are not cross - browser compatible
-		          }
-		          var color = parent.getTextColor();
-		          if (node._depth <= 1) {
-		            style.fontSize = font.getSize();
-		            style.color = color;
-		            
-		          } else if(node._depth == 2){
-		            style.fontSize = font.getSize()-2;
-		            style.color = "#555";
-		            
-		          } else {
-		            style.display = 'none';
-		          }
-		          var left = parseInt(style.left);
-		          var w = domElement.offsetWidth;
-		          style.left = (left - w / 2) + 'px';
-		        }, 
-		        
-		        //Add a controller to make the tree move on click.  
-		        onCreateLabel: function(domElement, node) {  
-		          domElement.innerHTML = node.name;
-		          domElement.onclick = function() {
-		            rg.onClick(node.id);  
-		          };  
-		        },   
-		        onBeforePlotNode:function(node) {  
-		          //do something onBeforePlotNode  
-		        },  
-		        onAfterPlotNode: function(node) {  
-		          //do something onAfterPlotNode  
-		        },  
-		        onBeforePlotLine:function(adj) {  
-		          //do something onBeforePlotLine  
-		        },  
-		        onAfterPlotLine: function(adj) {  
-		          //do something onAfterPlotLine  
-		        }  
-		      });
-		      
-		      this.addEventListener("changeWidth", function(e) {
-		        if (vizParent != null) {
-		          vizParent.width = e.getValue();
-		          if (vizParent.height != null && vizParent.width != null) {
-		            rg.canvas.resize(vizParent.width, vizParent.height);
-		            rg.refresh();
-		          }
-		        }
-		      });
-		      this.addEventListener("changeHeight", function(e) {
-		        if (vizParent != null) {
-		          vizParent.height = e.getValue();
-		          if (vizParent.height != null && vizParent.width != null) {
-		            rg.canvas.resize(vizParent.width, vizParent.height);
-		            rg.refresh();
-		          }
-		        }
-		      });
-		      
-		      this._viz = rg;
-		      this._vizParent = vizParent;
-		    }
-		  }
-		  catch (e) {
-		    this.info(e);
-		  }
-		},
-		
-		addTreeEvent : function (obj, type, fn) {
-		    if (obj.addEventListener) obj.addEventListener(type, fn, false);
-		    else obj.attachEvent('on' + type, fn);
-		},
-		
-		refreshData : function () {
-		  try {
-		    var rg = this._viz;
-		    if (rg != null) {
-		      var data = this.getWidgetData();
-		      if (data != null) {
-		        this.info("Loading rgraph data.");
-		        rg.loadJSON(data);
-		        this.info("Refreshing rgraph.");
-		        rg.refresh();
-		        rg.controller.onAfterCompute();
-		      }
-		    }
-		  }
-		  catch (e) {
-		    this.info(e);
-		  }
-		},
-		
-		setProperty : function (propName, propValue) {
-      try {
-        var st = this._viz;
-        if (st != null) {
-          st.controller[propName] = propValue;
-          st.refresh();
-        }
-      }
-      catch (e) {
-        this.info(e);
-      }
-    },
-    
-    setNodeProperty : function (propName, propValue) {
-      try {
-        var st = this._viz;
-        if (st != null) {
-          st.controller.Node[propName] = propValue;
-          st.refresh();
-        }
-      }
-      catch (e) {
-        this.info(e);
-      }
-    },
-    
-    setEdgeProperty : function (propName, propValue) {
-      try {
-        var st = this._viz;
-        if (st != null) {
-          st.controller.Edge[propName] = propValue;
-          st.refresh();
-        }
-      }
-      catch (e) {
-        this.info(e);
-      }
-    },
-    
-    setZoom : function (percent) {
-      try {
-        var st = this._viz;
-        if (st != null) {
-          st.canvas.scale(percent,percent);
-          st.refresh();
-        }
-      }
-      catch (e) {
-        this.info(e);
-      }
-    },
-		
-		selectNode : function (id) {
-			try {
-				var rg = this._viz;
-				if (rg != null) {
-					rg.onClick(id);
+				},  
+				onBeforeCompute: function(node) {  
+					//do something onBeforeCompute  
+				},  
+				onAfterCompute: function(){
+					var node = $jit.Graph.Util.getClosestNodeToOrigin(rg.graph, "current");
+					//qParent.selection = node;
+					//fire selection event
+					parent.info("Sending selected node: "+node.id);
+					var req = org.eclipse.swt.Request.getInstance();
+					req.addParameter(widgetId + ".selectedNode", node.id);
+					req.addEvent( "org.eclipse.swt.events.widgetSelected", widgetId );
+					req.send();
+				},  
+				//Change some label dom properties.
+				//This method is called each time a label is plotted.
+				onPlaceLabel: function(domElement, node){
+					var style = domElement.style;
+					style.display = '';
+					style.cursor = 'pointer';
+					var font = parent.getFont();
+					style.fontFamily = font.getFamily();
+					try {
+						style.fontStyle = font.generateStyle();
+					}
+					catch (e) {
+						//ignore..some items are not cross - browser compatible
+					}
+					var color = parent.getTextColor();
+					if (node._depth <= 1) {
+						style.fontSize = font.getSize();
+						style.color = color;
+						
+					} else if(node._depth == 2){
+						style.fontSize = font.getSize()-2;
+						style.color = "#555";
+						
+					} else {
+						style.display = 'none';
+					}
+					var left = parseInt(style.left);
+					var w = domElement.offsetWidth;
+					style.left = (left - w / 2) + 'px';
+				}, 
+				
+				//Add a controller to make the tree move on click.  
+				onCreateLabel: function(domElement, node) {  
+					domElement.innerHTML = node.name;
+					domElement.onclick = function() {
+						rg.onClick(node.id);  
+					};  
+				},   
+				onBeforePlotNode:function(node) {  
+					//do something onBeforePlotNode  
+				},  
+				onAfterPlotNode: function(node) {  
+					//do something onAfterPlotNode  
+				},  
+				onBeforePlotLine:function(adj) {  
+					//do something onBeforePlotLine  
+				},  
+				onAfterPlotLine: function(adj) {  
+					//do something onAfterPlotLine  
+				}  
+			});
+			this.addEventListener("changeWidth", function(e) {
+				if (domElement != null) {
+					domElement.width = e.getValue();
+					if (domElement.height != null && domElement.width != null) {
+						rg.canvas.resize(domElement.width, domElement.height);
+						rg.refresh();
+					}
 				}
-			}
-			catch (e) {
-				this.info(e);
-			}
-		},
-		
-		_doResize : function() {
-			qx.ui.core.Widget.flushGlobalQueues();
-			
+			});
+			this.addEventListener("changeHeight", function(e) {
+				if (domElement != null) {
+					domElement.height = e.getValue();
+					if (domElement.height != null && domElement.width != null) {
+						rg.canvas.resize(domElement.width, domElement.height);
+						rg.refresh();
+					}
+				}
+			});
+			return rg;
 		}
 	}
-});
\ No newline at end of file
+});
+
+org.eclipse.rap.rwt.visualization.jit.BaseVisualization.registerAdapter(
+		"org.eclipse.rap.rwt.visualization.jit.RGraph",
+		org.eclipse.rap.rwt.visualization.jit.RGraph);
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/rgraphkit/RGraphLCA.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/rgraphkit/RGraphLCA.java
index 2ced709..c9528c0 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/rgraphkit/RGraphLCA.java
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/rgraphkit/RGraphLCA.java
@@ -17,8 +17,8 @@
 
 public class RGraphLCA extends JITGraphLCA {
 
-  public Class getWidgetType () {
+  @Override
+  public Class<?> getWidgetType() {
     return RGraph.class;
   }
-  
 }
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/spacetreekit/SpaceTree.js b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/spacetreekit/SpaceTree.js
index 168107d..26f6e7c 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/spacetreekit/SpaceTree.js
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/spacetreekit/SpaceTree.js
@@ -15,395 +15,229 @@
  * 
  *****************************************************************************/
 qx.Class.define("org.eclipse.rap.rwt.visualization.jit.SpaceTree",
-{ extend :qx.ui.layout.CanvasLayout,
+{ extend :org.eclipse.rap.rwt.visualization.jit.BaseVisualization,
 	
-	construct : function(id) {
-		this.base(arguments);
-		this.setHtmlProperty("id", id);
-		this._id = id;
-		this._viz = null;
-	},
-
-	properties : {
-		visible : {
-			init :"",
-			apply :"load"
-	  },
-	  widgetData : {
-	  	init :"",
-		  apply :"refreshData"
-	  }
-	},
-
-	destruct : function() {
-
-	},
-
 	members : {
-
-		_doActivate : function() {
-			var shell = null;
-			var parent = this.getParent();
-			while (shell == null && parent != null) {
-				if (parent.classname == "org.eclipse.swt.widgets.Shell") {
-					shell = parent;
-				}
-				parent = parent.getParent();
-			}
-			if (shell != null) {
-				shell.setActiveChild(this);
-			}
-		},
 		
-		load : function() {
-		  var parent = this;
-		  try {
-		    var vis = this.getVisible();
-		    if (vis == "false") {
-		      // make invisible
-		      return;
-		    }
-		    qx.ui.core.Widget.flushGlobalQueues();
-		    if (this._viz == null) {
-		      this.info("Creating spacetree.");
-		      var qParent = document.getElementById(this._id);
-		      var vizParent = document.createElement("div");
-		      var vizId = "vizParent"+this._id;
-		      vizParent.setAttribute("id", vizId);
-		      qParent.appendChild(vizParent);
-		      vizParent.width = this.getWidth();
-		      vizParent.height = this.getHeight();
-		      var widgetId = this._id;
-		      
-		      //Create a node rendering function that plots a fill 
-		      //rectangle and a stroke rectangle for borders 
-		      $jit.ST.Plot.NodeTypes.implement({ 
-		        'stroke-rect': {
-		          'render': function(node, canvas) { 
-		            var width = node.getData('width'), 
-		            height = node.getData('height'), 
-		            pos = this.getAlignedPos(node.pos.getc(true), width, height), 
-		            posX = pos.x + width/2, 
-		            posY = pos.y + height/2;
-		            this.nodeHelper.rectangle.render('fill', {x: posX, y: posY}, 
-		                width, height, canvas); 
-		            this.nodeHelper.rectangle.render('stroke', {x: posX, y: posY}, 
-		                width, height, canvas); 
-		          } 
-		        } 
-		      }); 
-		      
-		      var st = new $jit.ST({
-		        injectInto: vizId,
-		        orientation: "left",  
-		        levelsToShow: 2,  
-		        subtreeOffset: 8,  
-		        siblingOffset: 5,  
-		        levelDistance: 30,  
-		        withLabels: true,  
-		        align: "center",  
-		        multitree: false,  
-		        indent: 10,  
-		        //set distance between node and its children
-		        levelDistance: 50,
-		        Navigation: {  
-		          enable:true,  
-		          panning:true,
-		          zooming: 20
-		        },
-		        Node: {  
-		          overridable: true,
-		          type: 'stroke-rect',
-		          /*type: 'rectangle',*/  
-		          color: '#ccb',  
-		          lineWidth: 1,  
-		          height: 20,  
-		          width: 90,  
-		          dim: 15,  
-		          align: "center",
-		          CanvasStyles: {  
-		            fillStyle: '#ccb',  
-		            strokeStyle: '#829bcd',  
-		            lineWidth: 2  
-		          }  
-		        },  
-		        Edge: {  
-		          overridable: true,  
-		          type: 'bezier',  
-		          dim: 15,  
-		          lineWidth: 1  
-		        },
-		        Tips: {  
-		          enable: true,
-		          force: true,
-		          type: 'auto',  
-		          offsetX: 10,  
-		          offsetY: 10,  
-		          onShow: function(tip, node) {
-		            tip.style.border = "1px solid #c0c0c0";
-		            tip.style.backgroundColor = "#ddd";
-		            tip.innerHTML = node.name;
-		            tip.style.zIndex = 1000000000;
-		          }  
-		        },
-		        duration: 700,  
-		        fps: 25,  
-		        transition: $jit.Trans.Quart.easeInOut,  
-		        clearCanvas: true,  
-		        
-		        onBeforeCompute: function(node) {  
-		          //do something onBeforeCompute  
-		        },  
-		        onAfterCompute: function(){
-		          var node = $jit.Graph.Util.getClosestNodeToOrigin(st.graph, "current");
-		          qParent.selection = node;
-		          //fire selection event
-		          parent.info("Sending selected node: "+node.id);
-		          var req = org.eclipse.swt.Request.getInstance();
-		          req.addParameter(widgetId + ".selectedNode", node.id);
-		          req.addEvent( "org.eclipse.swt.events.widgetSelected", widgetId );
-		          req.send();
-		        },  
-		        onCreateLabel:   function(domElement, node) {  
-		          domElement.id = node.id;            
-		          domElement.innerHTML = node.name;
-		          domElement.onclick = function(){
-		            st.onClick(node.id);
-		          };
-		          //set label styles
-		          var style = domElement.style;
-		          var font = parent.getFont();
-  		          style.fontFamily = font.getFamily();
-  		          try {
-  		            style.fontStyle = font.generateStyle();
-  		          }
-  		          catch (e) {
-  		            //ignore..some items are not cross - browser compatible
-  		          }
-  		          style.fontSize = font.getSize();
-  		          style.width = st.controller.Node.width + 'px';
-  		          style.height = st.controller.Node.height + 'px';            
-  		          style.cursor = 'pointer';
-  		          style.textAlign= 'center';
-  		          style.verticalAlign = 'middle';
-  		          style.padding = '3px';
-  		          var color = parent.getTextColor();
-  		          style.color = color;
-		        },  
-		        onPlaceLabel:    function(domElement, node) {
-		          //future use
-		          var style = domElement.style;
-		          //todo align top and left based on scale
-		          var width = st.controller.Node.width*st.canvas.scaleOffsetX;
-              var height = st.controller.Node.height*st.canvas.scaleOffsetY; 
-              style.width = width + 'px';
-              style.height = height + 'px';
-		          
-              var pos = node.pos.getc(true); 
-              var w = node.getData('width');
-              var h = node.getData('height');
-              var radius = st.canvas.getSize();
-          
-              var ox = st.canvas.translateOffsetX;
-              var oy = st.canvas.translateOffsetY;
-              var sx = st.canvas.scaleOffsetX;
-              var sy = st.canvas.scaleOffsetY;
-              var posx = pos.x * sx + ox;
-              var posy = pos.y * sy + oy;
-              //use scaled width
-              var left = Math.round(posx - width / 2 + radius.width/2);
-              var top = Math.round(posy - height / 2 + radius.height/2);
-              style.left = left+'px';
-              style.top = top+'px';
-              var font = parent.getFont();
-              style.fontSize = Math.ceil(font.getSize()*sx)+'pt';
-              
-              //don't show if not in canvas
-              var canvasSize = st.canvas.getSize();
-              if(left >= canvasSize.width || left < 0 || top >= canvasSize.height || top < 0) {
-                style.display = 'none';
-              }
-              else {
-                style.display = '';
-              }
-		        },  
-		        onBeforePlotNode:function(node) {  
-		          //add some color to the nodes in the path between the
-		          //root node and the selected node.
-		          if (node.selected) {
-		            node.setCanvasStyle('strokeStyle', "#fff");
-		            node.setCanvasStyle('fillStyle', "#ff7");
+		_createViz : function(domElement) {
+			var vizId = domElement.getAttribute("id");
+			var parent = this;
+			//Create a node rendering function that plots a fill 
+			//rectangle and a stroke rectangle for borders 
+			$jit.ST.Plot.NodeTypes.implement({ 
+				'stroke-rect': {
+					'render': function(node, canvas) { 
+						var width = node.getData('width'), 
+						height = node.getData('height'), 
+						pos = this.getAlignedPos(node.pos.getc(true), width, height), 
+						posX = pos.x + width/2, 
+						posY = pos.y + height/2;
+						this.nodeHelper.rectangle.render('fill', {x: posX, y: posY}, 
+								width, height, canvas); 
+						this.nodeHelper.rectangle.render('stroke', {x: posX, y: posY}, 
+								width, height, canvas); 
+					} 
+				} 
+			}); 
+			
+			var st = new $jit.ST({
+				injectInto: vizId,
+				orientation: "left",  
+				levelsToShow: 2,  
+				subtreeOffset: 8,  
+				siblingOffset: 5,  
+				levelDistance: 30,  
+				withLabels: true,  
+				align: "center",  
+				multitree: false,  
+				indent: 10,  
+				//set distance between node and its children
+				levelDistance: 50,
+				Navigation: {  
+					enable:true,  
+					panning:true,
+					zooming: 20
+				},
+				Node: {  
+					overridable: true,
+					type: 'stroke-rect',
+					/*type: 'rectangle',*/  
+					color: '#ccb',  
+					lineWidth: 1,  
+					height: 20,  
+					width: 90,  
+					dim: 15,  
+					align: "center",
+					CanvasStyles: {  
+						fillStyle: '#ccb',  
+						strokeStyle: '#829bcd',  
+						lineWidth: 2  
+					}  
+				},  
+				Edge: {  
+					overridable: true,  
+					type: 'bezier',  
+					dim: 15,  
+					lineWidth: 1  
+				},
+				Tips: {  
+					enable: true,
+					force: true,
+					type: 'auto',  
+					offsetX: 10,  
+					offsetY: 10,  
+					onShow: function(tip, node) {
+						tip.style.border = "1px solid #c0c0c0";
+						tip.style.backgroundColor = "#ddd";
+						tip.innerHTML = node.name;
+						tip.style.zIndex = 1000000000;
+					}  
+				},
+				duration: 700,  
+				fps: 25,  
+				transition: $jit.Trans.Quart.easeInOut,  
+				clearCanvas: true,  
+				
+				onBeforeCompute: function(node) {  
+					//do something onBeforeCompute  
+				},  
+				onAfterCompute: function(){
+					var node = $jit.Graph.Util.getClosestNodeToOrigin(st.graph, "current");
+//		          qParent.selection = node;
+					//fire selection event
+					parent.info("Sending selected node: "+node.id);
+					var req = org.eclipse.swt.Request.getInstance();
+					req.addParameter(widgetId + ".selectedNode", node.id);
+					req.addEvent( "org.eclipse.swt.events.widgetSelected", widgetId );
+					req.send();
+				},  
+				onCreateLabel:   function(domElement, node) {  
+					domElement.id = node.id;            
+					domElement.innerHTML = node.name;
+					domElement.onclick = function(){
+						st.onClick(node.id);
+					};
+					//set label styles
+					var style = domElement.style;
+					var font = parent.getFont();
+					style.fontFamily = font.getFamily();
+					try {
+						style.fontStyle = font.generateStyle();
+					}
+					catch (e) {
+						//ignore..some items are not cross - browser compatible
+					}
+					style.fontSize = font.getSize();
+					style.width = st.controller.Node.width + 'px';
+					style.height = st.controller.Node.height + 'px';            
+					style.cursor = 'pointer';
+					style.textAlign= 'center';
+					style.verticalAlign = 'middle';
+					style.padding = '3px';
+					var color = parent.getTextColor();
+					style.color = color;
+				},  
+				onPlaceLabel:    function(domElement, node) {
+					//future use
+					var style = domElement.style;
+					//todo align top and left based on scale
+					var width = st.controller.Node.width*st.canvas.scaleOffsetX;
+					var height = st.controller.Node.height*st.canvas.scaleOffsetY; 
+					style.width = width + 'px';
+					style.height = height + 'px';
+					
+					var pos = node.pos.getc(true); 
+					var w = node.getData('width');
+					var h = node.getData('height');
+					var radius = st.canvas.getSize();
+					
+					var ox = st.canvas.translateOffsetX;
+					var oy = st.canvas.translateOffsetY;
+					var sx = st.canvas.scaleOffsetX;
+					var sy = st.canvas.scaleOffsetY;
+					var posx = pos.x * sx + ox;
+					var posy = pos.y * sy + oy;
+					//use scaled width
+					var left = Math.round(posx - width / 2 + radius.width/2);
+					var top = Math.round(posy - height / 2 + radius.height/2);
+					style.left = left+'px';
+					style.top = top+'px';
+					var font = parent.getFont();
+					style.fontSize = Math.ceil(font.getSize()*sx)+'pt';
+					
+					//don't show if not in canvas
+					var canvasSize = st.canvas.getSize();
+					if(left >= canvasSize.width || left < 0 || top >= canvasSize.height || top < 0) {
+						style.display = 'none';
+					}
+					else {
+						style.display = '';
+					}
+				},  
+				onBeforePlotNode:function(node) {  
+					//add some color to the nodes in the path between the
+					//root node and the selected node.
+					if (node.selected) {
+						node.setCanvasStyle('strokeStyle', "#fff");
+						node.setCanvasStyle('fillStyle', "#ff7");
 //		            node.data.$color = "#ff7";
-		          }
-		          else {
+					}
+					else {
 //		            delete node.data.$color;
-		            node.setCanvasStyle('strokeStyle', "#829bcd");
-		            var GUtil = $jit.Graph.Util;
-		            //if the node belongs to the last plotted level
-		            if(!GUtil.anySubnode(node, "exist")) {
-		              //count children number
-		              var count = 0;
-		              GUtil.eachSubnode(node, function(n) { count++; });
-		              //assign a node color based on
-		              //how many children it has
-		              node.setCanvasStyle('fillStyle', ['#aaa', '#baa', '#caa', '#daa', '#eaa', '#faa'][count]);
+						node.setCanvasStyle('strokeStyle', "#829bcd");
+						var GUtil = $jit.Graph.Util;
+						//if the node belongs to the last plotted level
+						if(!GUtil.anySubnode(node, "exist")) {
+							//count children number
+							var count = 0;
+							GUtil.eachSubnode(node, function(n) { count++; });
+							//assign a node color based on
+							//how many children it has
+							node.setCanvasStyle('fillStyle', ['#aaa', '#baa', '#caa', '#daa', '#eaa', '#faa'][count]);
 //		              node.data.$color = ['#aaa', '#baa', '#caa', '#daa', '#eaa', '#faa'][count];                    
-		            }
-		          }  
-		        },  
-		        onAfterPlotNode: function(node) {  
-		          //do something onAfterPlotNode  
-		        },  
-		        onBeforePlotLine:function(adj) {  
-		          if (adj.nodeFrom.selected && adj.nodeTo.selected) {
-		            adj.data.$color = "#fff";
-		            adj.data.$lineWidth = 3;
-		          }
-		          else {
-		            delete adj.data.$color;
-		            delete adj.data.$lineWidth;
-		          }  
-		        },  
-		        onAfterPlotLine: function(adj) {  
-		          //do something onAfterPlotLine  
-		        },
-		        request:         false
-		      });
-		      this.addEventListener("changeWidth", function(e) {
-		        if (vizParent != null) {
-		          vizParent.width = e.getValue();
-		          if (vizParent.height != null && vizParent.width != null) {
-		            st.canvas.resize(vizParent.width, vizParent.height);
-		            st.refresh();
-		          }
-		        }
-		      });
-		      this.addEventListener("changeHeight", function(e) {
-		        if (vizParent != null) {
-		          vizParent.height = e.getValue();
-		          if (vizParent.height != null && vizParent.width != null) {
-                st.canvas.resize(vizParent.width, vizParent.height);
-                st.refresh();
-              }
-		        }
-		      });
-		      
-		      this._viz = st;
-		      this._vizParent = vizParent;
-		    }
-		  }
-		  catch (e) {
-		    this.info(e);
-		  }
-		},
-		
-		addTreeEvent : function (obj, type, fn) {
-		    if (obj.addEventListener) obj.addEventListener(type, fn, false);
-		    else obj.attachEvent('on' + type, fn);
-		},
-		
-		refreshData : function () {
-			try {
-		      var st = this._viz;
-		      if (st != null) {
-		    	  this.info("Loading spacetree data.");
-		    	  var data = this.getWidgetData();
-		    	  if (data != null) {
-		    	    st.loadJSON(data);
-		    	    //compute node positions and layout  
-		    	    st.compute();
-		    	    //Emulate a click on the root node.  
-		    	    st.onClick(st.root);
-		    	  }
-		      }
-			}
-			catch (e) {
-				this.info(e);
-			}
-		},
-		
-		setProperty : function (propName, propValue) {
-      try {
-        var st = this._viz;
-        if (st != null) {
-          st.controller[propName] = propValue;
-          st.refresh();
-        }
-      }
-      catch (e) {
-        this.info(e);
-      }
-    },
-    
-    setNodeProperty : function (propName, propValue) {
-      try {
-        var st = this._viz;
-        if (st != null) {
-          st.controller.Node[propName] = propValue;
-          st.refresh();
-        }
-      }
-      catch (e) {
-        this.info(e);
-      }
-    },
-    
-    setEdgeProperty : function (propName, propValue) {
-      try {
-        var st = this._viz;
-        if (st != null) {
-          st.controller.Edge[propName] = propValue;
-          st.refresh();
-        }
-      }
-      catch (e) {
-        this.info(e);
-      }
-    },
-    
-    setZoom : function (percent) {
-      try {
-        var st = this._viz;
-        if (st != null) {
-          st.canvas.scale(percent,percent);
-          st.refresh();
-        }
-      }
-      catch (e) {
-        this.info(e);
-      }
-    },
-    
-//    zoomToFit : function () {
-//      try {
-//        var st = this._viz;
-//        if (st != null) {
-//          var sz = st.canvas.getSize();
-//          var xratio = sz.width/st.canvas.virtualWidth;
-//          var yratio = sz.height/st.canvas.virtualHeight;
-//          st.canvas.scale(xratio,yratio);
-//          st.refresh();
-//        }
-//      }
-//      catch (e) {
-//        this.info(e);
-//      }
-//    },
-		
-		selectNode : function (id) {
-			try {
-				var st = this._viz;
-				if (st != null) {
-					st.onClick(id);
+						}
+					}  
+				},  
+				onAfterPlotNode: function(node) {  
+					//do something onAfterPlotNode  
+				},  
+				onBeforePlotLine:function(adj) {  
+					if (adj.nodeFrom.selected && adj.nodeTo.selected) {
+						adj.data.$color = "#fff";
+						adj.data.$lineWidth = 3;
+					}
+					else {
+						delete adj.data.$color;
+						delete adj.data.$lineWidth;
+					}  
+				},  
+				onAfterPlotLine: function(adj) {  
+					//do something onAfterPlotLine  
+				},
+				request:         false
+			});
+			this.addEventListener("changeWidth", function(e) {
+				if (domElement != null) {
+					domElement.width = e.getValue();
+					if (domElement.height != null && domElement.width != null) {
+						st.canvas.resize(domElement.width, domElement.height);
+						st.refresh();
+					}
 				}
-			}
-			catch (e) {
-				this.info(e);
-			}
-		},
-		
-		_doResize : function() {
-			qx.ui.core.Widget.flushGlobalQueues();
+			});
+			this.addEventListener("changeHeight", function(e) {
+				if (domElement != null) {
+					domElement.height = e.getValue();
+					if (domElement.height != null && domElement.width != null) {
+						st.canvas.resize(domElement.width, domElement.height);
+						st.refresh();
+					}
+				}
+			});
 		}
 	}
-});
\ No newline at end of file
+});
+
+org.eclipse.rap.rwt.visualization.jit.BaseVisualization.registerAdapter(
+		"org.eclipse.rap.rwt.visualization.jit.SpaceTree",
+		org.eclipse.rap.rwt.visualization.jit.SpaceTree);
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/spacetreekit/SpaceTreeLCA.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/spacetreekit/SpaceTreeLCA.java
index 4bbe94e..407650d 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/spacetreekit/SpaceTreeLCA.java
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/spacetreekit/SpaceTreeLCA.java
@@ -17,8 +17,8 @@
 
 public class SpaceTreeLCA extends JITGraphLCA {
 
-  public Class getWidgetType () {
+  @Override
+  public Class<?> getWidgetType() {
     return SpaceTree.class;
   }
-  
 }
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/treemapkit/TreeMap.js b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/treemapkit/TreeMap.js
index fc4377c..2da2d32 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/treemapkit/TreeMap.js
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/treemapkit/TreeMap.js
@@ -15,138 +15,86 @@
  * 
  *****************************************************************************/
 qx.Class.define("org.eclipse.rap.rwt.visualization.jit.TreeMap",
-{ extend :qx.ui.layout.CanvasLayout,
+{ extend :org.eclipse.rap.rwt.visualization.jit.BaseVisualization,
 	
-	construct : function(id,type) {
-		this.base(arguments);
-		this.setHtmlProperty("id", id);
-		this._id = id;
-		this._viz = null;
-		this._type = type;
-	},
-
-	properties : {
-		visible : {
-			init :"",
-			apply :"load"
-	    },
-	    widgetData : {
-	    	init :"",
-			apply :"refreshData"
-	    }
-	},
-
-	destruct : function() {
-
-	},
-
 	members : {
-
-		_doActivate : function() {
-			var shell = null;
-			var parent = this.getParent();
-			while (shell == null && parent != null) {
-				if (parent.classname == "org.eclipse.swt.widgets.Shell") {
-					shell = parent;
-				}
-				parent = parent.getParent();
-			}
-			if (shell != null) {
-				shell.setActiveChild(this);
-			}
-		},
 		
-		load : function() {
-		  var parent = this;
-		  try {
-		    var vis = this.getVisible();
-		    if (vis == "false") {
-		      // make invisible
-		      return;
-		    }
-		    qx.ui.core.Widget.flushGlobalQueues();
-		    if (this._viz == null) {
-		      this.info("Creating treemap.");
-		      
-		      var qParent = document.getElementById(this._id);
-		      var vizParent = document.createElement("div");
-		      var vizId = "vizParent"+this._id;
-		      vizParent.setAttribute("id", vizId);
-		      vizParent.setAttribute("style","position:absolute;overflow:hidden;display:table-cell;width:100%;vertical-align:middle;height:100%;z-order:auto;");
-		      vizParent.width = this.getWidth();
-		      vizParent.height = this.getHeight();
-		      qParent.appendChild(vizParent);
-		      var vizStyle = "#infovis div {position:absolute;overflow:hidden;font-size:11px;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;}#infovis .content {background-color:#333;border:0px solid #111;} #infovis .head {color:white;background-color:#444;} #infovis .head.in-path {background-color:#655;} #infovis .body {background-color:black;} #infovis .leaf {color:white;background-color:#111;display:table-cell;vertical-align:middle;border:1px solid #000;} #infovis .over-leaf {border:1px solid #9FD4FF;} #infovis .over-content {background-color: #9FD4FF;} #infovis .over-head {background-color:#A4D9FF;color:black;} .tip {color: #fff;width: 139px;background-color: black;opacity:0.9;filter:alpha(opacity=90);font-size:10px;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;padding:7px;} .album {width:100px;margin:3px;} input {font-size:10px;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;}";
-		      vizStyle = vizStyle.replace(/infovis/gi,vizId);
-		      qx.html.StyleSheet.createElement(vizStyle);
-		      
-		      var tm = null;
-		      var config = {
-		          titleHeight: 15,
-		          animate: true,
-		          //The id of the treemap container
-		          injectInto: vizId,
-		          //Set the max. depth to be shown for a subtree
-		          levelsToShow: 1,
-		          offset:1,
-		          Events: {  
-		            enable: true,  
-		            onClick: function(node) {  
-		              if(node) tm.enter(node);  
-		            },  
-		            onRightClick: function() {  
-		              tm.out();  
-		            }  
-		          },  
-		          duration: 800,  
-		          //Enable tips  
-		          Tips: {  
-		            enable: true,  
-		            //add positioning offsets  
-		            offsetX: 20,  
-		            offsetY: 20,  
-		            //implement the onShow method to  
-		            //add content to the tooltip when a node  
-		            //is hovered  
-		            onShow: function(tip, node, isLeaf, domElement) {  
-		              var html = "<div class=\"tip-title\">" + node.name   
-		              + "</div><div class=\"tip-text\">";  
-		              var data = node.data;  
-		              if(data.playcount) {  
-		                html += "play count: " + data.playcount;  
-		              }  
-		              if(data.image) {  
-		                html += "<img src=\""+ data.image +"\" class=\"album\" />";  
-		              }  
-		              tip.innerHTML =  html;   
-		            }    
-		          },  
-		          //Add the name of the node in the correponding label  
-		          //This method is called once, on label creation.  
-		          onCreateLabel: function(domElement, node){  
-		            domElement.innerHTML = node.name;  
-		            var style = domElement.style;  
-		            style.display = '';  
-		            style.border = '1px solid transparent';  
-		            domElement.onmouseover = function() {  
-		              style.border = '1px solid #9FD4FF';  
-		            };  
-		            domElement.onmouseout = function() {  
-		              style.border = '1px solid transparent';  
-		            };  
-		          }  
-		      };
-		      
-		      if (this._type == 2) {
-		        tm = new $jit.TM.Strip(config);
-		      }
-		      else if (this._type == 1) {
-		        tm = new $jit.TM.Squarified(config);
-		      }
-		      else {
-		        tm = new $jit.TM.SliceAndDice(config);
-		      }
-		      
+		_createViz : function(domElement) {
+			var vizId = domElement.getAttribute("id");
+			var parent = this;
+			domElement.setAttribute("style","position:absolute;overflow:hidden;display:table-cell;width:100%;vertical-align:middle;height:100%;z-order:auto;");
+			domElement.width = this.getWidth();
+			domElement.height = this.getHeight();
+			qParent.appendChild(domElement);
+			var vizStyle = "#infovis div {position:absolute;overflow:hidden;font-size:11px;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;}#infovis .content {background-color:#333;border:0px solid #111;} #infovis .head {color:white;background-color:#444;} #infovis .head.in-path {background-color:#655;} #infovis .body {background-color:black;} #infovis .leaf {color:white;background-color:#111;display:table-cell;vertical-align:middle;border:1px solid #000;} #infovis .over-leaf {border:1px solid #9FD4FF;} #infovis .over-content {background-color: #9FD4FF;} #infovis .over-head {background-color:#A4D9FF;color:black;} .tip {color: #fff;width: 139px;background-color: black;opacity:0.9;filter:alpha(opacity=90);font-size:10px;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;padding:7px;} .album {width:100px;margin:3px;} input {font-size:10px;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;}";
+			vizStyle = vizStyle.replace(/infovis/gi,vizId);
+			qx.html.StyleSheet.createElement(vizStyle);
+			
+			var tm = null;
+			var config = {
+					titleHeight: 15,
+					animate: true,
+					//The id of the treemap container
+					injectInto: vizId,
+					//Set the max. depth to be shown for a subtree
+					levelsToShow: 2,
+					offset:1,
+					Events: {  
+						enable: true,  
+						onClick: function(node) {  
+							if(node) tm.enter(node);  
+						},  
+						onRightClick: function() {  
+							tm.out();  
+						}  
+					},  
+					duration: 800,  
+					//Enable tips  
+					Tips: {  
+						enable: true,  
+						//add positioning offsets  
+						offsetX: 20,  
+						offsetY: 20,  
+						//implement the onShow method to  
+						//add content to the tooltip when a node  
+						//is hovered  
+						onShow: function(tip, node, isLeaf, domElement) {
+							tip.style.zIndex="100000000";
+							var html = "<div class=\"tip-title\">" + node.name 
+							+ "</div><div class=\"tip-text\">";
+							var data = node.data;
+							if(data.usecount) {
+								html += "Usage Count: " + data.usecount;
+							}
+							tip.innerHTML =  html;  
+						}    
+					},  
+					//Add the name of the node in the correponding label  
+					//This method is called once, on label creation.  
+					onCreateLabel: function(domElement, node){  
+						domElement.innerHTML = node.name;  
+						var style = domElement.style;  
+						style.display = '';  
+						style.border = '1px solid transparent';  
+						domElement.onmouseover = function() {  
+							style.border = '1px solid #9FD4FF';  
+						};  
+						domElement.onmouseout = function() {  
+							style.border = '1px solid transparent';  
+						};  
+					}  
+			};
+			
+			if (this._type == 2) {
+				tm = new $jit.TM.Strip(config);
+			}
+			else if (this._type == 1) {
+				tm = new $jit.TM.Squarified(config);
+			}
+			else {
+				tm = new $jit.TM.SliceAndDice(config);
+			}
+			
 //				tm.onLeftClick = function(elem) {
 //			        this.enter(elem);
 //			        var node = elem;
@@ -168,76 +116,36 @@
 //		        	req.send();
 //			        
 //			    };
-		      
-		      this.addEventListener("changeWidth", function(e) {
-		        vizParent.width = this.getWidth();
-		        if (vizParent.height != null && vizParent.width != null) {
-  		        tm.canvas.resize(vizParent.width, vizParent.height);
-//  		        qx.client.Timer.once(function() {
+			
+			this.addEventListener("changeWidth", function(e) {
+				domElement.width = this.getWidth();
+				if (domElement.height != null && domElement.width != null) {
+					tm.canvas.resize(domElement.width, domElement.height);
+//  		        rwt.client.Timer.once(function() {
 //  		          parent.refreshData();
 //  		        },this,100);
-		        }
-		      });
-		      this.addEventListener("changeHeight", function(e) {
-		        vizParent.height = this.getHeight();
-		        if (vizParent.height != null && vizParent.width != null) {
-  		        tm.canvas.resize(vizParent.width, vizParent.height);
-//  		        qx.client.Timer.once(function() {
+				}
+			});
+			this.addEventListener("changeHeight", function(e) {
+				domElement.height = this.getHeight();
+				if (domElement.height != null && domElement.width != null) {
+					tm.canvas.resize(domElement.width, domElement.height);
+//  		        rwt.client.Timer.once(function() {
 //  		          parent.refreshData();
 //  		        },this,100);
-		        }
-		      });
-		      
-		      this._viz = tm;
-		      this._vizParent = vizParent;
-		      //This is a hack to ensure that a refresh is called after the style tag above is 
-		      //initialized
-//		      qx.client.Timer.once(function() {
+				}
+			});
+			
+			//This is a hack to ensure that a refresh is called after the style tag above is 
+			//initialized
+//		      rwt.client.Timer.once(function() {
 //		        this.refreshData();
 //		      },this,100);
-		    }
-		  }
-		  catch (e) {
-		    this.info(e);
-		  }
-		},
-		
-		addTreeEvent : function (obj, type, fn) {
-		    if (obj.addEventListener) obj.addEventListener(type, fn, false);
-		    else obj.attachEvent('on' + type, fn);
-		},
-		
-		refreshData : function () {
-			try {
-				var tm = this._viz;
-				if (tm != null) {
-					var data = this.getWidgetData();
-					if (data != null) {
-						this.info("Loading treemap data.");
-						tm.loadJSON(data);
-					}
-				}
-			}
-			catch (e) {
-				this.info(e);
-			}
-		},
-		
-		selectNode : function (id) {
-			try {
-				var tm = this._viz;
-				if (tm != null) {
-					tm.onLeftClick(id);
-				}
-			}
-			catch (e) {
-				this.info(e);
-			}
-		},
-		
-		
-		_doResize : function() {
-			qx.ui.core.Widget.flushGlobalQueues();
+			return tm;
 		}
 	}
-});
\ No newline at end of file
+});
+
+org.eclipse.rap.rwt.visualization.jit.BaseVisualization.registerAdapter(
+		"org.eclipse.rap.rwt.visualization.jit.TreeMap",
+		org.eclipse.rap.rwt.visualization.jit.TreeMap);
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/treemapkit/TreeMapLCA.java b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/treemapkit/TreeMapLCA.java
index 7ca59e1..86e8169 100644
--- a/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/treemapkit/TreeMapLCA.java
+++ b/bundles/org.eclipse.rap.rwt.visualization.jit/src/org/eclipse/rap/rwt/visualization/jit/internal/treemapkit/TreeMapLCA.java
@@ -19,14 +19,15 @@
 
 public class TreeMapLCA extends JITWidgetLCA {
 
-  public Class getWidgetType () {
+  @Override
+  public Class<?> getWidgetType() {
     return TreeMap.class;
   }
-  
-  protected Collection getInitializationParameters(JITVisualizationWidget vWidget) {
-    Collection params = super.getInitializationParameters(vWidget);
-    params.add(new Integer(((TreeMap)vWidget).getType()));
+
+  @Override
+  protected Collection<?> getInitializationParameters( JITVisualizationWidget vWidget ) {
+    Collection params = super.getInitializationParameters( vWidget );
+    params.add( new Integer( ( ( TreeMap )vWidget ).getType() ) );
     return params;
   }
-  
 }
