Index: build/full.cfg
===================================================================
--- build/full.cfg	(revision 10821)
+++ build/full.cfg	(working copy)
@@ -3,7 +3,6 @@
 
 [first]
 OpenLayers/SingleFile.js
-OpenLayers.js
 OpenLayers/BaseTypes.js
 OpenLayers/BaseTypes/Class.js
 OpenLayers/Util.js
Index: build/library.cfg
===================================================================
--- build/library.cfg	(revision 10821)
+++ build/library.cfg	(working copy)
@@ -4,7 +4,6 @@
 
 [first]
 OpenLayers/SingleFile.js
-OpenLayers.js
 OpenLayers/BaseTypes.js
 OpenLayers/BaseTypes/Class.js
 OpenLayers/Util.js
Index: build/lite.cfg
===================================================================
--- build/lite.cfg	(revision 10821)
+++ build/lite.cfg	(working copy)
@@ -6,7 +6,6 @@
 
 [first]
 OpenLayers/SingleFile.js
-OpenLayers.js
 OpenLayers/BaseTypes.js
 OpenLayers/BaseTypes/Class.js
 OpenLayers/Util.js
Index: tests/OpenLayers2.html
===================================================================
--- tests/OpenLayers2.html	(revision 0)
+++ tests/OpenLayers2.html	(revision 0)
@@ -0,0 +1,19 @@
+<html>
+<head>
+    <script src="bogus/1/OpenLayers.js-foo"></script>
+    <script src="bogus/2/foo-OpenLayers.js"></script>
+    <script src="../lib/OpenLayers.js?foo"></script>
+    <script src="bogus/3/after-OpenLayers.js"></script>
+    <script type="text/javascript">
+        function test_OpenLayers(t) {
+            t.plan(1);
+
+            var script = document.getElementById("script");
+
+            t.eq(OpenLayers._getScriptLocation(), "../", "Script location with search string correctly detected, and not fooled by other scripts.");
+        }
+    </script>
+</head>
+<body>
+</body>
+</html>
Index: tests/OpenLayers3.html
===================================================================
--- tests/OpenLayers3.html	(revision 0)
+++ tests/OpenLayers3.html	(revision 0)
@@ -0,0 +1,19 @@
+<html>
+<head>
+    <script>
+    var OpenLayers = {singleFile: true};
+    </script>
+    <script src="../lib/OpenLayers.js"></script>
+    <script type="text/javascript">
+        function test_OpenLayers(t) {
+            t.plan(1);
+
+            var script = document.getElementById("script");
+
+            t.eq(OpenLayers._getScriptLocation(), "../lib/", "Script location for single file build correctly detected.");
+        }
+    </script>
+</head>
+<body>
+</body>
+</html>
Index: tests/OpenLayers.html
===================================================================
--- tests/OpenLayers.html	(revision 10821)
+++ tests/OpenLayers.html	(working copy)
@@ -1,31 +0,0 @@
-<html>
-<head>
-    <script src="bogus/1/OpenLayers.js-foo"></script>
-    <script src="bogus/2/foo-OpenLayers.js"></script>
-    <script id="script" src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-        function test_OpenLayers(t) {
-            t.plan(3);
-
-            var script = document.getElementById("script");
-
-            t.eq(OpenLayers._getScriptLocation(), "../", "Script location correctly detected.");
-            
-            // create a clone of OpenLayers._getScriptLocation
-            eval("var getScriptLocation = " + OpenLayers._getScriptLocation.toString());
-            var scriptLocation;
-            
-            script.setAttribute("src", "../lib/OpenLayers.js?foo");
-            t.eq(getScriptLocation(), "../", "Script location with search string correctly detected.");
-            scriptLocation = null;
-
-            // now pretend we're using a built script
-            OpenLayers._scriptName = "OpenLayers.js";
-            t.eq(getScriptLocation(), "../lib/", "not fooled by bogus paths");
-            
-        }
-    </script>
-</head>
-<body>
-</body>
-</html>
Index: tests/OpenLayers1.html
===================================================================
--- tests/OpenLayers1.html	(revision 0)
+++ tests/OpenLayers1.html	(revision 0)
@@ -0,0 +1,16 @@
+<html>
+<head>
+    <script src="../lib/OpenLayers.js"></script>
+    <script type="text/javascript">
+        function test_OpenLayers(t) {
+            t.plan(1);
+
+            var script = document.getElementById("script");
+
+            t.eq(OpenLayers._getScriptLocation(), "../", "Script location correctly detected.");
+        }
+    </script>
+</head>
+<body>
+</body>
+</html>
Index: tests/list-tests.html
===================================================================
--- tests/list-tests.html	(revision 10821)
+++ tests/list-tests.html	(working copy)
@@ -156,7 +156,9 @@
     <li>Map.html</li>
     <li>Marker.html</li>
     <li>Marker/Box.html</li>
