the next big update!

the intersection logic is implemented using list and a iterator instead
of the vector and whatever :D