- _children.push_back (child);
- child->set_parent (dynamic_pointer_cast<DKDMGroup> (shared_from_this ()));
+ if (previous) {
+ auto i = find (_children.begin(), _children.end(), previous);
+ if (i != _children.end()) {
+ ++i;
+ }
+ _children.insert (i, child);
+ } else {
+ _children.push_back (child);
+ }
+ child->set_parent (dynamic_pointer_cast<DKDMGroup>(shared_from_this()));