Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.cpp	(revision 70548)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.cpp	(revision 70549)
@@ -168,5 +168,5 @@
 
 private slots:
-    /// remove
+
     void sltBookmark()
     {
@@ -212,13 +212,4 @@
 {
     prepareWidgets();
-//     prepareActions();
-
-//     prepareToolBar();
-//     prepareMenu();
-
-//     /* Reading log files: */
-//     sltRefresh();
-
-//     /* Loading language constants: */
     retranslateUi();
 }
@@ -250,5 +241,6 @@
     m_pPlainTextEdit->setWordWrapMode(QTextOption::NoWrap);
     m_pPlainTextEdit->setReadOnly(true);
-
+    connect(qobject_cast<UIVMLogViewerTextEdit*>(m_pPlainTextEdit), &UIVMLogViewerTextEdit::sigContextMenuBookmarkAction,
+            this, &UIVMLogPage::sltAddBookmark);
 }
 
@@ -348,3 +340,58 @@
 }
 
+
+void UIVMLogPage::deleteBookmark(int index)
+{
+    if (m_bookmarkVector.size() <= index)
+         return;
+    m_bookmarkVector.remove(index, 1);
+}
+
+void UIVMLogPage::deleteAllBookmarks()
+{
+    m_bookmarkVector.clear();
+}
+
+void UIVMLogPage::scrollToBookmark(int bookmarkIndex)
+{
+    if(!m_pPlainTextEdit)
+        return;
+    if (bookmarkIndex >= m_bookmarkVector.size())
+        return;
+
+    int lineNumber = m_bookmarkVector.at(bookmarkIndex).first;
+    QTextDocument* document = m_pPlainTextEdit->document();
+    if(!document)
+        return;
+
+    QTextCursor cursor(document->findBlockByLineNumber(lineNumber));
+    m_pPlainTextEdit->setTextCursor(cursor);
+}
+
+const QVector<LogBookmark>& UIVMLogPage::bookmarkVector() const
+{
+    return m_bookmarkVector;
+}
+
+void UIVMLogPage::sltAddBookmark(LogBookmark bookmark)
+{
+    m_bookmarkVector.push_back(bookmark);
+    emit sigBookmarksUpdated();
+}
+// void UIVMLogViewerWidget::sltCreateBookmarkAtCurrent()
+// {
+    // if (!currentTextEdit())
+    //     return;
+    // QWidget* viewport = currentTextEdit()->viewport();
+    // if (!viewport)
+    //     return;
+    // QPoint point(0.5 * viewport->width(), 0.5 * viewport->height());
+    // QTextBlock block = currentTextEdit()->cursorForPosition(point).block();
+    // LogBookmark bookmark;
+    // bookmark.first = block.firstLineNumber();
+    // bookmark.second = block.text();
+    // sltCreateBookmarkAtLine(bookmark);
+//}
+
+
 #include "UIVMLogPage.moc"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.h	(revision 70548)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.h	(revision 70549)
@@ -50,4 +50,8 @@
     Q_OBJECT;
 
+signals:
+
+    void sigBookmarksUpdated();
+
 public:
 
@@ -76,5 +80,5 @@
     void setTextEdit(const QString &strText);
 
-    /* Marks the plain text edit When we dont have a log content. */
+    /** Marks the plain text edit When we dont have a log content. */
     void markForError();
 
@@ -82,6 +86,13 @@
     void clearScrollBarMarkingsVector();
 
-    /* Undos the changes done to textDocument */
+    /** Undos the changes done to textDocument */
     void documentUndo();
+
+    void deleteBookmark(int index);
+
+    const QVector<LogBookmark>& bookmarkVector() const;
+    void deleteAllBookmarks();
+    /** Scrolls the plain text edit to the bookmark with index @a bookmarkIndex. */
+    void scrollToBookmark(int bookmarkIndex);
 
 protected:
@@ -89,4 +100,5 @@
 private slots:
 
+    void sltAddBookmark(LogBookmark bookmark);
 
 private:
@@ -105,5 +117,5 @@
     int             m_tabIndex;
 
-    QVector<LogBookmark> m_bookmarkMap;
+    QVector<LogBookmark> m_bookmarkVector;
 
 };
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerBookmarksPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerBookmarksPanel.cpp	(revision 70548)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerBookmarksPanel.cpp	(revision 70549)
@@ -48,9 +48,7 @@
 }
 
