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 12c6e8e..68f7c51 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
@@ -3,33 +3,31 @@
     // 0A - Exact-Match Lookup
     $('#run0a').click(function () {
         $('#result0a').html('');
-        var expression0a = new FLWOGRExpression({
-            "success"   : function(res) {
-                            $('#result0a').html(res["results"]);
-                          } 
-            })
-            .bind( new ForClause("user", null, new AExpression().set("dataset FacebookUsers")) )
-            .bind( new WhereClause(new BooleanExpression("$user.id = 8")) )
-            .bind({ "return" : new AExpression().set("$user") });
         
-        expression0a.run();
+        var expression0a = new FLWOGRExpression()
+            .bind( new ForClause("user", null, new AExpression().set("dataset FacebookUsers")))
+            .bind( new WhereClause(new AExpression().set("$user.id = 8")))
+            .bind( new ReturnClause("$user"));
+        
+        var success0a = function(res) {
+            $('#result0a').html(res["results"]);
+        };
+        expression0a.run(success0a);
     });
 
     // 0B - Range Scan
     $("#run0b").click(function() {
         $('#result0b').html('');
 
-        var expression0b = new FLWOGRExpression({
-            "success"   : function(res) {
-                              alert(JSON.stringify(res));
-                              $('#result0b').html(res["results"]);
-                          },
-            })
-            .bind( new ForClause("user", null, new AExpression().set("dataset FacebookUsers")) )
-            .bind( new WhereClause( new BooleanExpression("AND", new BooleanExpression(">=", "$user.id", 2), new BooleanExpression("<=", "$user.id", 4)) ) )
-            .bind( new ReturnClause("$user") );
-        alert(expression0b.val());
-        expression0b.run();
+        var expression0b = new FLWOGRExpression()
+            .bind( new ForClause("user", null, new AExpression().set("dataset FacebookUsers")))
+            .bind( new WhereClause( new AExpression().set("$user.id >= 2 and $user.id <= 4")))
+            .bind( new ReturnClause("$user"));
+            
+        var success0b = function(res) {
+            $('#result0b').html(res["results"]);
+        };
+        expression0b.run(success0b);
 
     });
 
@@ -37,78 +35,138 @@
     $("#run1").click(function() {
         $('#result1').html('');
 
-        var expression1 = new FLWOGRExpression({
-            "success"   : function(res) {
-                            alert(JSON.stringify(res));
-                            $('#result1').html(res["results"]);
-                          }
-        });
-        alert("EXPRESSION 1 " + expression1.val());
+        var expression1 = new FLWOGRExpression()
+            .bind( new ForClause("user", null, new AExpression().set("dataset FacebookUsers")))
+            .bind( new WhereClause( new AExpression().set("$user.user-since >= datetime('2010-07-22T00:00:00') and $user.user-since <= datetime('2012-07-29T23:59:59')")))
+            .bind( new ReturnClause("$user"));
+        
+        var success1 = function(res) {
+            $('#result1').html(res["results"]);
+        };
+        expression1.run(success1);
     });
