private static function _calculateChanges()
    {
        $current = self::$_currentEnvironmentData;
        $newData = self::$_runtimeClient->getRoleEnvironmentData();

        $changes = self::_calculateConfigurationChanges($current, $newData);

        $currentRoles = $current->getRoles();
        $newRoles = $newData->getRoles();
        $changedRoleSet = [];

        foreach ($currentRoles as $roleName => $role) {
            if (array_key_exists($roleName, $newRoles)) {
                $currentRole = $currentRoles[$roleName];
                $newRole = $newRoles[$roleName];

                $currentRoleInstances = $currentRole->getInstances();
                $newRoleInstances = $newRole->getInstances();

                $changedRoleSet = array_merge(
                    $changedRoleSet,
                    self::_calculateNewRoleInstanceChanges(
                        $role,
                        $currentRoleInstances,
                        $newRoleInstances
                    )
                );
            } else {
                $changedRoleSet[] = $role;
            }
        }

        foreach ($newRoles as $roleName => $role) {
            if (array_key_exists($roleName, $currentRoles)) {
                $currentRole = $currentRoles[$roleName];
                $newRole = $newRoles[$roleName];

                $currentRoleInstances = $currentRole->getInstances();
                $newRoleInstances = $newRole->getInstances();

                $changedRoleSet = array_merge(
                    $changedRoleSet,
                    self::_calculateCurrentRoleInstanceChanges(
                        $role,
                        $currentRoleInstances,
                        $newRoleInstances
                    )
                );
            } else {
                $changedRoleSet[] = $role;
            }
        }

        foreach ($changedRoleSet as $role) {
            $changes[] = new RoleEnvironmentTopologyChange($role);
        }

        return $changes;
    }