diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp
index 32df0b3eb5438549b7956a71e19c8d930dae96a4..681f5935fc5915d8e756c4e84bef1f8b9d1b4c88 100644
--- a/src/plugins/debugger/breakhandler.cpp
+++ b/src/plugins/debugger/breakhandler.cpp
@@ -742,7 +742,8 @@ void BreakHandler::storeToTemplate(BreakHandler *other)
 {
     QTC_ASSERT(m_bp,/**/);
     foreach (BreakpointData *data, *m_bp) {
-            data->m_handler = other;
+        data->m_handler = other;
+        data->clear();
     }
     m_bp = 0;
 
diff --git a/src/plugins/debugger/breakpoint.cpp b/src/plugins/debugger/breakpoint.cpp
index 0c9fc2341bd473ef558ff25bb1f73a4a158391b6..46466fa7987a40c06dc4391e59d2e8dd3ea38e74 100644
--- a/src/plugins/debugger/breakpoint.cpp
+++ b/src/plugins/debugger/breakpoint.cpp
@@ -205,6 +205,26 @@ BreakpointData::~BreakpointData()
     removeMarker();
 }
 
+void BreakpointData::clear()
+{
+    removeMarker();
+    bpNumber.clear();
+    bpCondition.clear();
+    bpIgnoreCount = 0;
+    bpFileName.clear();
+    bpFullName.clear();
+    bpLineNumber = 0;
+    bpCorrectedLineNumber = 0;
+    bpThreadSpec.clear();
+    bpFuncName.clear();
+    bpAddress = 0;
+    bpMultiple = false;
+    bpEnabled = true;
+    bpState.clear();
+    m_markerFileName.clear();
+    m_markerLineNumber = 0;
+}
+
 void BreakpointData::removeMarker()
 {
     BreakpointMarker *m = marker;
diff --git a/src/plugins/debugger/breakpoint.h b/src/plugins/debugger/breakpoint.h
index e96a58bc83fd614c86a5971d87fa40fe57d6eb2f..9589fb8dc9693c0b4f60a20c92982a793de03a84 100644
--- a/src/plugins/debugger/breakpoint.h
+++ b/src/plugins/debugger/breakpoint.h
@@ -57,6 +57,7 @@ public:
     QString toToolTip() const;
     BreakHandler *handler() { return m_handler; }
     void reinsertBreakpoint();
+    void clear(); // Delete all generated data.
 
     bool isLocatedAt(const QString &fileName, int lineNumber,
         bool useMarkerPosition) const;