         if (oid <= 0) {
             target.requestFailed(oid, new ObjectAccessError("Invalid oid " + oid + "."));
         } else {
-            queueAction(oid, target, true);
+            doSubscribe(oid, target);
         }
     }
 
     // inherit documentation from the interface DObjectManager
     public function unsubscribeFromObject (oid :int, target :Subscriber) :void
     {
-        queueAction(oid, target, false);
-    }
-
-    protected function queueAction (
-            oid :int, target :Subscriber, subscribe :Boolean) :void
-    {
-        // queue up an action
-        _actions.push(new ObjectAction(oid, target, subscribe));
+        doUnsubscribe(oid, target);
     }
 
     // inherit documentation from the interface

        _flushInterval = new Timer(FLUSH_INTERVAL);
        _flushInterval.addEventListener(TimerEvent.TIMER, flushObjects);
        _flushInterval.start();

        client.getStage().addEventListener(
            Event.ENTER_FRAME, processNextAction);
    }

    // documentation inherited from interface DObjectManager

     */
    public function processMessage (msg :DownstreamMessage) :void
    {
        // do the proper thing depending on the object
        if (msg is EventNotification) {
            var evt :DEvent = (msg as EventNotification).getEvent();
//             log.info("Dispatch event: " + evt);
            dispatchEvent(evt);

        } else if (msg is BootstrapNotification) {
            _client.gotBootstrap((msg as BootstrapNotification).getData(), this);

        } else if (msg is ObjectResponse) {
            registerObjectAndNotify((msg as ObjectResponse).getObject());

        } else if (msg is UnsubscribeResponse) {
            var oid :int = (msg as UnsubscribeResponse).getOid();
            if (_dead.remove(oid) == null) {
                log.warning("Received unsub ACK from unknown object [oid=" + oid + "].");
            }

        } else if (msg is FailureResponse) {
            notifyFailure((msg as FailureResponse).getOid(), (msg as FailureResponse).getMessage());

        } else if (msg is PongResponse) {
            _client.gotPong(msg as PongResponse);
        }
    }

