functions – TimeSeriesShift seems broken — is there a stable workaround?

Issue 1: Certain dates shift into the same date, leading to duplicated keys, rendering the time series unusable:

TimeSeriesShift[{{{2012, 5, 31}, x}, {{2012, 6, 1}, y}, {{2012, 6, 3}, z}}, {1, "Month"}] // Normal

Out: 
{{DateObject[{2012, 7, 1, 0, 0, 0.}, "Instant", "Gregorian", 2.], x}, 
 {DateObject[{2012, 7, 1, 0, 0, 0.}, "Instant", "Gregorian", 2.], y}, 
 {DateObject[{2012, 7, 3, 0, 0, 0.}, "Instant", "Gregorian", 2.], z}}

Issue 2: It depends on the date that follows:

TimeSeriesShift[{{{2012, 5, 31}, x}, {{2012, 6, 1}, y}, {{2012, 6, 2}, z}}, {1, "Month"}] // Normal

Out:
{{DateObject[{2012, 7, 1, 0, 0, 0.}, "Instant", "Gregorian", 2.], x}, 
 {DateObject[{2012, 7, 2, 0, 0, 0.}, "Instant", "Gregorian", 2.], y},
 {DateObject[{2012, 7, 3, 0, 0, 0.}, "Instant", "Gregorian", 2.], z}}

This is driving me nuts. Is this issue only related to “Month” or any units? Is there a stable workaround?