diff --git a/happstack-hsp.cabal b/happstack-hsp.cabal
--- a/happstack-hsp.cabal
+++ b/happstack-hsp.cabal
@@ -1,5 +1,5 @@
 Name:                happstack-hsp
-Version:             7.2.4
+Version:             7.3.0
 Synopsis:            Support for using HSP templates in Happstack
 Description:         Happstack is a web application framework. HSP is an XML templating solution. This package makes it easy to use HSP templates with Happstack.
 Homepage:            http://www.happstack.com/
@@ -32,9 +32,10 @@
                        happstack-server >= 6.0 && < 7.4,
                        harp             >= 0.4 && < 0.5,
                        hsp              >= 0.9.2 && < 0.11,
+                       hsx2hs           >= 0.13.0 && < 0.14,
                        mtl              >= 1.1 && < 2.2,
                        utf8-string      == 0.3.*,
                        syb              >= 0.3 && < 0.5,
-                       text             >= 0.10 && < 1.1
+                       text             >= 0.10 && < 1.2
 
 --  Build-tools:         hsx2hs
diff --git a/src/HSP/Google/Analytics.hs b/src/HSP/Google/Analytics.hs
--- a/src/HSP/Google/Analytics.hs
+++ b/src/HSP/Google/Analytics.hs
@@ -1,31 +1,34 @@
-{-# LANGUAGE DeriveDataTypeable, PatternGuards, FlexibleContexts, TypeFamilies, OverloadedStrings #-}
-{-# OPTIONS_GHC -F -pgmFhsx2hs #-}
+{-# LANGUAGE DeriveDataTypeable, PatternGuards, FlexibleContexts, TypeFamilies, OverloadedStrings, QuasiQuotes #-}
 module HSP.Google.Analytics
     ( UACCT(..)
     , analytics
-    , addAnalytics
     , analyticsAsync
+    , universalAnalytics
     ) where
 
 import Data.Generics (Data, Typeable)
-import Data.Text.Lazy (Text)
+import Data.Text.Lazy (Text,pack)
 import HSP
 import Prelude hiding (head)
+import Language.Haskell.HSX.QQ (hsx)
 
 newtype UACCT = UACCT String -- ^ The UACCT provided to you by Google (looks like: @UA-XXXXX-X@)
     deriving (Read, Show, Eq, Ord, Typeable, Data)
 
 -- | create the google analytics asynchronous tracking script tag
 --
+-- This uses the now dubbed 'classic google analytics'
+--
 -- NOTE: you must put this right before the \<\/head\> tag
+-- see also: universalAnalytics
 analyticsAsync :: (XMLGenerator m, StringType m ~ Text) =>
                   UACCT     -- ^ web property ID (looks like: @UA-XXXXX-X@)
                -> GenXML m
-analyticsAsync (UACCT uacct) =
+analyticsAsync (UACCT uacct) = [hsx|
     <script type="text/javascript">
 
       var _gaq = _gaq || [];
-      _gaq.push(['_setAccount', '<% uacct %>']);
+      _gaq.push(['_setAccount', '<% pack uacct %>']);
       _gaq.push(['_trackPageview']);
 
       (function() {
@@ -34,27 +37,46 @@
         var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
       })();
 
-    </script>
+    </script> |]
 
--- | create the (old) google analytics script tags
+universalAnalytics :: (XMLGenerator m, StringType m ~ Text) =>
+                      UACCT     -- ^ web property ID (looks like: @UA-XXXXX-X@)
+                   -> GenXML m
+universalAnalytics (UACCT uacct) = [hsx|
+    <script type="text/javascript">
+     (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+     (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+     m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+     })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+     ga('create', '<% pack uacct %>', 'auto');
+     ga('send', 'pageview');
+    </script> |]
+
+
+-- | create the (even older) google analytics script tags
 --
 -- NOTE: you must put the <% analytics yourUACCT %> immediately before the </body> tag
 --
 -- You probably want to use 'analyticsAsync' instead.
 --
--- See also: 'addAnalytics', 'analyticsAsync'
+-- See also: 'addAnalytics', 'analyticsAsync', 'universalAnalytics'
 analytics :: (XMLGenerator m, StringType m ~ Text) => UACCT -> GenXMLList m
 analytics (UACCT uacct) =
-    do a <- <script type="text/javascript">
+    do a <- [hsx|
+             <script type="text/javascript">
               var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
               document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-            </script>
-       b <- <script type="text/javascript">
-              var pageTracker = _gat._getTracker("<% uacct %>");
-              pageTracker._initData();
-              pageTracker._trackPageview();
-            </script>
+             </script> |]
+       b <- [hsx|
+             <script type="text/javascript">
+               var pageTracker = _gat._getTracker("<% pack uacct %>");
+               pageTracker._initData();
+               pageTracker._trackPageview();
+             </script> |]
        return [a,b]
+{-
+removed because the hsx qq does not currently support patterns.
 
 -- | automatically add the google analytics scipt tags immediately before the </body> element
 -- NOTE: this function is not idepotent
@@ -72,13 +94,15 @@
     do page <- pg
        a <- analytics uacct
        case page of
-         <html hattrs><[ head, body ]></html> ->
-             <html hattrs>
-                <% head %>
-                <% body <: (a :: [XML]) %>
-             </html>
+         [hsx| <html hattrs><[ head, body ]></html> |] ->
+                [hsx|
+                 <html hattrs>
+                  <% head %>
+                  <% body <: (a :: [XML]) %>
+                 </html>
+                 |]
          o -> error ("Failed to add analytics." ++ show o)
-
+-}
 {- Example Analytics Code from Google:
 
 <script type="text/javascript">
