Hello! There is something wrong with nested viewports in grid package (I have tested it in R-1.8.0, may be it is different in other versions). Here is an simple example of a feature which seems strange to me: x11() rec<-T push.viewport(viewport(xscale=c(-10,10),yscale=c(-10,10),gp=gpar(col="magenta")),recording=rec) #Parent viewport with scales -10:10 grid.text(x=0,y=0,label="test",default.units="native",vp=viewport(x=-3,y=-3,width=0,height=0,default.units="native",gp=gpar(col="red")))->j #Create a text label at position 0,0 in a nested viewport with coordinates -3,-3 relative to parent viewport grid.edit(j,vp=viewport(x=5,y=5,width=0,height=0,default.units="native",gp=gpar(col="green"))) #Drag the text label to different position pop.viewport(recording=rec) push.viewport(viewport(xscale=c(-100,100),yscale=c(-100,100)),recording=rec) #Create new parent viewport with scales -100:100 grid.edit(j,vp=viewport(x=5,y=5,width=0,height=0,default.units="native")) #I would expect that the position of text became closer to the center of device but this does not happen. So it looks like the text label remember its initial parent viewport. pop.viewport(recording=rec) So I can not reparent grob's viewports (although editing of grob's viewport works fine). It seems to me what pushing/popping viewports takes care of proper viewport's reparenting but it is not true. Changing recording parameter in push.viewport does not help (in the case rec<-FALSE text label does not show at all)