diff --git a/classes/cronlog-renderer.class.php b/classes/cronlog-renderer.class.php
index dbaebe8edc457e3e5a46041e426191be3b6bf2ef..295216063d071f77605dcbcdd1db8eff205e4306 100644
--- a/classes/cronlog-renderer.class.php
+++ b/classes/cronlog-renderer.class.php
@@ -44,7 +44,7 @@ class cronlogrenderer extends cronlog{
         // Array ( [SCRIPTNAME] => apt-get update [SCRIPTTTL] => 1440 [SCRIPTSTARTTIME] => 2016-06-21 06:00:02, 1466481602 [SCRIPTLABEL] => apt-get [SCRIPTENDTIME] => 2016-06-21 06:00:49, 1466481649 [SCRIPTEXECTIME] => 47 s [SCRIPTRC] => 0 )
         foreach($aData as $sDtakey=>$aEntry){
             if(!$sTblHead){
-                foreach(array('SCRIPTSTARTTIME', 'SCRIPTLABEL', 'Server', 'SCRIPTEXECTIME', 'SCRIPTTTL', 'SCRIPTRC', 'Kommentar', 'Aktionen') as $sKey){
+                foreach(array('SCRIPTSTARTTIME', 'SCRIPTLABEL', 'Server', 'SCRIPTEXECTIME', 'SCRIPTTTL', 'SCRIPTRC', 'Kommentar' /*, 'Aktionen'*/) as $sKey){
                     $sTblHead.='<th>'.$sKey.'</th>';
                 }
                 $iLast=date("U", $aEntry['SCRIPTSTARTTIME']);
@@ -53,7 +53,7 @@ class cronlogrenderer extends cronlog{
             // $sClass='message-'.($aEntry['SCRIPTRC']?'error':'ok');
             
             $aErrors=array();
-            $iNextRun=$aEntry['SCRIPTSTARTTIME']+($aEntry['SCRIPTTTL']*60);
+            $iNextRun=$aEntry['SCRIPTSTARTTIME']+((int)$aEntry['SCRIPTTTL']*60);
             
             if($iNextRun < date("U")){
                 $aErrors[]='outdated';
@@ -80,13 +80,13 @@ class cronlogrenderer extends cronlog{
                     . '<td>'.$aEntry['SCRIPTLABEL'].'</td>'
                     . '<td>'.$aEntry['server'].'</td>'
                     . '<td>'
-                        .$aEntry['SCRIPTEXECTIME'].'s'
-                        .($aEntry['SCRIPTEXECTIME']>100 ? ' ('.round($aEntry['SCRIPTEXECTIME']/60).'min)' : '') 
+                        .(int)$aEntry['SCRIPTEXECTIME'].'s'
+                        .((int)$aEntry['SCRIPTEXECTIME']>100 ? ' ('.round((int)$aEntry['SCRIPTEXECTIME']/60).'min)' : '') 
                         .'</td>'
                     . '<td>'.$aEntry['SCRIPTTTL'].'</td>'
                     . '<td>'.$aEntry['SCRIPTRC'].'</td>'
                     . '<td>'.(count($aErrors) ? 'FEHLER:<br>*'.implode('<br>*', $aErrors) : 'OK').'</td>'
-                    . '<td><button onclick="showFile(\''.$aEntry['logfile'].'\');">Ansehen</button></td>'
+                    // . '<td><button onclick="showFile(\''.$aEntry['logfile'].'\');">Ansehen</button></td>'
                     . '</tr>'
                     ;
         }
@@ -113,7 +113,7 @@ class cronlogrenderer extends cronlog{
 
             // init datatable
             . '<script>'
-            . '$(document).ready( function () {$(\'#'.$sIdTable.'\').DataTable({"bPaginate":false, "aaSorting":[[0,"desc"]]});} );'
+                . '$(document).ready( function () { $(\'#'.$sIdTable.'\').DataTable({"retrieve": true, "bPaginate":false, "aaSorting":[[0,"desc"]]}); } );'
             . '</script>'
 
             . '
@@ -211,7 +211,7 @@ class cronlogrenderer extends cronlog{
 
             // init datatable
             . '<script>'
-            . '$(document).ready( function () {$(\'#'.$sIdTable.'\').DataTable({"aaSorting":[[0,"desc"]]});} );'
+            . '$(document).ready( function () {$(\'#'.$sIdTable.'\').DataTable({"retrieve": true, "aaSorting":[[0,"desc"]]});} );'
             . '</script>'
 
             . '
@@ -357,7 +357,9 @@ class cronlogrenderer extends cronlog{
     
     public function renderServerlist($sSelectedItem=false){
         $sHtml='';
-        $sHtml.='<option value="ALL">[ALLE]</option>';
+        $sHtml.='<option value="ALL"'
+                .($sSelectedItem===false ? ' selected="selected"' : '')
+                . '>[ALLE]</option>';
         foreach($this->getServers() as $sServer=>$aData){
             $sHtml.='<option value="'.$sServer.'"'
                     .($sSelectedItem===$sServer ? ' selected="selected"' : '')
diff --git a/classes/cronlog.class.php b/classes/cronlog.class.php
index e1fc560867278f12d47a380619bf732e034b17fd..1b67e8fb198a075767019efbfaa74f645b059941 100644
--- a/classes/cronlog.class.php
+++ b/classes/cronlog.class.php
@@ -1,11 +1,5 @@
 <?php
 
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
-
 /**
  * Description of cronlog
  *
@@ -71,6 +65,7 @@ class cronlog {
     }
 
     protected function _getCacheData($sTaskId){
+        // DISABLE CACHE return false;
         $sFile=$this->_getCacheFile($sTaskId);
         if(file_exists($sFile)){
             if (filemtime($sFile)>(date('U')-$this->_iTtlCache)){
diff --git a/index.php b/index.php
index cf6b89c611b02a7dbc0fe1d6baa2e3ceced89356..867dcfa7029364b7f82a7e16728863b5b9457b5a 100644
--- a/index.php
+++ b/index.php
@@ -1,14 +1,9 @@
-<?php
-
-// ----- supported query params
-// server=[servername] ... default: ALL
-// q=[filtervalue] ... default: nothing
-
-?><!doctype html>
-<html><head>
+<!doctype html>
+<html>
+    <head>
         <title>Cronjob-Viewer</title>
-        <script type="text/javascript" src="js/functions.js"></script>
         <script type="text/javascript" src="vendor/jquery/3.2.1/jquery.min.js"></script>
+        <script type="text/javascript" src="js/functions.js"></script>
         
         <script type="text/javascript" src="vendor/vis/4.21.0/vis.min.js"></script>
         <link href="vendor/vis/4.21.0/vis-timeline-graph2d.min.css" rel="stylesheet" type="text/css"/>
@@ -23,6 +18,7 @@
         <div id="errorlog">
             
         </div>
+        <span style="float: right">Coded by Axel :-)</span>
         <h1><span class="imllogo"></span> CronjobViewer</h1>
         <nav class="servers">
             <div id="selectserver" class="active">...</div>
@@ -35,8 +31,10 @@
                 <a href="#cronlogs"  onclick="setTab(this); return false;" class="active"><i class="far fa-file-alt"></i> Logs</a>
                 <a href="#crontable" onclick="setTab(this); return false;"><i class="fas fa-history"></i> History</a>
                 <a href="#graph"     onclick="setTab(this); return false;"><i class="far fa-chart-bar"></i> Timeline</a>
+                
             </nav><br><br><br>
 
+            <button onclick="refreshPage(); return false;"><i class="fas fa-sync"></i> Reload</button>
             <div id="tabcontent">
                 <div id="cronlogs" class="active"></div>
                 <div id="crontable"></div>
@@ -44,29 +42,4 @@
             </div>
 
         </div>
-        <script>
-            
-            // draw navigation with servers
-            getPageItem('selectserver');
-
-            // check query params and set filter
-            // ?server=neon&tab=crontable&q=123
-
-            var oQuery=getQueryParams();
-            var sServer=oQuery.server ? oQuery.server : 'ALL';
-            var q=oQuery.q            ? oQuery.q      : '';
-            var sTab=oQuery.tab       ? oQuery.tab    : '';
-            
-            setServer(sServer);
-
-            if(sTab){
-                var oLink=$('a[href="#'+sTab+'"]').first();
-                console.log(oLink);
-                setTab(oLink);
-            }
-            if (q) {
-                window.setTimeout("$('#datatable1_filter label input').val(q); $('#datatable1').dataTable().fnFilter(q)" , 500);
-                window.setTimeout("$('#datatable2_filter label input').val(q); $('#datatable2').dataTable().fnFilter(q)" , 500);
-            }
-        </script>
 </body></html>
\ No newline at end of file
diff --git a/js/functions.js b/js/functions.js
index 83200e1823b73b4fe0f976b2a14a247dc5225114..97091033cb390e09b0600102d87523f5123e31b7 100644
--- a/js/functions.js
+++ b/js/functions.js
@@ -1,6 +1,7 @@
 
 var sSELECTEDSERVER='';
 var sACTIVESERVERTAB='cronlogs';
+var bSETADDRESSBAR=false;
 
 
 /**
@@ -38,6 +39,7 @@ function getPageItem(id, sData) {
         if(!sData){
             sData='item='+id+'&server='+sSELECTEDSERVER;
         }
+        setAdressbar();
 	jQuery.ajax({
 		url: phpscript,
 		data: sData,
@@ -56,9 +58,36 @@ function getPageItem(id, sData) {
 	});
 }
 
+/**
+ * refresh content with ajax requests
+ * @returns {undefined}
+ */
+function refreshPage(){
+    getPageItem('selectserver');
+    getPageItem(sACTIVESERVERTAB);
+}
+
+/**
+ * manipulate url in the browser address bar
+ * 
+ * @returns {undefined}
+ */
+function setAdressbar() {
+    // console.log("--- setAdressbar()"); console.log(aViewFilters);
+    // ?server=neon&tab=graph&q=backup
+    if(!bSETADDRESSBAR){
+        return false;
+    }
+    var url = '?'
+        + 'server=' + sSELECTEDSERVER
+        + '&tab=' + sACTIVESERVERTAB
+        + '&q=' // + $('#datatable1_filter label input').val()+$('#datatable2_filter label input').val()
+        ;
+    window.history.pushState('dummy', 'Title', url);
+}
 /**
  * set server (show its navigation)
- * tghis action is used after clicking a servername in the navigation
+ * this action is used after clicking a servername in the navigation
  * 
  * @param {string} sServer
  * @returns {undefined}
@@ -98,4 +127,50 @@ function showFile(sLogfile){
 }
 function showFileBack(){
     getPageItem(sACTIVESERVERTAB);
-}
\ No newline at end of file
+}
+
+function updateFilterFields(q){
+    if($('#datatable1_filter label input')){
+        $('#datatable1_filter label input').val(q); 
+        $('#datatable1').dataTable().fnFilter(q);
+        // $('#datatable1').dataTable().bind('filter', 'setAdressbar()');
+    }
+    if($('#datatable2_filter label input')){
+        $('#datatable2_filter label input').val(q); 
+        $('#datatable2').dataTable().fnFilter(q);
+        // $('#datatable1').dataTable().bind('filter', 'setAdressbar()');
+    }
+}
+
+
+// ----------------------------------------------------------------------
+// MAIN
+// ----------------------------------------------------------------------
+
+$(document).ready( function () { 
+
+    // draw navigation with servers
+
+    // check query params and set filter
+    // ?server=neon&tab=crontable&q=123
+
+    var oQuery=getQueryParams();
+    var sServer=oQuery.server ? oQuery.server : 'ALL';
+    var q=oQuery.q            ? oQuery.q      : '';
+    var sTab=oQuery.tab       ? oQuery.tab    : '';
+
+    setServer(sServer);
+    getPageItem('selectserver');
+
+    if(sTab){
+        var oLink=$('a[href="#'+sTab+'"]').first();
+        setTab(oLink);
+    }
+    console.log('suchfield ' + q);
+    if (q) {
+        // window.setTimeout("$('#datatable1_filter label input').val('"+q+"'); $('#datatable1').dataTable().fnFilter('"+q+"')" , 500);
+        window.setTimeout("updateFilterFields('"+q+"');" , 500);
+    }
+    bSETADDRESSBAR=true;
+    // window.setInterval('refreshPage()', 60000);
+});
\ No newline at end of file
diff --git a/main.css b/main.css
index b0c9e58d679b11226de3aaf781c1bbdba8f43873..43ae9240b72ea63d0a3bf04b028a09c28335a16e 100644
--- a/main.css
+++ b/main.css
@@ -47,7 +47,7 @@ td{padding:0.3em;}
 .dataTables_wrapper{clear: none;float: left; margin: auto 1px;}
 table.dataTable tbody tr{background: none;}
 table.dataTable{margin: 0; width: auto;}
-
+table.dataTable tbody td{padding: 3px;}
 
 .message{border: 1px solid rgba(0,0,0,0.1); padding: 1em; float: right;}
 .message-ok{background:#cfc !important; color:#080 !important;}