}
       else if (_config->FindB("APT::Cmd::Upgradable") == true)
       {
-         if(P.CurrentVer() && state.Upgradable())
+         pkgPolicy *policy = CacheFile.GetPolicy();
+         if(P.CurrentVer() && 
+            state.Upgradable() && 
+            policy->GetCandidateVer(P) != P.CurrentVer())
          {
              pkgPolicy *policy = CacheFile.GetPolicy();
              output_set.insert(policy->GetCandidateVer(P));
 
       std::string CandidateVerStr = GetCandidateVersion(CacheFile, P);
       std::string InstalledVerStr = GetInstalledVersion(CacheFile, P);
       std::string StatusStr;
-      if(P.CurrentVer() == V && state.Upgradable() && state.CandidateVer != NULL)
+      if(P.CurrentVer() == V && 
+         state.Upgradable() &&
+         state.CandidateVer != NULL &&
+         policy->GetCandidateVer(P) != P.CurrentVer())
       {
          strprintf(StatusStr, _("[installed,upgradable to: %s]"),
                    CandidateVerStr.c_str());
 
--- /dev/null
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'i386'
+
+cat > rootdir/etc/apt/preferences <<EOF
+Package: *
+Pin: release testing
+Pin-Priority: 600
+
+Package: *
+Pin: release unstable
+Pin-Priority: 1
+EOF
+
+insertinstalledpackage 'foo' 'all' '1'
+insertpackage 'testing' 'foo' 'all' '1'
+insertpackage 'testing-updates' 'foo' 'all' '2'
+insertpackage 'unstable' 'foo' 'all' '3'
+
+insertinstalledpackage 'bar' 'all' '1'
+insertpackage 'testing' 'bar' 'all' '2'
+
+setupaptarchive
+
+testequal "Listing...
+bar/testing 2 all [upgradable from: 1]" apt list --upgradable
+
+testequal "Listing...
+bar/testing 2 all [upgradable from: 1]
+foo/testing,now 1 all [installed]" apt list