diff --git a/asterix-app/src/main/resources/sdk/static/example/js/demo.js b/asterix-app/src/main/resources/sdk/static/example/js/demo.js
index b5c5ae8..25aedf9 100644
--- a/asterix-app/src/main/resources/sdk/static/example/js/demo.js
+++ b/asterix-app/src/main/resources/sdk/static/example/js/demo.js
@@ -174,25 +174,52 @@
         var expression9a = new FLWOGRExpression({
             "dataverse" : "TinySocial",
             "success"   : function(res) {
-                            alert(JSON.stringify(res));
                             $('#result9a').html(res["results"]);
                           }
-        });
-        alert("EXPRESSION 9a " + expression9a.val());
+        })
+        .bind( new ForClause("t", null, new AsterixExpression().set(["dataset TweetMessages"])))
+        .bind( new GroupClause("uid", new AExpression().set("$t.user.screen-name"), "with", "t") )
+        .bind( new ReturnClause(
+            {
+                "user" : "$uid",
+                "count" : new FunctionExpression(
+                            { 
+                                "function" : "count",
+                                "expression" : new AsterixExpression().set(["$t"])
+                            }
+                )
+            }
+        ));
+
+        expression9a.run();
     });
 
-    // 9b - Hash-bAsed Grouping & Aggregation
+    // 9b - Hash-based Grouping & Aggregation
     $("#run9b").click(function() {
         $('#result9b').html('');
 
         var expression9b = new FLWOGRExpression({
             "dataverse" : "TinySocial",
             "success"   : function(res) {
-                            alert(JSON.stringify(res));
                             $('#result9b').html(res["results"]);
                           }
-        });
-        alert("EXPRESSION 9b " + expression9b.val());
+        })
+        .bind( new ForClause("t", null, new AsterixExpression().set(["dataset TweetMessages"]))) 
+        .bind( new AQLClause().set("/*+ hash*/"))  
+        .bind( new GroupClause("uid", new AExpression().set("$t.user.screen-name"), "with", "t") )
+        .bind( new ReturnClause(
+            {
+                "user" : "$uid",
+                "count" : new FunctionExpression(
+                            { 
+                                "function" : "count",
+                                "expression" : new AsterixExpression().set(["$t"])
+                            }
+                )
+            }
+        ));
+        
+        expression9b.run();
     });
     
     // 10 - Grouping and Limits
@@ -242,4 +269,7 @@
         alert("EXPRESSION 11 " + expression11.val());
     });
 
+    $('#run9a').trigger('click');
+    $('#run9b').trigger('click');
+    $('#run10').trigger('click');
 });
diff --git a/asterix-app/src/main/resources/sdk/static/js/asterix-sdk-stable.js b/asterix-app/src/main/resources/sdk/static/js/asterix-sdk-stable.js
index ad8421d..870f93b 100644
--- a/asterix-app/src/main/resources/sdk/static/js/asterix-sdk-stable.js
+++ b/asterix-app/src/main/resources/sdk/static/js/asterix-sdk-stable.js
@@ -372,6 +372,11 @@
     return this;
 };
 
+AQLClause.prototype.set = function(value) {
+    this._properties["clause"] = value;
+    return this;
+};
+
 
 // ForClause
 //
