diff --git a/asterix-examples/src/main/resources/black-cherry/cherry.tpl b/asterix-examples/src/main/resources/black-cherry/cherry.tpl
index b4bc416..d74ef049 100755
--- a/asterix-examples/src/main/resources/black-cherry/cherry.tpl
+++ b/asterix-examples/src/main/resources/black-cherry/cherry.tpl
@@ -141,9 +141,24 @@
                   <input type="checkbox" value="Submit Asynchronously" name="async" id="asbox" />
                   Submit asynchronously?
                 </li>
-                
               </ul>
             </div>
+            
+            <!-- On Drilldown, here is a nice modal -->
+            <div class="modal hide fade" id="drilldown_modal" tabindex="-1" role="dialog">
+              <div class="modal-dialog">
+                <div class="modal-content">
+                  <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                    <h4 class="modal-title">Explore Tweets</h4>
+                  </div>
+                  <div class="modal-body" id="drilldown_modal_body"></div>
+                  <div class="modal-footer">
+                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
+                  </div>
+                </div>
+              </div>
+            </div>
           </div>
         </div>
         
@@ -160,22 +175,6 @@
         <!-- Show Query -> Error TODO Doesn't need to be this... -->
         <div id="dialog"><h4>You must submit a query first.</h4></div>
         
-        <!-- On Drilldown, here is a nice modal -->
-        <div class="modal hide fade" id="drilldown_modal" tabindex="-1" role="dialog">
-          <div class="modal-dialog">
-            <div class="modal-content">
-              <div class="modal-header">
-                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-                <h4 class="modal-title">Explore Tweets</h4>
-              </div>
-              <div class="modal-body" id="drilldown_modal_body"></div>
-              <div class="modal-footer">
-                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
-              </div>
-            </div>
-          </div>
-        </div>
-        
       </div><!-- Row -->
 
     </div><!-- container -->      
