diff --git a/src/plugins/bineditor/bineditor.cpp b/src/plugins/bineditor/bineditor.cpp
index 2c0d7c0a365428a46babdc6550f950ec35ba8b0c..62352b123028ddb8f8330c704eab6691eddf192e 100644
--- a/src/plugins/bineditor/bineditor.cpp
+++ b/src/plugins/bineditor/bineditor.cpp
@@ -126,11 +126,11 @@ void BinEditorWidget::init()
         2*m_addressBytes + (m_addressBytes - 1) / 2;
     m_addressString = QString(addressStringWidth, QLatin1Char(':'));
     QFontMetrics fm(fontMetrics());
-    m_margin = 4;
     m_descent = fm.descent();
     m_ascent = fm.ascent();
     m_lineHeight = fm.lineSpacing();
     m_charWidth = fm.width(QChar(QLatin1Char('M')));
+    m_margin = m_charWidth;
     m_columnWidth = 2 * m_charWidth + fm.width(QChar(QLatin1Char(' ')));
     m_numLines = m_size / m_bytesPerLine + 1;
     m_numVisibleLines = viewport()->height() / m_lineHeight;
@@ -638,7 +638,7 @@ int BinEditorWidget::find(const QByteArray &pattern_arg, int from,
 
     if (pos >= 0) {
         setCursorPosition(pos);
-        setCursorPosition(pos + (found == pos ? pattern.size() : hexPattern.size()), KeepAnchor);
+        setCursorPosition(pos + (found == pos ? pattern.size() : hexPattern.size()) - 1, KeepAnchor);
     }
     return pos;
 }
@@ -713,7 +713,7 @@ void BinEditorWidget::paintEvent(QPaintEvent *e)
     QPainter painter(viewport());
     const int topLine = verticalScrollBar()->value();
     const int xoffset = horizontalScrollBar()->value();
-    const int x1 = -xoffset + m_margin + m_labelWidth - m_charWidth/2;
+    const int x1 = -xoffset + m_margin + m_labelWidth - m_charWidth/2 - 1;
     const int x2 = -xoffset + m_margin + m_labelWidth + m_bytesPerLine * m_columnWidth + m_charWidth/2;
     painter.drawLine(x1, 0, x1, viewport()->height());
     painter.drawLine(x2, 0, x2, viewport()->height());
@@ -836,7 +836,7 @@ void BinEditorWidget::paintEvent(QPaintEvent *e)
                     color = QColor(0xffef0b);
 
                 if (color.isValid()) {
-                    painter.fillRect(item_x, y-m_ascent, m_columnWidth, m_lineHeight, color);
+                    painter.fillRect(item_x - m_charWidth/2, y-m_ascent, m_columnWidth, m_lineHeight, color);
                     int printable_item_x = -xoffset + m_margin + m_labelWidth + m_bytesPerLine * m_columnWidth + m_charWidth
                                            + fm.width(printable.left(c));
                     painter.fillRect(printable_item_x, y-m_ascent,
@@ -844,8 +844,8 @@ void BinEditorWidget::paintEvent(QPaintEvent *e)
                                      m_lineHeight, color);
                 }
 
