diff --git a/spatial/static/spatial/js/gridmap.js b/spatial/static/spatial/js/gridmap.js
index a80fcabe5080ed60a1aa0c221236ad7c372238eb..8f0d8562d156f39af23ca2b06712d53654ef2456 100644
--- a/spatial/static/spatial/js/gridmap.js
+++ b/spatial/static/spatial/js/gridmap.js
@@ -51,6 +51,25 @@ function getCurrentVisibleOLLayer()
     return layers[currentWMSLayer["ordering"]];
 }
 
+/**
+ * Used by displayQueryResult() to retrieve values from query templates when user clicks on the map
+ * 
+ * @returns a list of the OpenLayers layers that are available for the current timestamp. 
+ * 
+ */
+function getLayersForCurrentTimestamp()
+{
+    layerParams = WMSLayersDateBucket[currentTimestamp];
+    paramIdList = Object.keys(layerParams);
+    let layersForCurrentTimestamp = [];
+    for(let i=0; i< paramIdList.length; i++)
+    {
+        layersForCurrentTimestamp.push(layers[WMSLayersDateBucket[currentTimestamp][paramIdList[i]]["ordering"]]);
+    }
+    return layersForCurrentTimestamp;
+
+}
+
 
 async function initGridMap(inputModelId, mapAttribution) {
     modelId = inputModelId;
@@ -212,70 +231,76 @@ async function displayQueryResult(evt)
     
     let coordinate = proj4(map.getView().getProjection().getCode(), 'EPSG:25833', evt.coordinate)
     let currentWMSLayer = WMSLayersDateBucket[currentTimestamp][currentParameter];
-    let currentLayer = getCurrentVisibleOLLayer();
-    //console.info(currentLayer);
-    const url = currentLayer.getSource().getGetFeatureInfoUrl(
-        coordinate,
-        map.getView().getResolution(),
-        currentWMSLayer.CRS[0],
-        { 'INFO_FORMAT': 'text/xml' }
-    );
-    
-    //console.info(url);
-    let response = await fetch(url);
-    let responseXML = await response.text();
 
-    // User clicked outside of layer extent
-    if(responseXML.trim().length == 0)
+    // Need to get all layers for today, and combine results from querying all layers
+    let layersForCurrentTimestamp = getLayersForCurrentTimestamp();
+    let warningStatus = null;
+    let parameters = {};
+    for(let i=0;i<layersForCurrentTimestamp.length;i++)
     {
-        return;
-    }
+        let currentLayer = layersForCurrentTimestamp[i];
+        const url = currentLayer.getSource().getGetFeatureInfoUrl(
+            coordinate,
+            map.getView().getResolution(),
+            currentWMSLayer.CRS[0],
+            { 'INFO_FORMAT': 'text/xml' }
+        );
 
-    const parser = new DOMParser();
-    const xmlDOM = parser.parseFromString(responseXML,"text/xml");
-    const result = xmlDOM.getElementsByTagName("vipsResult")[0]
-    if(result) {
-        // We may or may not have warning status included
-        let warningStatus = xmlDOM.getElementsByTagName("warningStatus").length == 1 ? xmlDOM.getElementsByTagName("warningStatus")[0].getAttribute("value") : null;
-        if(warningStatus == -1)
-        {
-            return;
-        }
-        let parameters = {};
-        let parameterElements = xmlDOM.getElementsByTagName("parameter");
-        for(let i=0;i<parameterElements.length;i++)
+        let response = await fetch(url);
+        let responseXML = await response.text();
+        // User clicked outside of layer extent
+        if(responseXML.trim().length == 0)
         {
-            parameters[parameterElements[i].getAttribute("name")] = parameterElements[i].getAttribute("value");
+            continue;
         }
-        //console.info("warningStatus = " + warningStatus);
-        //console.info(parameters);
-
-        let warningStatusTitle =  warningStatus == 0 ? "N/A"
-                                : warningStatus == 1 ? "Missing data"
-                                : warningStatus == 2 ? "No risk"
-                                : warningStatus == 3 ? "Possible risk"
-                                : warningStatus == 4 ? "High risk" : "";
-        
-        let paramHTML = "<ul>";
-        paramCodes = Object.keys(parameters);
-        for(let i=0;i<paramCodes.length;i++)
-        {
-            paramHTML += "<li>" + paramCodes[i] + " = " + parameters[paramCodes[i]] + "</li>"
+        const parser = new DOMParser();
+        const xmlDOM = parser.parseFromString(responseXML,"text/xml");
+        const result = xmlDOM.getElementsByTagName("vipsResult")[0]
+        if(result) {
+            // We may or may not have warning status included
+            warningStatus = warningStatus == null ? (xmlDOM.getElementsByTagName("warningStatus").length == 1 ? xmlDOM.getElementsByTagName("warningStatus")[0].getAttribute("value") : null) : warningStatus;
+            // User clicked on invisible/invalid part of the layer
+            if(warningStatus == -1)
+            {
+                continue;
+            }
+
+            let parameterElements = xmlDOM.getElementsByTagName("parameter");
+            for(let i=0;i<parameterElements.length;i++)
+            {
+                parameters[parameterElements[i].getAttribute("name")] = parameterElements[i].getAttribute("value");
+            }
         }
-        paramHTML += "</ul>";
-
-        // Render results
-        // TODO: Handle click outside layer
-        popup.setPosition(evt.coordinate);
-        $(popupElement).popover({
-            'placement': 'top',
-            'animation': false,
-            'html': true,
-            'content': '<h4>' + warningStatusTitle + '</h4>' + paramHTML
-          });
-          $(popupElement).popover('show');
     }
-    else{
-        alert("An error occured. No model data was returned from the server. This is what the server returned: " + responseXML);
+
+    // User clicked outside of layers contents
+    if(warningStatus == null)
+    {
+        return;
     }
+
+    let warningStatusTitle =  warningStatus == 0 ? "N/A"
+                            : warningStatus == 1 ? "Missing data"
+                            : warningStatus == 2 ? "No risk"
+                            : warningStatus == 3 ? "Possible risk"
+                            : warningStatus == 4 ? "High risk" : "";
+
+    let paramHTML = "<ul>";
+    paramCodes = Object.keys(parameters);
+    for(let i=0;i<paramCodes.length;i++)
+    {
+        paramHTML += "<li>" + paramCodes[i] + " = " + parameters[paramCodes[i]] + "</li>"
+    }
+    paramHTML += "</ul>";
+
+    // Render results
+    popup.setPosition(evt.coordinate);
+    $(popupElement).popover({
+        'placement': 'top',
+        'animation': false,
+        'html': true,
+        'content': '<h4>' + warningStatusTitle + '</h4>' + paramHTML
+        });
+        $(popupElement).popover('show');
+
 }
\ No newline at end of file
diff --git a/spatial/templates/spatial/index.html b/spatial/templates/spatial/index.html
index 832c4e2c602348de87a4129382666e7583ab7479..b8f9dec5b0ebe928c1923c596c950d6190b0d37d 100644
--- a/spatial/templates/spatial/index.html
+++ b/spatial/templates/spatial/index.html
@@ -31,7 +31,7 @@
     {% if available_grid_models|length > 0 %}
     <ul>
         {% for model in available_grid_models %}
-        <li><a href="gridmap/{{model.model_id}}/">{{ model.model_name }}</a></li>
+        <li><a href="gridmap/{{model.model_id}}/">{{ get_text_i18n model.model_name }}</a></li>
         {% endfor %}
     </ul>
     {% else %}