-
+        
+       //     "similar-tweets": new FLWOGRExpression()
+       //                         .bind( new ForClause( "t2", null, new AExpression().set("dataset TweetMessages") ))
+     //                           .bind( new AQLClause().set("where $t2.referred-topics ~= $t.referred-topics and $t2.tweetid != $t.tweetid") )
+      //                          .bind( new ReturnClause("$t2.referred-topics"))
+      //  })); 
+        
     // 2A - Equijoin
     $("#run2a").click(function() {
         $('#result2a').html('');
 
-        var expression2a = new FLWOGRExpression({
-            "success"   : function(res) {
-                            alert(JSON.stringify(res));
-                            $('#result2a').html(res["results"]);
-                          }
-        });
-        alert("EXPRESSION 2a " + expression2a.val());
+        var expression2a = new FLWOGRExpression()
+            .bind( new ForClause ("user", null, new AQLClause().set("dataset FacebookUsers")))
+            .bind( new ForClause ("message", null, new AQLClause().set("dataset FacebookMessages")))
+            .bind( new WhereClause (new AExpression().set("$message.author-id = $user.id")))
+            .bind( new ReturnClause(
+                {
+                    "uname" : "$user.name",
+                    "message" : "$message.message"
+                }
+            ));
+        
+        var success2a = function(res) {
+            $('#result2a').html(res["results"]);
+        };
+        expression2a.run(success2a);
     });
 
     // 2B - Index Join
     $("#run2b").click(function() {
         $('#result2b').html('');
 
-        var expression2b = new FLWOGRExpression({
-            "success"   : function(res) {
-                            alert(JSON.stringify(res));
-                            $('#result2b').html(res["results"]);
-                          }
-        });
-        alert("EXPRESSION 2b " + expression2b.val());
+        var expression2b = new FLWOGRExpression()
+            .bind( new ForClause ("user", null, new AQLClause().set("dataset FacebookUsers")))
+            .bind( new ForClause ("message", null, new AQLClause().set("dataset FacebookMessages")))
+            .bind( new WhereClause (new AExpression().set("$message.author-id /*+ indexnl */  = $user.id")))
+            .bind( new ReturnClause(
+                {
+                    "uname" : "$user.name",
+                    "message" : "$message.message"
+                }
+            ));
+        
+        var success2b = function(res) {
+            $('#result2b').html(res["results"]);
+        };
+        expression2b.run(success2b);
     });
 
     // 3 - Nested Outer Join
     $("#run3").click(function() {
         $('#result3').html('');
 
-        var expression3 = new FLWOGRExpression({
-            "success"   : function(res) {
-                            alert(JSON.stringify(res));
-                            $('#result3').html(res["results"]);
-                          }
-        });
-        alert("EXPRESSION 3 " + expression3.val());
+        var expression3messages = new FLWOGRExpression()
+            .bind( new ForClause("message", null, new AExpression().set("dataset FacebookMessages")))
+            .bind( new WhereClause(new AExpression().set("$message.author-id = $user.id")))
+            .bind( new ReturnClause("$message.message"));
+
+        var expression3 = new FLWOGRExpression()
+            .bind( new ForClause ("user", null, new AQLClause().set("dataset FacebookUsers")))
+            .bind( new ReturnClause({
+                "uname": "$user.name",
+                "messages" : expression3messages
+            }));
+            
+        var success3 = function(res) {
+            $('#result3').html(res["results"]);
+        };
+        expression3.run(success3);
     });
     
     // 4 - Theta Join
     $("#run4").click(function() {
         $('#result4').html('');
 
-        var expression4 = new FLWOGRExpression({
-            "success"   : function(res) {
-                            alert(JSON.stringify(res));
-                            $('#result4').html(res["results"]);
-                          }
-        });
-        alert("EXPRESSION 4 " + expression4.val());
+        var expression4messages = new FLWOGRExpression()
+            .bind( new ForClause( "t2", null, new AExpression().set("dataset TweetMessages")))
+            .bind( new WhereClause( new AExpression().set("spatial-distance($t.sender-location, $t2.sender-location) <= 1")))
+            .bind( new ReturnClause({ "msgtxt" : "$t2.message-text" }));
+            
+        var expression4 = new FLWOGRExpression()
+            .bind( new ForClause( "t", null, new AExpression().set("dataset TweetMessages") ))
+            .bind( new ReturnClause({
+                "message" : "$t.message-text",
+                "nearby-messages" : expression4messages
+            }));
+        
+        var success4 = function(res) {
+            $('#result4').html(res["results"]);
+        };
+        expression4.run(success4);
     });
 
     // 5 - Fuzzy Join
     $("#run5").click(function() {
         $('#result5').html('');
 
-        var expression5 = new FLWOGRExpression({
-            "success"   : function(res) {
-                            alert(JSON.stringify(res));
-                            $('#result5').html(res["results"]);
-                          }
-        });
-        alert("EXPRESSION 5 " + expression5.val());
+        var similarUsersExpression = new FLWOGRExpression()
+            .bind( new ForClause ("t", null, new AQLClause().set("dataset TweetMessages")))
+            .bind( new LetClause ("tu", new AExpression().set("$t.user")))
+            .bind( new WhereClause (new AExpression().set("$tu.name ~= $fbu.name")))
+            .bind( new ReturnClause ({
+                "twitter-screenname": "$tu.screen-name",
+                "twitter-name": "$tu.name"
+            }));
+
+        var expression5 = new FLWOGRExpression()
+            .bind( new SetStatement( "simfunction", "edit-distance" ))
+            .bind( new SetStatement( "simthreshold", "3"))
+            .bind( new ForClause ("fbu", null, new AQLClause().set("dataset FacebookUsers")))
+            .bind( new ReturnClause(
+                {
+                    "id" : "$fbu.id",
+                    "name" : "$fbu.name",
+                    "similar-users" : similarUsersExpression
+                }
+            ));
+        
+        var success5 = function (res) {
+            $('#result5').html(res["results"]);
+        };
+        expression5.run(success5);
     });
 
     // 6 - Existential Quantification
@@ -250,11 +308,7 @@
     $("#run11").click(function() {
         $('#result11').html('');
 
-        var expression11 = new FLWOGRExpression({
-            "success"   : function(res) {
-                            $('#result11').html(res["results"]);
-                          }
-        })
+        var expression11 = new FLWOGRExpression()
         .bind( new SetStatement( "simfunction", "jaccard" ))
         .bind( new SetStatement( "simthreshold", "0.3"))
         .bind( new ForClause( "t", null, new AExpression().set("dataset TweetMessages") ))
@@ -272,14 +326,14 @@
         expression11.run(success11);
     });
 
-    //$('#run0a').trigger('click');
-    //$('#run0b').trigger('click');
-    //$('#run1').trigger('click');
-    //$('#run2a').trigger('click');
-    //$('#run2b').trigger('click');
-    //$('#run3').trigger('click');
-    //$('#run4').trigger('click');
-    //$('#run5').trigger('click');
+    $('#run0a').trigger('click');
+    $('#run0b').trigger('click');
+    $('#run1').trigger('click');
+    $('#run2a').trigger('click');
+    $('#run2b').trigger('click');
+    $('#run3').trigger('click');
+    $('#run4').trigger('click');
+    $('#run5').trigger('click');
     $('#run6').trigger('click');
     $('#run7').trigger('click');
     $('#run8').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 4584bcc..473919c 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
@@ -296,7 +296,7 @@
             }
         }
         this._properties["clause"] += returnStatements.join(",\n");
-        this._properties["clause"] += "}";  
+        this._properties["clause"] += "\n}";  
     
     } else {
         this._properties["clause"] += new AQLClause().set(expression).val();
