diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp
index f3302d3d7917ae9be9e38081e039fc133c8d3a58..5fb48023d7135cbc0dcbfd7e6a01bb67492c6695 100644
--- a/src/plugins/debugger/breakhandler.cpp
+++ b/src/plugins/debugger/breakhandler.cpp
@@ -571,17 +571,20 @@ void BreakHandler::removeAllBreakpoints()
     updateMarkers();
 }
 
-BreakpointData *BreakHandler::findBreakpoint(const QString &fileName, int lineNumber)
+BreakpointData *BreakHandler::findBreakpoint(const QString &fileName,
+    int lineNumber, bool useMarkerPosition)
 {
     foreach (BreakpointData *data, m_bp)
-        if (data->isLocatedAt(fileName, lineNumber))
+        if (data->isLocatedAt(fileName, lineNumber, useMarkerPosition))
             return data;
     return 0;
 }
 
 void BreakHandler::toggleBreakpoint(const QString &fileName, int lineNumber)
 {
-    BreakpointData *data = findBreakpoint(fileName, lineNumber);
+    BreakpointData *data = findBreakpoint(fileName, lineNumber, true);
+    if (!data)
+        data = findBreakpoint(fileName, lineNumber, false);
     if (data) {
         removeBreakpoint(data);
     } else {
diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h
index 270310e60f3c00191eedb501aba5267fdcab52fa..f5624d698c44730237c91d9ce410d6724755d963 100644
--- a/src/plugins/debugger/breakhandler.h
+++ b/src/plugins/debugger/breakhandler.h
@@ -93,7 +93,8 @@ public:
     void storeToTemplate(BreakHandler *other);
     void toggleBreakpoint(const QString &fileName, int lineNumber);
     void toggleBreakpointEnabled(const QString &fileName, int lineNumber);
-    BreakpointData *findBreakpoint(const QString &fileName, int lineNumber);
+    BreakpointData *findBreakpoint(const QString &fileName, int lineNumber,
+        bool useMarkerPosition = true);
 
 public slots:
     void appendBreakpoint(BreakpointData *data);
diff --git a/src/plugins/debugger/breakpoint.cpp b/src/plugins/debugger/breakpoint.cpp
index 981aed0ba4303826fc4fc081fbceb072f827e6bd..314ca87681bd7ed9b4d1ad2c7b9739ce74c77657 100644
--- a/src/plugins/debugger/breakpoint.cpp
+++ b/src/plugins/debugger/breakpoint.cpp
@@ -304,19 +304,11 @@ QString BreakpointData::toString() const
     return rc;
 }
 
-bool BreakpointData::isLocatedAt(const QString &fileName_, int lineNumber_) const
+bool BreakpointData::isLocatedAt(const QString &fileName_, int lineNumber_, 
+    bool useMarkerPosition) const
 {
-    /*
-    if (lineNumber != QString::number(lineNumber_))
-        return false;
-    if (fileName == fileName_)
-        return true;
-    if (fileName_.endsWith(fileName))
-        return true;
-    return false;
-    */
-    return lineNumber_ == m_markerLineNumber
-        && fileNameMatch(fileName_, m_markerFileName);
+    int line = useMarkerPosition ? m_markerLineNumber : lineNumber.toInt();
+    return lineNumber_ == line && fileNameMatch(fileName_, m_markerFileName);
 }
 
 bool BreakpointData::isSimilarTo(const BreakpointData *needle) const
diff --git a/src/plugins/debugger/breakpoint.h b/src/plugins/debugger/breakpoint.h
index 7177c17142fc8b3ba792db908164428756f5abf0..0ff1f4b8ef0b69186d9a71cac9da7db18ea246d2 100644
--- a/src/plugins/debugger/breakpoint.h
+++ b/src/plugins/debugger/breakpoint.h
@@ -58,7 +58,8 @@ public:
     QString toString() const;
     BreakHandler *handler() { return m_handler; }
 
-    bool isLocatedAt(const QString &fileName, int lineNumber) const;
+    bool isLocatedAt(const QString &fileName, int lineNumber,
+        bool useMarkerPosition) const;
     bool isSimilarTo(const BreakpointData *needle) const;
     bool conditionsMatch() const;