private VmManagementParametersBase createUpdateVmParameters() {
    // clear non updateable fields got from config
    getVm().setExportDate(null);
    getVm().setOvfVersion(null);

    VmManagementParametersBase updateVmParams = new VmManagementParametersBase(getVm());
    updateVmParams.setUpdateWatchdog(true);
    updateVmParams.setSoundDeviceEnabled(false);
    updateVmParams.setBalloonEnabled(false);
    updateVmParams.setVirtioScsiEnabled(false);
    updateVmParams.setClearPayload(true);

    for (VmDevice device : getVm().getManagedVmDeviceMap().values()) {
      switch (device.getType()) {
        case WATCHDOG:
          updateVmParams.setWatchdog(new VmWatchdog(device));
          break;
        case SOUND:
          updateVmParams.setSoundDeviceEnabled(true);
          break;
        case BALLOON:
          updateVmParams.setBalloonEnabled(true);
          break;
        case CONTROLLER:
          if (VmDeviceType.VIRTIOSCSI.getName().equals(device.getDevice())) {
            updateVmParams.setVirtioScsiEnabled(true);
          }
          break;
        case DISK:
          if (VmPayload.isPayload(device.getSpecParams())) {
            updateVmParams.setVmPayload(
                new VmPayload(VmDeviceType.getByName(device.getDevice()), device.getSpecParams()));
          }
          break;
        case CONSOLE:
          updateVmParams.setConsoleEnabled(true);
          break;
        default:
      }
    }

    // clear these fields as these are non updatable
    getVm().getManagedVmDeviceMap().clear();
    getVm().getVmUnamagedDeviceList().clear();

    return updateVmParams;
  }