diff --git a/asterix-app/src/main/resources/sdk/static/example/demo.html b/asterix-app/src/main/resources/sdk/static/example/demo.html
index 9d98546..3afaaa4 100644
--- a/asterix-app/src/main/resources/sdk/static/example/demo.html
+++ b/asterix-app/src/main/resources/sdk/static/example/demo.html
@@ -45,14 +45,10 @@
         </pre></div>
 
         <div class="how-to-run"><pre><code class="javascript">
-    var expression0a = new FLWOGRExpression({ 
-        "dataverse" : "TinySocial",
-        "success"   : function(res) {
-                          $('#result0a').html(res["results"]);
-                      }
-        })
-        .bind( new ForClause("user", null, new AsterixExpression().set(["dataset FacebookUsers"])) )
-        .bind( new WhereClause(new BooleanExpression("$user.id = 8")));
+        var expression0a = new FLWOGRExpression()
+            .bind( new ForClause("user", new AExpression().set("dataset FacebookUsers")))
+            .bind( new WhereClause(new AExpression().set("$user.id = 8")))
+            .ReturnClause("$user");
         </code></pre></div>
 
         <div class="result-output" id="result0a">
@@ -72,8 +68,15 @@
     return $user;
         </pre></div>
         
-        <div class="how-to-run"><pre>
-        </pre></div>
+        <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");        
+        </code></pre></div>
 
         <div class="result-output" id="result0b">
         </div>
@@ -93,8 +96,15 @@
     return $user;
         </pre></div>
         
-        <div class="how-to-run">
-        </div>
+        <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')")
+            ))
+            .ReturnClause("$user");
+        </code></pre></div>
 
         <div class="result-output" id="result1">
         </div>
@@ -117,8 +127,16 @@
     };
         </pre></div>
         
-        <div class="how-to-run">
-        </div>
+        <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")))
+            .ReturnClause({
+                    "uname" : "$user.name",
+                    "message" : "$message.message"
+                });
+        </code></pre></div>
 
         <div class="result-output" id="result2a">
         </div>
@@ -141,8 +159,18 @@
     };
         </pre></div>
         
-        <div class="how-to-run">
-        </div>
+        <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(
+                {
+                    "uname" : "$user.name",
+                    "message" : "$message.message"
+                }
+            );
+        </code></pre></div>
 
         <div class="result-output" id="result2b">
         </div>
@@ -165,8 +193,19 @@
     };
         </pre></div>
         
-        <div class="how-to-run">
-        </div>
+        <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")))
+            .ReturnClause("$message.message");
+
+        var expression3 = new FLWOGRExpression()
+            .bind( new ForClause ("user", new AQLClause().set("dataset FacebookUsers")))
+            .ReturnClause({
+                "uname": "$user.name",
+                "messages" : expression3messages
+            });
+        </code></pre></div>
 
         <div class="result-output" id="result3">
         </div>
@@ -189,8 +228,19 @@
     };
         </pre></div>
         
-        <div class="how-to-run">
-        </div>
+        <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")))
+            .ReturnClause({ "msgtxt" : "$t2.message-text" });
+            
+        var expression4 = new FLWOGRExpression()
+            .bind( new ForClause( "t", new AExpression().set("dataset TweetMessages") ))
+            .ReturnClause({
+                "message" : "$t.message-text",
+                "nearby-messages" : expression4messages
+            });
+        </code></pre></div>
 
         <div class="result-output" id="result4">
         </div>
@@ -221,8 +271,26 @@
     };
         </pre></div>
         
-        <div class="how-to-run">
-        </div>
+        <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")))
+            .ReturnClause({
+                "twitter-screenname": "$tu.screen-name",
+                "twitter-name": "$tu.name"
+            });
+            
+        var expression5 = new FLWOGRExpression()
+            .bind( new ForClause ("fbu", new AQLClause().set("dataset FacebookUsers")))
+            .ReturnClause(
+                {
+                    "id" : "$fbu.id",
+                    "name" : "$fbu.name",
+                    "similar-users" : similarUsersExpression
+                }
+            );
+        </code></pre></div>
 
         <div class="result-output" id="result5">
         </div>
@@ -241,8 +309,18 @@
     return $fbu;
         </pre></div>
         
