abstract path manipulation