diff -Nru synaptic-0.75.12/common/rpackage.cc synaptic-0.75.13/common/rpackage.cc
--- synaptic-0.75.12/common/rpackage.cc	2012-04-03 10:41:54.000000000 +0300
+++ synaptic-0.75.13/common/rpackage.cc	2012-07-12 22:13:41.000000000 +0300
@@ -973,9 +973,11 @@
    } else {
        string pkgfilename = findTagFromPkgRecord("Filename");
        pkgfilename = pkgfilename.substr(0, pkgfilename.find_last_of('.')) + ".changelog";
-       snprintf(uri,512,"http://%s/%s",
-               getCandidateOriginSiteUrl().c_str(),
-               pkgfilename.c_str());
+       vector<string> origin_urls = getCandidateOriginSiteUrls();
+       if (origin_urls.size() > 0) 
+          snprintf(uri,512,"http://%s/%s",
+                   origin_urls[0].c_str(),
+                   pkgfilename.c_str());
    }
    return string(uri);
 }
@@ -1024,26 +1026,35 @@
    return "";
 }
 
-string RPackage::getCandidateOriginSuite()
+vector<string> RPackage::getCandidateOriginSuites()
 {
+   vector<string> res;
    pkgCache::VerIterator Ver = (*_depcache)[*_package].CandidateVerIter(*_depcache);
    if(Ver.end())
-      return "";
+      return res;
    pkgCache::VerFileIterator VF = Ver.FileList();
-   if(!VF.end() && VF.File() && VF.File().Archive())
-      return VF.File().Archive();
-   return "";
+   for ( ; !VF.end(); VF++)
+   {
+      if(VF.File() && VF.File().Archive())
+         res.push_back(string(VF.File().Archive()));
+   }
+
+   return res;
 }
 
-string RPackage::getCandidateOriginSiteUrl()
+vector<string> RPackage::getCandidateOriginSiteUrls()
 {
+   vector<string> res;
    pkgCache::VerIterator Ver = (*_depcache)[*_package].CandidateVerIter(*_depcache);
    if(Ver.end())
-      return "";
+      return res;
    pkgCache::VerFileIterator VF = Ver.FileList();
-   if(!VF.end() && VF.File() && VF.File().Site())
-      return VF.File().Site();
-   return "";
+   for ( ; !VF.end(); VF++)
+   {
+      if(VF.File() && VF.File().Site())
+         res.push_back(string(VF.File().Site()));
+   }
+   return res;
 }
 
 
diff -Nru synaptic-0.75.12/common/rpackagefilter.cc synaptic-0.75.13/common/rpackagefilter.cc
--- synaptic-0.75.12/common/rpackagefilter.cc	2012-01-30 13:24:22.000000000 +0200
+++ synaptic-0.75.13/common/rpackagefilter.cc	2012-07-12 22:13:41.000000000 +0300
@@ -292,16 +292,20 @@
 bool RPatternPackageFilter::filterOrigin(Pattern pat, RPackage *pkg)
 {
    bool found = false;
-   string origin;
-   origin = pkg->getCandidateOriginSiteUrl();
+   vector<string>origins = pkg->getCandidateOriginSiteUrls();
 
    if (pat.regexps.size() == 0) {
       return true;
    }
    
-   if(regexec(pat.regexps[0],origin.c_str(), 0, NULL, 0) == 0) {
-      found = true;
-   } 
+   for (vector<string>::iterator it = origins.begin();
+        it != origins.end();
+        ++it)
+   {
+      if(regexec(pat.regexps[0],(*it).c_str(), 0, NULL, 0) == 0) {
+         found = true;
+      }
+   }
 
    return found;
 }
@@ -330,6 +334,8 @@
    bool globalfound = and_mode;
    bool useregexp = _config->FindB("Synaptic::UseRegexp", false);
 
+   bool debug = _config->FindB("Debug::Synaptic::Filters", "false");
+
    if (_patterns.size() == 0)
       return true;
 
@@ -381,6 +387,10 @@
 	 cerr << "unknown pattern package filter (shouldn't happen) " << endl;
       }
 
+      if (found && debug)
+         clog << "RPatternPackageFilter::filter match for "
+              << pkg->name() << endl;
+
       // each filter is applied in AND fasion
       // that means a include depends "mono" and include name "sharp"
       // results in all packages that depends on "mono" AND have sharp in name
