@Override
    public void update() {
        super.update();

        Projectile projectile = null;
        ArrayList deadProjectiles = new ArrayList();

        try {
            for (String key : projectiles.keySet()) {
                projectile = (Projectile) projectiles.get(key);
                projectile.update();
                if (projectile.isDirty()) {
                    projectile.cleanUp();
                    deadProjectiles.add(key);
                }
            }

            if (deadProjectiles.size() > 0) {
                for (int i = 0; i < deadProjectiles.size(); i++) {
                    projectiles.remove((String) deadProjectiles.get(i));
                }
            }
        } catch (ConcurrentModificationException concEx) {
            //another thread was trying to modify projectiles while iterating
            //we'll continue and the new item can be grabbed on the next update
        }
    }