-                if (selStart < selEnd && !isFullySelected && pos >= selStart && pos < selEnd) {
-                    selectionRect |= QRect(item_x, y-m_ascent, m_columnWidth, m_lineHeight);
+                if (!isFullySelected && pos >= selStart && pos <= selEnd) {
+                    selectionRect |= QRect(item_x - m_charWidth/2, y-m_ascent, m_columnWidth, m_lineHeight);
                     int printable_item_x = -xoffset + m_margin + m_labelWidth + m_bytesPerLine * m_columnWidth + m_charWidth
                                            + fm.width(printable.left(c));
                     printableSelectionRect |= QRect(printable_item_x, y-m_ascent,
@@ -856,11 +856,10 @@ void BinEditorWidget::paintEvent(QPaintEvent *e)
         }
 
         int x = -xoffset +  m_margin + m_labelWidth;
-        bool cursorWanted = m_cursorPosition == m_anchorPosition;
 
         if (isFullySelected) {
             painter.save();
-            painter.fillRect(x, y-m_ascent, m_bytesPerLine*m_columnWidth, m_lineHeight, palette().highlight());
+            painter.fillRect(x - m_charWidth/2, y-m_ascent, m_bytesPerLine*m_columnWidth, m_lineHeight, palette().highlight());
             painter.setPen(palette().highlightedText().color());
             drawItems(&painter, x, y, itemString);
             painter.restore();
@@ -878,8 +877,7 @@ void BinEditorWidget::paintEvent(QPaintEvent *e)
             }
         }
 
-
-        if (cursor >= 0 && cursorWanted) {
+        if (cursor >= 0) {
             int w = fm.boundingRect(itemString.mid(cursor*3, 2)).width();
             QRect cursorRect(x + cursor * m_columnWidth, y - m_ascent, w + 1, m_lineHeight);
             painter.save();
@@ -919,7 +917,7 @@ void BinEditorWidget::paintEvent(QPaintEvent *e)
             }
         }
 
-        if (cursor >= 0 && !printable.isEmpty() && cursorWanted) {
+        if (cursor >= 0 && !printable.isEmpty()) {
             QRect cursorRect(text_x + fm.width(printable.left(cursor)),
                              y-m_ascent,
                              fm.width(printable.at(cursor)),
@@ -950,18 +948,14 @@ void BinEditorWidget::setCursorPosition(int pos, MoveMode moveMode)
     pos = qMin(m_size-1, qMax(0, pos));
     int oldCursorPosition = m_cursorPosition;
 
-    bool hadSelection = hasSelection();
     m_lowNibble = false;
-    if (!hadSelection)
-        updateLines();
     m_cursorPosition = pos;
     if (moveMode == MoveAnchor) {
-        if (hadSelection)
-            updateLines(m_anchorPosition, oldCursorPosition);
+        updateLines(m_anchorPosition, oldCursorPosition);
         m_anchorPosition = m_cursorPosition;
     }
 
-    updateLines(hadSelection || hasSelection() ? oldCursorPosition : m_cursorPosition, m_cursorPosition);
+    updateLines(oldCursorPosition, m_cursorPosition);
     ensureCursorVisible();
     emit cursorPositionChanged(m_cursorPosition);
 }
@@ -1087,20 +1081,14 @@ bool BinEditorWidget::event(QEvent *e)
 
 QString BinEditorWidget::toolTip(const QHelpEvent *helpEvent) const
 {
-    // Selection if mouse is in, else 1 byte at cursor
     int selStart = selectionStart();
     int selEnd = selectionEnd();
-    int byteCount = selEnd - selStart;
-    if (byteCount < 1) {
-        selStart = posAt(helpEvent->pos());
-        selEnd = selStart + 1;
-        byteCount = 1;
-    }
+    int byteCount = selEnd - selStart + 1;
     if (m_hexCursor == 0 || byteCount > 8)
         return QString();
 
     const QPoint &startPoint = offsetToPos(selStart);
-    const QPoint &endPoint = offsetToPos(selEnd);
+    const QPoint &endPoint = offsetToPos(selEnd + 1);
     QRect selRect(startPoint, endPoint);
     selRect.setHeight(m_lineHeight);
     if (!selRect.contains(helpEvent->pos()))
@@ -1385,10 +1373,7 @@ void BinEditorWidget::copy(bool raw)
 {
     int selStart = selectionStart();
     int selEnd = selectionEnd();
-    if (selStart > selEnd)
-        qSwap(selStart, selEnd);
-
-    const int selectionLength = selEnd - selStart;
+    const int selectionLength = selEnd - selStart + 1;
     if (selectionLength >> 22) {
         QMessageBox::warning(this, tr("Copying Failed"),
                              tr("You cannot copy more than 4 MB of binary data."));
@@ -1496,7 +1481,7 @@ void BinEditorWidget::redo()
 void BinEditorWidget::contextMenuEvent(QContextMenuEvent *event)
 {
     const int selStart = selectionStart();
-    const int byteCount = selectionEnd() - selStart;
+    const int byteCount = selectionEnd() - selStart + 1;
 
     QPointer<QMenu> contextMenu(new QMenu(this));
 
diff --git a/src/plugins/bineditor/bineditor.h b/src/plugins/bineditor/bineditor.h
index d02402da612b1adf92c96c71eec1372b8016497f..7a3f9e5efa55ef61cbab56f74da8f7f23fcb922e 100644
--- a/src/plugins/bineditor/bineditor.h
+++ b/src/plugins/bineditor/bineditor.h
@@ -108,7 +108,6 @@ public:
     Core::IEditor *editor() const { return m_ieditor; }
     void setEditor(Core::IEditor *ieditor) { m_ieditor = ieditor; }
 
-    bool hasSelection() const { return m_cursorPosition != m_anchorPosition; }
     int selectionStart() const { return qMin(m_anchorPosition, m_cursorPosition); }
     int selectionEnd() const { return qMax(m_anchorPosition, m_cursorPosition); }