As described in RFC3921 and more detailed in RFC3921bis updating a roster item should work in the same procedure like adding a roster item. This means it should depend on the roster push from the server to ensure a synchronized roster. But the RosterGroup#addEntry and RosterGroup#removeEntry adding/removing the item after the successful result of the request IQ. Also the Roster#RosterPacketListener which handles the roster pushes have to add or remove the roster entry from the groups. This can lead to an incorrect state.