abstract input family refactoring