Drag'n drop system. Might need some refactor, unsure if this is the best way to handle drag state, and placement of drag/drop handling.