diff -Nru synaptic-0.75.12/common/rpackage.h synaptic-0.75.13/common/rpackage.h
--- synaptic-0.75.12/common/rpackage.h	2012-02-06 20:15:19.000000000 +0200
+++ synaptic-0.75.13/common/rpackage.h	2012-07-12 22:13:41.000000000 +0300
@@ -165,10 +165,10 @@
    // get all available versions (version, release)
    vector<pair<string, string> > getAvailableVersions();
 
-   // get origin url of the package 
-   string getCandidateOriginSiteUrl();
+   // get origins url of the package (e.g. http://security.ubuntu.com)
+   vector<string> getCandidateOriginSiteUrls();
    // get origin "archive" release header (e.g. karmic, karmic-updates)
-   string getCandidateOriginSuite();
+   vector<string> getCandidateOriginSuites();
    // get origin "origin" release header (e.g. Ubuntu, 
    string getCandidateOriginStr();
 
diff -Nru synaptic-0.75.12/common/rpackageview.cc synaptic-0.75.13/common/rpackageview.cc
--- synaptic-0.75.12/common/rpackageview.cc	2012-04-03 10:41:54.000000000 +0300
+++ synaptic-0.75.13/common/rpackageview.cc	2012-07-12 22:13:41.000000000 +0300
@@ -572,57 +572,77 @@
 {
    string subview;
    string component =  package->component();
-   string origin_url = package->getCandidateOriginSiteUrl();
-   string suite  = package->getCandidateOriginSuite();
+   vector<string> origin_urls = package->getCandidateOriginSiteUrls();
+   vector<string> suites  = package->getCandidateOriginSuites();
    string origin_str  = package->getCandidateOriginStr();
 
-   // local origins are all put under local (no matter what component, section)
-   if(origin_url == "") {
-      origin_url = _("Local");
-      _view[origin_url].push_back(package);
-      return;
-   }
-
-   // PPAs are special too
-   if(origin_str.find("LP-PPA-") != string::npos) {
-     _view[origin_str+"/"+suite].push_back(package);
-     return;
-   }
-
-   if(component == "")
-      component = _("Unknown");
-   if(suite == "now")
-      suite = "";
-
-   // normal package
-   subview = suite+"/"+component+" ("+origin_url+")";
-   _view[subview].push_back(package);
-
-   // see if we have versions that are higher than the candidate
-   // (e.g. experimental/backports)
-   for (pkgCache::VerIterator Ver = package->package()->VersionList();
-        Ver.end() == false; Ver++)
+   for (vector<string>::iterator it = origin_urls.begin();
+        it != origin_urls.end();
+        it++)
    {
-      pkgCache::VerFileIterator VF = Ver.FileList();
-      if ( (VF.end() == true) || (VF.File() == NULL) || 
-           (VF.File().Archive() == NULL) || (VF.File().Site() == NULL) )
-         continue;
-      // ignore versions that are lower or equal than the candidate
-      if (_system->VS->CmpVersion(Ver.VerStr(), 
-                                  package->availableVersion()) <= 0)
-         continue;
-      // ignore "now"
-      if(strcmp(VF.File().Archive(), "now") == 0)
+      string origin_url = *it;
+
+      // local origins are all put under local if not downloadable and
+      // are ignored otherwise because they are available via some
+      // other origin_url
+      if (origin_url == "")
+      { 
+         if (package->getFlags() & RPackage::FNotInstallable)
+         {
+            origin_url = _("Local");
+            _view[origin_url].push_back(package);
+         }
          continue;
-      //std::cerr << "version.second: " << version.second 
-      //          << " origin_str: " << suite << std::endl;
-      string prefix = _("Not automatic: ");
-      string suite = VF.File().Archive();
-      string origin_url = VF.File().Site();
-      string subview = prefix + suite + "(" + origin_url + ")";
-      _view[subview].push_back(package);
+      }
+
+      for (vector<string>::const_iterator it2 = suites.begin();
+           it2 != suites.end();
+           it2++)
+      {
+         string suite = *it2;
+         // PPAs are special too
+         if(origin_str.find("LP-PPA-") != string::npos) {
+            _view[origin_str+"/"+suite].push_back(package);
+            continue;
+         }
+
+         if(component == "")
+            component = _("Unknown");
+
+         if(suite == "now")
+            suite = _("Local");
+
+         // normal package
+         subview = suite+"/"+component+" ("+origin_url+")";
+         _view[subview].push_back(package);
+      }
+      
+      // see if we have versions that are higher than the candidate
+      // (e.g. experimental/backports)
+      for (pkgCache::VerIterator Ver = package->package()->VersionList();
+           Ver.end() == false; Ver++)
+      {
+         pkgCache::VerFileIterator VF = Ver.FileList();
+         if ( (VF.end() == true) || (VF.File() == NULL) || 
+              (VF.File().Archive() == NULL) || (VF.File().Site() == NULL) )
+            continue;
+         // ignore versions that are lower or equal than the candidate
+         if (_system->VS->CmpVersion(Ver.VerStr(), 
+                                     package->availableVersion()) <= 0)
+            continue;
+         // ignore "now"
+         if(strcmp(VF.File().Archive(), "now") == 0)
+            continue;
+         //std::cerr << "version.second: " << version.second 
+         //          << " origin_str: " << suite << std::endl;
+         string prefix = _("Not automatic: ");
+         string suite = VF.File().Archive();
+         string origin_url = VF.File().Site();
+         string subview = prefix + suite + "(" + origin_url + ")";
+         _view[subview].push_back(package);
+      }
    }
- };
+}
 
 
 void RPackageViewArchitecture::addPackage(RPackage *package)
