diff --git a/src/opendrive_lane.cpp b/src/opendrive_lane.cpp
index 802b9df51321eb10b0ba6874354c32a47fc97d87..d01bd8746f8a559c9e7d4ddda53ea706d459688d 100644
--- a/src/opendrive_lane.cpp
+++ b/src/opendrive_lane.cpp
@@ -45,7 +45,7 @@ void COpendriveLane::link_neightbour_lane(COpendriveLane *lane)
   if(lane!=NULL)
   {
     if(this->get_num_nodes()!=lane->get_num_nodes())
-      throw CException(_HERE_,"Impossible to liink lanes because they have different number of nodes");
+      throw CException(_HERE_,"Impossible to link lanes because they have different number of nodes");
     if(this->get_num_nodes()>0 && lane->get_num_nodes()>0)
     {
       if(this->id*lane->get_id()<0) // oposite directions
@@ -349,7 +349,16 @@ void COpendriveLane::update_start_node(node_up_ref_t &new_node_ref,lane_up_ref_t
   for(it=this->nodes.begin(),i=0;it!=this->nodes.end();i++)
   {
     if(i<start_node_index)
+    {
+      for(exist_it=new_node_ref.begin();exist_it!=new_node_ref.end();exist_it++)
+        if((*it)==exist_it->second)
+        {
+          delete *it;
+          new_node_ref.erase(exist_it);
+          break;
+        }
       it=this->nodes.erase(it);
+    }
     else
     {
       exists=false;
@@ -389,7 +398,16 @@ void COpendriveLane::update_end_node(node_up_ref_t &new_node_ref,lane_up_ref_t &
   for(it=this->nodes.begin(),i=0;it!=this->nodes.end();i++)
   {
     if(i>end_node_index)
+    {
+      for(exist_it=new_node_ref.begin();exist_it!=new_node_ref.end();exist_it++)
+        if((*it)==exist_it->second)
+        {
+          delete *it;
+          new_node_ref.erase(exist_it);
+          break;
+        }
       it=this->nodes.erase(it);
+    }
     else
     {
       exists=false;
diff --git a/src/opendrive_road.cpp b/src/opendrive_road.cpp
index 7fcf98c6fa8aa893aedd37c884a1504423a8c0d8..c1318f345527b781ff95813f6e25c8ef6bf69443 100644
--- a/src/opendrive_road.cpp
+++ b/src/opendrive_road.cpp
@@ -431,7 +431,6 @@ void COpendriveRoad::prune(std::vector<unsigned int> &path_nodes)
         (*lane_it)->segment->remove_lane(*lane_it);
         for(unsigned int i=0;i<(*lane_it)->nodes.size();i++)
           this->remove_node((*lane_it)->nodes[i]);
-        delete *lane_it;
         lane_it=this->lanes.erase(lane_it);
       }
       else
@@ -771,6 +770,7 @@ std::vector<unsigned int> COpendriveRoad::get_sub_road(std::vector<unsigned int>
     }
   }
   new_road.update_references(new_segment_ref,new_lane_ref,new_node_ref);
+  new_road.clean_references(new_segment_ref,new_lane_ref,new_node_ref);
   // add additional nodes not explicitly in the path
 /*
   for(unsigned int i=0;i<path_nodes.size();i++)
@@ -796,7 +796,6 @@ std::vector<unsigned int> COpendriveRoad::get_sub_road(std::vector<unsigned int>
 */
   // remove unconnected elements
   new_road.prune(new_path_nodes);
-  new_road.clean_references(new_segment_ref,new_lane_ref,new_node_ref);
   new_road.complete_open_lanes();
 
   return new_path_nodes;