Let G be a connected graph, and let V and V two n-element subsets of its vertex set V (G). Imagine that we place a chip at each element of V and we want to move them into the positions of V (V and V may have common elements). A move is defined as shifting a chip from v1 to v2 (v1, v2 V (G)) on a path formed by edges of G so that no intermediate vertices are occupied. We give upper and lower bounds on the number of moves that are necessary, and analyze the computational complexity of this problem under various assumptions: labeled versus unlabeled chips, arbitrary graphs versus the case when the graph is the rectangular (infinite) planar grid, etc. We prove hardness and inapproximability results for several variants of the problem. We also give a linear-time algorithm which performs an optimal (minimum) number of moves for the unlabeled version in a tree, and a constant-ratio approximation algorithm for the unlabeled version in a graph. The graph algorithm uses the tree algorithm as a...