diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java
index 589adab..f6f0ef9 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java
@@ -113,7 +113,6 @@
     @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
         String resourcePath = null;
-        PrintWriter out = response.getWriter();
         String requestURI = request.getRequestURI();
 
         if (requestURI.equals("/")) {
@@ -122,9 +121,14 @@
         } else {
             resourcePath = requestURI;
         }
-
+                
+        InputStream is = APIServlet.class.getResourceAsStream(resourcePath);
+        if (is == null) {
+            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+            return;
+        }
+        
         if (resourcePath.endsWith(".png")) {
-            System.out.println("loading " + resourcePath + " as png");
             // Handle PNG content for webui
             response.setContentType(new MimetypesFileTypeMap().getContentType(resourcePath));
 
@@ -133,28 +137,20 @@
             response.setContentLength((int)pngFile.length());
 
             // Initialize filestreams, and write to output
-            FileInputStream pngIn = new FileInputStream(pngFile);
             OutputStream pngOut = response.getOutputStream();
 
             byte[] buf = new byte[1024];
             int len;
-            while ((len = pngIn.read(buf)) >= 0) {
-                System.out.println(new String(buf, 0, len));
+            while ((len = is.read(buf)) >= 0) {
                 pngOut.write(buf, 0, len);
             }
 
             // Close streams
             pngOut.close();
-            pngIn.close();
             return;
         }
-
+        
         response.setCharacterEncoding("utf-8");
-        InputStream is = APIServlet.class.getResourceAsStream(resourcePath);
-        if (is == null) {
-            response.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return;
-        }
         InputStreamReader isr = new InputStreamReader(is);
         StringBuilder sb = new StringBuilder();
         BufferedReader br = new BufferedReader(isr);
@@ -165,6 +161,7 @@
             line = br.readLine();
         }
 
+        PrintWriter out = response.getWriter();
         out.println(sb.toString());
     }
 
diff --git a/asterix-app/src/main/resources/webui/querytemplate.html b/asterix-app/src/main/resources/webui/querytemplate.html
index 7b84213..503f845 100644
--- a/asterix-app/src/main/resources/webui/querytemplate.html
+++ b/asterix-app/src/main/resources/webui/querytemplate.html
@@ -52,7 +52,7 @@
         </a>
 
         <!-- Temporary logo placeholder -->
-        <a class="brand" href="#"><img src="static/img/finalasterixlogo.png"></a>
+        <a class="brand" href="#"><img src="/webui/static/img/finalasterixlogo.png"></a>
         <!--<a class="brand" href="#"><img src="http://db.tt/J1MTCdKs"></a>-->
         
         <div class="nav-collapse collapse">
