diff --git a/public_html/admin/index.php b/public_html/admin/index.php
index 9076f48593a47863e6a2d8983bebb6e7ae7585d9..7518eeda8b26c1d87941a5fd8eb003691e4555fc 100644
--- a/public_html/admin/index.php
+++ b/public_html/admin/index.php
@@ -144,7 +144,15 @@ if (!$oR->isEnabled()) {
                 if (count($aCfg['redirects'][$sType])) {
                     foreach ($aCfg['redirects'][$sType] as $sFrom => $aTo) {
                         $iCount++;
-                        $sRelFrom = $sType == 'direct' ? $sFrom : ($aTo['link'] ?? false );
+                        switch ($sType) {
+                            case 'direct':
+                                $sRelFrom = $sFrom;
+                                break;
+                            case 'regex':
+                                $sRelFrom = $aTo['link'] ?? false;
+                                break;
+                        }
+
                         $sTable .= $sTdFirst
                             . '<td class="type-' . $sType . '">' . $sType . '</td>'
                             . '<td class="type-' . $sType . '">'
@@ -268,7 +276,7 @@ if (!$oR->isEnabled()) {
 </head>
 
 <body>
-    <h1><a href="?"> Redirects :: admin</a></h1>
+    <h1><a href="?"><?php echo $oR->getTitle(); ?></a></h1>
 
     <main>
         <?php echo $sErrors . $sHtml; ?>
diff --git a/public_html/admin/main.css b/public_html/admin/main.css
index b326d597a268f3c6ae4a075e3387ec96b44cbc2b..68f2c94b6e7c059416c8f616858135cff64a289c 100644
--- a/public_html/admin/main.css
+++ b/public_html/admin/main.css
@@ -7,6 +7,7 @@
 
   --top-bg: linear-gradient(0deg, #000, #234, #222); 
   --top-color: #e55;
+  --top-version-color: #488;
   --top-bottom: var(--col-border-1);
 
   --link-color: #46d;
@@ -70,11 +71,12 @@ body {
 
 h1{margin: 0 0 0.5em;; padding: 0;}
 h1 a{background: var(--top-bg); color: var(--top-color); text-decoration: none;border-bottom: 5px solid var(--top-bottom); display: block; padding: 0.5em;}
+h1 a small{color: var(--top-version-color);}
 
 h2{background: var(--h2-bg); color: var('--h2-color'); margin: 1em 0 0.5em; border-top: 2px solid var(--h2-border); border-left: 5px solid var(--h2-border); border-top-left-radius: 0.5em; padding: 0.5em; margin: 0;}
 h3{color:var('--h3-color'); font-size: 250%}
 
-pre{background: rgba(0,0,0,0.02);padding: 0.3em 1em; border: 1px solid rgba(0,0,0,0.1); margin: 2em 0 3em;; border-bottom: 2px solid rgba(0,0,0,0.2); border-bottom-right-radius: 1em;}
+pre{background: rgba(0,0,0,0.02);padding: 0.3em 1em; border: 1px solid rgba(0,0,0,0.1); margin: 1em 0 3em;; border-bottom: 2px solid rgba(0,0,0,0.2); border-bottom-right-radius: 1em;}
 
 .dataTable tr:hover{background: #f4f0f8 !important;}
 footer{background: var(--footer-bg); margin-top: 4em; text-align: right; padding: 1em;}
@@ -96,7 +98,7 @@ ol.error{padding-left: 2em;}
 .type-direct{color: var(--type-direct-color); }
 .type-regex{color: var(--type-regex-color); }
 
-.status{padding: 0.5em 1em; position: relative; top: -1.4em; left: -0.9em; border-left: 5px solid; font-size: 125%; border-bottom-right-radius: 0.7em;}
+.status{padding: 0.5em 1em; border-left: 5px solid; font-size: 125%; border-top-right-radius: 0.7em;}
 .status-ok{background: var(--txt-ok-bg); color: var(--txt-ok-color);}
 .status-redirect{background: var(--txt-warning-bg); color: var(--txt-warning-color);}
 .status-error{background: var(--txt-error-bg); color: var(--txt-error-color);}
@@ -106,6 +108,8 @@ ol.error{padding-left: 2em;}
 .location::before{content:' 🌐 '; background-color: var(--txt-location-before-bg);}
 .debug{color:var(--txt-debug-color);}
 
+.box{display: inline-block; border: 1px solid rgba(0,0,0,0.1); padding: 0.3em; margin: 0em; text-align: center; border-radius: 0.25em;}
+
 .overlay{position: fixed; margin: 0; width: 100%; height: 100%; top: 0; left: 0; background: var(--overlay-bg); overflow: scroll; display: none;}
 .overlay>div{margin: 3% 10%; background: var(--overlay-box-bg); padding: 1em;box-shadow: var(--overlay-box-shadow); }
 
diff --git a/public_html/classes/redirect.admin.class.php b/public_html/classes/redirect.admin.class.php
index 92979e10f6a319328bbbfd887c700c8c05d94e02..a2779a2027376a9e86db8d114851df6c863cfedf 100644
--- a/public_html/classes/redirect.admin.class.php
+++ b/public_html/classes/redirect.admin.class.php
@@ -40,7 +40,7 @@ class redirectadmin extends redirect
             CURLOPT_HEADER => true,
             CURLOPT_FOLLOWLOCATION => true,
             CURLOPT_RETURNTRANSFER => true,
-            CURLOPT_USERAGENT => strip_tags($this->sAbout),
+            CURLOPT_USERAGENT => strip_tags($this->_app . ' ' . $this->_version),
             CURLOPT_VERBOSE => false,
             CURLOPT_ENCODING => 'gzip, deflate',  // to fetch encoding
             CURLOPT_HTTPHEADER => [
@@ -112,41 +112,80 @@ class redirectadmin extends redirect
     public function renderHttpResponseHeader(array $aResponse): string
     {
         $sHeader=$aResponse['response_header']."\r\n\r\n".$aResponse['response_body'];
-        $sReturn = $sHeader;
+
         // $sReturn.="<pre>".print_r($aResponse, 1)."</pre>";
+        $iJump = 0;
+        $sBox = '';
+        $sReturn = '';
 
         if ($aResponse['curlerrorcode']) {
-            $sReturn = '<pre><br>'
-                .'<span class="status status-error">Request failed.<br></span>'
+            $sReturn .= '<br>'
+                .'<span class="status status-error">Request failed.</span>'
+                .'<pre>'
                 .'Curl error #'.$aResponse['curlerrorcode'] .':<br>'
                 . '<strong>'.$aResponse['curlerrormsg'].'</strong><br><br>'
                 .'</pre>'
                 .'🌐 <a href="https://curl.se/libcurl/c/libcurl-errors.html" target="_blank">Curl error codes</a>'
             ;
-        } else {
+        } 
 
-            $sReturn = preg_replace('/(HTTP.*)\\r/', '</pre><pre><strong>$1</strong>', $sReturn);
-            $sReturn = preg_replace('/(HTTP.*200.*)/', '<span class="status status-ok">$1</span>', $sReturn);
-            $sReturn = preg_replace('/(HTTP.*30.*)/', '<span class="status status-redirect">$1</span>', $sReturn);
-            $sReturn = preg_replace('/(HTTP.*40.*)/', '<span class="status status-error">$1</span>', $sReturn);
-            $sReturn = preg_replace('/(HTTP.*50.*)/', '<span class="status status-error">$1</span>', $sReturn);
-            $sReturn = preg_replace('/\ ([1-5][0-9][0-9])\ /', ' <span class="statuscode">$1</span> ', $sReturn);
-
-            $sReturn = preg_replace('/(x-debug-.*)\\r/i', '<span class="debug">$1</span>', $sReturn);
-            $sReturn = preg_replace('/(location:.*)\\r/i', '<span class="location">$1</span>', $sReturn);
-            $sReturn .= '</pre>';
-
-            preg_match_all('/(HTTP\/.*)/i', $sReturn, $aTmp);
-            // $sReturn.=print_r($aTmp, 1);
-            $iHops = (count($aTmp[0]) - 1);
-
-            $sReturn = ($iHops > 0
-                ? '<br>Found hops: <strong>' . $iHops . '</strong>'
-                . ($iHops > 1 ? ' <br><span class="warning"> ⚠️ Verify your redirect to skip unneeded hops.</span>' : '') . '<br><br>'
-                : ''
-            ) . $sReturn
-            ;
+        $sUrl=$aResponse['url'];
+        foreach(explode("\r\n\r\n",  $aResponse['response_header']."\r\n\r\n".$aResponse['response_body'] ) as $sBlock){
+            if(strlen($sBlock)){
+                $iJump++;
+
+                // find http status
+                preg_match('/HTTP\/.* ([0-9]*) /', $sBlock, $aTmp);
+                // $sReturn.='<pre>'.print_r($aTmp, 1).'</pre>';
+                $iStatus=$aTmp[1] ?? '0';
+
+                $sStatus='';
+                if($iStatus>=200 && $iStatus<300){
+                    $sStatus='status-ok';
+                } elseif($iStatus>=300 && $iStatus<400){
+                    $sStatus='status-redirect';
+                } elseif($iStatus>=400 && $iStatus<500){
+                    $sStatus='status-error';
+                } elseif($iStatus>=500 && $iStatus<600){
+                    $sStatus='status-error';
+                }
+
+                // find location
+                preg_match('/Location: (.*)/i', $sBlock, $aTmp);
+                $sNextUrl=$aTmp[1] ?? '';
+
+
+                // modify lines in block
+                $sBlock = preg_replace('/(x-debug-.*)\\r/i', '<span class="debug">$1</span>', $sBlock);
+                $sBlock = preg_replace('/(location:.*)\\r/i', '<span class="location">$1</span>', $sBlock);
+    
+
+                $sReturn.="<span class=\"status $sStatus\">$sUrl ($iStatus) </span><pre>$sBlock</pre>";
+                // $sReturn .= '<strong>'.$iJump.') HTTP status: '.$iStatus.' - '.$sUrl.'</strong><pre>'.$sBlock.'</pre>';
+                
+
+                $sWebhost=parse_url($sUrl, PHP_URL_HOST);
+                $sBox.="<div class=\"box $sStatus\">"
+                    .$sWebhost.'<br>'
+                    . $this->_getIp($sWebhost)
+                    .'</div>';
+
+                if($sNextUrl){
+                    $sBox.= " --- $iStatus ---&gt; ";
+                    $sUrl=$sNextUrl;
+                }
+
+            }
         }
+        $iHops = $iJump-1;
+        $sReturn = '<br>'.($iHops > 0
+            ? 'Found hops: <strong>' . $iHops . '</strong>'
+            . ($iHops > 1 ? '<span class="warning"> ⚠️ Verify your redirect to skip unneeded hops.</span>' : '') . '<br><br>'
+            . '<div>'.$sBox.'</div><br><br><br>'
+            : ''
+        ) 
+        
+        . $sReturn;
 
         return $sReturn;
     }
@@ -222,5 +261,9 @@ class redirectadmin extends redirect
         return $aReturn;
     }
 
+    function getTitle(): string
+    {
+        return 'Redirect :: admin <small>'.$this->_version.'</small>';
+    }
 }
 
diff --git a/public_html/classes/redirect.class.php b/public_html/classes/redirect.class.php
index ae8b2e9986a1f5654ead6b828176a298614eb538..d97865dd37d545e6bdf37dbad4c15a434c2ea3d4 100644
--- a/public_html/classes/redirect.class.php
+++ b/public_html/classes/redirect.class.php
@@ -39,6 +39,12 @@ class redirect
     // CONFIG
     // ----------------------------------------------------------------------
 
+    /**
+     * About message
+     * @var string
+     */
+    protected string $_version = '1.7';
+
     /**
      * Flag: debug is enabled?
      * @var bool
@@ -55,7 +61,7 @@ class redirect
      * About message
      * @var string
      */
-    protected string $sAbout = 'IML redirect <small>v1.6</small>';
+    protected string $_app = 'IML redirect';
 
     /**
      * Hostname
@@ -417,7 +423,7 @@ class redirect
             . '</head>'
             . '<body>'
             . $sBody
-            . '<h2>' . $this->sAbout . '</h2>'
+            . '<h2>' . $this->_app . ' <small>'.$this->_version.'</small></h2>'
             . '<footer>&copy; ' . date('Y') . ' ' . $this->sHostname . '</footer>'
             . '</body></html>'
         );