input interface and impl