let parse_package_stanza filter par =
  let p = {
      name = parse_s ~err:"(MISSING NAME)" parse_name "Package" par;
      version = parse_s ~err:"(MISSING VERSION)" parse_version "Version" par;
      architecture = parse_s ~err:"(MISSING ARCH)" parse_arch "Architecture" par;
      binary = []; (* parse_s ~opt:[] ~multi:true parse_binary "Binary" par; *)
      build_depends = 
        parse_s ~opt:[] ~multi:true parse_builddepsformula "Build-Depends" par; 
      build_depends_indep =
        parse_s ~opt:[] ~multi:true parse_builddepsformula "Build-Depends-Indep" par;
      build_conflicts = 
        parse_s ~opt:[] ~multi:true parse_builddepslist "Build-Conflicts" par;
      build_conflicts_indep = 
        parse_s ~opt:[] ~multi:true parse_builddepslist "Build-Conflicts-Indep" par 
  }
  in
  if Option.is_none filter then Some p
  else if (Option.get filter) p then Some(p) 
  else None