Rewrites queries to cleaner syntax
diff --git a/asterix-app/src/main/resources/sdk/static/AdmAql101/demo.html b/asterix-app/src/main/resources/sdk/static/AdmAql101/demo.html
index 3afaaa4..7ad27ae 100644
--- a/asterix-app/src/main/resources/sdk/static/AdmAql101/demo.html
+++ b/asterix-app/src/main/resources/sdk/static/AdmAql101/demo.html
@@ -6,23 +6,25 @@
 
     <style>
         .pretty-printed {
-    background-color: #eeeeee;
-    margin-bottom: 1em;
+            background-color: #eeeeee;
+            margin-bottom: 1em;
         }
 
         .how-to-run {
-    background-color: #c8c8c8;
-    margin-bottom: 1em;
+            background-color: #c8c8c8;
+            margin-bottom: 1em;
         }
 
         .result-output {
-    background-color: #BED8E5;
-    margin-bottom: 1em;
+            background-color: #BED8E5;
+            margin-bottom: 1em;
+            overflow-x: scroll;
+            overflow-y: none;
         }
 
         body {
-    font-family : "Helvetica";
-    margin-bottom: 1em;
+            font-family : "Helvetica";
+            margin-bottom: 1em;
         }
     </style>
 
@@ -46,8 +48,8 @@
 
         <div class="how-to-run"><pre><code class="javascript">
         var expression0a = new FLWOGRExpression()
-            .bind( new ForClause("user", new AExpression().set("dataset FacebookUsers")))
-            .bind( new WhereClause(new AExpression().set("$user.id = 8")))
+            .ForClause("$user", new AExpression("dataset FacebookUsers"))
+            .WhereClause(new AExpression("$user.id = 8"))
             .ReturnClause("$user");
         </code></pre></div>
 
@@ -70,12 +72,9 @@
         
         <div class="how-to-run"><pre><code class="javascript">
         var expression0b = new FLWOGRExpression()
-            .bind( new ForClause("user", new AExpression().set("dataset FacebookUsers")))
-            .bind( new WhereClause().and(
-                new AExpression().set("$user.id >= 2"), 
-                new AExpression().set("$user.id <= 4")
-            ))
-            .ReturnClause("$user");        
+            .ForClause("$user", new AExpression("dataset FacebookUsers"))
+            .WhereClause().and(new AExpression("$user.id >= 2"), new AExpression("$user.id <= 4"))
+            .ReturnClause("$user");       
         </code></pre></div>
 
         <div class="result-output" id="result0b">
@@ -98,11 +97,11 @@
         
         <div class="how-to-run"><pre><code class="javascript">
         var expression1 = new FLWOGRExpression()
-            .bind( new ForClause("user", new AExpression().set("dataset FacebookUsers")))
-            .bind( new WhereClause().and(
-                new AExpression().set("$user.user-since >= datetime('2010-07-22T00:00:00')"), 
-                new AExpression().set("$user.user-since <= datetime('2012-07-29T23:59:59')")
-            ))
+            .ForClause("$user", new AExpression("dataset FacebookUsers"))
+            .WhereClause().and(
+                new AExpression("$user.user-since >= datetime('2010-07-22T00:00:00')"), 
+                new AExpression("$user.user-since <= datetime('2012-07-29T23:59:59')")
+            )
             .ReturnClause("$user");
         </code></pre></div>
 
@@ -129,13 +128,13 @@
         
         <div class="how-to-run"><pre><code class="javascript">
         var expression2a = new FLWOGRExpression()
-            .bind( new ForClause ("user", new AQLClause().set("dataset FacebookUsers")))
-            .bind( new ForClause ("message", new AQLClause().set("dataset FacebookMessages")))
-            .bind( new WhereClause (new AExpression().set("$message.author-id = $user.id")))
+            .ForClause ("$user", new AExpression("dataset FacebookUsers"))
+            .ForClause ("$message", new AExpression("dataset FacebookMessages"))
+            .WhereClause(new AExpression("$message.author-id = $user.id"))
             .ReturnClause({
-                    "uname" : "$user.name",
-                    "message" : "$message.message"
-                });
+                "uname" : "$user.name",
+                "message" : "$message.message"
+            });
         </code></pre></div>
 
         <div class="result-output" id="result2a">
@@ -161,15 +160,13 @@
         
         <div class="how-to-run"><pre><code class="javascript">
         var expression2b = new FLWOGRExpression()
-            .bind( new ForClause ("user", new AQLClause().set("dataset FacebookUsers")))
-            .bind( new ForClause ("message", new AQLClause().set("dataset FacebookMessages")))
-            .bind( new WhereClause (new AExpression().set("$message.author-id /*+ indexnl */  = $user.id")))
-            .ReturnClause(
-                {
+            .ForClause ("$user", new AExpression("dataset FacebookUsers"))
+            .ForClause ("$message", new AExpression("dataset FacebookMessages"))
+            .WhereClause(new AExpression("$message.author-id /*+ indexnl */  = $user.id"))
+            .ReturnClause({
                     "uname" : "$user.name",
                     "message" : "$message.message"
-                }
-            );
+            });
         </code></pre></div>
 
         <div class="result-output" id="result2b">
