diff --git a/asterix-app/src/main/resources/sdk/static/js/asterix-api-core.js b/asterix-app/src/main/resources/sdk/static/js/asterix-api-core.js
index 00fd7c7..30d49c2 100644
--- a/asterix-app/src/main/resources/sdk/static/js/asterix-api-core.js
+++ b/asterix-app/src/main/resources/sdk/static/js/asterix-api-core.js
@@ -357,7 +357,7 @@
 // @param let_variable [String], REQUIRED
 // @param expression [AsterixExpression], REQUIRED
 LetClause.prototype.set = function(let_variable, expression) { 
-    var clause = "let $" + let_variable + " := " expression.val();
+    var clause = "let $" + let_variable + " := " + expression.val();
    
     AsterixClause.prototype.set.call(this, clause);
     return this;
@@ -473,9 +473,6 @@
     var endpoint = "http://localhost:19101/query/result";
 }
 
-
-//var a = AsterixSDK();
-
 function AsterixSDKJQueryHandler(json, endpoint, callback) {
     $.ajax({
         type : 'GET',
@@ -488,7 +485,16 @@
     });
 }
 
+// Helper Functions
+AsterixSDK.prototype.rectangle = function(bounds) {
+   var lower_left = 'create-point(' + bounds["sw"]["lat"] + ',' + bounds["sw"]["lng"] + ')';
+   var upper_right = 'create-point(' + bounds["ne"]["lat"] + ',' + bounds["ne"]["lng"] + ')';
 
+   var rectangle_statement = 'create-rectangle(' + lower_left + ', ' + upper_right + ')';
+   //FunctionCallExpr.prototype.set = function(identifier, expressions) {
+   //TODO
+   return rectangle_statement;
+};
 
  
 
diff --git a/asterix-examples/src/main/resources/cherry/js/asterix-api-core.js b/asterix-examples/src/main/resources/cherry/js/asterix-api-core.js
index e5d64eb..9553997 100755
--- a/asterix-examples/src/main/resources/cherry/js/asterix-api-core.js
+++ b/asterix-examples/src/main/resources/cherry/js/asterix-api-core.js
@@ -460,32 +460,3 @@
 AsterixCoreAPI.prototype.api_helper_default_on_error = function (error_code, error_message) {
     alert("ERROR " + error_code + ": " + error_message);       
 }
-
-/**
-* API Helper - Spatial/Polygon Creator
-* 
-* @param    {Object}    bounds, {"ne" => { "lat", "lng" }, "sw" => {"lat", "lng"} }
-* @returns  {String}    query string form of a polygon
-*
-* TODO this is kind of hacky :/
-*/
-AsterixCoreAPI.prototype.rectangle = function(bounds) {
-   var lower_left = 'create-point(' + bounds["sw"]["lat"] + ',' + bounds["sw"]["lng"] + ')';
-   var upper_right = 'create-point(' + bounds["ne"]["lat"] + ',' + bounds["ne"]["lng"] + ')';
-
-   var rectangle_statement = 'create-rectangle(' + lower_left + ', ' + upper_right + ')';
-   this.parameters["statements"].push(rectangle_statement);
-    
-   return this;
-}
-
-AsterixCoreAPI.prototype.api_helper_polygon_to_statement = function(bounds) {
-    var polygon = [];
-    polygon.push([bounds["ne"]["lat"] + "," + bounds["sw"]["lng"]]);
-    polygon.push([bounds["sw"]["lat"] + "," + bounds["sw"]["lng"]]);
-    polygon.push([bounds["sw"]["lat"] + "," + bounds["ne"]["lng"]]);
-    polygon.push([bounds["ne"]["lat"] + "," + bounds["ne"]["lng"]]);
-    
-    var polygon_statement = 'polygon("' + polygon.join(" ") + '")';
-    return polygon_statement;
-}
diff --git a/asterix-examples/src/main/resources/cherry/js/cherry.js b/asterix-examples/src/main/resources/cherry/js/cherry.js
index 3eccda9..2044668 100755
--- a/asterix-examples/src/main/resources/cherry/js/cherry.js
+++ b/asterix-examples/src/main/resources/cherry/js/cherry.js
@@ -222,7 +222,11 @@
         formData["swLng"] = Math.abs(bounds.getSouthWest().lng());
         formData["neLat"] = Math.abs(bounds.getNorthEast().lat());
         formData["neLng"] = Math.abs(bounds.getNorthEast().lng());
-		
+		var formBounds = {
+            "ne" : { "lat" : formData["neLat"], "lng" : formData["neLng"]}, 
+		    "sw" : { "lat" : formData["swLat"], "lng" : formData["swLng"]}
+        };
+
 		var build_cherry_mode = "synchronous";
 		if ($('#asbox').is(":checked")) {
 		    build_cherry_mode = "asynchronous";
@@ -232,23 +236,18 @@
 		// It can also be used to generate queries, which can
 		// then be passed into another API call or stored 
 		// for a different application purpose. 
-		                        .rectangle({
-		                            "ne" : { "lat" : formData["neLat"], "lng" : formData["neLng"]}, 
-		                            "sw" : { "lat" : formData["swLat"], "lng" : formData["swLng"]}
-                                }) 
-		    
         var l = new LegacyExpression()
             .dataverse("twitter")
 		    .bind(new ForClause("t", new AsterixClause().set("TweetMessages")))
             .bind(new LetClause("keyword", new AsterixClause().set('"' + formData["keyword"] + '"')))
-            .bind(new LetClause("region", new ????))// TODO
-            .bind(new WhereClause("where " + [ // TODO
+            .bind(new LetClause("region", new AsterixSDK().rectangle(formBounds)))
+            .bind(new WhereClause("where " + [
 		        'spatial-intersect($t.sender-location, $region)',
 		        '$t.send-time > datetime("' + formData["startdt"] + '")',
 		        '$t.send-time < datetime("' + formData["enddt"] + '")',
 		        'contains($t.message-text, $keyword)'
              ]).join(" "))
-            .bind(new GroupClause().set("group by $c := spatial-cell($t.sender-location, create-point(24.5,-125.5), " + formData["gridlat"].toFixed(1) + ", " + formData["gridlng"].toFixed(1) + ")")) // TODO
+            .bind(new GroupClause().set("group by $c := spatial-cell($t.sender-location, create-point(24.5,-125.5), " + formData["gridlat"].toFixed(1) + ", " + formData["gridlng"].toFixed(1) + ")"))
 		    .return({ "cell" : "$c", "count" : "count($t)" })
             .success(cherryQuerySyncCallback, true)
 		    .success(cherryQueryAsyncCallback, false)
