Generalize selection pushing logic

Fixes #137