gabe's first commit with some stuffs, mostly work with directed classes