implement 2.2 (probably incorrectly)