diff --git a/include/lldb/Core/SourceManager.h b/include/lldb/Core/SourceManager.h
index 721b97e..0705b5f 100644
--- a/include/lldb/Core/SourceManager.h
+++ b/include/lldb/Core/SourceManager.h
@@ -47,6 +47,12 @@
         bool
         FileSpecMatches (const FileSpec &file_spec);
 
+        const FileSpec &
+        GetFileSpec ()
+        {
+            return m_file_spec;
+        }
+
     protected:
 
         bool
@@ -73,6 +79,12 @@
     FileSP
     GetFile (const FileSpec &file_spec);
 
+    FileSP
+    GetLastFile () 
+    {
+        return m_last_file_sp;
+    }
+
     size_t
     DisplaySourceLines (const FileSpec &file,
                         uint32_t line,
diff --git a/source/Commands/CommandObjectSource.cpp b/source/Commands/CommandObjectSource.cpp
index 2e4645e..40d35e5 100644
--- a/source/Commands/CommandObjectSource.cpp
+++ b/source/Commands/CommandObjectSource.cpp
@@ -417,13 +417,25 @@
             
             char path_buf[PATH_MAX];
             start_file.GetPath(path_buf, sizeof(path_buf));
+            
+            if (m_options.show_bp_locs && exe_ctx.target)
+            {
+                const bool show_inlines = true;
+                m_breakpoint_locations.Reset (start_file, 0, show_inlines);
+                SearchFilter target_search_filter (exe_ctx.target->GetSP());
+                target_search_filter.Search (m_breakpoint_locations);
+            }
+            else
+                m_breakpoint_locations.Clear();
+
             result.AppendMessageWithFormat("File: %s.\n", path_buf);
             m_interpreter.GetDebugger().GetSourceManager().DisplaySourceLinesWithLineNumbers (start_file,
                                                                                               line_no,
                                                                                               0,
                                                                                               m_options.num_lines,
                                                                                               "",
-                                                                                              &result.GetOutputStream());
+                                                                                              &result.GetOutputStream(),
+                                                                                              GetBreakpointLocations ());
             
             result.SetStatus (eReturnStatusSuccessFinishResult);
             return true;
@@ -445,6 +457,20 @@
             }
             else
             {
+                if (m_options.show_bp_locs && exe_ctx.target)
+                {
+                    SourceManager::FileSP last_file_sp (m_interpreter.GetDebugger().GetSourceManager().GetLastFile ());
+                    if (last_file_sp)
+                    {
+                        const bool show_inlines = true;
+                        m_breakpoint_locations.Reset (last_file_sp->GetFileSpec(), 0, show_inlines);
+                        SearchFilter target_search_filter (exe_ctx.target->GetSP());
+                        target_search_filter.Search (m_breakpoint_locations);
+                    }
+                }
+                else
+                    m_breakpoint_locations.Clear();
+
                 if (m_interpreter.GetDebugger().GetSourceManager().DisplaySourceLinesWithLineNumbersUsingLastFile(
                             m_options.start_line,   // Line to display
                             0,                      // Lines before line to display
