first argument is self
no more than 2 sets in sets[0:D - 1] is possible to be non-empty
Merge branch 'master' into testing