Initial complete version