support all operations correctly