=== modified file 'apt-pkg/depcache.cc'
--- apt-pkg/depcache.cc	2010-05-28 12:10:00 +0000
+++ apt-pkg/depcache.cc	2010-05-28 17:04:53 +0000
@@ -1638,8 +1638,11 @@
    {
       if(!(PkgState[p->ID].Flags & Flag::Auto) ||
 	  (p->Flags & Flag::Essential) ||
-	  userFunc.InRootSet(p))
-          
+	  userFunc.InRootSet(p) ||
+	  // be nice even then a required package violates the policy (#583517)
+	  // and do the full mark process also for required packages
+	  (p.CurrentVer().end() != true &&
+	   p.CurrentVer()->Priority == pkgCache::State::Required))
       {
 	 // the package is installed (and set to keep)
 	 if(PkgState[p->ID].Keep() && !p.CurrentVer().end())

=== modified file 'debian/changelog'
--- debian/changelog	2010-05-28 12:10:00 +0000
+++ debian/changelog	2010-05-28 17:04:53 +0000
@@ -6,8 +6,11 @@
     - forward manual-installed bit on package disappearance
   * apt-pkg/deb/debsystem.cc:
     - add better config item for extended_states file
+  * apt-pkg/depcache.cc:
+    - do the autoremove mark process also for required packages to handle
+      these illegally depending on lower priority packages (Closes: #583517)
 
- -- David Kalnischkies <kalnischkies@gmail.com>  Thu, 27 May 2010 17:34:51 +0200
+ -- David Kalnischkies <kalnischkies@gmail.com>  Fri, 28 May 2010 19:03:30 +0200
 
 apt (0.7.26~exp5) experimental; urgency=low
 

