FIX Asynchronus Change Matrix

Imported from previous forum

In the order change matrices in FIX 4.1, the scenarios painted are vary synchronous.
There is no scenario for receiving two or more requests with no engine response.

eg.

(IN ) New Order ClOrdID(A)
(OUT) Pending New (A)
(IN ) ReplaceRequest ClOrdID(B),OrigClOrdID(A)
(OUT) Pending Cancel ClOrdID(B),OrigClOrdID(A)
(IN ) ReplaceRequest ClOrdID©,OrigClOrdID(B)
(OUT) Pending Cancel ClOrdID©,OrigClOrdID(B)
(IN ) ReplaceRequest ClOrdID(D),OrigClOrdID©
(OUT) Pending Cancel ClOrdID(D),OrigClOrdID©
(IN ) ReplaceRequest ClOrdID(E),OrigClOrdID(D)
(OUT) Pending Cancel ClOrdID(E),OrigClOrdID(D)
(IN ) StatusRequest ClOrdID(E),OrigClOrdID(D)

Question 1.
In this scenario the Fix Engine has not actually accepted any of the change requests, however
when receiving the Status Request am I correct in believing it should respond
with below even though it has not confirmed any of the orders? What ClOrdID should be accepted on the Status Request?

(OUT)
ExecTransType= "STATUS",
ExecType= "Pending Cancel",
OrdStatus= "Pending Cancel"
ClOrdID= E
OrigClOrdID = D

Question 2.
If the Fix Engine now accepted the New order A, it is supposed to send an execution report to the client
to reflect the change that occured.
I am not sure if this should be as follows?

(OUT)
ExecTransType= "NEW",
ExecType= New
OrdStatus= "Pending Cancel"
ClOrdID= A

Question 3.
If the Fix Engine now accepted the ReplaceRequest(B,A), is this what should be reported?

(OUT)
ExecTransType= "NEW",
ExecType= Replaced
OrdStatus= "Pending Cancel"
ClOrdID= B
OrigClOrdID = A

Question 4.
Any fills to report after the above would be based on ClOrdID (B) which the Engine has confirmed Is this what should be reported?

(OUT)
ExecTransType= "NEW",
ExecType= Partially Filled
OrdStatus= "Pending Cancel"
ClOrdID= B
OrigClOrdID = A

If the client asked for a status request at this point, I take it that the engine should still report as follows, however what are the valid ClOrdID’s that the client should supply in the status request message?

(IN) Status Request
ClOrdID=E (or B,C,D)

(OUT)
ExecTransType= "STATUS",
ExecType= "Pending Cancel",
OrdStatus= "Pending Cancel"
ClOrdID= E
OrigClOrdID = D

However if the Fix Engine now rejected ReplaceRequest(C,B) due to say the volume was being lowered to far
Does this means that all subsequent ReplaceRequest (D,C) (E,D) will also be rejected because the
OrigClOrdID will be invalid?
If the client sent a CancelRequest (E,D) also in this this chain, should this also be rejected?

Question 5.
If a client sends two messages back to back, one for a New order(A) followed by a Cancel for the same order(B,A) before the engine has responded. Is it valid for the engine to report Pending New(A), Pending Cancel(B,A), Cancelled(B).
If the Engine Reports that the New Order(A) was Rejected, does it still have to send a CancelReject for (B,A)?

Final Question
The 4.1 spec details the flow control as if it is synchronus, is this defined anywhere in the spec that the client must wait for confirmation before making changes to an order, and is it valid for an engine to reject ReplaceRequest or CancelRequest if it has not yet confirmed the order to the client?

Thanks,
John Agbai