@Override
  public Diff difference(Proto past) {
    final Difference delegate = super.difference(past);
    final ModuleRepr pastModule = (ModuleRepr)past;
    final int base = !getUsages().equals(pastModule.getUsages())? delegate.base() | Difference.USAGES : delegate.base();

    return new Diff(delegate) {
      @Override
      public Specifier<ModuleRequiresRepr, ModuleRequiresRepr.Diff> requires() {
        return Difference.make(pastModule.myRequires, myRequires);
      }

      @Override
      public Specifier<ModulePackageRepr, ModulePackageRepr.Diff> exports() {
        return Difference.make(pastModule.myExports, myExports);
      }

      @Override
      public boolean versionChanged() {
        return pastModule.getVersion() != myVersion;
      }

      @Override
      public int base() {
        return base;
      }
    };
  }
@Override
  public Diff difference(Proto past)