We develop an R-tree node restructuring algorithm that performs post-optimization of existing R-trees and improves current dynamic insertion algorithms. On realistic data and relative to state-of-the-art R-trees, our post optimization technique improves point query performance by 36% -- 43% on average (and up to a factor of 2 in some cases), while only incurring an optimization cost (measured in disk I/Os) equal to STR loading. When used to modify existing dynamic insertion algorithms, our technique results in trees that require between 25% and 45% fewer disk accesses on average (up to 70% in some cases), relative to R*-trees and Hilbert R-trees, respectively, at only an additional 10% insertion cost.