version 1.0, full function version