diff --git a/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java b/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java
index 17b09a4..7310131 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java
@@ -254,18 +254,4 @@
       return e.getMessage();
     }
   }
-
-  public static Label getAliasTarget(Target target) {
-    if (!(target instanceof Rule)) {
-      return null;
-    }
-
-    Rule rule = (Rule) target;
-    String ruleClass = rule.getRuleClass();
-    if (!(ruleClass.equals("alias") || ruleClass.equals("bind"))) {
-      return null;
-    }
-
-    return AggregatingAttributeMapper.of(rule).get("actual", BuildType.LABEL);
-  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
index d94be28..4035242 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
@@ -44,7 +44,7 @@
 import com.google.devtools.build.lib.packages.SkylarkAspect;
 import com.google.devtools.build.lib.packages.SkylarkAspectClass;
 import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.packages.TargetUtils;
+import com.google.devtools.build.lib.rules.AliasProvider;
 import com.google.devtools.build.lib.skyframe.AspectValue.AspectKey;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.ConfiguredValueCreationException;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.DependencyEvaluationException;
@@ -165,6 +165,7 @@
       throw new AspectFunctionException(
           new BuildFileContainsErrorsException(key.getLabel().getPackageIdentifier()));
     }
+
     Target target;
     try {
       target = pkg.getTarget(key.getLabel().getName());
@@ -172,11 +173,6 @@
       throw new AspectFunctionException(e);
     }
 
-    Label aliasLabel = TargetUtils.getAliasTarget(target);
-    if (aliasLabel != null) {
-      return createAliasAspect(env, target, aliasLabel, aspect, key);
-    }
-    
     if (!(target instanceof Rule)) {
       env.getListener().handle(Event.error(
           target.getLocation(),
@@ -186,7 +182,7 @@
           "aspects must be attached to rules"));
     }
 
-    final ConfiguredTargetValue configuredTargetValue;
+    ConfiguredTargetValue configuredTargetValue;
     try {
       configuredTargetValue =
           (ConfiguredTargetValue) env.getValueOrThrow(
@@ -202,12 +198,18 @@
       // precomputed.
       return null;
     }
-    RuleConfiguredTarget associatedTarget =
-        (RuleConfiguredTarget) configuredTargetValue.getConfiguredTarget();
-    if (associatedTarget == null) {
+
+    if (configuredTargetValue.getConfiguredTarget() == null) {
       return null;
     }
 
+    if (configuredTargetValue.getConfiguredTarget().getProvider(AliasProvider.class) != null) {
+      return createAliasAspect(env, target, aspect, key,
+          configuredTargetValue.getConfiguredTarget());
+    }
+
+    RuleConfiguredTarget associatedTarget =
+        (RuleConfiguredTarget) configuredTargetValue.getConfiguredTarget();
     SkyframeDependencyResolver resolver = view.createDependencyResolver(env);
 
     // When getting the dependencies of this hybrid aspect+base target, use the aspect's
@@ -277,15 +279,24 @@
   private static SkyValue createAliasAspect(
       Environment env,
       Target originalTarget,
-      Label aliasLabel,
       Aspect aspect,
-      AspectKey originalKey)
-      throws InterruptedException {
-    SkyKey depKey = AspectValue.key(aliasLabel,
+      AspectKey originalKey,
+      ConfiguredTarget configuredTarget) throws InterruptedException {
+    ImmutableList<Label> aliasChain = configuredTarget.getProvider(AliasProvider.class)
+        .getAliasChain();
+    // Find the next alias in the chain: either the next alias (if there are two) or the name of
+    // the real configured target.
+    Label aliasLabel = aliasChain.size() > 1 ? aliasChain.get(1) : configuredTarget.getLabel();
+
+    SkyKey depKey = AspectValue.key(
+        aliasLabel,
         originalKey.getAspectConfiguration(),
         originalKey.getBaseConfiguration(),
         originalKey.getAspectClass(),
         originalKey.getParameters());
+
+    // Compute the AspectValue of the target the alias refers to (which can itself be either an
+    // alias or a real target)
     AspectValue real = (AspectValue) env.getValue(depKey);
     if (env.valuesMissing()) {
       return null;
@@ -295,6 +306,7 @@
         .addTransitive(real.getTransitivePackages())
         .add(originalTarget.getPackage())
         .build();
+
     return new AspectValue(
         originalKey,
         aspect,
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
index f602e8b..14c4b1f 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
@@ -60,6 +60,46 @@
   }
 
   @Test
+  public void testAspectAppliedToAliasWithSelect() throws Exception {
+    setRulesAvailableInTests(new TestAspects.BaseRule(), new AspectRequiringRule());
+    pkg("a",
+        "aspect(name='a', foo=[':b'])",
+        "alias(name='b', actual=select({'//conditions:default': ':c'}))",
+        "base(name='c')");
+    ConfiguredTarget a = getConfiguredTarget("//a:a");
+    assertThat(a.getProvider(RuleInfo.class).getData())
+        .containsExactly("aspect //a:c", "rule //a:a");
+  }
+
+  @Test
+  public void testAspectAppliedToChainedAliases() throws Exception {
+    setRulesAvailableInTests(new TestAspects.BaseRule(), new AspectRequiringRule());
+    pkg("a",
+        "aspect(name='a', foo=[':b'])",
+        "alias(name='b', actual=':c')",
+        "alias(name='c', actual=':d')",
+        "alias(name='d', actual=':e')",
+        "base(name='e')");
+
+    ConfiguredTarget a = getConfiguredTarget("//a:a");
+    assertThat(a.getProvider(RuleInfo.class).getData())
+        .containsExactly("aspect //a:e", "rule //a:a");
+  }
+
+  @Test
+  public void testAspectAppliedToChainedAliasesAndSelect() throws Exception {
+    setRulesAvailableInTests(new TestAspects.BaseRule(), new AspectRequiringRule());
+    pkg("a",
+        "aspect(name='a', foo=[':b'])",
+        "alias(name='b', actual=select({'//conditions:default': ':c'}))",
+        "alias(name='c', actual=select({'//conditions:default': ':d'}))",
+        "base(name='d')");
+    ConfiguredTarget a = getConfiguredTarget("//a:a");
+    assertThat(a.getProvider(RuleInfo.class).getData())
+        .containsExactly("aspect //a:d", "rule //a:a");
+  }
+
+  @Test
   public void providersOfAspectAreMergedIntoDependency() throws Exception {
     setRulesAvailableInTests(new TestAspects.BaseRule(), new AspectRequiringRule());
     pkg("a",
