diff --git a/asterix-app/src/main/resources/webui/querytemplate.html b/asterix-app/src/main/resources/webui/querytemplate.html
index ee49122..9088251 100644
--- a/asterix-app/src/main/resources/webui/querytemplate.html
+++ b/asterix-app/src/main/resources/webui/querytemplate.html
@@ -16,13 +16,41 @@
  ! specific language governing permissions and limitations
  ! under the License.
  !-->
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta name="description" content="ASTERIX WEB PAGE" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<link
+	href='http://fonts.googleapis.com/css?family=Bitter|PT+Sans+Caption|Open+Sans'
+	rel='stylesheet' type='text/css'>
+<script src="/webui/static/js/jquery.min.js"></script>
+
+<link href="/webui/static/css/bootstrap.min.css" rel="stylesheet"
+	type="text/css" />
+<link href="/webui/static/css/bootstrap-responsive.min.css"
+	rel="stylesheet" type="text/css" />
+
+<script src="/webui/static/js/bootstrap.min.js"></script>
+
+<link href="/webui/static/css/style.css" rel="stylesheet"
+	type="text/css" />
+
+<script type="text/javascript">
+$(document).ready(function() {
+
+    var optionButtonSize = $('#checkboxes-on').width();
+    $('#clear-query-button, #run-btn').width(optionButtonSize);
+
+    $('#checkboxes-on').click(function() {
+        /* Displays a checkmark to indicate selection/clearing */
         if ($('#opts').is(":visible")) {
             $('#opts').hide();
             $('#queryform :input').prop('checked', false);
         } else {
-            $('#opts').show();    
+            $('#opts').show();
             $('#queryform :input').prop('checked', true);
-        }    
+        }
         return false;
     });
 
@@ -31,7 +59,7 @@
         return false;
     });
 
-    $('form#queryform :input').click( function () {
+    $('form#queryform :input').click(function() {
         /* Hides selection check on uncheck, shows when all 5 selected */
         if ($(this).val()) {
             if ($(this).is(':checked') && $('input[type=checkbox]').filter(':checked').length == 5) {
@@ -45,74 +73,90 @@
     $("form#queryform").submit(function() {
         $('#output-message').html("");
         $.post("/", $("form#queryform").serialize(), function(data) {
-
-            var resSet = 0;
-            var resPattern = /<h4>Results:<\/h4>/g;
-            var durPattern = /<PRE>Duration/g;
+            var durPattern = '<PRE>Duration';
             var errorPattern = /<div class="accordion" id="errorblock">/g;
-            var resultCount = data.match(resPattern);
-
-            if (!resPattern.test(data)) {
-                if(errorPattern.test(data)) {
-                  $('#output-heading').html('Error');
-                  $('#output-heading').addClass('error');
-                } else {
-                  $('#output-heading').html('Output');
-                  $('#output-heading').removeClass('error');
-                }
-                $('#output-message').html(data);
+            var sectionsSeparator = '<h4>';
+            var resultPat = 'Results:</h4>';
+            
+            if (errorPattern.test(data)) {
+                $('#output-heading').html('Error');
+                $('#output-heading').addClass('error');
             } else {
                 $('#output-heading').html('Output');
                 $('#output-heading').removeClass('error');
-                if (resultCount.length <= 1) {
-                    $('#output-message').html(data);
-                } else {
-                    var splitData = data.split('<PRE>Duration');
-                    var results = splitData[0].split('<h4>');
-                    var components = results.slice(1, results.length);
-                    var sections = components.length / resultCount.length;
+            }
+            var executedStatements = data.split('<!-- BEGIN -->');
+            var executedStatementsWithResultsCount = 0;
+            for (var i = 0; i < executedStatements.length; i++) {
+                if (executedStatements[i].toString().trim().length > 0) {
+                    /* check how many statements have returned data*/
+                    executedStatementsWithResultsCount++;
+                }
+            }
 
-                    for (resSet = 0; resSet < resultCount.length; resSet++) {
+            /* only a single statement returned results and/or duration message*/
+            if (executedStatementsWithResultsCount <= 2) {
+                /* print statement results and duration*/
+                $('#output-message').html(data);
+            } else {
+                var resultsCount = 1;
+                /* need to create collapse button and div per statement*/
+                for (var i = 0; i < executedStatements.length; i++) {
+                    /* last statement is always the duration message*/
+                    if (i == (executedStatements.length - 1)) {
+                        /* print duration message*/
+                        $('#output-message').append(executedStatements[i]);
+                        break;
+                    }
 
-                        $('#output-message').append('<h4>' + components[(resSet+1)*sections - 1]);
+                    if (executedStatements[i].toString().trim().length > 0) {
+                        var sections = executedStatements[i].toString().split(sectionsSeparator);
+                        /* remove the first section since it is always empty due to splitng on sectionsSeparator */
+                        sections.splice(0, 1);
 
-                        if (sections > 1) {
-                            var resNum = resSet + 1;
+                        /* if there is a results section, we need to put it before the collapsible section*/
+                        for (var j = 0; j < sections.length; j++) {
+                            /* print results section and remove it*/
+                            if (sections[j].indexOf(resultPat) >= 0) {
+                                var resultsSection = sections.splice(j, 1);
+                                $('#output-message').append(sectionsSeparator + resultsSection.toString());
+                            }
+                        }
+
+                        if (sections.length > 0) {
+                            /* generate the collapsible section for this statement*/
                             $('<button/>')
                                 .attr("class", "btn")
                                 .attr("data-toggle", "collapse")
-                                .attr("data-target", "#collapse" + resSet)
+                                .attr("data-target", "#collapse" + i)
                                 .css("margin-bottom", "1em")
-                                .html('Result Plan #' + resNum + '<i id="ibtn' + resSet + '" class="icon-plus extarget"></i>')
+                                .html('Result Plan #' + resultsCount + '<i id="ibtn' + resultsCount + '" class="icon-plus extarget"></i>')
                                 .appendTo('#output-message');
 
                             $('<div/>')
-                                .attr("id", "collapse" + resSet)
+                                .attr("id", "collapse" + i)
                                 .attr("class", "collapse in")
                                 .appendTo('#output-message');
 
-                            for (var c = 0; c < sections - 1; c++) {
-                                var pos = resSet*sections + c;
-                                $('#collapse' + resSet).append('<h4>' + components[pos]);
+                            /* put the rest of the sections in the collapsible section*/
+                            for (var k = 0; k < sections.length; k++) {
+                                $('#collapse' + i).append(sectionsSeparator + sections[k].toString());
                             }
-
-                            /* Placeholder for future on show/hide result plan behavior
-                            $('#collapse' + resSet).on('show', function() {
-                            }).on('hide', function() {
-                            });
-                            */
-
-                            $('#output-message').append("<hr/>");
                         }
+                        $('#output-message').append("<hr/>");
+                        resultsCount++;
 
+                        /* Placeholder for future on show/hide result plan behavior
+                        $('#collapse' + resSet).on('show', function() {
+                        }).on('hide', function() {
+                        });
+                        */
                     }
-                    $('#output-message').append('<PRE>Duration' + splitData[1]);
                 }
-
             }
 
             var contentString = data.toString();
-            if (contentString.indexOf("<PRE>Duration") !== -1) {
+            if (contentString.indexOf(durPattern) != -1) {
                 $('<div/>')
                     .addClass("alert alert-success")
                     .html("Success: Query Complete")
