diff --git a/src/geometry/Building.cpp b/src/geometry/Building.cpp
index 1305cd44be0641ad36e0c4b959e3e0d56db78c2a..a3b5d42a9aa911569fe7471717277303445f214a 100644
--- a/src/geometry/Building.cpp
+++ b/src/geometry/Building.cpp
@@ -678,17 +678,22 @@ Room* Building::GetRoom(string caption) const
      exit(EXIT_FAILURE);
 }
 
-void Building::AddCrossing(Crossing* line)
+bool Building::AddCrossing(Crossing* line)
 {
-     if (_crossings.count(line->GetID()) != 0) {
-          char tmp[CLENGTH];
-          sprintf(tmp,
-                    "ERROR: Duplicate index for crossing found [%d] in Routing::AddCrossing()",
-                    line->GetID());
-          Log->Write(tmp);
-          exit(EXIT_FAILURE);
-     }
-     _crossings[line->GetID()] = line;
+         int IDRoom = line->GetRoom1()->GetID();
+         int IDLine = line->GetID();
+         int IDCrossing = 1000 * IDRoom + IDLine;
+         if (_crossings.count(IDCrossing) != 0)
+         {
+                 char tmp[CLENGTH];
+                 sprintf(tmp,
+                         "ERROR: Duplicate index for crossing found [%d] in Routing::AddCrossing()",
+                         IDCrossing);
+                 Log->Write(tmp);
+                 exit(EXIT_FAILURE);
+         }
+     _crossings[IDCrossing] = line;
+     return true;
 }
 
 void Building::AddTransition(Transition* line)