Fix extended atom match for =* operator.
diff --git a/bin/portageq b/bin/portageq
index 280fe94..d9abb0b 100755
--- a/bin/portageq
+++ b/bin/portageq
@@ -583,17 +583,15 @@
 			require_metadata = atom.slot or atom.repo
 			for cpv in vardb.cpv_all():
 
-				if not portage.dep.extended_cp_match(
-					atom.cp, portage.cpv_getkey(cpv)):
+				if not portage.match_from_list(atom, [cpv]):
 					continue
 
 				if require_metadata:
-					slot, repo = vardb.aux_get(cpv, ["SLOT", "repository"])
-
-					if atom.slot is not None and atom.slot != slot:
+					try:
+						cpv = vardb._pkg_str(cpv, atom.repo)
+					except (KeyError, portage.exception.InvalidData):
 						continue
-
-					if atom.repo is not None and atom.repo != repo:
+					if not portage.match_from_list(atom, [cpv]):
 						continue
 
 				results.append(cpv)
diff --git a/bin/quickpkg b/bin/quickpkg
index a6bd4d4..76259c5 100755
--- a/bin/quickpkg
+++ b/bin/quickpkg
@@ -21,7 +21,7 @@
 from portage import os
 from portage import xpak
 from portage.dbapi.dep_expand import dep_expand
-from portage.dep import Atom, extended_cp_match, use_reduce
+from portage.dep import Atom, use_reduce
 from portage.exception import (AmbiguousPackageName, InvalidAtom, InvalidData,
 	InvalidDependString, PackageSetNotFound, PermissionDenied)
 from portage.util import ConfigProtect, ensure_dirs, shlex_split
@@ -204,16 +204,15 @@
 			atoms.append(cpv_atom)
 			continue
 
-		if not extended_cp_match(atom.cp, cpv_atom.cp):
+		if not portage.match_from_list(atom, [cpv]):
 			continue
 
 		if require_metadata:
-			slot, repo = vardb.aux_get(cpv, ["SLOT", "repository"])
-
-			if atom.slot and atom.slot != slot:
+			try:
+				cpv = vardb._pkg_str(cpv, atom.repo)
+			except (KeyError, InvalidData):
 				continue
-
-			if atom.repo and atom.repo != repo:
+			if not portage.match_from_list(atom, [cpv]):
 				continue
 
 		atoms.append(cpv_atom)
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index af42828..9a023a8 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -34,9 +34,9 @@
 from portage.const import _ENABLE_DYN_LINK_MAP
 from portage.dbapi.dep_expand import dep_expand
 from portage.dbapi._expand_new_virt import expand_new_virt
-from portage.dep import Atom, extended_cp_match
+from portage.dep import Atom
 from portage.eclass_cache import hashed_path
-from portage.exception import InvalidAtom
+from portage.exception import InvalidAtom, InvalidData
 from portage.output import blue, bold, colorize, create_color_func, darkgreen, \
 	red, yellow
 good = create_color_func("GOOD")
@@ -2594,16 +2594,30 @@
 					level=logging.ERROR, noiselevel=-1)
 				return 1
 
-			for cp in vardb.cp_all():
-				if extended_cp_match(ext_atom.cp, cp):
-					atom = cp
+			for cpv in vardb.cpv_all():
+				if portage.match_from_list(ext_atom, [cpv]):
+					require_metadata = False
+					atom = portage.cpv_getkey(cpv)
+					if ext_atom.operator == '=*':
+						atom = "=" + atom + "-" + \
+							portage.versions.cpv_getversion(cpv)
 					if ext_atom.slot:
 						atom += ":" + ext_atom.slot
+						require_metadata = True
 					if ext_atom.repo:
 						atom += "::" + ext_atom.repo
+						require_metadata = True
 
-					if vardb.match(atom):
-						valid_atoms.append(Atom(atom, allow_repo=True))
+					atom = Atom(atom, allow_repo=True)
+					if require_metadata:
+						try:
+							cpv = vardb._pkg_str(cpv, ext_atom.repo)
+						except (KeyError, InvalidData):
+							continue
+						if not portage.match_from_list(atom, [cpv]):
+							continue
+
+					valid_atoms.append(atom)
 
 		else:
 			msg = []