diff --git a/V8Binding/V8Binding.derived.mk b/V8Binding/V8Binding.derived.mk
index edb4c5a..a988986 100644
--- a/V8Binding/V8Binding.derived.mk
+++ b/V8Binding/V8Binding.derived.mk
@@ -85,6 +85,7 @@
 	bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp \
 	bindings/v8/custom/V8ClientRectListCustom.cpp \
 	bindings/v8/custom/V8ClipboardCustom.cpp \
+	bindings/v8/custom/V8CoordinatesCustom.cpp \
 	bindings/v8/custom/V8CustomBinding.cpp \
 	bindings/v8/custom/V8CustomEventListener.cpp \
 	bindings/v8/custom/V8CustomPositionCallback.cpp \
diff --git a/WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp b/WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp
new file mode 100644
index 0000000..09522ba
--- /dev/null
+++ b/WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2009 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include "V8Coordinates.h"
+#include "V8Binding.h"
+#include "V8CustomBinding.h"
+#include "V8Proxy.h"
+
+#include "Coordinates.h"
+
+namespace WebCore {
+
+    ACCESSOR_GETTER(CoordinatesAltitude) {
+        INC_STATS("DOM.Coordinates.altitude._get");
+        v8::Handle<v8::Object> holder = info.Holder();
+        Coordinates* imp = V8DOMWrapper::convertToNativeObject<Coordinates>(V8ClassIndex::COORDINATES, holder);
+        if (!imp->canProvideAltitude())
+            return v8::Null();
+        return v8::Number::New(imp->altitude());
+    }
+
+    ACCESSOR_GETTER(CoordinatesAltitudeAccuracy) {
+        INC_STATS("DOM.Coordinates.altitudeAccuracy._get");
+        v8::Handle<v8::Object> holder = info.Holder();
+        Coordinates* imp = V8DOMWrapper::convertToNativeObject<Coordinates>(V8ClassIndex::COORDINATES, holder);
+        if (!imp->canProvideAltitudeAccuracy())
+            return v8::Null();
+        return v8::Number::New(imp->altitudeAccuracy());
+    }
+
+    ACCESSOR_GETTER(CoordinatesHeading) {
+        INC_STATS("DOM.Coordinates.heading._get");
+        v8::Handle<v8::Object> holder = info.Holder();
+        Coordinates* imp = V8DOMWrapper::convertToNativeObject<Coordinates>(V8ClassIndex::COORDINATES, holder);
+        if (!imp->canProvideHeading())
+            return v8::Null();
+        return v8::Number::New(imp->heading());
+    }
+
+    ACCESSOR_GETTER(CoordinatesSpeed) {
+        INC_STATS("DOM.Coordinates.speed._get");
+        v8::Handle<v8::Object> holder = info.Holder();
+        Coordinates* imp = V8DOMWrapper::convertToNativeObject<Coordinates>(V8ClassIndex::COORDINATES, holder);
+        if (!imp->canProvideSpeed())
+            return v8::Null();
+        return v8::Number::New(imp->speed());
+    }
+
+} // namespace WebCore
diff --git a/WebCore/bindings/v8/custom/V8CustomBinding.h b/WebCore/bindings/v8/custom/V8CustomBinding.h
index 60f0d82..22b4a94 100644
--- a/WebCore/bindings/v8/custom/V8CustomBinding.h
+++ b/WebCore/bindings/v8/custom/V8CustomBinding.h
@@ -523,6 +523,10 @@
 
         DECLARE_CALLBACK(GeolocationGetCurrentPosition);
         DECLARE_CALLBACK(GeolocationWatchPosition);
+        DECLARE_PROPERTY_ACCESSOR_GETTER(CoordinatesAltitude);
+        DECLARE_PROPERTY_ACCESSOR_GETTER(CoordinatesAltitudeAccuracy);
+        DECLARE_PROPERTY_ACCESSOR_GETTER(CoordinatesHeading);
+        DECLARE_PROPERTY_ACCESSOR_GETTER(CoordinatesSpeed);
 
 #undef DECLARE_INDEXED_ACCESS_CHECK
 #undef DECLARE_NAMED_ACCESS_CHECK
diff --git a/WebCore/page/Coordinates.idl b/WebCore/page/Coordinates.idl
index 2bdd5e9..f6c82b5 100644
--- a/WebCore/page/Coordinates.idl
+++ b/WebCore/page/Coordinates.idl
@@ -28,13 +28,11 @@
     interface Coordinates {
         readonly attribute double latitude;
         readonly attribute double longitude;
-        readonly attribute double accuracy;
-#if !defined(V8_BINDING)        
         readonly attribute [Custom] double altitude;
+        readonly attribute double accuracy;
         readonly attribute [Custom] double altitudeAccuracy;
         readonly attribute [Custom] double heading;
         readonly attribute [Custom] double speed;
-#endif
 
 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
         [DontEnum] DOMString toString();
