pass itself as the first argument