Override "sameAddress" option when updating cart
It is possible to override sameAddress

The trick to doing this is as follows:

Checkout Step 1: Set your shipping address and use sameAddress1

&lt;form method="POST"&gt;
    &lt;input type="hidden" name="action" value="commerce/cart/updateCart"&gt;
    &lt;input type="hidden" name="redirect" value="/checkout/shipping"&gt;
    &lt;input type="hidden" name="shippingAddressId" value="new"&gt;
    &lt;input type="hidden" name="sameAddress" value="1"&gt;

      shipping address fields here        

&lt;/form&gt;


Checkout Step 2: Set shipping method as normal

Checkout Step 3: Set the billing address, including the shipping address as hidden fields, set sameAddress to 0.

&lt;form method="POST" id="paymentMethod"&gt;
    &lt;input type="hidden" name="action" value="commerce/cart/updateCart"&gt;
    &lt;input type="hidden" name="redirect" value="/checkout/payment"&gt;

    &lt;!-- billing fields --&gt;
    &lt;input type="text" name="billingAddress[firstName]" value="{{ cart.billingAddress ? cart.billingAddress.firstName }}"&gt;
    &lt;input type="text" name="billingAddress[lastName]" value="{{ cart.billingAddress ? cart.billingAddress.lastName }}"&gt;

    etc.
    &lt;!-- tell Craft this is a new billing address --&gt;
    &lt;input type="hidden" name="billingAddressId" value="new"&gt;

    &lt;!-- hidden shipping address fields --&gt;
    &lt;input type="hidden" name="shippingAddress[firstName]" value="{{ cart.shippingAddress.firstName }}"&gt;
    &lt;input type="hidden" name="shippingAddress[lastName]" value="{{ cart.shippingAddress.lastName }}"&gt;

    etc.
&lt;/form&gt;