diff --git a/mmodules/core_platform_api/api/stable_platform/current.txt b/mmodules/core_platform_api/api/stable_platform/current.txt
index fc95587..fe27d68 100644
--- a/mmodules/core_platform_api/api/stable_platform/current.txt
+++ b/mmodules/core_platform_api/api/stable_platform/current.txt
@@ -393,7 +393,9 @@
     method public boolean getBoolean(Object, long);
     method public byte getByte(Object, long);
     method public byte getByte(long);
+    method public double getDouble(Object, long);
     method public double getDouble(long);
+    method public float getFloat(Object, long);
     method public float getFloat(long);
     method public int getInt(Object, long);
     method public int getInt(long);
@@ -405,7 +407,9 @@
     method public void putBoolean(Object, long, boolean);
     method public void putByte(Object, long, byte);
     method public void putByte(long, byte);
+    method public void putDouble(Object, long, double);
     method public void putDouble(long, double);
+    method public void putFloat(Object, long, float);
     method public void putFloat(long, float);
     method public void putInt(Object, long, int);
     method public void putInt(long, int);
diff --git a/ojluni/annotations/mmodule/sun/misc/Unsafe.annotated.java b/ojluni/annotations/mmodule/sun/misc/Unsafe.annotated.java
index a6711e0..9407d1a 100644
--- a/ojluni/annotations/mmodule/sun/misc/Unsafe.annotated.java
+++ b/ojluni/annotations/mmodule/sun/misc/Unsafe.annotated.java
@@ -27,95 +27,103 @@
 
 // sun.misc.Unsafe is part of the Core Platform API as platform uses protobuf and protobuf uses
 // this API for fast structure updates from native code (b/144502743).
-@libcore.api.CorePlatformApi
+@libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
 @libcore.api.Hide
 @SuppressWarnings({"unchecked", "deprecation", "all"})
 public final class Unsafe {
 
-    private Unsafe() {
-        throw new RuntimeException("Stub!");
-    }
-
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public static sun.misc.Unsafe getUnsafe() {
         throw new RuntimeException("Stub!");
     }
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public int arrayBaseOffset(Class clazz) {
         throw new RuntimeException("Stub!");
     }
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public int arrayIndexScale(Class clazz) {
         throw new RuntimeException("Stub!");
     }
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native void copyMemory(long srcAddr, long destAddr, long bytes);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native boolean getBoolean(Object obj, long offset);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native byte getByte(long address);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native byte getByte(Object obj, long offset);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native double getDouble(Object obj, long offset);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
+    public native double getDouble(long address);
+
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native float getFloat(Object obj, long offset);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
+    public native float getFloat(long address);
+
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native int getInt(long address);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native int getInt(Object obj, long offset);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native long getLong(long address);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native long getLong(Object obj, long offset);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native Object getObject(Object obj, long offset);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public long objectFieldOffset(java.lang.reflect.Field field) {
         throw new RuntimeException("Stub!");
     }
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native void putBoolean(Object obj, long offset, boolean newValue);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native void putByte(long address, byte newValue);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native void putByte(Object obj, long offset, byte newValue);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native void putDouble(Object obj, long offset, double newValue);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
+    public native void putDouble(long address, double newValue);
+
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native void putFloat(Object obj, long offset, float newValue);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
+    public native void putFloat(long address, float newValue);
+
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native void putInt(long address, int newValue);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native void putInt(Object obj, long offset, int newValue);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native void putLong(long address, long newValue);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native void putLong(Object obj, long offset, long newValue);
 
-    @libcore.api.CorePlatformApi
+    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public native void putObject(Object obj, long offset, Object newValue);
 }
diff --git a/ojluni/src/main/java/sun/misc/Unsafe.java b/ojluni/src/main/java/sun/misc/Unsafe.java
index 5c6a930..e538b73 100644
--- a/ojluni/src/main/java/sun/misc/Unsafe.java
+++ b/ojluni/src/main/java/sun/misc/Unsafe.java
@@ -39,8 +39,6 @@
  * @author John R. Rose
  * @see #getUnsafe
  */
