diff --git a/modules/statistics/templates/statistics.twig b/modules/statistics/templates/statistics.twig
new file mode 100644
index 0000000000000000000000000000000000000000..7e5d1510fd19f8aa7bbe5279f282c6f77938600b
--- /dev/null
+++ b/modules/statistics/templates/statistics.twig
@@ -0,0 +1,212 @@
+{% set pagetitle = 'SimpleSAMLphp Statistics'|trans %}
+{% extends "base.twig" %}
+
+{% block preload %}
+    <link href="{{ baseurlpath }}style.css" rel="stylesheet" />
+{% endblock %}
+{% block postload %}
+    <script src="{{ baseurlpath }}javascript.js"></script>
+{% endblock %}
+
+{% block content %}
+    <h1>{{ current_rule.name }}</h1>
+    <p>{{ current_rule.descr }}</p>
+
+    <table class="selecttime">
+        <tr>
+            <td class="selecttime_icon">
+                <img src="/{{ baseurlpath }}resources/icons/crystal_project/kchart.32x32.png" alt="Report settings" />
+            </td>
+            <td>
+                <form action="#">
+                    {% for key, value in post_rule %}
+                    <input type="hidden" name="{{ key|escape('html') }}" value="{{ value|escape('html') }}">
+                    {% endfor %}
+                    <select onchange="submit();" name="rule">
+                    {% for key, rule in available_rules %}
+                        {% if key == selected_rule %}
+                        <option selected="selected" value="{{ key }}">{{ rule.name }}</option>
+                        {% else %}
+                        <option value="{{ key }}">{{ rule.name }}</option>
+                        {% endif %}
+                    {% endfor %}
+                    </select>
+                </form>
+            </td>
+            <td class="td_right">
+                <form action="#">
+                    {% for key, value in post_d %}
+                    <input type="hidden" name="{{ key|escape('html') }}" value="{{ value|escape('html') }}">
+                    {% endfor %}
+                    <select onchange="submit();" name="d">
+                    {% for key, delim in availdelimiters %}
+                        {% set delimName = delim %}
+
+                        {% if delimiterPresentation[delim] is defined %}
+                        {% set delimName = delimiterPresentation[delim] %}
+                        {% endif %}
+
+                        {% if key == "_" %}
+                        <option value="_">Total</option>
+                        {% elseif request_d is defined and delim == request_d %}
+                        <option selected="selected" value="{{ delim|escape('html') }}">{{ delimName|escape('html') }}</option>
+                        {% else %}
+                        <option value="{{ delim|escape('html') }}">{{ delimName|escape('html') }}</option>
+                        {% endif %}
+                    {% endfor %}
+                    </select>
+                </form>
+            </td>
+        </tr>
+    </table>
+
+    <table class="selecttime">
+        <tr>
+            <td class="selecttime_icon">
+                <img src="/{{ baseurlpath }}resources/icons/crystal_project/date.32x32.png" alt="Select date and time" />
+            </td>
+            {% if available_times_prev %}
+            <td><a href="{{ get_times_prev }}">&laquo; Previous</a></td>
+            {% else %}
+            <td class="selecttime_link_grey">&laquo; Previous</td>
+            {% endif %}
+            <td class="td_right">
+                <form action="#">
+                    {% for key, value in post_res %}
+                    <input type="hidden" name="{{ key|escape('html') }}" value="{{ value|escape('html') }}">
+                    {% endfor %}
+                    <select onchange="submit();" name="res">
+                    {% for key, timeresname in available_timeres %}
+                        {% if key == selected_timeres %}
+                        <option selected="selected" value="{{ key }}">{{ timeresname }}</option>
+                        {% else %}
+                        <option value="{{ key }}">{{ timeresname }}</option>
+                        {% endif %}
+                    {% endfor %}
+                    </select>
+                </form>
+            </td>
+            <td class="td_left">
+                <form action="#">
+                    {% for key, value in post_time %}
+                    <input type="hidden" name="{{ key|escape('html') }}" value="{{ value|escape('html') }}">
+                    {% endfor %}
+                    <select onchange="submit();" name=time>
+                    {% for key, timedescr in available_times %}
+                        {% if key == selected_time %}
+                        <option selected="selected" value="{{ key }}">{{ timedescr }}</option>
+                        {% else %}
+                        <option value="{{ key }}">{{ timedescr }}</option>
+                        {% endif%}
+                    {% endfor %}
+                    </select>
+                </form>
+            </td>
+            {% if available_times_next %}
+                <td class="td_right td_next_right"><a href="{{ get_times_next }}">Next &raquo;</a></td>
+            {% else %}
+                <td class="td_right selecttime_link_grey">Next &raquo;</td>
+            {% endif %}
+        </tr>
+    </table>
+
+    <div id="tabdiv">
+        <ul class="tabset_tabs">
+            <li class="tab-link current" data-tab="graph"><a href="#graph">Graph</a></li>
+            <li class="tab-link" data-tab="table"><a href="#table">Summary table</a></li>
+            <li class="tab-link" data-tab="debug"><a href="#debug">Time serie</a></li>
+        </ul>
+
+        <div id="graph" class="tabset_content current">
+            <img src="{{ imgurl }}" alt="Graph" />
+            <form action="#">
+                <p class="p_right">Compare with total from this dataset
+                <select onchange="submit();" name="rule2">
+                    <option value="_">None</option>
+                    {% for key, rule in available_rules %}
+                    {% if key == selected_rule2 %}
+                    <option selected="selected" value="{{ key }}">{{ rule.name }}</option>
+                    {% else %}
+                    <option value="{{ key }}">{{ rule.name }}</option>
+                    {% endif %}
+                    {% endfor %}
+                </select>
+                </p>
+            </form>
+        </div>
+
+        <div id="table" class="tabset_content">
+            {% if pieimgurl is defined %}
+            <img src="{{ pieimgurl }}" alt="Pie chart" />
+            {% endif %}
+
+            <table class="tableview">
+                <tr>
+                    <th class="value">Value</th>
+                    <th class="category">Data range</th>
+                </tr>
+                {% for key, value in summaryDataset %}
+                {% if loop.index0  % 2 == 0 %}
+                    {% set class = 'even' %}
+                {% else %}
+                    {% set class = 'odd' %}
+                {% endif %}
+
+                {% set keyName = key %}
+                {% if delimiterPresentation[key] is defined %}
+                {% set keyName = delimiterPresentation[key] %}
+                {% endif %}
+
+                {% if key == "_" %}
+                <tr class="total {{ class }}">
+                    <td class="value">{{ value }}</td>
+                    <td class="category">{{ keyName }}</td>
+                </tr>
+                {% else %}
+                <tr class="{{ class }}">
+                    <td class="value">{{ value }}</td>
+                    <td class="category">{{ keyName }}</td>
+                </tr>
+                {% endif %}
+                {% endfor %}
+            </table>
+        </div>
+
+        <div id="debug" class="tabset_content">
+            <table class="timeseries">
+                <tr>
+                    <th>Time</th>
+                    <th>Total</th>
+                    {% for key, value in topdelimiters %}
+                    {% set keyName = key %}
+                    {% if delimiterPresentation[key] is defined %}
+                        {% set keyName = delimiterPresentation[key] %}
+                    {% endif %}
+                    <th>{{ keyName }}</th>
+                    {% endfor %}
+                </tr>
+                {% set i = 0 %}
+                {% for slot, dd in debugdata %}
+
+                {% if i % 2 == 0 %}
+                    {% set class = 'even' %}
+                {% else %}
+                    {% set class = 'odd' %}
+                {% endif %}
+
+                <tr class="{{ class }}">
+                    <td>{{ dd[0] }}</td>
+                    <td class="datacontent">{{ dd[1] }}</td>
+                    {% for key, value in topdelimiters %}
+                    {% if results.slot is defined %}
+                    <td class="datacontent">{{ results.slot.key }}</td>
+                    {% else %}
+                    <td class="datacontent">&nbsp;</td>
+                    {% endif %}
+                    {% endfor %}
+                </tr>
+                {% endfor %}
+            </table>
+        </div>
+    </div>
+{% endblock %}
diff --git a/modules/statistics/templates/statmeta.twig b/modules/statistics/templates/statmeta.twig
new file mode 100644
index 0000000000000000000000000000000000000000..dd2c475c552376eb815c69729eef252f222ab9b4
--- /dev/null
+++ b/modules/statistics/templates/statmeta.twig
@@ -0,0 +1,39 @@
+{% set pagetitle = 'SimpleSAMLphp Statistics Metadata'|trans %}
+{% extends "base.twig" %}
+
+{% block preload %}
+    <link href="{{ baseurlpath }}style.css" rel="stylesheet" />
+{% endblock %}
+
+{% block content %}
+    <table id="statmeta">
+    {% if metadata is defined %}
+        {% if metadata.lastrun is defined %}
+            <tr><td>Aggregator last run at</td><td>{{ metadata.lastrun }}</td></tr>
+        {% endif %}
+
+        {% if metadata.notBefore is defined %}
+            <tr><td>Aggregated data until</td><td>{{ metadata.notBefore }}</td></tr>
+        {% endif %}
+
+        {% if metadata.memory is defined %}
+            <tr><td>Memory usage</td><td>{{ metadata.memory }} MB</td></tr>
+        {% endif %}
+
+        {% if metadata.memory is defined %}
+            <tr><td>Execution time</td><td>{{ metadata.time }} seconds</td></tr>
+        {% endif %}
+
+        {% if metadata.memory is defined %}
+            <tr><td>SHA1 of last processed logline</td><td>{{ metadata.lastlinehash }}</td></tr>
+        {% endif %}
+
+        {% if metadata.memory is defined %}
+            <tr><td>Last processed logline</td><td>{{ metadata.lastline }}</td></tr>
+        {% endif %}
+    {% else %}
+        <tr><td>No metadata found</td></tr>
+    {% endif %}
+    </table>
+    <p>[ <a href="{{ baseurlpath }}showstats.php">Show statistics</a> ]</p>
+{% endblock %}
diff --git a/modules/statistics/www/javascript.js b/modules/statistics/www/javascript.js
index a5aa421a67fffda6c3c2f4527c8227e58b1b9cde..77ef1b1a5e53c34054bdc7593183b7aa7e84f48c 100644
--- a/modules/statistics/www/javascript.js
+++ b/modules/statistics/www/javascript.js
@@ -1,4 +1,13 @@
 $(document).ready(function() {
-        $("#tabdiv").tabs();
-});
+    $('ul.tabset_tabs li').click(
+        function() {
+            var tab_id = $(this).attr('data-tab');
+            $('ul.tabset_tabs li').removeClass('current');
+            $('.tabset_content').removeClass('current');
 
+            $(this).addClass('current');
+            $("#"+tab_id).addClass('current');
+            $("html, body").animate({ scrollTop: 0 }, "slow");
+        }
+    )
+})
diff --git a/modules/statistics/www/showstats.php b/modules/statistics/www/showstats.php
index 051dc9aa55440fd3cd87059ce0a15fe6ab1dc302..1828a10726842cccc6a4cd34941abceb1bbf4073 100644
--- a/modules/statistics/www/showstats.php
+++ b/modules/statistics/www/showstats.php
@@ -29,6 +29,7 @@ if (array_key_exists('res', $_REQUEST)) {
 }
 if (array_key_exists('d', $_REQUEST)) {
     $delimiter = $_REQUEST['d'];
+    $t->data['request_d'] = $delimiter;
 }
 
 if ($preferRule2 === '_') {
@@ -100,17 +101,19 @@ $t->data['imgurl'] = $grapher->show($axis['axis'], $axis['axispos'], $datasets,
 if (isset($piedata)) {
     $t->data['pieimgurl'] = $grapher->showPie( $dataset->getDelimiterPresentationPie(), $piedata);
 }
-$t->data['available.rules'] = $ruleset->availableRulesNames();
-$t->data['available.times'] = $statrule->availableFileSlots($timeres);
-$t->data['available.timeres'] = $statrule->availableTimeRes();
-$t->data['available.times.prev'] = $timeNavigation['prev'];
-$t->data['available.times.next'] = $timeNavigation['next'];
-
-$t->data['selected.rule']= $rule;
-$t->data['selected.rule2']= $preferRule2;
-$t->data['selected.time'] = $fileslot;
-$t->data['selected.timeres'] = $timeres;
-$t->data['selected.delimiter'] = $delimiter;
+$t->data['available_rules'] = $ruleset->availableRulesNames();
+$t->data['available_times'] = $statrule->availableFileSlots($timeres);
+$t->data['available_timeres'] = $statrule->availableTimeRes();
+$t->data['available_times_prev'] = $timeNavigation['prev'];
+$t->data['available_times_next'] = $timeNavigation['next'];
+
+$t->data['current_rule'] = $t->data['available_rules'][$rule];
+
+$t->data['selected_rule'] = $rule;
+$t->data['selected_rule2'] = $preferRule2;
+$t->data['selected_time'] = $fileslot;
+$t->data['selected_timeres'] = $timeres;
+$t->data['selected_delimiter'] = $delimiter;
 
 $t->data['debugdata'] = $dataset->getDebugData();
 $t->data['results'] = $dataset->getResults();
@@ -118,30 +121,31 @@ $t->data['summaryDataset'] = $dataset->getSummary();
 $t->data['topdelimiters'] = $dataset->getTopDelimiters();
 $t->data['availdelimiters'] = $dataset->availDelimiters();
 
-$t->data['delimiterPresentation'] =  $dataset->getDelimiterPresentation();
-
+$t->data['delimiterPresentation'] = $dataset->getDelimiterPresentation();
 $t->data['post_rule'] = getBaseURL($t, 'post', 'rule');
 $t->data['post_rule2'] = getBaseURL($t, 'post', 'rule2');
 $t->data['post_d'] = getBaseURL($t, 'post', 'd');
 $t->data['post_res'] = getBaseURL($t, 'post', 'res');
 $t->data['post_time'] = getBaseURL($t, 'post', 'time');
-$t->data['get_times_prev'] = getBaseURL($t, 'get', 'time', $t->data['available.times.prev']);
-$t->data['get_times_next'] = getBaseURL($t, 'get', 'time', $t->data['available.times.next']);
+$t->data['get_times_prev'] = getBaseURL($t, 'get', 'time', $t->data['available_times_prev']);
+$t->data['get_times_next'] = getBaseURL($t, 'get', 'time', $t->data['available_times_next']);
+
+//$t->data['jquery'] = array('ui' => true, 'core' => true);
 
 $t->show();
 
 function getBaseURL($t, $type = 'get', $key = null, $value = null)
 {
     $vars = array(
-        'rule' => $t->data['selected.rule'],
-        'time' => $t->data['selected.time'],
-        'res' => $t->data['selected.timeres'],
+        'rule' => $t->data['selected_rule'],
+        'time' => $t->data['selected_time'],
+        'res' => $t->data['selected_timeres'],
     );
-    if (isset($t->data['selected.delimiter'])) {
-        $vars['d'] = $t->data['selected.delimiter'];
+    if (isset($t->data['selected_delimiter'])) {
+        $vars['d'] = $t->data['selected_delimiter'];
     }
-    if (!empty($t->data['selected.rule2']) && $t->data['selected.rule2'] !== '_') {
-        $vars['rule2'] = $t->data['selected.rule2'];
+    if (!empty($t->data['selected_rule2']) && $t->data['selected_rule2'] !== '_') {
+        $vars['rule2'] = $t->data['selected_rule2'];
     }
 
     if (isset($key)) {
@@ -154,12 +158,7 @@ function getBaseURL($t, $type = 'get', $key = null, $value = null)
     }
 
     if ($type === 'get') {
-        return SimpleSAML\Module::getModuleURL("statistics/showstats.php") . '?' . http_build_query($vars, '', '&amp;');
-    } else {
-        $text = '';
-        foreach($vars as $k => $v) {
-            $text .= '<input type="hidden" name="' . $k . '" value="'. htmlspecialchars($v) . '" />' . "\n";
-        }
-        return $text;
+        return SimpleSAML\Module::getModuleURL("statistics/showstats.php") . '?' . http_build_query($vars, '', '&');
     }
+    return $vars;
 }
diff --git a/modules/statistics/www/style.css b/modules/statistics/www/style.css
index 1485d07910f3e7bb23af42fc43546184c050338b..aec6545a7521328f8e64f107ac8230be4d6bd890 100644
--- a/modules/statistics/www/style.css
+++ b/modules/statistics/www/style.css
@@ -1,6 +1,4 @@
 @media all {
-    .ui-tabs-panel { padding: .5em }
-
     div#content {
         margin: .4em ! important;
     }
@@ -35,10 +33,6 @@
         text-align: right;
     }
 
-    div.corner_t {
-        max-width: none ! important;
-    }
-
     table.timeseries tr.odd td {
         background-color: #f4f4f4;
     }
@@ -92,4 +86,33 @@
     table#statmeta {
         width: 100%;
     }
+
+    ul.tabset_tabs {
+        margin: 0px;
+        padding: 0px;
+        list-style: none;
+    }
+
+    ul.tabset_tabs li {
+        background: none;
+        color: #222;
+        display: inline-block;
+        padding: 10px 15px;
+        cursor: pointer;
+    }
+
+    ul.tabset_tabs li.current {
+        background: #ededed;
+        color: #222;
+    }
+
+    .tabset_content {
+        display: none;
+        background: #ededed;
+        padding: 15px;
+    }
+
+    .tabset_content.current {
+        display: inherit;
+    }
 }