+ finish implementation