optimized drag 'n' drop