initial commit, ripped classes from Jack, let the rewrite begin