refactored the edge class