finished most of basic usage