using supports_* idiom as suggested in pull request comments