-        <div class="how-to-run">
-        </div>
+        <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 ( 
+                new QuantifiedExpression (
+                    "some" , 
+                    {"$e" : new AQLClause().set("$fbu.employment") },
+                    new AQLClause().set("is-null($e.end-date)")
+                )
+            ))
+            .ReturnClause("$fbu");
+        </code></pre></div>
 
         <div class="result-output" id="result6">
         </div>
@@ -261,8 +339,21 @@
     return $fbu;
         </pre></div>
         
-        <div class="how-to-run">
-        </div>
+        <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))")
+            )
+        ))
+        .ReturnClause("$fbu");
+        </code></pre></div>
 
         <div class="result-output" id="result7">
         </div>
@@ -282,18 +373,10 @@
         <div class="how-to-run"><pre><code class="javascript">
         var expression8 = new FunctionExpression(
             "count",
-            new ForClause("fbu", null, new AQLClause().set("dataset FacebookUsers"))
-                .bind(new ReturnClause("$fbu"))
+            new FLWOGRExpression()
+                .bind( new ForClause("fbu", new AQLClause().set("dataset FacebookUsers")))
+                .ReturnClause("$fbu")
         );
-        
-        OR
-        
-        var expression8 = new FunctionExpression()
-            .fn("count")
-            .expression(
-                new ForClause("fbu", null, new AQLClause().set("dataset FacebookUsers"))
-                    .bind(new ReturnClause("$fbu"))
-            );
         </code></pre></div>
 
         <div class="result-output" id="result8">
@@ -316,8 +399,17 @@
     };
         </pre></div>
         
-        <div class="how-to-run">
-        </div>
+        <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") )
+            .ReturnClause(
+                {
+                    "user" : "$uid",
+                    "count" : new FunctionExpression("count", new AExpression().set("$t"))
+                }
+            );
+        </code></pre></div>
 
         <div class="result-output" id="result9a">
         </div>
@@ -340,8 +432,18 @@
     };
         </pre></div>
         
-        <div class="how-to-run">
-        </div>
+        <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") )
+            .ReturnClause(
+                {
+                    "user" : "$uid",
+                    "count" : new FunctionExpression("count", new AExpression().set("$t"))
+                }
+            );
+        </code></pre></div>
 
         <div class="result-output" id="result9b">
         </div>
@@ -366,8 +468,23 @@
     };
         </pre></div>
         
-        <div class="how-to-run">
-        </div>
+        <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"
+            }
+        );
+        </code></pre></div>
 
         <div class="result-output" id="result10">
         </div>
@@ -394,8 +511,20 @@
     };
         </pre></div>
         
-        <div class="how-to-run">
-        </div>
+        <div class="how-to-run"><pre><code class="javascript">
+        var expression11 = new FLWOGRExpression()
+        .bind( new ForClause( "t", new AExpression().set("dataset TweetMessages") ))
+        .ReturnClause({
+            "tweet"         : new AExpression().set("$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")
+                                 ))
+                                .ReturnClause("$t2.referred-topics")
+        }); 
+        </code></pre></div>
 
         <div class="result-output" id="result11">
         </div>
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 f1970b2..3310b30 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
@@ -7,7 +7,7 @@
         $('#result0a').html('');
         
         var expression0a = new FLWOGRExpression()
-            .bind( new ForClause("user", null, new AExpression().set("dataset FacebookUsers")))
+            .bind( new ForClause("user", new AExpression().set("dataset FacebookUsers")))
             .bind( new WhereClause(new AExpression().set("$user.id = 8")))
             .ReturnClause("$user");
         
@@ -23,7 +23,7 @@
         $('#result0b').html('');
 
         var expression0b = new FLWOGRExpression()
-            .bind( new ForClause("user", null, new AExpression().set("dataset FacebookUsers")))
+            .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")
@@ -43,7 +43,7 @@
         $('#result1').html('');
 
         var expression1 = new FLWOGRExpression()
-            .bind( new ForClause("user", null, new AExpression().set("dataset FacebookUsers")))
+            .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')")
@@ -61,15 +61,13 @@
         $('#result2a').html('');
 
         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 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")))
