diff --git a/user/src/com/google/gwt/core/CoreWithUserAgent.gwt.xml b/user/src/com/google/gwt/core/CoreWithUserAgent.gwt.xml
index f3b8dc5..f7b498e 100644
--- a/user/src/com/google/gwt/core/CoreWithUserAgent.gwt.xml
+++ b/user/src/com/google/gwt/core/CoreWithUserAgent.gwt.xml
@@ -19,14 +19,6 @@
   <inherits name="com.google.gwt.core.EmulateJsStack" />
   <inherits name="com.google.gwt.useragent.UserAgent"/>
 
-  <replace-with class="com.google.gwt.core.client.impl.StackTraceCreator.CollectorChrome">
-    <when-type-is class="com.google.gwt.core.client.impl.StackTraceCreator.Collector" />
-    <when-property-is name="compiler.stackMode" value="native" />
-    <!-- For now, only Chrome provides Error.stack support, so we hijack the
-         entire WebKit permutation -->
-    <when-property-is name="user.agent" value="safari" />
-  </replace-with>
-
   <replace-with class="com.google.gwt.core.client.impl.StackTraceCreator.CollectorMoz">
     <when-type-is class="com.google.gwt.core.client.impl.StackTraceCreator.Collector" />
     <when-property-is name="compiler.stackMode" value="native" />
@@ -54,6 +46,24 @@
     </none> 
   </set-property>
 
+  <replace-with class="com.google.gwt.core.client.impl.StackTraceCreator.CollectorChrome">
+    <when-type-is class="com.google.gwt.core.client.impl.StackTraceCreator.Collector" />
+    <when-property-is name="compiler.stackMode" value="native" />
+    <!-- For now, only Chrome provides Error.stack support, so we hijack the
+         entire WebKit permutation -->
+    <when-property-is name="user.agent" value="safari" />
+    <when-property-is name="compiler.useSourceMaps" value="true"/>
+  </replace-with>
+
+  <replace-with class="com.google.gwt.core.client.impl.StackTraceCreator.CollectorChromeNoSourceMap">
+    <when-type-is class="com.google.gwt.core.client.impl.StackTraceCreator.Collector" />
+    <when-property-is name="compiler.stackMode" value="native" />
+    <!-- For now, only Chrome provides Error.stack support, so we hijack the
+         entire WebKit permutation -->
+    <when-property-is name="user.agent" value="safari" />
+    <when-property-is name="compiler.useSourceMaps" value="false"/>
+  </replace-with>
+
   <!-- Utility class to query if source maps are enabled, mainly for testing -->
   <replace-with class="com.google.gwt.core.client.impl.SourceMapProperty.SourceMapEnabled">
     <when-type-is class="com.google.gwt.core.client.impl.SourceMapProperty.SourceMapImpl"/>
diff --git a/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java b/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
index 78a0a5a..8fef66f 100644
--- a/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
+++ b/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
@@ -346,6 +346,10 @@
       return (toReturn.length() > 0 ? toReturn : "anonymous") + "@@" + location;
     }
 
+    protected int replaceIfNoSourceMap(int line) {
+         return line;
+    }
+
     @Override
     protected int toSplice() {
       return 3;
@@ -373,12 +377,22 @@
           }
         }
         stackTrace[i] = new StackTraceElement("Unknown", stackElements[0], fileName + "@" + col,
-            line < 0 ? -1 : line);
+            replaceIfNoSourceMap(line < 0 ? -1 : line));
       }
       e.setStackTrace(stackTrace);
     }
   }
 
+  /**
+   * Subclass that forces reported line numbers to -1 (fetch from symbolMap) if source maps are
+   * disabled.
+   */
+  static class CollectorChromeNoSourceMap extends CollectorChrome {
+    protected int replaceIfNoSourceMap(int line) {
+      return -1;
+    }
+  }
+
   private static native int parseInt(String number) /*-{
     return parseInt(number) || -1;
   }-*/;
diff --git a/user/src/com/google/gwt/logging/server/StackTraceDeobfuscator.java b/user/src/com/google/gwt/logging/server/StackTraceDeobfuscator.java
index 05e7ec3..e82e963 100644
--- a/user/src/com/google/gwt/logging/server/StackTraceDeobfuscator.java
+++ b/user/src/com/google/gwt/logging/server/StackTraceDeobfuscator.java
@@ -17,12 +17,9 @@
 package com.google.gwt.logging.server;
 
 import com.google.gwt.thirdparty.debugging.sourcemap.SourceMapConsumerFactory;
-import com.google.gwt.thirdparty.debugging.sourcemap.SourceMapConsumerV3;
 import com.google.gwt.thirdparty.debugging.sourcemap.SourceMapping;
 import com.google.gwt.thirdparty.debugging.sourcemap.proto.Mapping;
 
-import org.json.JSONObject;
-
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
@@ -136,6 +133,22 @@
     SymbolMap map = loadSymbolMap(strongName);
     String symbolData = map == null ? null : map.get(ste.getMethodName());
 
+    boolean sourceMapCapable = false;
+
+    int column = 1;
+    // column information is encoded in filename after '@' for sourceMap capable browsers
+    if (steFilename != null) {
+      int columnMarkerIndex = steFilename.indexOf("@");
+      if (columnMarkerIndex != -1) {
+        try {
+          column = Integer.parseInt(steFilename.substring(columnMarkerIndex + 1));
+          sourceMapCapable = true;
+        } catch (NumberFormatException nfe) {
+        }
+        steFilename = steFilename.substring(0, columnMarkerIndex);
+      }
+    }
+
     // first use symbolMap, then refine via sourceMap if possible
     if (symbolData != null) {
       // jsniIdent, className, memberName, sourceUri, sourceLine, fragmentId
@@ -164,7 +177,8 @@
          * compiler.emulatedStack.recordLineNumbers is false, use the method
          * declaration line number from the symbol map.
          */
-        if (lineNumber == LINE_NUMBER_UNKNOWN) {
+        if (lineNumber == LINE_NUMBER_UNKNOWN || (sourceMapCapable && column == -1)) {
+          // Safari will send line numbers, with col == -1, we need to use symbolMap in this case
           lineNumber = Integer.parseInt(parts[4]);
         }
 
@@ -172,20 +186,7 @@
       }
     }
 
-    int column = 1;
-    // column information is encoded in filename after '@'
-    if (steFilename != null) {
-      int columnMarkerIndex = steFilename.indexOf("@");
-      if (columnMarkerIndex != -1) {
-        try {
-          column = Integer.parseInt(steFilename.substring(columnMarkerIndex + 1));
-        } catch (NumberFormatException nfe) {
-        }
-        steFilename = steFilename.substring(0, columnMarkerIndex);
-      }
-    }
-
-    // anonymous function, try to use <fragmentNum>.js:line:col to lookup function
+    // anonymous function, try to use <fragmentNum>.js:line to determine fragment id
     if (fragmentId == -1 && steFilename != null) {
       // fragment identifier encoded in filename
       Matcher matcher = fragmentIdPattern.matcher(steFilename);
@@ -205,7 +206,7 @@
     int jsLineNumber = ste.getLineNumber();
 
     // try to refine location via sourcemap
-    if (fragmentId != -1) {
+    if (sourceMapCapable && fragmentId != -1 && column != -1) {
       SourceMapping sourceMapping = loadSourceMap(strongName, fragmentId);
       if (sourceMapping != null && ste.getLineNumber() > -1) {
         Mapping.OriginalMapping mappingForLine = sourceMapping
