We present simple, fully dynamic and kinetic data structures, which are variants of a dynamic two-dimensional range tree, for maintaining the closest pair and all nearest neighbors for a set of n moving points in the plane; insertions and deletions of points are also allowed. If no insertions or deletions take place, the structure for the closest pair uses O(n log n) space, and processes O(n(2)beta(s+2)(n) log n) critical events, each in O(log(2) n) time. Here s is the maximum number of times where the distances between any two specific pairs of points can become equal, beta(s)(q) = lambda(s)(q)/q, and lambda(s)(q) is the maximum length of Davenport-Schinzel sequences of order s on q symbols. The dynamic version of the problem incurs a slight degradation in performance: If m >= n insertions and deletions are performed, the structure still uses O(n log n) space, and processes O(mn beta(s+2)(n) log(3) n) events, each in O(log(3) n) time. Our kinetic data structure for all nearest neighbors uses O(n log2 n) space, and processes O(n(2)beta(2)(s+2)(n) log(3) n) critical events. The expected time to process all events is O(n(2)beta(2)(s+2)(n) log(4) n), though processing a single event may take Theta(n) expected time in the worst case. If m >= n insertions and deletions are performed, then the expected number of events is O(mn beta(2)(s+2)(n) log(3) n) and processing them all takes O(mn beta(2)(s+2)(n) log(4) n). An insertion or deletion takes O(n) expected time.