implement required type II