Index: trunk/src/VBox/ValidationKit/testmanager/htdocs/css/common.css
===================================================================
--- trunk/src/VBox/ValidationKit/testmanager/htdocs/css/common.css	(revision 65041)
+++ trunk/src/VBox/ValidationKit/testmanager/htdocs/css/common.css	(revision 65042)
@@ -581,14 +581,22 @@
 
 .tmsyschlogattr {
-    font-size:      0.64em;
-}
-
-.tmsyschlogspacer, .tmsyschlogspacerfinal {
-    width:          3.14159em;
-    border-top:     0px solid green !important;
-    border-left:    0px solid green !important;
-}
+    font-size:      0.80em;
+}
+
 .tmsyschlogspacer {
+    width:          1.4em;
     border-bottom:  0px solid green !important;
+}
+
+.tmsyschlogevent {
+    border-bottom:  0px solid green !important;
+}
+
+.tmsyschlogspacerrowabove {
+    height:         0.22em;
+}
+
+.tmsyschlogspacerrowbelow {
+    height:         0.80em;
 }
 
Index: trunk/src/VBox/ValidationKit/testmanager/webui/wuiadminsystemchangelog.py
===================================================================
--- trunk/src/VBox/ValidationKit/testmanager/webui/wuiadminsystemchangelog.py	(revision 65041)
+++ trunk/src/VBox/ValidationKit/testmanager/webui/wuiadminsystemchangelog.py	(revision 65042)
@@ -364,36 +364,50 @@
         else:
             oChangeEntry    = None;
-            cAttribsChanged = 1;
+            cAttribsChanged = -1;
 
         sHtml = u'  <tr class="%s">\n' \
-                u'    <td rowspan="%d">%s</td>\n' \
-                u'    <td rowspan="%d">%s</td>\n' \
-                u'    <td rowspanx="%d" colspan="4">%s<!--</td>\n' \
-                u'    <td colspan="3">--> %s</td>\n' \
+                u'    <td rowspan="%d" align="center" >%s</td>\n' \
+                u'    <td rowspan="%d" align="center" >%s</td>\n' \
+                u'    <td colspan="5" class="%s%s">%s %s</td>\n' \
                 u'  </tr>\n' \
               % ( sRowClass,
-                 cAttribsChanged, sDate,
-                 cAttribsChanged, webutils.escapeElem(oEntry.oAuthor.sUsername if oEntry.oAuthor is not None else ''),
-                 cAttribsChanged, webutils.escapeElem(sEvent),
+                 1 + cAttribsChanged + 1, sDate,
+                 1 + cAttribsChanged + 1, webutils.escapeElem(oEntry.oAuthor.sUsername if oEntry.oAuthor is not None else ''),
+                 sRowClass, ' tmsyschlogevent' if oChangeEntry is not None else '', webutils.escapeElem(sEvent),
                  oDetails.toHtml() if isinstance(oDetails, WuiHtmlBase) else oDetails,
                  );
 
         if oChangeEntry is not None:
+            sHtml += u'  <tr class="%s tmsyschlogspacerrowabove">\n' \
+                     u'    <td xrowspan="%d" style="border-right: 0px; border-bottom: 0px;"></td>\n' \
+                     u'    <td colspan="3" style="border-right: 0px;"></td>\n' \
+                     u'    <td rowspan="%d"></td>\n' \
+                     u'  </tr>\n' \
+                   % (sRowClass, cAttribsChanged + 1, cAttribsChanged + 1);
             for j, oChange in enumerate(oChangeEntry.aoChanges):
-                sHtml += '        <tr class="%s%s tmsyschlogattr"><td class="%s tmsyschlogspacer%s"></td>' \
+                sHtml += u'  <tr class="%s%s tmsyschlogattr%s">\n' \
                        % ( sRowClass, 'odd' if j & 1 else 'even',
-                           sRowClass, 'final' if j + 1 == len(oChangeEntry.aoChanges) else '');
+                           ' tmsyschlogattrfinal' if j + 1 == len(oChangeEntry.aoChanges) else '',);
+                if j == 0:
+                    sHtml += u'    <td class="%s tmsyschlogspacer" rowspan="%d"></td>\n' % (sRowClass, cAttribsChanged - 1,);
+
                 if isinstance(oChange, AttributeChangeEntryPre):
-                    sHtml += '<td><div class="tdpre"><pre>%s</pre></div></td>' \
-                             '<td><div class="tdpre"><pre>%s</pre></div></td></tr>\n' \
+                    sHtml += u'    <td>%s</td>\n' \
+                             u'    <td><div class="tdpre"><pre>%s</pre></div></td>\n' \
+                             u'    <td><div class="tdpre"><pre>%s</pre></div></td>\n' \
                            % ( webutils.escapeElem(oChange.sAttr),
                                webutils.escapeElem(oChange.sOldText),
                                webutils.escapeElem(oChange.sNewText), );
                 else:
-                    sHtml += '        <td>%s</td><td>%s</td><td>%s</td></tr>\n' \
+                    sHtml += u'    <td>%s</td>\n' \
+                             u'    <td>%s</td>\n' \
+                             u'    <td>%s</td>\n' \
                            % ( webutils.escapeElem(oChange.sAttr),
                                webutils.escapeElem(oChange.sOldText),
                                webutils.escapeElem(oChange.sNewText), );
-        sHtml += u'  </tr>\n'
+                sHtml += u'  </tr>\n';
+
+        if oChangeEntry is not None:
+            sHtml += u'  <tr class="%s tmsyschlogspacerrowbelow "><td colspan="5"></td></tr>\n\n' % (sRowClass,);
         return sHtml;
 
@@ -408,11 +422,12 @@
                 u'  <th rowspan="2">When</th>\n' \
                 u'  <th rowspan="2">Who</th>\n' \
-                u'  <th colspan="4">Event</th>\n' \
+                u'  <th colspan="5">Event</th>\n' \
                 u' </tr>\n' \
                 u' <tr>\n' \
-                u'  <th></th>\n' \
+                u'  <th style="border-right: 0px;"></th>\n' \
                 u'  <th>Attribute</th>\n' \
                 u'  <th>Old</th>\n' \
-                u'  <th>New</th>\n' \
+                u'  <th style="border-right: 0px;">New</th>\n' \
+                u'  <th></th>\n' \
                 u' </tr>\n' \
                 u'</thead>\n';
