diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CBreakpointManager.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CBreakpointManager.java
index 9e958281698..4fd3f590a1c 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CBreakpointManager.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CBreakpointManager.java
@@ -820,16 +820,16 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
 		}
 		return new String[0];
 	}
-
+	
 	private ICLineBreakpoint createLocationBreakpoint( ICDILocationBreakpoint cdiBreakpoint ) {
 		ICLineBreakpoint breakpoint = null;
 		try {
 			ICDILocator location = cdiBreakpoint.getLocator();
 			String file = location.getFile();
-			if ( cdiBreakpoint instanceof ICDILineBreakpoint ) {
-				Object sourceElement = getSourceElement( file );
-				String sourceHandle = file;
-				IResource resource = getProject();
+			String sourceHandle = file;
+			IResource resource = getProject();
+			if (file != null && file.length() > 0) {
+				Object sourceElement = getSourceElement(file);
 				if ( sourceElement instanceof IFile ) {
 					sourceHandle = ((IFile)sourceElement).getLocation().toOSString();
 					resource = (IResource)sourceElement;
@@ -848,14 +848,17 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
 						resource = getProject();
 					}
 				}
-				
+			} else {
+				sourceHandle = getExecFileHandle();
+			}
+			if ( cdiBreakpoint instanceof ICDILineBreakpoint ) {
 				breakpoint = createLineBreakpoint( sourceHandle, resource, cdiBreakpoint );
 			}
 			else if ( cdiBreakpoint instanceof ICDIFunctionBreakpoint ) {
-				breakpoint = createFunctionBreakpoint( cdiBreakpoint );
+				breakpoint = createFunctionBreakpoint( sourceHandle, resource,cdiBreakpoint );
 			}
 			else if ( cdiBreakpoint instanceof ICDIAddressBreakpoint ) {
-				breakpoint = createAddressBreakpoint( cdiBreakpoint );
+				breakpoint = createAddressBreakpoint( sourceHandle, resource,cdiBreakpoint );
 			}
 		}
 		catch( CDIException e ) {
@@ -883,31 +886,38 @@ public class CBreakpointManager implements IBreakpointsListener, IBreakpointMana
 		return breakpoint;
 	}
 
-	private ICFunctionBreakpoint createFunctionBreakpoint( ICDILocationBreakpoint cdiBreakpoint ) throws CDIException, CoreException {
-		ICFunctionBreakpoint breakpoint = CDIDebugModel.createFunctionBreakpoint( getExecFileHandle(), 
-																				  getProject(), 
-																				  cdiBreakpoint.getLocator().getFunction(),
-																				  -1,
-																				  -1,
-																				  -1,
-																				  cdiBreakpoint.isEnabled(), 
-																				  cdiBreakpoint.getCondition().getIgnoreCount(), 
-																				  cdiBreakpoint.getCondition().getExpression(), 
-																				  false );
+	private ICFunctionBreakpoint createFunctionBreakpoint( String sourceHandle, IResource resource, ICDILocationBreakpoint cdiBreakpoint ) throws CDIException, CoreException {
+		ICDILocator location = cdiBreakpoint.getLocator();
+		int line = location.getLineNumber();
+		ICFunctionBreakpoint breakpoint = CDIDebugModel.createFunctionBreakpoint( 
+				sourceHandle, 
+				resource, 
+				location.getFunction(), 
+				-1, 
+				-1, 
+				line, 
+				cdiBreakpoint.isEnabled(), 
+				cdiBreakpoint.getCondition().getIgnoreCount(), 
+				cdiBreakpoint.getCondition().getExpression(), 
+				false);
 		return breakpoint;
 	}
 
-	private ICAddressBreakpoint createAddressBreakpoint( ICDILocationBreakpoint cdiBreakpoint ) throws CDIException, CoreException {
-		String sourceHandle = getExecFileHandle();
+	private ICAddressBreakpoint createAddressBreakpoint( String sourceHandle, IResource resource, ICDILocationBreakpoint cdiBreakpoint ) throws CDIException, CoreException {
+		String binary = getExecFileHandle();
 		IAddress address = getDebugTarget().getAddressFactory().createAddress( cdiBreakpoint.getLocator().getAddress() );
-		ICAddressBreakpoint breakpoint = CDIDebugModel.createAddressBreakpoint( sourceHandle,
-																				sourceHandle, 
-																				ResourcesPlugin.getWorkspace().getRoot(), 
-																				address, 
-																				cdiBreakpoint.isEnabled(), 
-																				cdiBreakpoint.getCondition().getIgnoreCount(), 
-																				cdiBreakpoint.getCondition().getExpression(), 
-																				false );
+		ICDILocator location = cdiBreakpoint.getLocator();
+		int line = location.getLineNumber();
+		ICAddressBreakpoint breakpoint = CDIDebugModel.createAddressBreakpoint( 
+				binary, 
+				sourceHandle, 
+				resource, 
+				line, 
+				address, 
+				cdiBreakpoint.isEnabled(), 
+				cdiBreakpoint.getCondition().getIgnoreCount(), 
+				cdiBreakpoint.getCondition().getExpression(), 
+				false);
 		return breakpoint;
 	}