added semvar, vastly improved api