Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.cpp	(revision 70573)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.cpp	(revision 70574)
@@ -82,6 +82,8 @@
     m_pMainLayout->addWidget(m_pTextEdit);
 
-    connect(qobject_cast<UIVMLogViewerTextEdit*>(m_pTextEdit), &UIVMLogViewerTextEdit::sigContextMenuBookmarkAction,
+    connect(qobject_cast<UIVMLogViewerTextEdit*>(m_pTextEdit), &UIVMLogViewerTextEdit::sigAddBookmark,
             this, &UIVMLogPage::sltAddBookmark);
+    connect(qobject_cast<UIVMLogViewerTextEdit*>(m_pTextEdit), &UIVMLogViewerTextEdit::sigDeleteBookmark,
+            this, &UIVMLogPage::sltDeleteBookmark);
 }
 
@@ -186,4 +188,20 @@
 }
 
+void UIVMLogPage::deleteBookmark(LogBookmark bookmark)
+{
+    int index = -1;
+    for(int i = 0; i < m_bookmarkVector.size(); ++i)
+    {
+        if(m_bookmarkVector.at(i).first)
+        {
+            index = i;
+            break;
+        }
+    }
+    if(index != -1)
+        deleteBookmark(index);
+}
+
+
 void UIVMLogPage::deleteAllBookmarks()
 {
@@ -211,4 +229,11 @@
 {
     m_bookmarkVector.push_back(bookmark);
+    updateTextEditBookmarkLineSet();
+    emit sigBookmarksUpdated();
+}
+
+void UIVMLogPage::sltDeleteBookmark(LogBookmark bookmark)
+{
+    deleteBookmark(bookmark);
     updateTextEditBookmarkLineSet();
     emit sigBookmarksUpdated();
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.h	(revision 70573)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.h	(revision 70574)
@@ -82,4 +82,5 @@
 
     void deleteBookmark(int index);
+    void deleteBookmark(LogBookmark bookmark);
 
     const QVector<LogBookmark>& bookmarkVector() const;
@@ -93,4 +94,5 @@
 
     void sltAddBookmark(LogBookmark bookmark);
+    void sltDeleteBookmark(LogBookmark bookmark);
 
 private:
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.cpp	(revision 70573)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.cpp	(revision 70574)
@@ -113,8 +113,13 @@
     UILineNumberArea(UIVMLogViewerTextEdit *textEdit)
         :QWidget(textEdit)
-        , m_pTextEdit(textEdit){}
+        , m_pTextEdit(textEdit)
+    {
+        setMouseTracking(true);
+    }
 
     QSize sizeHint() const
     {
+        if(!m_pTextEdit)
+            return QSize();
         return QSize(m_pTextEdit->lineNumberAreaWidth(), 0);
     }
@@ -124,5 +129,17 @@
     void paintEvent(QPaintEvent *event)
     {
-        m_pTextEdit->lineNumberAreaPaintEvent(event);
+        if(m_pTextEdit)
+            m_pTextEdit->lineNumberAreaPaintEvent(event);
+    }
+
+    void mouseMoveEvent(QMouseEvent *pEvent)
+    {
+        m_pTextEdit->setMouseCursorLine(m_pTextEdit->lineNumberForPos(pEvent->pos()));
+        repaint();
+    }
+
+    void mousePressEvent(QMouseEvent *pEvent)
+    {
+        m_pTextEdit->toggleBookmark(m_pTextEdit->bookmarkForPos(pEvent->pos()));
     }
 
@@ -135,6 +152,7 @@
     :QPlainTextEdit(parent)
     , m_pLineNumberArea(0)
-{
-
+    , m_mouseCursorLine(-1)
+{
+    setMouseTracking(true);
     //setStyleSheet("background-color: rgba(240, 240, 240, 75%) ");
     prepare();
@@ -203,11 +221,15 @@
             if (m_bookmarkLineSet.contains(blockNumber + 1))
             {
-                painter.setBackgroundMode(Qt::OpaqueMode);
-                painter.setBackground(QBrush(Qt::red));
+                QPainterPath path;
+                path.addRect(0, top, m_pLineNumberArea->width(), m_pLineNumberArea->fontMetrics().lineSpacing());
+                painter.fillPath(path, QColor(204, 255, 51, 125));
+                painter.drawPath(path);
             }
-            else
+            if((blockNumber + 1) == m_mouseCursorLine)
             {
-                painter.setBackgroundMode(Qt::TransparentMode);
+                painter.setPen(Qt::red);
+                painter.drawRect(0, top, m_pLineNumberArea->width(), m_pLineNumberArea->fontMetrics().lineSpacing());
             }
+
             painter.setPen(Qt::black);
             painter.drawText(0, top, m_pLineNumberArea->width(), m_pLineNumberArea->fontMetrics().lineSpacing(),
@@ -225,8 +247,5 @@
     QMenu *menu = createStandardContextMenu();
     QAction *pAction = menu->addAction(tr("Bookmark"));
-    QTextBlock block = cursorForPosition(pEvent->pos()).block();
-    m_iContextMenuBookmark.first = block.firstLineNumber();
-    m_iContextMenuBookmark.second = block.text();
-
+    m_iContextMenuBookmark = bookmarkForPos(pEvent->pos());
     if (pAction)
         connect(pAction, &QAction::triggered, this, &UIVMLogViewerTextEdit::sltBookmark);
@@ -246,4 +265,10 @@
     QRect cr = contentsRect();
     m_pLineNumberArea->setGeometry(QRect(cr.left(), cr.top(), lineNumberAreaWidth(), cr.height()));
+}
+
+void UIVMLogViewerTextEdit::mouseMoveEvent(QMouseEvent *pEvent)
+{
+    setMouseCursorLine(lineNumberForPos(pEvent->pos()));
+    m_pLineNumberArea->repaint();
 }
 
@@ -267,5 +292,5 @@
 void UIVMLogViewerTextEdit::sltBookmark()
 {
-    emit sigContextMenuBookmarkAction(m_iContextMenuBookmark);
+    emit sigAddBookmark(m_iContextMenuBookmark);
 }
 
@@ -315,3 +340,30 @@
 }
 
+int  UIVMLogViewerTextEdit::lineNumberForPos(const QPoint &position)
+{
+    QTextBlock block = cursorForPosition(position).block();
+    return block.firstLineNumber() + 1;
+}
+
+QPair<int, QString> UIVMLogViewerTextEdit::bookmarkForPos(const QPoint &position)
+{
+    QTextBlock block = cursorForPosition(position).block();
+    return QPair<int, QString>(block.firstLineNumber() + 1, block.text());
+}
+
+void UIVMLogViewerTextEdit::setMouseCursorLine(int lineNumber)
+{
+    m_mouseCursorLine = lineNumber;
+}
+
+void UIVMLogViewerTextEdit::toggleBookmark(const QPair<int, QString>& bookmark)
+{
+    int lineNumber = bookmark.first;
+
+    if(m_bookmarkLineSet.contains(lineNumber))
+        emit sigDeleteBookmark(bookmark);
+    else
+        emit sigAddBookmark(bookmark);
+}
+
 #include "UIVMLogViewerTextEdit.moc"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.h	(revision 70573)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.h	(revision 70574)
@@ -32,5 +32,6 @@
 signals:
 
-    void sigContextMenuBookmarkAction(QPair<int, QString> bookmark);
+    void sigAddBookmark(QPair<int, QString> bookmark);
+    void sigDeleteBookmark(QPair<int, QString> bookmark);
 
 public:
@@ -50,6 +51,7 @@
 protected:
 
-    void contextMenuEvent(QContextMenuEvent *pEvent);
-    void resizeEvent(QResizeEvent *pEvent);
+    void contextMenuEvent(QContextMenuEvent *pEvent) /* override */;
+    void resizeEvent(QResizeEvent *pEvent) /* override */;
+    void mouseMoveEvent(QMouseEvent *pEvent) /* override */;
 
 private slots:
@@ -64,9 +66,19 @@
     void prepare();
     void prepareWidgets();
-
-    /* Line number and text at the context menu position */
+    QPair<int, QString> bookmarkForPos(const QPoint &position);
+    int  lineNumberForPos(const QPoint &position);
+    void setMouseCursorLine(int lineNumber);
+    /** If bookmark exists this function removes it, if not it adds the bookmark. */
+    void toggleBookmark(const QPair<int, QString>& bookmark);
+    /** Line number and text at the context menu position */
     QPair<int, QString>  m_iContextMenuBookmark;
     QWidget             *m_pLineNumberArea;
+    /** Set of bookmarked lines. This set is updated from UIVMLogPage. This set is
+        used only for lookup in this class. */
     QSet<int>            m_bookmarkLineSet;
+    /** Number of the line under the mouse cursor. */
+    int                  m_mouseCursorLine;
+
+    friend class UILineNumberArea;
 };
 
