What is the best approach to introduce a new object to replicate to a group after a previous object has been replicated? Imagine, peer A shared object A to the group using addhaveObjects(0, chunks(A)) and all peers successfully replicated that object. Next, peer B wants to share another object B to the same group. By just doing addhaveObjects(0, chunks(B)) this won't do anything as all lower indices (e.g. 0 - 10) have been "used" for the replication of object A already - at least that is what I expect to happen.

So is the best practice to create a new group for the new replication and notify all peers in the current group to join that group? Or should B just start at index chunks(A)+1 for the new object B, i.e. addhaveObjects(chunks(A)+, chunks(A) + 1 + chunks(B))?

Your last guess is the best, "Or should B just start at index chunks(A)+1", except that the object replication space needs not be contiguous so you may start each object at a round value, say objectIndex*1024.As a note, it may be hard for the "seed" to know when all data it sent has been replicated amongst all; also, some peers may join later. There's nothing wrong, however, with different peers seeding different pieces of content at the same time, just make sure everybody shares all the received chunks.