diff --git a/QuantConnect.InteractiveBrokersBrokerage/InteractiveBrokersBrokerage.cs b/QuantConnect.InteractiveBrokersBrokerage/InteractiveBrokersBrokerage.cs
index 2264dfc..46ca28d 100644
--- a/QuantConnect.InteractiveBrokersBrokerage/InteractiveBrokersBrokerage.cs
+++ b/QuantConnect.InteractiveBrokersBrokerage/InteractiveBrokersBrokerage.cs
@@ -1517,9 +1517,22 @@ private void Initialize(
/// The exchange to send the order to, defaults to "Smart" to use IB's smart routing
private void IBPlaceOrder(Order order, bool needsNewId, string exchange = null)
{
- if (!_groupOrderCacheManager.TryGetGroupCachedOrders(order, out var orders))
+ List orders;
+ if (needsNewId)
{
- return;
+ // During submission we need the original group orders to propagate the generated brokerage id to all legs.
+ if (!_groupOrderCacheManager.TryGetGroupCachedOrders(order, out orders))
+ {
+ return;
+ }
+ }
+ else
+ {
+ // During updates we only receive one leg request, so we fetch sibling legs directly from the order provider.
+ if (!order.TryGetGroupOrders(orderId => _orderProvider.GetOrderById(orderId), out orders))
+ {
+ throw new InvalidOperationException($"Could not retrieve all grouped orders for update request. GroupId: {order.GroupOrderManager?.Id}, OrderId: {order.Id}");
+ }
}
// MOO/MOC require directed option orders.