Still need to implement the version thing, but other than than I think I have an alright basis.