-            .ReturnClause(
-                {
+            .ReturnClause({
                     "uname" : "$user.name",
                     "message" : "$message.message"
-                }
-            );
+                });
         
         var success2a = function(res) {
             $('#result2a').html(res["results"]);
@@ -82,8 +80,8 @@
         $('#result2b').html('');
 
         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 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(
                 {
@@ -103,12 +101,12 @@
         $('#result3').html('');
 
         var expression3messages = new FLWOGRExpression()
-            .bind( new ForClause("message", null, new AExpression().set("dataset FacebookMessages")))
+            .bind( new ForClause("message", new AExpression().set("dataset FacebookMessages")))
             .bind( new WhereClause(new AExpression().set("$message.author-id = $user.id")))
             .ReturnClause("$message.message");
 
         var expression3 = new FLWOGRExpression()
-            .bind( new ForClause ("user", null, new AQLClause().set("dataset FacebookUsers")))
+            .bind( new ForClause ("user", new AQLClause().set("dataset FacebookUsers")))
             .ReturnClause({
                 "uname": "$user.name",
                 "messages" : expression3messages
@@ -125,12 +123,12 @@
         $('#result4').html('');
 
         var expression4messages = new FLWOGRExpression()
-            .bind( new ForClause( "t2", null, new AExpression().set("dataset TweetMessages")))
+            .bind( new ForClause( "t2", new AExpression().set("dataset TweetMessages")))
             .bind( new WhereClause( new AExpression().set("spatial-distance($t.sender-location, $t2.sender-location) <= 1")))
             .ReturnClause({ "msgtxt" : "$t2.message-text" });
             
         var expression4 = new FLWOGRExpression()
-            .bind( new ForClause( "t", null, new AExpression().set("dataset TweetMessages") ))
+            .bind( new ForClause( "t", new AExpression().set("dataset TweetMessages") ))
             .ReturnClause({
                 "message" : "$t.message-text",
                 "nearby-messages" : expression4messages
@@ -147,18 +145,16 @@
         $('#result5').html('');
 
         var similarUsersExpression = new FLWOGRExpression()
-            .bind( new ForClause ("t", null, new AQLClause().set("dataset TweetMessages")))
+            .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")))
             .ReturnClause({
                 "twitter-screenname": "$tu.screen-name",
                 "twitter-name": "$tu.name"
             });
-        // TODO Move Sets!
+        
         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 ForClause ("fbu", new AQLClause().set("dataset FacebookUsers")))
             .ReturnClause(
                 {
                     "id" : "$fbu.id",
@@ -170,7 +166,14 @@
         var success5 = function (res) {
             $('#result5').html(res["results"]);
         };
-        A.run(expression5.val(), success5);
+        
+        var simfunction = new SetStatement( "simfunction", "edit-distance" );
+        var simthreshold = new SetStatement( "simthreshold", "3");
+
+        A.run(
+            [ simfunction.val() , simthreshold.val() , expression5.val() ], 
+            success5
+        );
     });
 
     // 6 - Existential Quantification
@@ -178,19 +181,15 @@
         $('#result6').html('');
 
         var expression6 = new FLWOGRExpression()
-        .bind( new ForClause (
-            "fbu", 
-            null, 
-            new AQLClause().set("dataset FacebookUsers")
-        ))
-        .bind( new WhereClause ( 
-            new QuantifiedExpression (
-                "some" , 
-                {"$e" : new AQLClause().set("$fbu.employment") },
-                new AQLClause().set("is-null($e.end-date)")
-            )
-        ))
-        .ReturnClause("$fbu");
+            .bind( new ForClause ("fbu", new AQLClause().set("dataset FacebookUsers")))
+            .bind( new WhereClause ( 
+                new QuantifiedExpression (
+                    "some" , 
+                    {"$e" : new AQLClause().set("$fbu.employment") },
+                    new AQLClause().set("is-null($e.end-date)")
+                )
+            ))
+            .ReturnClause("$fbu");
         
         var success6 = function(res) {
             $('#result6').html(res["results"]);
@@ -205,8 +204,7 @@
 
         var expression7 = new FLWOGRExpression()
         .bind( new ForClause (
-            "fbu", 
-            null, 
+            "fbu",
             new AQLClause().set("dataset FacebookUsers")
         ))
         .bind( new WhereClause ( 
@@ -232,7 +230,7 @@
         var expression8 = new FunctionExpression(
             "count",
             new FLWOGRExpression()
-                .bind( new ForClause("fbu", null, new AQLClause().set("dataset FacebookUsers")))
+                .bind( new ForClause("fbu", new AQLClause().set("dataset FacebookUsers")))
                 .ReturnClause("$fbu")
         );
         
@@ -247,7 +245,7 @@
         $('#result9a').html('');
 
         var expression9a = new FLWOGRExpression()
-            .bind( new ForClause("t", null, new AExpression().set("dataset TweetMessages")))
+            .bind( new ForClause("t", new AExpression().set("dataset TweetMessages")))
             .bind( new GroupClause("uid", new AExpression().set("$t.user.screen-name"), "with", "t") )
             .ReturnClause(
                 {
@@ -267,7 +265,7 @@
         $('#result9b').html('');
 
         var expression9b = new FLWOGRExpression()
-            .bind( new ForClause("t", null, new AExpression().set("dataset TweetMessages"))) 
+            .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") )
             .ReturnClause(
@@ -288,7 +286,7 @@
         $('#result10').html('');
 
         var expression10 = new FLWOGRExpression()
-        .bind( new ForClause("t", null, new AExpression().set("dataset TweetMessages")))
+        .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", 
@@ -313,14 +311,12 @@
     $("#run11").click(function() {
         $('#result11').html('');
 
-        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") ))
+    var expression11 = new FLWOGRExpression()
+        .bind( new ForClause( "t", new AExpression().set("dataset TweetMessages") ))
         .ReturnClause({
             "tweet"         : new AExpression().set("$t"),       
             "similar-tweets": new FLWOGRExpression()
-                                .bind( new ForClause( "t2", null, new AExpression().set("dataset TweetMessages") ))
+                                .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")
@@ -331,7 +327,14 @@
         var success11 = function(res) {
             $('#result11').html(res["results"]);
         };
-        A.run(expression11.val(), success11);
+        
+        var simfunction = new SetStatement( "simfunction", "jaccard" );
+        var simthreshold = new SetStatement( "simthreshold", "0.3");
+        A.run(
+            [ simfunction.val(), simthreshold.val(), expression11.val()], 
+            success11
+        );
+        
     });
 
     $('#run0a').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 8899953..1877846 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
@@ -43,7 +43,7 @@
             success_fn(data);
         },
         error: function(r) {
-            alert("AsterixSDK ERROR\n" + JSON.stringify(r));
+            //alert("AsterixSDK ERROR\n" + JSON.stringify(r));
         }
     });
 
@@ -172,17 +172,6 @@
 };
 
 
-// FLWOGR         ::= ( ForClause | LetClause ) ( Clause )* "return" Expression
-// Clause         ::= ForClause | LetClause | WhereClause | OrderbyClause | GroupClause | LimitClause | DistinctClause
-// 
-// WhereClause    ::= "where" Expression
-// OrderbyClause  ::= "order" "by" Expression ( ( "asc" ) | ( "desc" ) )? ( "," Expression ( ( "asc" ) | ( "desc" ) )? )*
-//
-// GroupClause    ::= "group" "by" ( Variable ":=" )? Expression ( "," ( Variable ":=" )? Expression )* ( "decor" Variable ":=" Expression ( "," "decor" Variable ":=" Expression )* )? "with" VariableRef ( "," VariableRef )*
-// LimitClause    ::= "limit" Expression ( "offset" Expression )?
-// DistinctClause ::= "distinct" "by" Expression ( "," Expression )*
-
-
 // FLWOGRExpression
 //
 // FLWOGRExpression ::= ( ForClause | LetClause ) ( Clause )* "return" Expression
@@ -286,15 +275,15 @@
 function ForClause(for_variable, at_variable, expression) {
     AQLClause.call(this);
   
-    // at_variable is optional, check if defined
-    var at = typeof at_variable ? at_variable : null;
-
-    // Prepare clause
-    this._properties["clause"] = "for $" + for_variable;
-    if (at != null) {
-        this._properties["clause"] += " at $" + at_variable;
+    this._properties["clause"] = "for $" + arguments[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();
     }
-    this._properties["clause"] += " in " + expression.val();
+    
     return this;
 }
 
