diff --git a/http/http_connection.h b/http/http_connection.h
index 7e23de4..b07459d 100644
--- a/http/http_connection.h
+++ b/http/http_connection.h
@@ -18,6 +18,7 @@
 #include <boost/beast/http.hpp>
 #include <boost/beast/ssl/ssl_stream.hpp>
 #include <boost/beast/websocket.hpp>
+#include <json_html_serializer.hpp>
 #include <security_headers.hpp>
 #include <ssl_key_handler.hpp>
 
@@ -30,31 +31,8 @@
 
 inline void prettyPrintJson(crow::Response& res)
 {
-    std::string value = res.jsonValue.dump(4, ' ', true);
-    utility::escapeHtml(value);
-    utility::convertToLinks(value);
-    res.body() = "<html>\n"
-                 "<head>\n"
-                 "<title>Redfish API</title>\n"
-                 "<link rel=\"stylesheet\" type=\"text/css\" "
-                 "href=\"/styles/default.css\">\n"
-                 "<script src=\"/highlight.pack.js\"></script>"
-                 "<script>hljs.initHighlightingOnLoad();</script>"
-                 "</head>\n"
-                 "<body>\n"
-                 "<div style=\"max-width: 576px;margin:0 auto;\">\n"
-                 "<img src=\"/DMTF_Redfish_logo_2017.svg\" alt=\"redfish\" "
-                 "height=\"406px\" "
-                 "width=\"576px\">\n"
-                 "<br>\n"
-                 "<pre>\n"
-                 "<code class=\"json\">" +
-                 value +
-                 "</code>\n"
-                 "</pre>\n"
-                 "</div>\n"
-                 "</body>\n"
-                 "</html>\n";
+    json_html_util::dumpHtml(res.body(), res.jsonValue);
+
     res.addHeader("Content-Type", "text/html;charset=UTF-8");
 }
 
diff --git a/http/utility.h b/http/utility.h
index 02b136c..ec0a889 100644
--- a/http/utility.h
+++ b/http/utility.h
@@ -733,47 +733,6 @@
     return true;
 }
 
-inline void escapeHtml(std::string& data)
-{
-    std::string buffer;
-    // less than 5% of characters should be larger, so reserve a buffer of the
-    // right size
-    buffer.reserve(data.size() * 11 / 10);
-    for (size_t pos = 0; pos != data.size(); ++pos)
-    {
-        switch (data[pos])
-        {
-            case '&':
-                buffer.append("&amp;");
-                break;
-            case '\"':
-                buffer.append("&quot;");
-                break;
-            case '\'':
-                buffer.append("&apos;");
-                break;
-            case '<':
-                buffer.append("&lt;");
-                break;
-            case '>':
-                buffer.append("&gt;");
-                break;
-            default:
-                buffer.append(&data[pos], 1);
-                break;
-        }
-    }
-    data.swap(buffer);
-}
-
-inline void convertToLinks(std::string& s)
-{
-    // Convert anything with a redfish path into a link
-    const std::regex redfishPath{"(&quot;((.*))&quot;[ \\n]*:[ "
-                                 "\\n]*)(&quot;((?!&quot;)/redfish/.*)&quot;)"};
-    s = std::regex_replace(s, redfishPath, "$1<a href=\"$5\">$4</a>");
-}
-
 /**
  * Method returns Date Time information according to requested format
  *