-void UIVMLogViewerBookmarksPanel::updateBookmarkList(const QVector<QPair<int, QString> > *bookmarkVector)
+void UIVMLogViewerBookmarksPanel::updateBookmarkList(const QVector<QPair<int, QString> > &bookmarkVector)
 {
     if (!m_pBookmarksComboBox || !viewer())
-        return;
-    if (!bookmarkVector)
         return;
 
@@ -58,8 +56,8 @@
     QStringList bList;
     bList << "Bookmarks List";
-    for(int i = 0; i < bookmarkVector->size(); ++i)
+    for(int i = 0; i < bookmarkVector.size(); ++i)
     {
         QString strItem = QString("BookMark %1 at Line %2: %3").arg(QString::number(i)).
-            arg(QString::number(bookmarkVector->at(i).first)).arg(bookmarkVector->at(i).second);
+            arg(QString::number(bookmarkVector.at(i).first)).arg(bookmarkVector.at(i).second);
 
         if (strItem.length() > m_iMaxBookmarkTextLength)
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerBookmarksPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerBookmarksPanel.h	(revision 70548)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerBookmarksPanel.h	(revision 70549)
@@ -50,5 +50,5 @@
        user switches to another log page tab etc. */
     void setBookmarksList(const QVector<QPair<int, QString> > &bookmarkList);
-    void updateBookmarkList(const QVector<QPair<int, QString> > *bookmarkVector);
+    void updateBookmarkList(const QVector<QPair<int, QString> > &bookmarkVector);
 
 public slots:
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.cpp	(revision 70548)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.cpp	(revision 70549)
@@ -107,36 +107,37 @@
 }
 
-void UIVMLogViewerWidget::sltDeleteBookmark(int /*index*/)
-{
-    // QVector<LogBookmark>* bookmarkVector = currentBookmarkVector();
-    // if (!bookmarkVector || bookmarkVector->size() <= index)
-    //     return;
-    // bookmarkVector->remove(index, 1);
-    // if (m_pBookmarksPanel)
-    //     m_pBookmarksPanel->updateBookmarkList(bookmarkVector);
+void UIVMLogViewerWidget::sltDeleteBookmark(int index)
+{
+    UIVMLogPage* logPage = currentLogPage();
+    if(!logPage)
+        return;
+    logPage->deleteBookmark(index);
+    if (m_pBookmarksPanel)
+        m_pBookmarksPanel->updateBookmarkList(logPage->bookmarkVector());
 }
 
 void UIVMLogViewerWidget::sltDeleteAllBookmarks()
 {
-    // QVector<LogBookmark>* bookmarkVector = currentBookmarkVector();
-    // if (!bookmarkVector)
-    //     return;
-    // bookmarkVector->clear();
-    // if (m_pBookmarksPanel)
-    //     m_pBookmarksPanel->updateBookmarkList(bookmarkVector);
-}
-
-void UIVMLogViewerWidget::sltBookmarkSelected(int /*index*/)
-{
-    // QVector<LogBookmark>* bookmarkVector = currentBookmarkVector();
-    // if (!bookmarkVector || index >= bookmarkVector->size())
-    //     return;
-    // if (!currentLogPage() || !currentLogPage()->document())
-    //     return;
-
-    // int lineNumber = bookmarkVector->at(index).first;
-    // QTextCursor cursor(currentLogPage()->document()->findBlockByLineNumber(lineNumber));
-    // currentLogPage()->setTextCursor(cursor);
-
+    UIVMLogPage* logPage = currentLogPage();
+    if(!logPage)
+        return;
+    logPage->deleteAllBookmarks();
+
+    if (m_pBookmarksPanel)
+        m_pBookmarksPanel->updateBookmarkList(logPage->bookmarkVector());
+}
+
+void UIVMLogViewerWidget::sltBoomarksUpdated()
+{
+    if(!currentLogPage() || !m_pBookmarksPanel)
+        return;
+    m_pBookmarksPanel->updateBookmarkList(currentLogPage()->bookmarkVector());
+}
+
+void UIVMLogViewerWidget::gotoBookmark(int bookmarkIndex)
+{
+    if(!currentLogPage())
+        return;
+    currentLogPage()->scrollToBookmark(bookmarkIndex);
 }
 
@@ -168,5 +169,4 @@
     disconnect(m_pTabWidget, &QITabWidget::currentChanged, this, &UIVMLogViewerWidget::sltTabIndexChange);
 
-    // m_logMap.clear();
     m_logPageList.clear();
     m_pTabWidget->setEnabled(true);
@@ -262,11 +262,11 @@
 
     resetHighlighthing();
-    // if (m_pSearchPanel)
-    //     m_pSearchPanel->reset();
+    if (m_pSearchPanel)
+        m_pSearchPanel->reset();
     // m_iCurrentTabIndex = tabIndex;
+
     /* We keep a separate QVector<LogBookmark> for each log page: */
-    // QVector<LogBookmark>* bookmarkVector = currentBookmarkVector();
-    // if (bookmarkVector && m_pBookmarksPanel)
-    //     m_pBookmarksPanel->updateBookmarkList(bookmarkVector);
+    if (m_pBookmarksPanel && currentLogPage())
+        m_pBookmarksPanel->updateBookmarkList(currentLogPage()->bookmarkVector());
 }
 
@@ -276,30 +276,4 @@
     if (m_pSearchPanel && m_pSearchPanel->isVisible())
         m_pSearchPanel->refresh();
-}
-
-void UIVMLogViewerWidget::sltCreateBookmarkAtCurrent()
-{
-    // if (!currentTextEdit())
-    //     return;
-    // QWidget* viewport = currentTextEdit()->viewport();
-    // if (!viewport)
-    //     return;
-    // QPoint point(0.5 * viewport->width(), 0.5 * viewport->height());
-    // QTextBlock block = currentTextEdit()->cursorForPosition(point).block();
-    // LogBookmark bookmark;
-    // bookmark.first = block.firstLineNumber();
-    // bookmark.second = block.text();
-    // sltCreateBookmarkAtLine(bookmark);
-}
-
-void UIVMLogViewerWidget::sltCreateBookmarkAtLine(LogBookmark bookmark)
-{
-    Q_UNUSED(bookmark);
-    // QVector<LogBookmark> *pBookmarkVector = currentBookmarkVector();
-    // if (!pBookmarkVector)
-    //     return;
-    // pBookmarkVector->push_back(bookmark);
-    // if (m_pBookmarksPanel)
-    //     m_pBookmarksPanel->updateBookmarkList(pBookmarkVector);
 }
 
