 
         /**
          * Adds callback that will be called when user registers for notifications and push token is received.
+         *
+         * <p>There can only be one callback registered at a time, and it is automatically removed when
+         * the push token is received. You can remove it manually by passing in <code>null</code>.</p>
+         *
          * @param callback Function with the following signature:
          * <listing version="3.0">
          * function callback( oneSignalUserId:String, pushToken:String ):void {
          *    // pushToken may be null if there's an error (server side, connection error...)
          * };
          * </listing>
-         *
-         * @see #removeTokenReceivedCallback()
-         */
-        public static function addTokenReceivedCallback( callback:Function ):void {
-            if( !isSupported ) return;
-
-            if( callback === null ) throw new ArgumentError( "Parameter callback cannot be null." );
-
-            if( mTokenCallbacks.indexOf( callback ) < 0 ) {
-                mTokenCallbacks[mTokenCallbacks.length] = callback;
-            }
-        }
-
-        /**
-         * Removes callback that was added earlier using <code>OneSignal.addTokenReceivedCallback</code>
-         * @param callback Function to remove.
-         *
-         * @see #addTokenReceivedCallback()
-         */
-        public static function removeTokenReceivedCallback( callback:Function ):void {
-            if( !isSupported ) return;
-
-            if( callback === null ) throw new ArgumentError( "Parameter callback cannot be null." );
-
-            var index:int = mTokenCallbacks.indexOf( callback );
-            if( index >= 0 ) {
-                mTokenCallbacks.removeAt( index );
+         */
+        public static function idsAvailable( callback:Function ):void {
+            if( !isSupported || !initExtensionContext() ) return;
+
+            mIdsAvailableCallback = callback;
+            if( mIdsAvailableCallback !== null ) {
+                mContext.call( "idsAvailable" );
             }
         }
 

            if( !isSupported ) return;
            validateExtensionContext();

            mContext.removeEventListener( StatusEvent.STATUS, onStatus );

            mContext.dispose();

        private static const POST_NOTIFICATION_ERROR:String = "postNotificationError";

        /* Callbacks */
        private static var mIdsAvailableCallback:Function;
        private static var mNotificationCallbacks:Vector.<Function> = new <Function>[];
        private static var mCallbackMap:Dictionary;
        private static var mCallbackIdCounter:int;
