initial version completed