Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.cpp	(revision 70558)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.cpp	(revision 70559)
@@ -183,4 +183,5 @@
          return;
     m_bookmarkVector.remove(index, 1);
+    updateTextEditBookmarkLineSet();
 }
 
@@ -188,4 +189,5 @@
 {
     m_bookmarkVector.clear();
+    updateTextEditBookmarkLineSet();
 }
 
@@ -198,12 +200,5 @@
 
     int lineNumber = m_bookmarkVector.at(bookmarkIndex).first;
-    QTextDocument* document = m_pTextEdit->document();
-    if(!document)
-        return;
-
-    QTextCursor cursor(document->findBlockByLineNumber(lineNumber));
-    m_pTextEdit->moveCursor(QTextCursor::End);
-    m_pTextEdit->setTextCursor(cursor);
-
+    m_pTextEdit->scrollToLine(lineNumber);
 }
 
@@ -216,6 +211,20 @@
 {
     m_bookmarkVector.push_back(bookmark);
+    updateTextEditBookmarkLineSet();
     emit sigBookmarksUpdated();
 }
+
+void UIVMLogPage::updateTextEditBookmarkLineSet()
+{
+    if(!m_pTextEdit)
+        return;
+    QSet<int> bookmarkLinesSet;
+    for(int i = 0; i < m_bookmarkVector.size(); ++i)
+    {
+        bookmarkLinesSet.insert(m_bookmarkVector.at(i).first);
+    }
+    m_pTextEdit->setBookmarkLineSet(bookmarkLinesSet);
+}
+
 // void UIVMLogViewerWidget::sltCreateBookmarkAtCurrent()
 // {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.h	(revision 70558)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.h	(revision 70559)
@@ -99,4 +99,5 @@
     void cleanup();
     void retranslateUi();
+    void updateTextEditBookmarkLineSet();
 
     QHBoxLayout    *m_pMainLayout;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.cpp	(revision 70558)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.cpp	(revision 70559)
@@ -201,4 +201,13 @@
         if (block.isVisible() && bottom >= event->rect().top()) {
             QString number = QString::number(blockNumber + 1);
+            if (m_bookmarkLineSet.contains(blockNumber + 1))
+            {
+                painter.setBackgroundMode(Qt::OpaqueMode);
+                painter.setBackground(QBrush(Qt::red));
+            }
+            else
+            {
+                painter.setBackgroundMode(Qt::TransparentMode);
+            }
             painter.setPen(Qt::black);
             painter.drawText(0, top, m_pLineNumberArea->width(), m_pLineNumberArea->fontMetrics().lineSpacing(),
@@ -275,4 +284,34 @@
 }
 
+void UIVMLogViewerTextEdit::scrollToLine(int lineNumber)
+{
+    QTextDocument* pDocument = document();
+    if(!pDocument)
+        return;
+
+    int halfPageLineCount = 0.5 * visibleLineCount() ;
+    QTextCursor cursor(pDocument->findBlockByLineNumber(qMax(lineNumber - halfPageLineCount, 0)));
+    moveCursor(QTextCursor::End);
+    setTextCursor(cursor);
+}
+
+int UIVMLogViewerTextEdit::visibleLineCount()
+{
+    int height = 0;
+    if(viewport())
+        height = viewport()->height();
+    if(verticalScrollBar() && verticalScrollBar()->isVisible())
+        height -= horizontalScrollBar()->height();
+    int singleLineHeight = fontMetrics().lineSpacing();
+    if(singleLineHeight == 0)
+        return 0;
+    return height / singleLineHeight;
+}
+
+void UIVMLogViewerTextEdit::setBookmarkLineSet(const QSet<int>& lineSet)
+{
+    m_bookmarkLineSet = lineSet;
+    repaint();
+}
 
 #include "UIVMLogViewerTextEdit.moc"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.h	(revision 70558)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.h	(revision 70559)
@@ -44,4 +44,8 @@
     void clearScrollBarMarkingsVector();
 
+    void scrollToLine(int lineNumber);
+
+    void setBookmarkLineSet(const QSet<int>& lineSet);
+
 protected:
 
@@ -54,4 +58,5 @@
     void sltUpdateLineNumberAreaWidth(int newBlockCount);
     void sltUpdateLineNumberArea(const QRect &, int);
+    int  visibleLineCount();
 
 private:
@@ -63,4 +68,5 @@
     QPair<int, QString>  m_iContextMenuBookmark;
     QWidget             *m_pLineNumberArea;
+    QSet<int>            m_bookmarkLineSet;
 };
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.cpp	(revision 70558)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.cpp	(revision 70559)
@@ -132,5 +132,9 @@
     if(!currentLogPage() || !m_pBookmarksPanel)
         return;
+    disconnect(m_pBookmarksPanel, &UIVMLogViewerBookmarksPanel::sigBookmarkSelected,
+            this, &UIVMLogViewerWidget::gotoBookmark);
     m_pBookmarksPanel->updateBookmarkList(currentLogPage()->bookmarkVector());
+    connect(m_pBookmarksPanel, &UIVMLogViewerBookmarksPanel::sigBookmarkSelected,
+            this, &UIVMLogViewerWidget::gotoBookmark);
 }
 
