diff --git a/src/edge.c b/src/edge.c
index 3070e9eb..0bc83ad0 100644
--- a/src/edge.c
+++ b/src/edge.c
@@ -83,11 +83,6 @@ void free_edge(edge_t *e) {
 }
 
 void edge_add(edge_t *e) {
-	if (!splay_insert(edge_weight_tree, e))
-		logger(DEBUG_ALWAYS, LOG_ERR,
-					 "%s:%d: edge from: %s to: %s exists in edge_weight_tree",
-					 __FUNCTION__, __LINE__, e->from->name, e->to->name);
-
 	if (splay_insert(e->from->edge_tree, e)) {
 		e->reverse = lookup_edge(e->to, e->from);
 
@@ -98,6 +93,14 @@ void edge_add(edge_t *e) {
 			}
 			e->reverse->reverse = e;
 		}
+		if (!splay_insert(edge_weight_tree, e))
+			logger(DEBUG_ALWAYS, LOG_ERR,
+						 "%s:%d: edge from: %s to: %s exists in edge_weight_tree",
+						 __FUNCTION__, __LINE__, e->from->name, e->to->name);
+	} else {
+		logger(DEBUG_ALWAYS, LOG_ERR,
+					 "%s:%d: edge from: %s to: %s exists in from->edge_tree",
+					 __FUNCTION__, __LINE__, e->from->name, e->to->name);
 	}
 }