Valuechange Listener overwriting click listener

I’ve won the ‘honor’ of taking over a half finished Vaadin project which has lead to alot of searching on this forum, but now I’ve finally stumpled upon a problem that I can’t seem to find an answer for.

I have a panel which among other things contains a textfield with a valuechange listener on it, and a button with a ClickEvent listener on it.
The idea is for the valuechange listener to update a field whenever info is typed into the textfield, and this is working perfectly, my problem arises when someone clicks the button, if the info in the textfield has changed, clicking the button triggers the valuechange event, but not the click event. This means one has to click the button twice for it to be registered as a click, since the first time simply updates the ui based on the valueChange listener.
I can’t figure out where the mistake is, or if it is in fact working as intended and I should just not mix up these listeners in the same panel. I’ve included the code for the button and the textfield below


    public TextField getIdentification() {
        if (null == identification) {
            TextField tf = new TextField(section.m("oder_panel_identification"));
            tf.setDescription(section.m("oder_panel_identification_description"));
            identification = tf;
            identification.setWidth("40%");
            identification.setImmediate(true);
            identification.setRequired(true);
            identification.setInputPrompt(section.m("oder_panel_identification_prompt"));
            identification.addValidator(new StringLengthValidator(section.m("oder_panel_identification_error"), 5, 50, false));
            identification.addListener(new Property.ValueChangeListener() {
                private static final long serialVersionUID = 1L;

                public void valueChange(ValueChangeEvent event) {
                    if (logger.isDebugEnabled()) {
                        logger.debug("Identification valueChange() event : " + event.getProperty());
                    }
                    // Actual, but for this case irrelevant, actions go here
                }
            });
        }
        return identification;
    }
    
void addApproveOrderButton() {
        // Approve Extraction
        approveButton = new Button(section.m("button_approve_extraction"));
        approveButton.setEnabled(true);
        approveButton.addListener(new Button.ClickListener() {
            private static final long serialVersionUID = 1L;

            public void buttonClick(ClickEvent event) {
                if (logger.isDebugEnabled()) {
                    logger.debug("approveButton buttonClick()");
                }
                // Actual, but for this case irrelevant, actions go here
             }
        });       
    }

I’d highly appreciate any help on how to fix this, since double clicking the button is confusing for my users.