public ControlPointGroup GroupAt(double time, bool addIfNotExisting = false) { var newGroup = new ControlPointGroup(time); int i = groups.BinarySearch(newGroup); if (i >= 0) { return(groups[i]); } if (addIfNotExisting) { newGroup.ItemAdded += groupItemAdded; newGroup.ItemRemoved += groupItemRemoved; groups.Insert(~i, newGroup); return(newGroup); } return(null); }