diff -Nru synaptic-0.75.12/configure.in synaptic-0.75.13/configure.in
--- synaptic-0.75.12/configure.in	2012-06-11 18:49:19.000000000 +0300
+++ synaptic-0.75.13/configure.in	2012-07-12 22:14:35.000000000 +0300
@@ -1,7 +1,7 @@
 dnl Process this file with autoconf to produce a configure script.
 AC_INIT(configure.in)
 
-AM_INIT_AUTOMAKE(synaptic, 0.75.12)
+AM_INIT_AUTOMAKE(synaptic, 0.75.13)
 AM_CONFIG_HEADER(config.h)
 AM_MAINTAINER_MODE
 
diff -Nru synaptic-0.75.12/debian/changelog synaptic-0.75.13/debian/changelog
--- synaptic-0.75.12/debian/changelog	2012-06-11 18:49:16.000000000 +0300
+++ synaptic-0.75.13/debian/changelog	2012-07-12 22:14:24.000000000 +0300
@@ -1,3 +1,14 @@
+synaptic (0.75.13) unstable; urgency=low
+
+  * debian/synaptic.menu:
+    - use x-terminal-emulator -e synaptic-pkexec to support systems
+      that do not have a GUI policykit agent running (closes: #678847)
+  * include all origins in the origin filter not just the first one
+  * show all "archives" in the origins view even if they are "shadowed"
+    by another one
+
+ -- Michael Vogt <mvo@debian.org>  Thu, 12 Jul 2012 21:14:23 +0200
+
 synaptic (0.75.12) unstable; urgency=low
 
   * updated Telugu translation, thanks to  Praveen Illa
@@ -16,7 +27,7 @@
     - updated russian translation, thanks to Sergey Alyoshin
       (closes: #675859)
 
- -- Michael Vogt <mvo@debian.org>  Mon, 11 Jun 2012 17:49:11 +0200
+ -- Michael Vogt <mvo@debian.org>  Mon, 11 Jun 2012 17:49:09 +0200
 
 synaptic (0.75.11) unstable; urgency=low
 
diff -Nru synaptic-0.75.12/debian/synaptic.menu synaptic-0.75.13/debian/synaptic.menu
--- synaptic-0.75.12/debian/synaptic.menu	2012-06-11 18:31:11.000000000 +0300
+++ synaptic-0.75.13/debian/synaptic.menu	2012-07-12 22:13:41.000000000 +0300
@@ -2,4 +2,4 @@
   section="Applications/System/Package Management" \
   title="Synaptic Package Manager" \
   icon="/usr/share/synaptic/pixmaps/synaptic_32x32.xpm"\
-  command="synaptic-pkexec"
+  command="x-terminal-emulator -e synaptic-pkexec"