@@ -391,5 +365,5 @@
                 this, &UIVMLogViewerWidget::sltDeleteAllBookmarks);
         connect(m_pBookmarksPanel, &UIVMLogViewerBookmarksPanel::sigBookmarkSelected,
-                this, &UIVMLogViewerWidget::sltBookmarkSelected);
+                this, &UIVMLogViewerWidget::gotoBookmark);
     }
 }
@@ -610,7 +584,6 @@
 
     /* Make sure the log view widget has the focus: */
-    // QWidget *pCurrentLogPage = currentTextEdit();
-    // if (pCurrentLogPage)
-    //     pCurrentLogPage->setFocus();
+    if(currentLogPage())
+        currentLogPage()->setFocus();
 }
 
@@ -666,28 +639,4 @@
 }
 
-// const QVector<LogBookmark>* UIVMLogViewerWidget::currentBookmarkVector() const
-// {
-//     UIVMLogViewerTextEdit *logPage = qobject_cast<UIVMLogViewerTextEdit*>(currentLogPage());
-//     if (!logPage)
-//         return 0;
-//     QString logFileName = logPage->logFileName();
-//     if (logFileName.isEmpty())
-//         return 0;
-
-//     return &(m_bookmarkMap[logFileName]);
-// }
-
-// QVector<LogBookmark>* UIVMLogViewerWidget::currentBookmarkVector()
-// {
-//     UIVMLogViewerTextEdit *logPage = qobject_cast<UIVMLogViewerTextEdit*>(currentLogPage());
-//     if (!logPage)
-//         return 0;
-//     QString logFileName = logPage->logFileName();
-//     if (logFileName.isEmpty())
-//         return 0;
-
-//     return &(m_bookmarkMap[logFileName]);
-// }
-
 void UIVMLogViewerWidget::hidePanel(UIVMLogViewerPanel* panel)
 {
@@ -790,4 +739,5 @@
     /* Create page-container: */
     UIVMLogPage* pLogPage = new UIVMLogPage(this);
+    connect(pLogPage, &UIVMLogPage::sigBookmarksUpdated, this, &UIVMLogViewerWidget::sltBoomarksUpdated);
     AssertPtrReturnVoid(pLogPage);
     /* Set the file name only if we really have log file to read. */
@@ -818,16 +768,3 @@
     logPage->documentUndo();
     logPage->clearScrollBarMarkingsVector();
-    // QPlainTextEdit *pTextEdit = logPage(m_iCurrentTabIndex);
-    // if (pTextEdit)
-    // {
-    //     QTextDocument *pDocument = pTextEdit->document();
-    //     if (pDocument)
-    //         pDocument->undo();
-    // }
-    // UIIndicatorScrollBar* scrollBar = qobject_cast<UIIndicatorScrollBar*>(pTextEdit->verticalScrollBar());
-    // if (scrollBar)
-    // {
-    //     scrollBar->setMarkingsVector(QVector<float>());
-    //     pTextEdit->repaint();
-    // }
-}
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.h	(revision 70548)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerWidget.h	(revision 70549)
@@ -95,11 +95,10 @@
     /** Deletes the bookmark with @p index from the current logs bookmark list. */
         void sltDeleteBookmark(int index);
+        /** Receives delete all signal from the bookmark panel and notifies UIVMLogPage. */
         void sltDeleteAllBookmarks();
-        /** Scroll the plain text edit to the selected bookmark. */
-        void sltBookmarkSelected(int index);
-        /** Creates a bookmark out of line number and block text. */
-        void sltCreateBookmarkAtLine(QPair<int, QString> bookmark);
-        /** Determines the (middle) line number of the visible text and calls sltCreateBookmarkAtLine. */
-        void sltCreateBookmarkAtCurrent();
+        /** Manages bookmark panel update when bookmark vector is updated */
+        void sltBoomarksUpdated();
+        /* Makes the current UIVMLogPage to goto (scroll) its bookmark with index @a index. */
+        void gotoBookmark(int bookmarkIndex);
     /** @} */
 
