some implementations added