CRDTs in Riak are different from normal KV operations because you don't have to fetch CRDTs to modify them. Instead, you tell Riak which operations should be performed on them, such as adding a field to a map as you mention. Each data type had its own set of operations. Counters can be either incremented or decremented, you can add or remove elements to/from a set, and so on.