 						continue if keysSeen[key]
 						keysSeen[key] = true
 						
-						watchers.push -> scope[attrs[key]]
-						watchers.push -> $interpolate("{{#{key}}}")(scope)
+						attr.$observe key, recalculateCandidate
+						watchers.push -> scope[attr[key]]
 						
 				scope.$watchGroup watchers, recalculateCandidate
 						

					# interpolate candidate keys, and falling back to
					# attribute values, if any. Candidate arrays are
					# joined by single dashes.
					candidateList = do (scope, attrs) ->
						list = []
						
						for keys in directive.candidateKeys

						for uri in candidateTemplates
							return uri if skinAssets?.templates?[uri]
						
						return null
						
					# If the candidate changed, clear the hook invocation
					# cache and relink.
					if candidate isnt oldCandidate
						candidateHooksInvoked = {}
						
