When adding a datastream, it will take the ID of the existing datastream with the same outputName and sysID, whereas it should create a new one and intersect the validTime between the new and old ones. Here is a non-exhaustive list of intersection rules:
// (existing DS) begin, end | (new DS) begin, end
// +1 = +1 second
// -inf, +inf | -inf, +inf => -inf, now | now+1, +inf
// -inf, 10 | -inf, +inf => -inf, 10 | 10+1, +inf
// -inf, 10 | -inf, 12 => -inf, 10 | 10+1, +inf
// -inf, 10 | -inf, 9 => NOT POSSIBLE => exception
// 10, +inf | -inf, +inf => 10, now | now+1, +inf
// 10, +inf | 9, +inf => NOT POSSIBLE => exception
// 10, +inf | 11, +inf => 10, 11 | 11+1, +inf