Add the ack capability and refactor some stuff