@@ -195,12 +192,12 @@
         
         <div class="how-to-run"><pre><code class="javascript">
         var expression3messages = new FLWOGRExpression()
-            .bind( new ForClause("message", new AExpression().set("dataset FacebookMessages")))
-            .bind( new WhereClause(new AExpression().set("$message.author-id = $user.id")))
+            .ForClause("$message", new AExpression("dataset FacebookMessages"))
+            .WhereClause(new AExpression("$message.author-id = $user.id"))
             .ReturnClause("$message.message");
 
         var expression3 = new FLWOGRExpression()
-            .bind( new ForClause ("user", new AQLClause().set("dataset FacebookUsers")))
+            .ForClause ("$user", new AExpression("dataset FacebookUsers"))
             .ReturnClause({
                 "uname": "$user.name",
                 "messages" : expression3messages
@@ -230,12 +227,12 @@
         
         <div class="how-to-run"><pre><code class="javascript">
         var expression4messages = new FLWOGRExpression()
-            .bind( new ForClause( "t2", new AExpression().set("dataset TweetMessages")))
-            .bind( new WhereClause( new AExpression().set("spatial-distance($t.sender-location, $t2.sender-location) <= 1")))
+            .ForClause( "$t2", new AExpression("dataset TweetMessages"))
+            .WhereClause( new AExpression("spatial-distance($t.sender-location, $t2.sender-location) <= 1"))
             .ReturnClause({ "msgtxt" : "$t2.message-text" });
             
         var expression4 = new FLWOGRExpression()
-            .bind( new ForClause( "t", new AExpression().set("dataset TweetMessages") ))
+            .ForClause( "$t", new AExpression("dataset TweetMessages"))
             .ReturnClause({
                 "message" : "$t.message-text",
                 "nearby-messages" : expression4messages
@@ -273,16 +270,16 @@
         
         <div class="how-to-run"><pre><code class="javascript">
         var similarUsersExpression = new FLWOGRExpression()
-            .bind( new ForClause ("t", new AQLClause().set("dataset TweetMessages")))
-            .bind( new LetClause ("tu", new AExpression().set("$t.user")))
-            .bind( new WhereClause (new AExpression().set("$tu.name ~= $fbu.name")))
+            .ForClause("$t", new AExpression("dataset TweetMessages"))
+            .LetClause ("$tu", new AExpression("$t.user"))
+            .WhereClause(new AExpression("$tu.name ~= $fbu.name"))
             .ReturnClause({
                 "twitter-screenname": "$tu.screen-name",
                 "twitter-name": "$tu.name"
             });
-            
+        
         var expression5 = new FLWOGRExpression()
-            .bind( new ForClause ("fbu", new AQLClause().set("dataset FacebookUsers")))
+            .ForClause ("$fbu", new AExpression("dataset FacebookUsers"))
             .ReturnClause(
                 {
                     "id" : "$fbu.id",
@@ -311,14 +308,14 @@
         
         <div class="how-to-run"><pre><code class="javascript">
         var expression6 = new FLWOGRExpression()
-            .bind( new ForClause ("fbu", new AQLClause().set("dataset FacebookUsers")))
-            .bind( new WhereClause ( 
+            .ForClause ("$fbu", new AQLClause().set("dataset FacebookUsers"))
+            .WhereClause( 
                 new QuantifiedExpression (
                     "some" , 
-                    {"$e" : new AQLClause().set("$fbu.employment") },
-                    new AQLClause().set("is-null($e.end-date)")
+                    {"$e" : new AExpression("$fbu.employment") },
+                    new FunctionExpression("is-null", new AExpression("$e.end-date"))
                 )
-            ))
+            )
             .ReturnClause("$fbu");
         </code></pre></div>
 
@@ -331,7 +328,7 @@
 
     <h2>Query 7 - Universal Quantification</h2>
     <div class="sample-query">
-        <div class="pretty-printed"><pre><pre>
+        <div class="pretty-printed"><pre>
     use dataverse TinySocial;
 
     for $fbu in dataset FacebookUsers
@@ -341,18 +338,15 @@
         
         <div class="how-to-run"><pre><code class="javascript">
         var expression7 = new FLWOGRExpression()
-        .bind( new ForClause (
-            "fbu",
-            new AQLClause().set("dataset FacebookUsers")
-        ))
-        .bind( new WhereClause ( 
-            new QuantifiedExpression (
-                "every" , 
-                {"$e" : new AQLClause().set("$fbu.employment") },
-                new AQLClause().set("not(is-null($e.end-date))")
+            .ForClause("$fbu", new AExpression("dataset FacebookUsers"))
+            .WhereClause( 
+                new QuantifiedExpression (
+                    "every" , 
+                    {"$e" : new AExpression("$fbu.employment") },
+                    new FunctionExpression("not", new FunctionExpression("is-null", new AExpression("$e.end-date")))
+                )
             )
-        ))
-        .ReturnClause("$fbu");
+            .ReturnClause("$fbu");
         </code></pre></div>
 
         <div class="result-output" id="result7">
@@ -374,7 +368,7 @@
         var expression8 = new FunctionExpression(
             "count",
             new FLWOGRExpression()
-                .bind( new ForClause("fbu", new AQLClause().set("dataset FacebookUsers")))
+                .ForClause("$fbu", new AExpression("dataset FacebookUsers"))
                 .ReturnClause("$fbu")
         );
         </code></pre></div>
@@ -401,12 +395,12 @@
         
         <div class="how-to-run"><pre><code class="javascript">
         var expression9a = new FLWOGRExpression()
-            .bind( new ForClause("t", new AExpression().set("dataset TweetMessages")))
-            .bind( new GroupClause("uid", new AExpression().set("$t.user.screen-name"), "with", "t") )
+            .ForClause("$t", new AExpression("dataset TweetMessages"))
+            .GroupClause("$uid", new AExpression("$t.user.screen-name"), "with", "$t")
             .ReturnClause(
                 {
                     "user" : "$uid",
-                    "count" : new FunctionExpression("count", new AExpression().set("$t"))
+                    "count" : new FunctionExpression("count", new AExpression("$t"))
                 }
             );
         </code></pre></div>
@@ -434,13 +428,13 @@
         
         <div class="how-to-run"><pre><code class="javascript">
         var expression9b = new FLWOGRExpression()
-            .bind( new ForClause("t", new AExpression().set("dataset TweetMessages"))) 
-            .bind( new AQLClause().set("/*+ hash*/"))  
-            .bind( new GroupClause("uid", new AExpression().set("$t.user.screen-name"), "with", "t") )
+            .ForClause("$t", new AExpression("dataset TweetMessages"))
+            .AQLClause("/*+ hash*/")
+            .GroupClause("$uid", new AExpression("$t.user.screen-name"), "with", "$t")
             .ReturnClause(
                 {
                     "user" : "$uid",
-                    "count" : new FunctionExpression("count", new AExpression().set("$t"))
+                    "count" : new FunctionExpression("count", new AExpression("$t"))
                 }
             );
         </code></pre></div>
@@ -470,20 +464,17 @@
         
         <div class="how-to-run"><pre><code class="javascript">
         var expression10 = new FLWOGRExpression()
-        .bind( new ForClause("t", new AExpression().set("dataset TweetMessages")))
-        .bind( new GroupClause("uid", new AExpression().set("$t.user.screen-name"), "with", "t") )
-        .bind( new LetClause(
-            "c", 
-            new FunctionExpression("count", new AExpression().set("$t"))
-        ))
-        .bind( new OrderbyClause( new AExpression().set("$c"), "desc" ) )
-        .bind( new LimitClause(new AExpression().set("3")) )
-        .ReturnClause(
-            {
-                "user" : "$uid",
-                "count" : "$c"
-            }
-        );
+            .ForClause("$t", new AExpression("dataset TweetMessages"))
+            .GroupClause("$uid", new AExpression("$t.user.screen-name"), "with", "$t")
+            .LetClause("$c", new FunctionExpression("count", new AExpression("$t")))
+            .OrderbyClause( new AExpression("$c"), "desc" )
+            .LimitClause(new AExpression("3"))
+            .ReturnClause(
+                {
+                    "user" : "$uid",
+                    "count" : "$c"
+                } 
+            );
         </code></pre></div>
 
         <div class="result-output" id="result10">
@@ -512,18 +503,18 @@
         </pre></div>
         
         <div class="how-to-run"><pre><code class="javascript">
-        var expression11 = new FLWOGRExpression()
-        .bind( new ForClause( "t", new AExpression().set("dataset TweetMessages") ))
+    var expression11 = new FLWOGRExpression()
+        .ForClause( "$t", new AExpression("dataset TweetMessages"))
         .ReturnClause({
-            "tweet"         : new AExpression().set("$t"),       
+            "tweet"         : new AExpression("$t"),       
             "similar-tweets": new FLWOGRExpression()
-                                .bind( new ForClause( "t2", new AExpression().set("dataset TweetMessages") ))
-                                .bind( new WhereClause().and(
-                                    new AExpression().set("$t2.referred-topics ~= $t.referred-topics"), 
-                                    new AExpression().set("$t2.tweetid != $t.tweetid")
-                                 ))
+                                .ForClause( "$t2", new AExpression("dataset TweetMessages"))
+                                .WhereClause().and(
+                                    new AExpression("$t2.referred-topics ~= $t.referred-topics"), 
+                                    new AExpression("$t2.tweetid != $t.tweetid")
+                                 )
                                 .ReturnClause("$t2.referred-topics")
-        }); 
+        });
         </code></pre></div>
 
         <div class="result-output" id="result11">
diff --git a/asterix-app/src/main/resources/sdk/static/AdmAql101/js/demo.js b/asterix-app/src/main/resources/sdk/static/AdmAql101/js/demo.js
index b0b9ec1..4b0540a 100644
--- a/asterix-app/src/main/resources/sdk/static/AdmAql101/js/demo.js
+++ b/asterix-app/src/main/resources/sdk/static/AdmAql101/js/demo.js
@@ -1,18 +1,24 @@
 $(document).ready(function() {
     
     var A = new AsterixDBConnection().dataverse("TinySocial");
+    
+    function addResult(dom, res) {
+        for (i in res) {
+            $(dom).append(res[i] + "\n");
+        }
+    }
 
     // 0A - Exact-Match Lookup
     $('#run0a').click(function () {
         $('#result0a').html('');
         
         var expression0a = new FLWOGRExpression()
-            .bind(new ForClause("$user", new AExpression().set("dataset FacebookUsers")))
-            .bind(new WhereClause(new AExpression().set("$user.id = 8")))
+            .ForClause("$user", new AExpression("dataset FacebookUsers"))
+            .WhereClause(new AExpression("$user.id = 8"))
             .ReturnClause("$user");
         
         var success0a = function(res) {
-            $('#result0a').html(res["results"]);
+            addResult('#result0a', res["results"]);
         };
         
         A.query(expression0a.val(), success0a);
@@ -23,15 +29,12 @@
         $('#result0b').html('');
 
         var expression0b = new FLWOGRExpression()
-            .bind( new ForClause("$user", new AExpression().set("dataset FacebookUsers")))
-            .bind( new WhereClause().and(
-                new AExpression().set("$user.id >= 2"), 
-                new AExpression().set("$user.id <= 4")
-            ))
+            .ForClause("$user", new AExpression("dataset FacebookUsers"))
+            .WhereClause().and(new AExpression("$user.id >= 2"), new AExpression("$user.id <= 4"))
             .ReturnClause("$user");
             
         var success0b = function(res) {
-            $('#result0b').html(res["results"]);
+            addResult('#result0b', res["results"]);
         };
         
         A.query(expression0b.val(), success0b);
@@ -42,15 +45,15 @@
         $('#result1').html('');
 
         var expression1 = new FLWOGRExpression()
-            .bind( new ForClause("$user", new AExpression().set("dataset FacebookUsers")))
-            .bind( new WhereClause().and(
-                new AExpression().set("$user.user-since >= datetime('2010-07-22T00:00:00')"), 
-                new AExpression().set("$user.user-since <= datetime('2012-07-29T23:59:59')")
-            ))
+            .ForClause("$user", new AExpression("dataset FacebookUsers"))
+            .WhereClause().and(
+                new AExpression("$user.user-since >= datetime('2010-07-22T00:00:00')"), 
+                new AExpression("$user.user-since <= datetime('2012-07-29T23:59:59')")
+            )
             .ReturnClause("$user");
         
         var success1 = function(res) {
-            $('#result1').html(res["results"]);
+            addResult('#result1', res["results"]);
         };
         A.query(expression1.val(), success1);
     });
@@ -60,13 +63,13 @@
         $('#result2a').html('');
 
         var expression2a = new FLWOGRExpression()
-            .bind( new ForClause ("$user", new AExpression().set("dataset FacebookUsers")))
-            .bind( new ForClause ("$message", new AExpression().set("dataset FacebookMessages")))
-            .bind( new WhereClause (new AExpression().set("$message.author-id = $user.id")))
+            .ForClause ("$user", new AExpression("dataset FacebookUsers"))
+            .ForClause ("$message", new AExpression("dataset FacebookMessages"))
+            .WhereClause(new AExpression("$message.author-id = $user.id"))
             .ReturnClause({
-                    "uname" : "$user.name",
-                    "message" : "$message.message"
-                });
+                "uname" : "$user.name",
+                "message" : "$message.message"
+            });
         
         var success2a = function(res) {
             $('#result2a').html(res["results"]);
@@ -79,15 +82,13 @@
         $('#result2b').html('');
 
         var expression2b = new FLWOGRExpression()
-            .bind( new ForClause ("$user", new AExpression().set("dataset FacebookUsers")))
-            .bind( new ForClause ("$message", new AExpression().set("dataset FacebookMessages")))
-            .bind( new WhereClause (new AExpression().set("$message.author-id /*+ indexnl */  = $user.id")))
-            .ReturnClause(
-                {
+            .ForClause ("$user", new AExpression("dataset FacebookUsers"))
+            .ForClause ("$message", new AExpression("dataset FacebookMessages"))
+            .WhereClause(new AExpression("$message.author-id /*+ indexnl */  = $user.id"))
+            .ReturnClause({
                     "uname" : "$user.name",
                     "message" : "$message.message"
-                }
-            );
+            });
         
         var success2b = function(res) {
             $('#result2b').html(res["results"]);
@@ -100,12 +101,12 @@
         $('#result3').html('');
 
         var expression3messages = new FLWOGRExpression()
-            .bind( new ForClause("$message", new AExpression().set("dataset FacebookMessages")))
-            .bind( new WhereClause(new AExpression().set("$message.author-id = $user.id")))
+            .ForClause("$message", new AExpression("dataset FacebookMessages"))
+            .WhereClause(new AExpression("$message.author-id = $user.id"))
             .ReturnClause("$message.message");
 
         var expression3 = new FLWOGRExpression()
-            .bind( new ForClause ("$user", new AExpression().set("dataset FacebookUsers")))
+            .ForClause ("$user", new AExpression("dataset FacebookUsers"))
             .ReturnClause({
                 "uname": "$user.name",
                 "messages" : expression3messages
@@ -122,12 +123,12 @@
         $('#result4').html('');
 
         var expression4messages = new FLWOGRExpression()
-            .bind( new ForClause( "$t2", new AExpression().set("dataset TweetMessages")))
-            .bind( new WhereClause( new AExpression().set("spatial-distance($t.sender-location, $t2.sender-location) <= 1")))
+            .ForClause( "$t2", new AExpression("dataset TweetMessages"))
+            .WhereClause( new AExpression("spatial-distance($t.sender-location, $t2.sender-location) <= 1"))
             .ReturnClause({ "msgtxt" : "$t2.message-text" });
             
         var expression4 = new FLWOGRExpression()
-            .bind( new ForClause( "$t", new AExpression().set("dataset TweetMessages") ))
+            .ForClause( "$t", new AExpression("dataset TweetMessages"))
             .ReturnClause({
                 "message" : "$t.message-text",
                 "nearby-messages" : expression4messages
@@ -144,16 +145,16 @@
         $('#result5').html('');
 
         var similarUsersExpression = new FLWOGRExpression()
-            .bind( new ForClause ("$t", new AExpression().set("dataset TweetMessages")))
-            .bind( new LetClause ("$tu", new AExpression().set("$t.user")))
-            .bind( new WhereClause (new AExpression().set("$tu.name ~= $fbu.name")))
+            .ForClause("$t", new AExpression("dataset TweetMessages"))
+            .LetClause ("$tu", new AExpression("$t.user"))
+            .WhereClause(new AExpression("$tu.name ~= $fbu.name"))
             .ReturnClause({
                 "twitter-screenname": "$tu.screen-name",
                 "twitter-name": "$tu.name"
             });
         
         var expression5 = new FLWOGRExpression()
-            .bind( new ForClause ("$fbu", new AExpression().set("dataset FacebookUsers")))
+            .ForClause ("$fbu", new AExpression("dataset FacebookUsers"))
             .ReturnClause(
                 {
                     "id" : "$fbu.id",
@@ -180,14 +181,14 @@
         $('#result6').html('');
 
         var expression6 = new FLWOGRExpression()
-            .bind( new ForClause ("$fbu", new AExpression().set("dataset FacebookUsers")))
-            .bind( new WhereClause ( 
+            .ForClause ("$fbu", new AQLClause().set("dataset FacebookUsers"))
+            .WhereClause( 
                 new QuantifiedExpression (
                     "some" , 
-                    {"$e" : new AExpression().set("$fbu.employment") },
-                    new AExpression().set("is-null($e.end-date)")
+                    {"$e" : new AExpression("$fbu.employment") },
+                    new FunctionExpression("is-null", new AExpression("$e.end-date"))
                 )
-            ))
+            )
             .ReturnClause("$fbu");
         
         var success6 = function(res) {
@@ -202,18 +203,15 @@
         $('#result7').html('');
 
         var expression7 = new FLWOGRExpression()
-        .bind( new ForClause (
-            "$fbu",
-            new AExpression().set("dataset FacebookUsers")
-        ))
-        .bind( new WhereClause ( 
-            new QuantifiedExpression (
-                "every" , 
-                {"$e" : new AExpression().set("$fbu.employment") },
-                new AExpression().set("not(is-null($e.end-date))")
+            .ForClause("$fbu", new AExpression("dataset FacebookUsers"))
+            .WhereClause( 
+                new QuantifiedExpression (
+                    "every" , 
+                    {"$e" : new AExpression("$fbu.employment") },
+                    new FunctionExpression("not", new FunctionExpression("is-null", new AExpression("$e.end-date")))
+                )
             )
-        ))
-        .ReturnClause("$fbu");
+            .ReturnClause("$fbu");
         
         var success7 = function(res) {
             $('#result7').html(res["results"]);
@@ -229,7 +227,7 @@
         var expression8 = new FunctionExpression(
             "count",
             new FLWOGRExpression()
-                .bind( new ForClause("$fbu", new AExpression().set("dataset FacebookUsers")))
+                .ForClause("$fbu", new AExpression("dataset FacebookUsers"))
                 .ReturnClause("$fbu")
         );
         
@@ -244,12 +242,12 @@
         $('#result9a').html('');
 
         var expression9a = new FLWOGRExpression()
-            .bind( new ForClause("$t", new AExpression().set("dataset TweetMessages")))
-            .bind( new GroupClause("$uid", new AExpression().set("$t.user.screen-name"), "with", "$t") )
+            .ForClause("$t", new AExpression("dataset TweetMessages"))
+            .GroupClause("$uid", new AExpression("$t.user.screen-name"), "with", "$t")
             .ReturnClause(
                 {
                     "user" : "$uid",
-                    "count" : new FunctionExpression("count", new AExpression().set("$t"))
+                    "count" : new FunctionExpression("count", new AExpression("$t"))
                 }
             );
 
@@ -264,13 +262,13 @@
         $('#result9b').html('');
 
         var expression9b = new FLWOGRExpression()
-            .bind( new ForClause("$t", new AExpression().set("dataset TweetMessages"))) 
-            .bind( new AExpression().set("/*+ hash*/"))  
-            .bind( new GroupClause("$uid", new AExpression().set("$t.user.screen-name"), "with", "$t") )
+            .ForClause("$t", new AExpression("dataset TweetMessages"))
+            .AQLClause("/*+ hash*/")
+            .GroupClause("$uid", new AExpression("$t.user.screen-name"), "with", "$t")
             .ReturnClause(
                 {
                     "user" : "$uid",
-                    "count" : new FunctionExpression("count", new AExpression().set("$t"))
+                    "count" : new FunctionExpression("count", new AExpression("$t"))
                 }
             );
         
@@ -285,14 +283,11 @@
         $('#result10').html('');
 
         var expression10 = new FLWOGRExpression()
-            .bind( new ForClause("$t", new AExpression().set("dataset TweetMessages")))
-            .bind( new GroupClause("$uid", new AExpression().set("$t.user.screen-name"), "with", "$t") )
-            .bind( new LetClause(
-                "$c",
-                new FunctionExpression("count", new AExpression().set("$t"))
-            ))
-            .bind( new OrderbyClause( new AExpression().set("$c"), "desc" ) )
-            .bind( new LimitClause(new AExpression().set("3")) )
+            .ForClause("$t", new AExpression("dataset TweetMessages"))
+            .GroupClause("$uid", new AExpression("$t.user.screen-name"), "with", "$t")
+            .LetClause("$c", new FunctionExpression("count", new AExpression("$t")))
+            .OrderbyClause( new AExpression("$c"), "desc" )
+            .LimitClause(new AExpression("3"))
             .ReturnClause(
                 {
                     "user" : "$uid",
@@ -311,15 +306,15 @@
         $('#result11').html('');
 
     var expression11 = new FLWOGRExpression()
-        .bind( new ForClause( "$t", new AExpression().set("dataset TweetMessages") ))
+        .ForClause( "$t", new AExpression("dataset TweetMessages"))
         .ReturnClause({
-            "tweet"         : new AExpression().set("$t"),       
+            "tweet"         : new AExpression("$t"),       
             "similar-tweets": new FLWOGRExpression()
-                                .bind( new ForClause( "$t2", new AExpression().set("dataset TweetMessages") ))
-                                .bind( new WhereClause().and(
-                                    new AExpression().set("$t2.referred-topics ~= $t.referred-topics"), 
-                                    new AExpression().set("$t2.tweetid != $t.tweetid")
-                                 ))
+                                .ForClause( "$t2", new AExpression("dataset TweetMessages"))
+                                .WhereClause().and(
+                                    new AExpression("$t2.referred-topics ~= $t.referred-topics"), 
+                                    new AExpression("$t2.tweetid != $t.tweetid")
+                                 )
                                 .ReturnClause("$t2.referred-topics")
         }); 
         
@@ -351,5 +346,4 @@
     $('#run9b').trigger('click');
     $('#run10').trigger('click');
     $('#run11').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 6225aa7..eef557b 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
@@ -29,7 +29,7 @@
     var m = typeof mode ? mode : "synchronous";
     
     var query = "use dataverse " + this._properties["dataverse"] + ";\n" + statements.join("\n");
-    
+
     this._api(
         {
             "query" : query,
@@ -114,11 +114,15 @@
 };
 
 
-// Asterix Expressions
 function AExpression () {
+
     this._properties = {};
     this._success = function() {};
 
+    if (typeof arguments[0] == 'string') {
+        this._properties["value"] = arguments[0];    
+    }
+
     return this;
 }
 
@@ -276,17 +280,69 @@
     return value + clauseValues.join("\n");// + ";";
 };
 
+// Pretty Expression Shorthand
 
 FLWOGRExpression.prototype.ReturnClause = function(expression) {
     return this.bind(new ReturnClause(expression));
 };
 
+FLWOGRExpression.prototype.ForClause = function() {
+    return this.bind(new ForClause(Array.prototype.slice.call(arguments)));
+};
+
+FLWOGRExpression.prototype.LetClause = function() {
+    return this.bind(new LetClause(Array.prototype.slice.call(arguments)));
+};
+
+FLWOGRExpression.prototype.WhereClause = function() {
+    return this.bind(new WhereClause(Array.prototype.slice.call(arguments)));
+};
+
+FLWOGRExpression.prototype.and = function() {
+    var args = Array.prototype.slice.call(arguments);
+    args.push(true);
+    return this.bind(new WhereClause().and(args));
+};
+
+FLWOGRExpression.prototype.or = function() {
+    var args = Array.prototype.slice.call(arguments);
+    args.push(true);
+    return this.bind(new WhereClause().or(args));
+};
+
+FLWOGRExpression.prototype.OrderbyClause = function() {
+    return this.bind(new OrderbyClause(Array.prototype.slice.call(arguments)));
+};
+
+
+FLWOGRExpression.prototype.GroupClause = function() {
+    return this.bind(new GroupClause(Array.prototype.slice.call(arguments)));
+};
+
+FLWOGRExpression.prototype.LimitClause = function() {
+    return this.bind(new LimitClause(Array.prototype.slice.call(arguments)));
+};
+
+FLWOGRExpression.prototype.DistinctClause = function() {
+    return this.bind(new DistinctClause(Array.prototype.slice.call(arguments)));
+};
+
+FLWOGRExpression.prototype.AQLClause = function() {
+    return this.bind(new AQLClause(Array.prototype.slice.call(arguments)));
+};
+
+
 // AQLClause
 //
 // Base Clause  ::= ForClause | LetClause | WhereClause | OrderbyClause | GroupClause | LimitClause | DistinctClause
 function AQLClause() {
     this._properties = {};
     this._properties["clause"] = "";
+    this._properties["stack"] = [];
+    if (typeof arguments[0] == 'string') {
+        this._properties["clause"] = arguments[0];
+    }
+    return this;
 }
 
 AQLClause.prototype.val = function() {
@@ -321,13 +377,20 @@
 function ForClause(for_variable, at_variable, expression) {
     AQLClause.call(this);
   
-    this._properties["clause"] = "for " + arguments[0];
+    var parameters = [];
+    if (arguments[0] instanceof Array) {
+        parameters = arguments[0];
+    } else {
+        parameters = arguments;
+    }
+  
+    this._properties["clause"] = "for " + parameters[0];
     
-    if (arguments.length == 3) {
-        this._properties["clause"] += " at " + arguments[1];
-        this._properties["clause"] += " in " + arguments[2].val();
-    } else if (arguments.length == 2) {
-        this._properties["clause"] += " in " + arguments[1].val();
+    if (parameters.length == 3) {
+        this._properties["clause"] += " at " + parameters[1];
+        this._properties["clause"] += " in " + parameters[2].val();
+    } else if (parameters.length == 2) {
+        this._properties["clause"] += " in " + parameters[1].val();
     }
     
     return this;
@@ -349,8 +412,15 @@
 function LetClause(let_variable, expression) {
     AQLClause.call(this);
     
-    this._properties["clause"] = "let " + let_variable + " := ";
-    this._properties["clause"] += expression.val();
+    var parameters = [];
+    if (arguments[0] instanceof Array) {
+        parameters = arguments[0];
+    } else {
+        parameters = arguments;
+    }
+    
+    this._properties["clause"] = "let " + parameters[0] + " := ";
+    this._properties["clause"] += parameters[1].val();
     
     return this; 
 }
@@ -408,11 +478,15 @@
 // @param expression [BooleanExpression], pushes this expression onto the stack
 function WhereClause(expression) {
     AQLClause.call(this);
-
+    
     this._properties["stack"] = [];
 
-    this.bind(expression);
-
+    if (expression instanceof Array) {
+        this.bind(expression[0]);
+    } else {
+        this.bind(expression);
+    }
+    
     return this;
 }
 
@@ -425,11 +499,16 @@
     if (expression instanceof AExpression) {
         this._properties["stack"].push(expression);
     }
+    return this;
 };
 
 
 WhereClause.prototype.val = function() {
-    var value = "where ";   
+    var value = "";  
+    
+    if (this._properties["stack"].length == 0) {
+        return value;
+    }
 
     var count = this._properties["stack"].length - 1;
     while (count >= 0) {
@@ -437,17 +516,24 @@
         count -= 1;
     }
     
-    return value;
+    return "where " + value;
 };
 
 
 WhereClause.prototype.and = function() {
     
+    var parameters = [];
+    if (arguments[0] instanceof Array) {
+        parameters = arguments[0];
+    } else {
+        parameters = arguments;
+    }
+    
     var andClauses = [];  
-    for (var expression in arguments) {
+    for (var expression in parameters) {
         
-        if (arguments[expression] instanceof AExpression) {
-            andClauses.push(arguments[expression].val());
+        if (parameters[expression] instanceof AExpression) {
+            andClauses.push(parameters[expression].val());
         }
     }
     
@@ -460,11 +546,19 @@
 
 
 WhereClause.prototype.or = function() {
+
+    var parameters = [];
+    if (arguments[0] instanceof Array) {
+        parameters = arguments[0];
+    } else {
+        parameters = arguments;
+    }
+
     var orClauses = [];  
-    for (var expression in arguments) {
+    for (var expression in parameters) {
         
-        if (arguments[expression] instanceof AExpression) {
-            orClauses.push(arguments[expression].val());
+        if (parameters[expression] instanceof AExpression) {
+            orClauses.push(parameters[expression].val());
         }
     }
     
@@ -484,14 +578,20 @@
 function LimitClause(limitExpression, offsetExpression) {
 
     AQLClause.call(this);
+    
+    var parameters = [];
+    if (arguments[0] instanceof Array) {
+        parameters = arguments[0];
+    } else {
+        parameters = arguments;
+    }
   
     // limitExpression required
-    this._properties["clause"] = "limit " + limitExpression.val();
+    this._properties["clause"] = "limit " + parameters[0].val();
 
     // Optional: Offset
-    var offset = typeof offsetExpression ? offsetExpression : null;
-    if (offset != null) {
-        this._properties["clause"] += " offset " + offsetExpression.val();
+    if (parameters.length == 2) {
+        this._properties["clause"] += " offset " + parameters[1].val();
     }
 
     return this;
@@ -512,29 +612,35 @@
     AQLClause.call(this);
 
     // At least one argument expression is required, and first should be expression
-    if (arguments.length == 0 || !(arguments[0] instanceof AExpression)) {
+    if (arguments.length == 0) {
     
-        // TODO Not sure which error to throw for an empty OrderBy but this should fail.
         alert("Order By Error");
         this._properties["clause"] = null;
         return this;    
-    } 
+    }
+    
+    var parameters = [];
+    if (arguments[0] instanceof Array) {
+        parameters = arguments[0];
+    } else {
+        parameters = arguments;
+    }
 
     var expc = 0;
     var expressions = [];    
 
-    while (expc < arguments.length) {
+    while (expc < parameters.length) {
       
         var expression = "";
 
-        if (arguments[expc] instanceof AExpression) {
-            expression += arguments[expc].val();
+        if (parameters[expc] instanceof AExpression) {
+            expression += parameters[expc].val();
         }
 
         var next = expc + 1;
-        if (next < arguments.length && (arguments[next] == "asc" || arguments[next] == "desc")) {
+        if (next < parameters.length && (parameters[next] == "asc" || parameters[next] == "desc")) {
             expc++;
-            expression += " " + arguments[expc];
+            expression += " " + parameters[expc];
         }
         
         expressions.push(expression);
@@ -563,29 +669,36 @@
         this._properties["clause"] = null;
         return this;    
     } 
+    
+    var parameters = [];
+    if (arguments[0] instanceof Array) {
+        parameters = arguments[0];
+    } else {
+        parameters = arguments;
+    }
 
     var expc = 0;
     var expressions = [];
     var variableRefs = [];
     var isDecor = false;
     
-    while (expc < arguments.length) {
+    while (expc < parameters.length) {
 
-        if (arguments[expc] instanceof AExpression) {
+        if (parameters[expc] instanceof AExpression) {
 
             isDecor = false;
-            expressions.push(arguments[expc].val());
+            expressions.push(parameters[expc].val());
 
-        } else if (typeof arguments[expc] == "string") {       
+        } else if (typeof parameters[expc] == "string") {       
             
             // Special keywords, decor & with
-            if (arguments[expc] == "decor") {
+            if (parameters[expc] == "decor") {
                 isDecor = true;
-            } else if (arguments[expc] == "with") {
+            } else if (parameters[expc] == "with") {
                 isDecor = false;
                 expc++;
-                while (expc < arguments.length) {
-                    variableRefs.push(arguments[expc]);
+                while (expc < parameters.length) {
+                    variableRefs.push(parameters[expc]);
                     expc++;
                 }
             
@@ -600,7 +713,7 @@
                     isDecor = false;
                 }
 
-                expression += arguments[expc] + " := " + arguments[nextc].val();
+                expression += parameters[expc] + " := " + parameters[nextc].val();
                 expressions.push(expression);
                 expc++;
             }