Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 9145) +++ trunk/src/buffer.c (revision 9146) @@ -112,7 +112,7 @@ Buffer->Data->parent.any = old_parent; Buffer->Data->parent_type = old_pt; if (pcb != NULL) - pcb_data_bind_board_layers(pcb, Buffer->Data); + pcb_data_bind_board_layers(pcb, Buffer->Data, 0); } } Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 9145) +++ trunk/src/data.c (revision 9146) @@ -348,11 +348,11 @@ data->Layer[n].parent = data; } -void pcb_data_bind_board_layers(pcb_board_t *pcb, pcb_data_t *data) +void pcb_data_bind_board_layers(pcb_board_t *pcb, pcb_data_t *data, int share_rtrees) { pcb_layer_id_t n; for(n = 0; n < PCB_MAX_LAYER; n++) { - pcb_layer_real2bound(&data->Layer[n], &pcb->Data->Layer[n]); + pcb_layer_real2bound(&data->Layer[n], &pcb->Data->Layer[n], share_rtrees); data->Layer[n].parent = data; } } Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 9145) +++ trunk/src/data.h (revision 9146) @@ -128,7 +128,7 @@ void pcb_data_set_layer_parents(pcb_data_t *data); /* Set up all data layers as bound layers to pcb's Data */ -void pcb_data_bind_board_layers(pcb_board_t *pcb, pcb_data_t *data); +void pcb_data_bind_board_layers(pcb_board_t *pcb, pcb_data_t *data, int share_rtrees); /* Returns the top level pcb related to a data, or NULL if the data is floating Index: trunk/src/layer.c =================================================================== --- trunk/src/layer.c (revision 9145) +++ trunk/src/layer.c (revision 9146) @@ -620,7 +620,7 @@ return NULL; } -void pcb_layer_real2bound(pcb_layer_t *dst, pcb_layer_t *src) +void pcb_layer_real2bound(pcb_layer_t *dst, pcb_layer_t *src, int share_rtrees) { dst->grp = src->grp; dst->comb = src->comb; @@ -627,10 +627,12 @@ if (PCB_LAYER_IS_REAL(src)) { dst->meta.bound.real = src; - dst->line_tree = src->line_tree; - dst->text_tree = src->text_tree; - dst->polygon_tree = src->polygon_tree; - dst->subc_tree = src->subc_tree; + if (share_rtrees) { + dst->line_tree = src->line_tree; + dst->text_tree = src->text_tree; + dst->polygon_tree = src->polygon_tree; + dst->subc_tree = src->subc_tree; + } } else dst->meta.bound.real = NULL; Index: trunk/src/layer.h =================================================================== --- trunk/src/layer.h (revision 9145) +++ trunk/src/layer.h (revision 9146) @@ -244,7 +244,7 @@ /* Set up dst so that it's a non-real layer bound to src */ -void pcb_layer_real2bound(pcb_layer_t *dst, pcb_layer_t *src); +void pcb_layer_real2bound(pcb_layer_t *dst, pcb_layer_t *src, int share_rtrees); /* list of virtual layers: these are generated by the draw code but do not