diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp
index 7629b0ff087ccadcc4d65c7d5ebc616b20c57512..07fd6c4b5be9f8880525fe2e368cce47cb183339 100644
--- a/src/plugins/debugger/breakhandler.cpp
+++ b/src/plugins/debugger/breakhandler.cpp
@@ -154,6 +154,13 @@ BreakpointData::BreakpointData(BreakHandler *handler)
     marker = 0;
     markerLineNumber = 0;
     bpMultiple = false;
+//#if defined(Q_OS_MAC)
+//    // full names do not work on Mac/MI
+    useFullPath = false; 
+//#else
+//    //where = m_manager->shortName(data->fileName);
+//    useFullPath = true; 
+//#endif
 }
 
 BreakpointData::~BreakpointData()
@@ -326,6 +333,8 @@ void BreakHandler::saveBreakpoints()
             map["ignorecount"] = data->ignoreCount;
         if (!data->enabled)
             map["disabled"] = "1";
+        if (data->useFullPath)
+            map["usefullpath"] = "1";
         list.append(map);
     }
     setSessionValueRequested("Breakpoints", list);
@@ -347,6 +356,7 @@ void BreakHandler::loadBreakpoints()
         data->ignoreCount = map["ignorecount"].toString();
         data->funcName = map["funcname"].toString();
         data->enabled = !map["disabled"].toInt();
+        data->useFullPath = bool(map["usefullpath"].toInt());
         data->markerFileName = data->fileName;
         data->markerLineNumber = data->lineNumber.toInt();
         append(data);
@@ -427,8 +437,13 @@ QVariant BreakHandler::data(const QModelIndex &mi, int role) const
                 str = QFileInfo(str).fileName();
                 //if (data->bpMultiple && str.isEmpty() && !data->markerFileName.isEmpty())
                 //    str = data->markerFileName;
-                return str.isEmpty() ? empty : str;
+                str = str.isEmpty() ? empty : str;
+                if (data->useFullPath)
+                    str = "/.../" + str; 
+                return str;
             }
+            if (role == Qt::UserRole)
+                return data->useFullPath;
             break;
         case 3:
             if (role == Qt::DisplayRole) {
@@ -480,6 +495,13 @@ bool BreakHandler::setData(const QModelIndex &mi, const QVariant &value, int rol
             }
             return true;
         }
+        case 2: {
+            if (data->useFullPath != value.toBool()) {
+                data->useFullPath = value.toBool();
+                dataChanged(mi, mi);
+            }
+            return true;
+        }
         case 4: {
             QString val = value.toString();
             if (val != data->condition) {
diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h
index f4f7470ef580552240eee7bc2d9b27265c6cafc1..4c8a9203ee16ab6a6c49be0719be02a557e797b3 100644
--- a/src/plugins/debugger/breakhandler.h
+++ b/src/plugins/debugger/breakhandler.h
@@ -78,6 +78,7 @@ public:
     QString ignoreCount;    // ignore count associated with breakpoint
     QString lineNumber;     // line in source file
     QString funcName;       // name of containing function
+    bool useFullPath;       // should we use the full path when setting the bp?
 
     // this is what gdb produced in response
     QString bpNumber;       // breakpoint number assigned by the debugger engine
diff --git a/src/plugins/debugger/breakwindow.cpp b/src/plugins/debugger/breakwindow.cpp
index 0f4fe90d6d2ac5c70ba0c8bb5448cc44d155ecd0..6e5f3a6226db5fd84f80a551ba938d3bc3588511 100644
--- a/src/plugins/debugger/breakwindow.cpp
+++ b/src/plugins/debugger/breakwindow.cpp
@@ -82,6 +82,7 @@ void BreakWindow::contextMenuEvent(QContextMenuEvent *ev)
     const QModelIndex index = indexAt(ev->pos());
     const bool indexIsValid = index.isValid();
     const QModelIndex index0 = index.sibling(index.row(), 0);
+    const QModelIndex index2 = index.sibling(index.row(), 2);
     QAction *act0 = new QAction(tr("Delete breakpoint"), &menu);
     act0->setEnabled(indexIsValid);
     QAction *act1 = new QAction(tr("Adjust column widths to contents"), &menu);
@@ -94,10 +95,14 @@ void BreakWindow::contextMenuEvent(QContextMenuEvent *ev)
     bool enabled = indexIsValid && model()->data(index0, Qt::UserRole).toBool();
     QString str = enabled ? tr("Disable breakpoint") : tr("Enable breakpoint");
     QAction *act5 = new QAction(str, &menu);
+    bool fullpath = indexIsValid && model()->data(index2, Qt::UserRole).toBool();
+    QString str1 = fullpath ? tr("Use short path") : tr("Use full path");
+    QAction *act6 = new QAction(str1, &menu);
 
     menu.addAction(act0);
     menu.addAction(act3);
     menu.addAction(act5);
+    menu.addAction(act6);
     menu.addSeparator();
     menu.addAction(act1);
     menu.addAction(act2);
@@ -120,6 +125,9 @@ void BreakWindow::contextMenuEvent(QContextMenuEvent *ev)
     else if (act == act5) {
         model()->setData(index0, !enabled);
         emit breakpointSynchronizationRequested();
+    } else if (act == act6) {
+        model()->setData(index2, !fullpath);
+        emit breakpointSynchronizationRequested();
     }
 }
 
diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index 4dc8bb1192a13d0b21a00b4c4dfb50227e2029d3..6cd9d9bc20bd0a6aafec4e8a3334fa698313a1db 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -1821,23 +1821,12 @@ void GdbEngine::sendInsertBreakpoint(int index)
     const BreakpointData *data = qq->breakHandler()->at(index);
     QString where;
     if (data->funcName.isEmpty()) {
-#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
-        where = data->fileName;
-#endif
-#if defined(Q_OS_MAC)
-        // full names do not work on Mac/MI
-        QFileInfo fi(data->fileName);
-        where = fi.fileName();
-        //where = fi.absoluteFilePath();
-#endif
-#if defined(Q_OS_WIN)
-        // full names do not work on Mac/MI
-        QFileInfo fi(data->fileName);
-        where = fi.fileName();
-    //where = m_manager->shortName(data->fileName);
-        //if (where.isEmpty())
-        //    where = data->fileName;
-#endif
+        if (data->useFullPath) {
+            where = data->fileName;
+        } else {
+            QFileInfo fi(data->fileName);
+            where = fi.fileName();
+        }
         // The argument is simply a C-quoted version of the argument to the
         // non-MI "break" command, including the "original" quoting it wants.
         where = _("\"\\\"") + GdbMi::escapeCString(where) + _("\\\":") + data->lineNumber + _c('"');