 					
 				applySkin = (skinKey) ->
 					currentSkinKey = skinKey
-					
-					candidateHooksInvoked = {}
 					recalculateCandidate()
 				
 				applySkin defaultSkinKey
 					
 				# Relink again every time the skin changes.
 				$rootScope.$on 'shrub-skin.changed', (event, skinKey) ->
+					candidateHooksInvoked = {}
 					applySkin skinKey
 					
 				# Set watches for all candidate-related values.

					# 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

						continue if keysSeen[key]
						keysSeen[key] = true
						
						attr.$observe key, recalculateCandidate
						watchers.push -> scope[attr[key]]
						
				scope.$watchGroup watchers, recalculateCandidate
						
