new algorithm to handle "improper" combinators
tests, closes #5