diff --git a/JavaScriptCore/kjs/string_object.cpp b/JavaScriptCore/kjs/string_object.cpp
index cbebab7..1b3da32 100644
--- a/JavaScriptCore/kjs/string_object.cpp
+++ b/JavaScriptCore/kjs/string_object.cpp
@@ -31,6 +31,10 @@
 #include "regexp_object.h"
 #include <wtf/unicode/Unicode.h>
 
+#if PLATFORM(CF)
+#include <CoreFoundation/CoreFoundation.h>
+#endif
+
 using namespace KJS;
 
 // ------------------------------ StringInstance ----------------------------
@@ -125,6 +129,7 @@
   toUpperCase           StringProtoFunc::ToUpperCase    DontEnum|Function       0
   toLocaleLowerCase     StringProtoFunc::ToLocaleLowerCase DontEnum|Function    0
   toLocaleUpperCase     StringProtoFunc::ToLocaleUpperCase DontEnum|Function    0
+  localeCompare         StringProtoFunc::LocaleCompare  DontEnum|Function       1
 #
 # Under here: html extension, should only exist if KJS_PURE_ECMA is not defined
 # I guess we need to generate two hashtables in the .lut.h file, and use #ifdef
@@ -277,6 +282,33 @@
   return substitutedReplacement;
 }
 
+#if PLATFORM(WIN_OS)
+static inline int localeCompare(const UString& a, const UString& b)
+{
+    return CompareStringW(LOCALE_USER_DEFAULT, 0, 
+                          a.data(), a.length(),
+                          b.data(), b.length());
+}
+#elif PLATFORM(CF)
+static inline int localeCompare(const UString& a, const UString& b)
+{
+    CFStringRef sa = CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault, reinterpret_cast<const UniChar*>(a.data()), a.size(), kCFAllocatorNull);
+    CFStringRef sb = CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault, reinterpret_cast<const UniChar*>(b.data()), b.size(), kCFAllocatorNull);
+    
+    int retval = CFStringCompare(sa, sb, kCFCompareLocalized);
+    
+    CFRelease(sa);
+    CFRelease(sb);
+    
+    return retval;
+}
+#else
+static inline int localeCompare(const UString& a, const UString& b)
+{
+    return compare(a, b);
+}
+#endif
+
 static JSValue *replace(ExecState *exec, const UString &source, JSValue *pattern, JSValue *replacement)
 {
   JSObject *replacementFunction = 0;
@@ -674,6 +706,8 @@
     free(destIfNeeded);
     break;
   }
+  case LocaleCompare:
+    return jsNumber(localeCompare(s, a0->toString(exec)));
 #ifndef KJS_PURE_ECMA
   case Big:
     result = jsString("<big>" + s + "</big>");
