ID para sincronismo com firebase

Olá estou tendo uma dor de cabeça horrível pra implementar sincronismo no meu app.

Pra sincronizar o objeto categoria do meu app que tem os atributos NOME, COR e ICONE eu faço o seguinte:

Sempre que o usuário altera alguma coisa na categoria eu comparo a mesma antes e depois da edição, salvo em um Hashmap<Integer,String> as alterações e envio para o firebase. No outro dispositivo eu baixo esse registro, pego as alterações do Hashmap, encontro a categoria correspondente usando o NOME como chave, seto as alterações nessa categoria e a atualizo no DB do dispositivo (isso resumidamente é claro).

Tem funcionado perfeitamente! Abri 2 emuladores e fiquei editando a mesma categoria simultaneamente e sincronizando meu dispositivo físico ao mesmo tempo, as alterações são feitas na ordem e fica tudo certinho, o problema acontece quando algum dispositivo muda o NOME da categoria. No meu cenário (3 dispositivos) oque acontece é que quando no dispositivo 1 eu mudo o NOME da categoria, no dispositivo 2 eu mudo o ÍCONE e sincronizo o dispositivo 3, a primeira alteração muda o nome da categoria, (suponhamos que ela se chamasse de cat1 e agora se chama cat2) e a segunda, na hora de encontrar a categoria (que se chamava cat1 quando o ícone foi alterado) não consegue pois a primeira alteração mudou o nome dela pra cat2, então a alteração é descartada. preciso de sugestões de como solucionar esse problema. Pensei em criar uma id unica pra cada objeto CATEGORIA que seja igual e inalterável em todos os dispositivos pra sempre encontrar o objeto à atualizar, mas não faço ideia de como alcançar esse objetivo. Também aceito sugestões de modelo de sincronismo que funcione bem online e offline, Obrigado.