LookupField Discard new option

I’m trying to implement the following logic: there’s address lookupField If user enters new value, AddressEdit screen is opened and ONCOMMIT it appends latitute longitude and other stuff to the newly created value. However if user clicked cancel in the AddressEdit screen I want to return the lookupField to it’s initial state (before new value was entered)
I tried:

 @Override
        public void init(Map<String, Object> params) {
            super.init(params);

        addressList.setNewOptionAllowed(true);
        Options<Address> origOptions = addressList.getOptions();
        addressList.setNewOptionHandler(
                e -> {
                    Metadata metadata = AppBeans.get(Metadata.class);
                    WindowConfig wc = getWindowConfig();
                    WindowManager wm = getWindowManager();
                    Address address = metadata.create(Address.class);
                    Editor editor = wm.openEditor(wc.getWindowInfo("callbook$Address.edit"), address, WindowManager.OpenType.DIALOG,
                            ParamsMap.of("param", e));
                    editor.addCloseWithCommitListener(() -> {
                        addressesDs.setItem((Address) editor.getItem());
                        addressList.setValue(addressesDs.getItem());
                    });
                    addressList.clear();    //TODO recover previous value instead of placing null here
                    addressList.setOptions(origOptions);//  And remove "new" value from available options
                }
        );
    }

But I can’t. If only option is “AddressA” User enters “AddressB” and hits enter key and cancels AdressEdit screen - the lookupField becomes clear. First issue is that value “AddressA” is lost but it’s minor. Major issue1 is that if user enters “AddressB” again and hits enter - nothing happens! (it’s not considered new value anymore)
Second issue is if user enters “AddressC” and cancels AdressEdit the lookup field can’t be open anymore (drop-down is immediately hidden all the time) and the value remains “AddressB”.
Also cardDs gets new entity in itemsToUpdate I don’t want that in case user cancelled AddressEdit screen.

<window xmlns="http://schemas.haulmont.com/cuba/window.xsd"
        datasource="cardDs" ....  >
    <dsContext>
        <datasource id="cardDs"
                    class="com.dtc.callbook.entity.Card"
                    view="card-view">
        <collectionDatasource id="addressesDs"
                              class="com.dtc.callbook.entity.Address">
            <query>
                <![CDATA[select e from callbook$Address e]]>
            </query>
        </collectionDatasource>
      .....
    </dsContext>
....
    <fieldGroup id="fieldGroup"  datasource="cardDs" width="90%">
                                <column width="100%">
                                    <field property="address">
                                        <lookupField id="addressList"
                                                     datasource="cardDs"
                                                     optionsDatasource="addressesDs"
                                                     property="address"/>
                                    </field>
                                </column>
                            </fieldGroup>