-// Android-added: stable CorePlatformAPI
-@libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
 public final class Unsafe {
     /** Traditional dalvik name. */
     private static final Unsafe THE_ONE = new Unsafe();
@@ -57,8 +55,6 @@
      * Gets the unique instance of this class. This is only allowed in
      * very limited situations.
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public static Unsafe getUnsafe() {
         Class<?> caller = Reflection.getCallerClass();
         /*
@@ -81,8 +77,6 @@
      * instance field
      * @return the offset to the field
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public long objectFieldOffset(Field field) {
         if (Modifier.isStatic(field.getModifiers())) {
             throw new IllegalArgumentException("valid for instance fields only");
@@ -97,8 +91,6 @@
      * @param clazz non-{@code null}; class in question; must be an array class
      * @return the offset to the initial element
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public int arrayBaseOffset(Class clazz) {
         Class<?> component = clazz.getComponentType();
         if (component == null) {
@@ -113,8 +105,6 @@
      * @param clazz non-{@code null}; class in question; must be an array class
      * @return &gt; 0; the size of each element of the array
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     public int arrayIndexScale(Class clazz) {
       Class<?> component = clazz.getComponentType();
       if (component == null) {
@@ -250,8 +240,6 @@
      * @param offset offset to the field within {@code obj}
      * @return the retrieved value
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native int getInt(Object obj, long offset);
 
@@ -262,8 +250,6 @@
      * @param offset offset to the field within {@code obj}
      * @param newValue the value to store
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native void putInt(Object obj, long offset, int newValue);
 
@@ -284,8 +270,6 @@
      * @param offset offset to the field within {@code obj}
      * @return the retrieved value
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native long getLong(Object obj, long offset);
 
@@ -296,8 +280,6 @@
      * @param offset offset to the field within {@code obj}
      * @param newValue the value to store
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native void putLong(Object obj, long offset, long newValue);
 
@@ -318,8 +300,6 @@
      * @param offset offset to the field within {@code obj}
      * @return the retrieved value
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native Object getObject(Object obj, long offset);
 
@@ -330,8 +310,6 @@
      * @param offset offset to the field within {@code obj}
      * @param newValue the value to store
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native void putObject(Object obj, long offset, Object newValue);
 
@@ -353,8 +331,6 @@
      * @param offset offset to the field within {@code obj}
      * @return the retrieved value
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native boolean getBoolean(Object obj, long offset);
 
@@ -365,8 +341,6 @@
      * @param offset offset to the field within {@code obj}
      * @param newValue the value to store
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native void putBoolean(Object obj, long offset, boolean newValue);
 
@@ -377,8 +351,6 @@
      * @param offset offset to the field within {@code obj}
      * @return the retrieved value
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native byte getByte(Object obj, long offset);
 
@@ -389,8 +361,6 @@
      * @param offset offset to the field within {@code obj}
      * @param newValue the value to store
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native void putByte(Object obj, long offset, byte newValue);
 
@@ -557,8 +527,6 @@
      * @param address address in memory
      * @return {@code byte} value
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native byte getByte(long address);
 
@@ -568,8 +536,6 @@
      * @param address address in memory where to store the value
      * @param newValue the value to store
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native void putByte(long address, byte x);
 
@@ -615,8 +581,6 @@
      * @param address address in memory
      * @return {@code int} value
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native int getInt(long address);
 
@@ -626,8 +590,6 @@
      * @param address address in memory where to store the value
      * @param newValue the value to store
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native void putInt(long address, int x);
 
@@ -638,8 +600,6 @@
      * @param address address in memory
      * @return {@code long} value
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native long getLong(long address);
 
@@ -649,8 +609,6 @@
      * @param address address in memory where to store the value
      * @param newValue the value to store
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native void putLong(long address, long x);
 
@@ -660,8 +618,6 @@
      * @param address address in memory
      * @return {@code long} value
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native float getFloat(long address);
 
@@ -671,8 +627,6 @@
      * @param address address in memory where to store the value
      * @param newValue the value to store
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native void putFloat(long address, float x);
 
@@ -682,8 +636,6 @@
      * @param address address in memory
      * @return {@code double} value
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native double getDouble(long address);
 
@@ -693,8 +645,6 @@
      * @param address address in memory where to store the value
      * @param newValue the value to store
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native void putDouble(long address, double x);
 
@@ -730,8 +680,6 @@
      * @param dstAddr address of the destination memory to copy to
      * @param bytes number of bytes to copy
      */
-    // Android-added: stable CorePlatformAPI
-    @libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
     @FastNative
     public native void copyMemory(long srcAddr, long dstAddr, long bytes);
 
