replaced template method pattern with strategies; collapsed exception hierarchy