-    <li>OpenLayers.html</li>
+    <li>OpenLayers1.html</li>
+    <li>OpenLayers2.html</li>
+    <li>OpenLayers3.html</li>
     <li>Popup.html</li>
     <li>Popup/Anchored.html</li>
     <li>Popup/AnchoredBubble.html</li>
Index: lib/OpenLayers/SingleFile.js
===================================================================
--- lib/OpenLayers/SingleFile.js	(revision 10821)
+++ lib/OpenLayers/SingleFile.js	(working copy)
@@ -4,7 +4,12 @@
  * full text of the license. */
 
 var OpenLayers = {
-    singleFile: true
+    singleFile: true,
+    _getScriptLocation: (function() {
+        var s = document.getElementsByTagName('script');
+        var l = s[s.length-1].getAttribute("src").match(/(^|(.*?\/))(OpenLayers\.js)(\?|$)/)[1];
+        return (function() { return l; });
+    })()
 };
 
 
Index: lib/OpenLayers.js
===================================================================
--- lib/OpenLayers.js	(revision 10821)
+++ lib/OpenLayers.js	(working copy)
@@ -14,15 +14,12 @@
      * Before creating the OpenLayers namespace, check to see if
      * OpenLayers.singleFile is true.  This occurs if the
      * OpenLayers/SingleFile.js script is included before this one - as is the
-     * case with single file builds.
+     * case with old single file build profiles that included both
+     * OpenLayers.js and OpenLayers/SingleFile.js.
      */
     var singleFile = (typeof OpenLayers == "object" && OpenLayers.singleFile);
     
-    /**
-     * Cache for the script location returned from
-     * OpenLayers._getScriptLocation
-     */
-    var scriptLocation;
+    var scriptName = (!singleFile) ? "lib/OpenLayers.js" : "OpenLayers.js";
     
     /**
      * Namespace: OpenLayers
@@ -34,7 +31,7 @@
          * Property: _scriptName
          * {String} Relative path of this script.
          */
-        _scriptName: (!singleFile) ? "lib/OpenLayers.js" : "OpenLayers.js",
+        _scriptName: scriptName,
 
         /**
          * Function: _getScriptLocation
@@ -43,26 +40,12 @@
          * Returns:
          * {String} Path to this script
          */
-        _getScriptLocation: function () {
-            if (scriptLocation != undefined) {
-                return scriptLocation;
-            }
-            scriptLocation = "";            
-            var isOL = new RegExp("(^|(.*?\\/))(" + OpenLayers._scriptName + ")(\\?|$)");
-         
-            var scripts = document.getElementsByTagName('script');
-            for (var i=0, len=scripts.length; i<len; i++) {
-                var src = scripts[i].getAttribute('src');
-                if (src) {
-                    var match = src.match(isOL);
-                    if(match) {
-                        scriptLocation = match[1];
-                        break;
-                    }
-                }
-            }
-            return scriptLocation;
-        }
+         _getScriptLocation: (function() {
+             var r = new RegExp("(^|(.*?\\/))(" + scriptName + ")(\\?|$)");
+             var s = document.getElementsByTagName('script');
+             var l = s[s.length-1].getAttribute("src").match(r)[1];
+             return (function() { return l; });
+         })()
     };
     /**
      * OpenLayers.singleFile is a flag indicating this file is being included
