private PrimaryVersionSpec resolvePagedUpdateVersionSpec(
      ProjectHistory projectHistory, PagedUpdateVersionSpec baseVersion) {

    int changes = 0;
    PrimaryVersionSpec resolvedSpec = baseVersion.getBaseVersionSpec();
    int maxChanges = baseVersion.getMaxChanges();

    int i = resolvedSpec.getIdentifier();

    AbstractChangePackage cp = projectHistory.getVersions().get(i).getChanges();

    if (i == projectHistory.getVersions().size() - 1) {
      return projectHistory.getVersions().get(i).getPrimarySpec();
    }

    do {
      cp = projectHistory.getVersions().get(++i).getChanges();
    } while (cp == null && i < projectHistory.getVersions().size());

    // pull at least one change package
    if (cp.leafSize() > maxChanges) {
      maxChanges = cp.leafSize();
    }

    while (changes < maxChanges && i < projectHistory.getVersions().size()) {
      resolvedSpec = projectHistory.getVersions().get(i).getPrimarySpec();
      final Version version = projectHistory.getVersions().get(i);
      final AbstractChangePackage changePackage = version.getChanges();

      if (changePackage != null) {
        final int size = changePackage.leafSize();
        if (changes + size >= maxChanges) {
          resolvedSpec = projectHistory.getVersions().get(i).getPrimarySpec();
          break;
        }
        changes += size;
      }
      i += 1;
    }

    return resolvedSpec;
  }