more flexible interface