Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 9136) +++ trunk/src/buffer.c (revision 9137) @@ -111,7 +111,8 @@ Buffer->Data->parent.any = old_parent; Buffer->Data->parent_type = old_pt; - pcb_data_set_layer_parents(Buffer->Data); + if (pcb != NULL) + pcb_data_bind_board_layers(pcb, Buffer->Data); } } Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 9136) +++ trunk/src/data.c (revision 9137) @@ -346,6 +346,15 @@ data->Layer[n].parent = data; } +void pcb_data_bind_board_layers(pcb_board_t *pcb, pcb_data_t *data) +{ + pcb_layer_id_t n; + for(n = 0; n < PCB_MAX_LAYER; n++) { + pcb_layer_real2bound(&data->Layer[n], &pcb->Data->Layer[n]); + data->Layer[n].parent = data; + } +} + pcb_data_t *pcb_data_new(pcb_board_t *parent) { pcb_data_t *data; Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 9136) +++ trunk/src/data.h (revision 9137) @@ -127,6 +127,10 @@ /* Make sure all layers of data has their .parent field pointing to the data */ 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); + + /* Returns the top level pcb related to a data, or NULL if the data is floating (e.g. is a global buffer) */ pcb_board_t *pcb_data_get_top(pcb_data_t *data);