completed core functionality