diff --git a/asterix-examples/src/main/resources/black-cherry/static/img/mobile2.png b/asterix-examples/src/main/resources/black-cherry/static/img/mobile2.png
index 5b3153c..42b567b 100755
--- a/asterix-examples/src/main/resources/black-cherry/static/img/mobile2.png
+++ b/asterix-examples/src/main/resources/black-cherry/static/img/mobile2.png
Binary files differ
diff --git a/asterix-examples/src/main/resources/black-cherry/static/js/cherry.js b/asterix-examples/src/main/resources/black-cherry/static/js/cherry.js
index 795a80e..9b11e73 100755
--- a/asterix-examples/src/main/resources/black-cherry/static/js/cherry.js
+++ b/asterix-examples/src/main/resources/black-cherry/static/js/cherry.js
@@ -190,71 +190,74 @@
      
     // UI Element - Query Submission
     $("#submit-button").button().click(function () {
-    	// Clear current map on trigger
- 
-        $("#submit-button").attr("disabled", true);
     	
-    	// gather all of the data from the inputs
         var kwterm = $("#keyword-textbox").val();
-        var startdp = $("#start-date").datepicker("getDate");
-        var enddp = $("#end-date").datepicker("getDate");
-        var startdt = $.datepicker.formatDate("yy-mm-dd", startdp)+"T00:00:00Z";
-        var enddt = $.datepicker.formatDate("yy-mm-dd", enddp)+"T23:59:59Z";
-
-        var formData = {
-            "keyword": kwterm,
-            "startdt": startdt,
-            "enddt": enddt,
-            "gridlat": $("#grid-lat-slider").slider("value"),
-            "gridlng": $("#grid-lng-slider").slider("value")
-        };
-
-    	// Get Map Bounds
-    	var bounds;
-        if ($('#selection-button').hasClass("active") && selectionRect) {
-            bounds = selectionRect.getBounds();
+        if (kwterm == "") {
+            alert("Please enter a search term!");
         } else {
-            bounds = map.getBounds();
-        }
+        
+            $("#submit-button").attr("disabled", true);
     	
-    	var swLat = Math.abs(bounds.getSouthWest().lat());
-    	var swLng = Math.abs(bounds.getSouthWest().lng());
-    	var neLat = Math.abs(bounds.getNorthEast().lat());
-    	var neLng = Math.abs(bounds.getNorthEast().lng());
-    	
-    	formData["swLat"] = Math.min(swLat, neLat);
-    	formData["swLng"] = Math.max(swLng, neLng);
-    	formData["neLat"] = Math.max(swLat, neLat);
-    	formData["neLng"] = Math.min(swLng, neLng);
+            var startdp = $("#start-date").datepicker("getDate");
+            var enddp = $("#end-date").datepicker("getDate");
+            var startdt = $.datepicker.formatDate("yy-mm-dd", startdp)+"T00:00:00Z";
+            var enddt = $.datepicker.formatDate("yy-mm-dd", enddp)+"T23:59:59Z";
 
-		var build_cherry_mode = "synchronous";
+            var formData = {
+                "keyword": kwterm,
+                "startdt": startdt,
+                "enddt": enddt,
+                "gridlat": $("#grid-lat-slider").slider("value"),
+                "gridlng": $("#grid-lng-slider").slider("value")
+            };
+
+    	    // Get Map Bounds
+    	    var bounds;
+            if ($('#selection-button').hasClass("active") && selectionRect) {
+                bounds = selectionRect.getBounds();
+            } else {
+                bounds = map.getBounds();
+            }
+    	
+    	    var swLat = Math.abs(bounds.getSouthWest().lat());
+    	    var swLng = Math.abs(bounds.getSouthWest().lng());
+    	    var neLat = Math.abs(bounds.getNorthEast().lat());
+    	    var neLng = Math.abs(bounds.getNorthEast().lng());
+    	
+    	    formData["swLat"] = Math.min(swLat, neLat);
+    	    formData["swLng"] = Math.max(swLng, neLng);
+    	    formData["neLat"] = Math.max(swLat, neLat);
+    	    formData["neLng"] = Math.min(swLng, neLng);
+
+		    var build_cherry_mode = "synchronous";
 		
-		if ($('#asbox').is(":checked")) {
-		    build_cherry_mode = "asynchronous";
-		    $('#show-query-button').attr("disabled", false);
-		} else {
-		    $('#show-query-button').attr("disabled", true);
-		}
+		    if ($('#asbox').is(":checked")) {
+		        build_cherry_mode = "asynchronous";
+		        $('#show-query-button').attr("disabled", false);
+		    } else {
+		        $('#show-query-button').attr("disabled", true);
+		    }
 	
-        var f = buildAQLQueryFromForm(formData);
+            var f = buildAQLQueryFromForm(formData);
         
-        APIqueryTracker = {
-		    "query" : "use dataverse twitter;\n" + f.val(),
-		    "data" : formData
-		};
+            APIqueryTracker = {
+		        "query" : "use dataverse twitter;\n" + f.val(),
+		        "data" : formData
+		    };
 		
-		$('#dialog').html(APIqueryTracker["query"]);
+		    $('#dialog').html(APIqueryTracker["query"]);
         
-        if (build_cherry_mode == "synchronous") {
-            A.query(f.val(), cherryQuerySyncCallback, build_cherry_mode);
-        } else {
-            A.query(f.val(), cherryQueryAsyncCallback, build_cherry_mode);
-        }
+            if (build_cherry_mode == "synchronous") {
+                A.query(f.val(), cherryQuerySyncCallback, build_cherry_mode);
+            } else {
+                A.query(f.val(), cherryQueryAsyncCallback, build_cherry_mode);
+            }
     
-        // Clears selection rectangle on query execution, rather than waiting for another clear call.
-        if (selectionRect) {
-            selectionRect.setMap(null);
-            selectionRect = null;
+            // Clears selection rectangle on query execution, rather than waiting for another clear call.
+            if (selectionRect) {
+                selectionRect.setMap(null);
+                selectionRect = null;
+            }
         }
     });
 });
@@ -512,6 +515,8 @@
             // Clicking on a circle drills down map to that value, hovering over it displays a count
             // of tweets at that location.
             google.maps.event.addListener(map_circle, 'click', function (event) {
+                map_info_windows[m].close();
+                map_info_windows = {};
                 onMapPointDrillDown(map_circle.val);
             });
             
@@ -675,8 +680,6 @@
             "drilltweetobj" + tweetId,
             function () {
                
-                // TODO Maybe this should fire differnetly if another tweetbook is selected?
-               
                 // Send comment deletion to asterix 
                 var deleteTweetCommentOnId = '"' + tweetId + '"';
                 var toDelete = new DeleteStatement(
@@ -863,6 +866,7 @@
     for (var dm in coordinates) {
         var keyLat = coordinates[dm].tweetLat.toString();
         var keyLng = coordinates[dm].tweetLng.toString();
+        
         if (!drilldown_data_map.hasOwnProperty(keyLat)) {
             drilldown_data_map[keyLat] = {}; 
         }
@@ -964,7 +968,7 @@
         onDrillDownAtLocation(tweet_obj);
     });
     
-    $('#drilldown_modal').modal('show');
+    $('#drilldown_modal').modal();
 }
 
 /** Toggling Review and Explore Modes **/
