private void playerMove(Player player, Location location, Reason reason) {
        // Check if he left the zone he currently is in
        List<Zone> zones = assignedZones.get(player.getName());

        if(zones == null) {
            zones = new ArrayList<Zone>(3);
            assignedZones.put(player.getName(), zones);
        }

        // Remove old zones, if necessary
        if(zones.size() > 0) {
            Iterator<Zone> iter = zones.iterator();
            while(iter.hasNext()) {
                Zone zone = iter.next();
                // Player left the zone?
                if(!zone.contains(location)) {
                    // make sure that custom "remove" code doesn't crash us
                    try {
                        zone.remove(player, reason);
                    } catch(Exception e) {
                        e.printStackTrace();
                    }
                    iter.remove();
                }
            }
        }

        // Apply new zones, if necessary
        for(Zone zone : zoneMap.getZones(player.getWorld().getName(), location.getX(), location.getY(), location.getZ())) {
            if(!zones.contains(zone)) {
                // Player entered a new zone!
                // Make sure that custom "add" code doesn't crash us
                try {
                    zone.add(player, reason);
                } catch(Exception e) {
                    e.printStackTrace();
                }
                zones.add(zone);
            }
        }
    }