diff --git a/DEFS b/DEFS
index 792f4a8..6827378 100644
--- a/DEFS
+++ b/DEFS
@@ -6,7 +6,7 @@
     name,
     srcs=[],
     resources=[],
-    export_deps=False,
+    exported_deps=[],
     source='7',
     target='7',
     proguard_config=None,
@@ -17,7 +17,7 @@
     name=name,
     srcs=srcs,
     resources=resources,
-    export_deps=export_deps,
+    exported_deps=exported_deps,
     source=source,
     target=target,
     proguard_config=proguard_config,
diff --git a/lib/BUCK b/lib/BUCK
index 29d63a0..204a93c 100644
--- a/lib/BUCK
+++ b/lib/BUCK
@@ -71,12 +71,12 @@
 
 java_library(
     name = 'jackson',
-    deps = [
+    deps = [],
+    exported_deps = [
       ':jackson-annotations',
       ':jackson-core',
       ':jackson-databind',
     ],
-    export_deps = True,
     visibility = [
       '//src/com/facebook/buck/event:event',
     ],
diff --git a/src/com/facebook/buck/android/AndroidLibraryRule.java b/src/com/facebook/buck/android/AndroidLibraryRule.java
index 2ae8687..b421169 100644
--- a/src/com/facebook/buck/android/AndroidLibraryRule.java
+++ b/src/com/facebook/buck/android/AndroidLibraryRule.java
@@ -25,6 +25,7 @@
 import com.facebook.buck.model.BuildTarget;
 import com.facebook.buck.model.BuildTargetPattern;
 import com.facebook.buck.rules.AbstractBuildRuleBuilderParams;
+import com.facebook.buck.rules.BuildRule;
 import com.facebook.buck.rules.BuildRuleParams;
 import com.facebook.buck.rules.BuildRuleResolver;
 import com.facebook.buck.rules.BuildRuleType;
@@ -35,6 +36,7 @@
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSortedSet;
 
 import java.io.IOException;
 import java.util.List;
@@ -61,7 +63,7 @@
         srcs,
         resources,
         proguardConfig,
-        /* exportDeps */ false,
+        /* exportedDeps */ ImmutableSortedSet.<BuildRule>of(),
         javacOptions);
     this.manifestFile = Preconditions.checkNotNull(manifestFile);
   }
diff --git a/src/com/facebook/buck/command/Project.java b/src/com/facebook/buck/command/Project.java
index 1cc14cc..a6c2e90 100644
--- a/src/com/facebook/buck/command/Project.java
+++ b/src/com/facebook/buck/command/Project.java
@@ -35,6 +35,7 @@
 import com.facebook.buck.rules.BuildRule;
 import com.facebook.buck.rules.Buildable;
 import com.facebook.buck.rules.DependencyGraph;
+import com.facebook.buck.rules.ExportDependencies;
 import com.facebook.buck.rules.JavaPackageFinder;
 import com.facebook.buck.rules.ProjectConfigRule;
 import com.facebook.buck.rules.SourceRoot;
@@ -740,10 +741,16 @@
 
       @Override
       public ImmutableSet<BuildRule> visit(BuildRule dep) {
-        boolean depShouldExportDeps = dep.getExportDeps() || rule.getProperties().is(PACKAGING);
-        boolean shouldVisitDeps = (dep.getProperties().is(LIBRARY) && (depShouldExportDeps))
-            || (dep instanceof AndroidResourceRule)
-            || dep == rule;
+        ImmutableSet<BuildRule> depsToVisit;
+        if (rule.getProperties().is(PACKAGING) ||
+            dep instanceof AndroidResourceRule ||
+            dep == rule) {
+          depsToVisit = dep.getDeps();
+        } else if (dep.getProperties().is(LIBRARY) && dep instanceof ExportDependencies) {
+          depsToVisit = ((ExportDependencies)dep).getExportedDeps();
+        } else {
+          depsToVisit = ImmutableSet.of();
+        }
 
         // Special Case: If we are traversing the test_target and we encounter a library rule in the
         // same package that is not the src_target, then we should traverse the deps. Consider the
@@ -774,10 +781,10 @@
         // the current directory should be treated as a source folder with test sources, but it
         // should contain the union of :lib and :test's deps as dependent modules.
         if (isForTests
-            && !shouldVisitDeps
+            && depsToVisit.isEmpty()
             && dep.getBuildTarget().getBasePath().equals(basePathForRule)
             && !dep.equals(srcTarget)) {
-          shouldVisitDeps = true;
+          depsToVisit = dep.getDeps();
         }
 
         DependentModule dependentModule;
@@ -789,12 +796,12 @@
           String moduleName = getIntellijNameForRule(dep);
           dependentModule = DependentModule.newModule(dep.getBuildTarget(), moduleName);
         } else if (dep.getFullyQualifiedName().startsWith(ANDROID_GEN_BUILD_TARGET_PREFIX)) {
-          return maybeVisitAllDeps(dep, shouldVisitDeps);
+          return depsToVisit;
         } else if (dep instanceof JavaLibraryRule || dep instanceof AndroidResourceRule) {
           String moduleName = getIntellijNameForRule(dep);
           dependentModule = DependentModule.newModule(dep.getBuildTarget(), moduleName);
         } else {
-          return maybeVisitAllDeps(dep, shouldVisitDeps);
+          return depsToVisit;
         }
 
         if (isForTests) {
@@ -818,7 +825,7 @@
           modulesToAdd.add(dependentModule);
         }
 
-        return maybeVisitAllDeps(dep, shouldVisitDeps);
+        return depsToVisit;
       }
 
       @Override
diff --git a/src/com/facebook/buck/java/DefaultJavaLibraryRule.java b/src/com/facebook/buck/java/DefaultJavaLibraryRule.java
index da8c2ee..b9c9fee 100644
--- a/src/com/facebook/buck/java/DefaultJavaLibraryRule.java
+++ b/src/com/facebook/buck/java/DefaultJavaLibraryRule.java
@@ -38,6 +38,7 @@
 import com.facebook.buck.rules.BuildableContext;
 import com.facebook.buck.rules.BuildableProperties;
 import com.facebook.buck.rules.DoNotUseAbstractBuildable;
+import com.facebook.buck.rules.ExportDependencies;
 import com.facebook.buck.rules.JavaPackageFinder;
 import com.facebook.buck.rules.OnDiskBuildInfo;
 import com.facebook.buck.rules.ResourcesAttributeBuilder;
@@ -101,7 +102,7 @@
  * from the {@code //src/com/facebook/feed/model:model} rule.
  */
 public class DefaultJavaLibraryRule extends DoNotUseAbstractBuildable
-    implements JavaLibraryRule, AbiRule, HasJavaSrcs, HasClasspathEntries {
+    implements JavaLibraryRule, AbiRule, HasJavaSrcs, HasClasspathEntries, ExportDependencies {
 
   private final static BuildableProperties OUTPUT_TYPE = new BuildableProperties(LIBRARY);
 
@@ -116,7 +117,7 @@
   private final Optional<String> proguardConfig;
 
 
-  private final boolean exportDeps;
+  private final ImmutableSortedSet<BuildRule> exportedDeps;
 
   private final Supplier<ImmutableSetMultimap<JavaLibraryRule, String>> outputClasspathEntriesSupplier;
 
@@ -187,13 +188,13 @@
                                    Set<String> srcs,
                                    Set<? extends SourcePath> resources,
                                    Optional<String> proguardConfig,
-                                   boolean exportDeps,
+                                   Set<BuildRule> exportedDeps,
                                    JavacOptions javacOptions) {
     super(buildRuleParams);
     this.srcs = ImmutableSortedSet.copyOf(srcs);
     this.resources = ImmutableSortedSet.copyOf(resources);
     this.proguardConfig = Preconditions.checkNotNull(proguardConfig);
-    this.exportDeps = exportDeps;
+    this.exportedDeps = ImmutableSortedSet.copyOf(exportedDeps);
     this.javacOptions = Preconditions.checkNotNull(javacOptions);
 
     if (!srcs.isEmpty() || !resources.isEmpty()) {
@@ -213,21 +214,26 @@
         Suppliers.memoize(new Supplier<ImmutableSetMultimap<JavaLibraryRule, String>>() {
           @Override
           public ImmutableSetMultimap<JavaLibraryRule, String> get() {
-            ImmutableSetMultimap<JavaLibraryRule, String> outputClasspathEntries;
+            ImmutableSetMultimap.Builder<JavaLibraryRule, String> outputClasspathBuilder =
+                ImmutableSetMultimap.builder();
+            Iterable<JavaLibraryRule> javaExportedLibraryDeps = Iterables.filter(
+                getExportedDeps(),
+                JavaLibraryRule.class);
 
-            // If this java_library exports its dependencies then just return the transitive
-            // dependencies.
-            if (DefaultJavaLibraryRule.this.exportDeps) {
-              outputClasspathEntries = getTransitiveClasspathEntries();
-            } else if (outputJar.isPresent()) {
-              outputClasspathEntries = ImmutableSetMultimap.<JavaLibraryRule, String>builder()
-                  .put(DefaultJavaLibraryRule.this, getPathToOutputFile())
-                  .build();
-            } else {
-              outputClasspathEntries = ImmutableSetMultimap.of();
+            for (JavaLibraryRule rule : javaExportedLibraryDeps) {
+              outputClasspathBuilder.putAll(rule, rule.getOutputClasspathEntries().values());
+              // If we have any exported deps, add an entry mapping ourselves to to their,
+              // classpaths so when suggesting libraries to add we know that adding this library
+              // would pull in it's deps.
+              outputClasspathBuilder.putAll(DefaultJavaLibraryRule.this,
+                  rule.getOutputClasspathEntries().values());
             }
 
-            return outputClasspathEntries;
+            if (outputJar.isPresent()) {
+              outputClasspathBuilder.put(DefaultJavaLibraryRule.this, getPathToOutputFile());
+            }
+
+            return outputClasspathBuilder.build();
           }
         });
 
@@ -240,11 +246,17 @@
             ImmutableSetMultimap<JavaLibraryRule, String> classpathEntriesForDeps =
                 Classpaths.getClasspathEntries(getDeps());
 
+            ImmutableSetMultimap<JavaLibraryRule, String> classpathEntriesForExportedsDeps =
+                Classpaths.getClasspathEntries(getExportedDeps());
+
             classpathEntries.putAll(classpathEntriesForDeps);
 
-            if (DefaultJavaLibraryRule.this.exportDeps) {
+            // If we have any exported deps, add an entry mapping ourselves to to their classpaths,
+            // so when suggesting libraries to add we know that adding this library would pull in
+            // it's deps.
+            if (!classpathEntriesForExportedsDeps.isEmpty()) {
               classpathEntries.putAll(DefaultJavaLibraryRule.this,
-                  classpathEntriesForDeps.values());
+                  classpathEntriesForExportedsDeps.values());
             }
 
             // Only add ourselves to the classpath if there's a jar to be built.
@@ -330,15 +342,11 @@
    * @return total ABI key containing also the ABI keys of the dependencies.
    */
   protected Sha1HashCode createTotalAbiKey(Sha1HashCode abiKey) {
-    if (!getExportDeps()) {
+    if (getExportedDeps().isEmpty()) {
       return abiKey;
     }
 
     SortedSet<JavaLibraryRule> depsForAbiKey = getDepsForAbiKey();
-    // If there are no deps to consider, just return the ABI Key for this rule.
-    if (depsForAbiKey.isEmpty()) {
-      return abiKey;
-    }
 
     // Hash the ABI keys of all dependencies together with ABI key for the current rule.
     Hasher hasher = createHasherWithAbiKeyForDeps(depsForAbiKey);
@@ -432,10 +440,10 @@
   @Override
   public RuleKey.Builder appendToRuleKey(RuleKey.Builder builder) throws IOException {
     super.appendToRuleKey(builder)
+        .set("exportedDeps", exportedDeps)
         .set("srcs", srcs)
         .setSourcePaths("resources", resources)
-        .set("proguard", proguardConfig)
-        .set("exportDeps", exportDeps);
+        .set("proguard", proguardConfig);
     javacOptions.appendToRuleKey(builder);
     return builder;
   }
@@ -486,8 +494,8 @@
   }
 
   @Override
-  public boolean getExportDeps() {
-    return exportDeps;
+  public ImmutableSortedSet<BuildRule> getExportedDeps() {
+    return exportedDeps;
   }
 
   /**
@@ -814,7 +822,7 @@
     protected Set<SourcePath> resources = Sets.newHashSet();
     protected final AnnotationProcessingParams.Builder annotationProcessingBuilder =
         new AnnotationProcessingParams.Builder();
-    protected boolean exportDeps = false;
+    protected Set<BuildTarget> exportedDeps = Sets.newHashSet();
     protected JavacOptions.Builder javacOptions = JavacOptions.builder();
     protected Optional<String> proguardConfig = Optional.absent();
 
@@ -834,7 +842,7 @@
           srcs,
           resources,
           proguardConfig,
-          exportDeps,
+          getBuildTargetsAsBuildRules(ruleResolver, exportedDeps),
           javacOptions.build());
     }
 
@@ -889,8 +897,8 @@
       return this;
     }
 
-    public Builder setExportDeps(boolean exportDeps) {
-      this.exportDeps = exportDeps;
+    public Builder addExportedDep(BuildTarget buildTarget) {
+      this.exportedDeps.add(buildTarget);
       return this;
     }
   }
diff --git a/src/com/facebook/buck/java/JavaLibraryBuildRuleFactory.java b/src/com/facebook/buck/java/JavaLibraryBuildRuleFactory.java
index a87440f..f66acb2 100644
--- a/src/com/facebook/buck/java/JavaLibraryBuildRuleFactory.java
+++ b/src/com/facebook/buck/java/JavaLibraryBuildRuleFactory.java
@@ -42,8 +42,10 @@
         proguardConfig.transform(params.getResolveFilePathRelativeToBuildFileDirectoryTransform()));
 
 
-    boolean exportDeps = params.getBooleanAttribute("export_deps");
-    builder.setExportDeps(exportDeps);
+    for (String exportedDep : params.getOptionalListAttribute("exported_deps")) {
+      BuildTarget buildTarget = params.resolveBuildTarget(exportedDep);
+      builder.addExportedDep(buildTarget);
+    }
 
     extractAnnotationProcessorParameters(
         builder.getAnnotationProcessingBuilder(), builder, params);
diff --git a/src/com/facebook/buck/java/JavaTestRule.java b/src/com/facebook/buck/java/JavaTestRule.java
index 4c4c049..dc091d8 100644
--- a/src/com/facebook/buck/java/JavaTestRule.java
+++ b/src/com/facebook/buck/java/JavaTestRule.java
@@ -91,7 +91,7 @@
         srcs,
         resources,
         proguardConfig,
-        /* exportDeps */ false,
+        /* exportDeps */ ImmutableSortedSet.<BuildRule>of(),
         javacOptions);
     this.vmArgs = ImmutableList.copyOf(vmArgs);
     this.sourceUnderTest = Preconditions.checkNotNull(sourceUnderTest);
diff --git a/src/com/facebook/buck/java/Keystore.java b/src/com/facebook/buck/java/Keystore.java
index 98440be..fc78c9c 100644
--- a/src/com/facebook/buck/java/Keystore.java
+++ b/src/com/facebook/buck/java/Keystore.java
@@ -79,7 +79,7 @@
   @Override
   public List<Step> getBuildSteps(BuildContext context, BuildableContext buildableContext)
       throws IOException {
-    // Nothing to build: this is like a glorified export_deps() rule.
+    // Nothing to build: this is like a glorified exported_deps() rule.
     return ImmutableList.of();
   }
 
diff --git a/src/com/facebook/buck/java/PrebuiltJarRule.java b/src/com/facebook/buck/java/PrebuiltJarRule.java
index 3deb3a2..003648e 100644
--- a/src/com/facebook/buck/java/PrebuiltJarRule.java
+++ b/src/com/facebook/buck/java/PrebuiltJarRule.java
@@ -25,12 +25,14 @@
 import com.facebook.buck.rules.AbstractBuildRuleBuilderParams;
 import com.facebook.buck.rules.AnnotationProcessingData;
 import com.facebook.buck.rules.BuildContext;
+import com.facebook.buck.rules.BuildRule;
 import com.facebook.buck.rules.BuildRuleParams;
 import com.facebook.buck.rules.BuildRuleResolver;
 import com.facebook.buck.rules.BuildRuleType;
 import com.facebook.buck.rules.BuildableContext;
 import com.facebook.buck.rules.BuildableProperties;
 import com.facebook.buck.rules.DoNotUseAbstractBuildable;
+import com.facebook.buck.rules.ExportDependencies;
 import com.facebook.buck.rules.OnDiskBuildInfo;
 import com.facebook.buck.rules.RuleKey;
 import com.facebook.buck.rules.Sha1HashCode;
@@ -62,7 +64,7 @@
  * A rule that establishes a pre-compiled JAR file as a dependency.
  */
 public class PrebuiltJarRule extends DoNotUseAbstractBuildable
-    implements JavaLibraryRule, HasClasspathEntries {
+    implements JavaLibraryRule, HasClasspathEntries, ExportDependencies {
 
   private final static BuildableProperties OUTPUT_TYPE = new BuildableProperties(LIBRARY);
 
@@ -187,6 +189,11 @@
   }
 
   @Override
+  public ImmutableSortedSet<BuildRule> getExportedDeps() {
+    return getDeps();
+  }
+
+  @Override
   public AnnotationProcessingData getAnnotationProcessingData() {
     return AnnotationProcessingData.EMPTY;
   }
diff --git a/src/com/facebook/buck/parser/buck.py b/src/com/facebook/buck/parser/buck.py
index 46b8719..71b144a 100644
--- a/src/com/facebook/buck/parser/buck.py
+++ b/src/com/facebook/buck/parser/buck.py
@@ -210,7 +210,8 @@
     name,
     srcs=[],
     resources=[],
-    export_deps=False,
+    export_deps=None,
+    exported_deps=[],
     source='6',
     target='6',
     proguard_config=None,
@@ -222,11 +223,12 @@
     'name' : name,
     'srcs' : srcs,
     'resources' : resources,
-    'export_deps' : export_deps,
+    # Temporary hack to let repos cut over to new style of exporting deps.
+    'exported_deps' : deps if export_deps else exported_deps,
     'source' : source,
     'target' : target,
     'proguard_config' : proguard_config,
-    'deps' : deps,
+    'deps' : deps + exported_deps,
     'visibility' : visibility,
   }, build_env)
 
diff --git a/src/com/facebook/buck/rules/AbstractBuildRule.java b/src/com/facebook/buck/rules/AbstractBuildRule.java
index 88eeb8e..5e71344 100644
--- a/src/com/facebook/buck/rules/AbstractBuildRule.java
+++ b/src/com/facebook/buck/rules/AbstractBuildRule.java
@@ -72,11 +72,6 @@
   }
 
   @Override
-  public boolean getExportDeps() {
-    return true;
-  }
-
-  @Override
   public final ImmutableSortedSet<BuildRule> getDeps() {
     return deps;
   }
diff --git a/src/com/facebook/buck/rules/BUCK b/src/com/facebook/buck/rules/BUCK
index 5c70e41..6492cb0 100644
--- a/src/com/facebook/buck/rules/BUCK
+++ b/src/com/facebook/buck/rules/BUCK
@@ -112,6 +112,7 @@
     'DefaultBuildRuleBuilderParams.java',
     'DirArtifactCache.java',
     'DoNotUseAbstractBuildable.java',
+    'ExportDependencies.java',
     'IndividualTestEvent.java',
     'InstallableBuildRule.java',
     'LabelsAttributeBuilder.java',
diff --git a/src/com/facebook/buck/rules/BuildRule.java b/src/com/facebook/buck/rules/BuildRule.java
index ab745ff..3382e24 100644
--- a/src/com/facebook/buck/rules/BuildRule.java
+++ b/src/com/facebook/buck/rules/BuildRule.java
@@ -88,11 +88,6 @@
   public BuildRuleSuccess.Type getBuildResultType();
 
   /**
-   * @return whether or not this rule exports its dependencies to all rules depending on it.
-   */
-  public boolean getExportDeps();
-
-  /**
    * @return key based on the BuildRule's state, including the transitive closure of its
    *     dependencies' keys.
    */
diff --git a/src/com/facebook/buck/rules/ExportDependencies.java b/src/com/facebook/buck/rules/ExportDependencies.java
new file mode 100644
index 0000000..c00d401
--- /dev/null
+++ b/src/com/facebook/buck/rules/ExportDependencies.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2013-present Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License. You may obtain
+ * a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.facebook.buck.rules;
+
+import com.google.common.collect.ImmutableSortedSet;
+
+/**
+ * {@link BuildRule} that can export a subset of it's dependencies.
+ */
+public interface ExportDependencies {
+  public ImmutableSortedSet<BuildRule> getExportedDeps();
+}
diff --git a/test/com/facebook/buck/cli/AuditOwnerCommandTest.java b/test/com/facebook/buck/cli/AuditOwnerCommandTest.java
index 044e41e..19fafd4 100644
--- a/test/com/facebook/buck/cli/AuditOwnerCommandTest.java
+++ b/test/com/facebook/buck/cli/AuditOwnerCommandTest.java
@@ -128,11 +128,6 @@
     }
 
     @Override
-    public boolean getExportDeps() {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
     public final RuleKey getRuleKey() {
       throw new UnsupportedOperationException();
     }
diff --git a/test/com/facebook/buck/command/ProjectTest.java b/test/com/facebook/buck/command/ProjectTest.java
index 0ff32a8..16ef4cd 100644
--- a/test/com/facebook/buck/command/ProjectTest.java
+++ b/test/com/facebook/buck/command/ProjectTest.java
@@ -140,7 +140,7 @@
             "//java/src/com/facebook/exportlib:exportlib"))
         .addSrc("ExportLib.java")
         .addDep(BuildTargetFactory.newInstance("//third_party/guava:guava"))
-        .setExportDeps(true)
+        .addExportedDep(BuildTargetFactory.newInstance("//third_party/guava:guava"))
         .addVisibilityPattern(BuildTargetPattern.MATCH_ALL));
 
     // android_library //java/src/com/facebook/base:base
diff --git a/test/com/facebook/buck/java/DefaultJavaLibraryRuleIntegrationTest.java b/test/com/facebook/buck/java/DefaultJavaLibraryRuleIntegrationTest.java
index e720892..2f5d550 100644
--- a/test/com/facebook/buck/java/DefaultJavaLibraryRuleIntegrationTest.java
+++ b/test/com/facebook/buck/java/DefaultJavaLibraryRuleIntegrationTest.java
@@ -171,9 +171,11 @@
       "Rule //:raz builds with its transitive dependencies but not with its first order " +
           "dependencies.",
       "The following packages were missing:",
+      "Blargh",
       "Meh",
       "Try adding the following deps:",
-      "//:foo");
+      "//:foo",
+      "//:blargh");
 
     buildResult.assertExitCode("Build should have succeeded with warnings.", 0);
 
diff --git a/test/com/facebook/buck/java/DefaultJavaLibraryRuleTest.java b/test/com/facebook/buck/java/DefaultJavaLibraryRuleTest.java
index e6ec316..44ec6e5 100644
--- a/test/com/facebook/buck/java/DefaultJavaLibraryRuleTest.java
+++ b/test/com/facebook/buck/java/DefaultJavaLibraryRuleTest.java
@@ -143,7 +143,7 @@
             new FileSourcePath("android/java/src/com/facebook/common/util/data.json")
         ),
         /* proguardConfig */ Optional.<String>absent(),
-        /* exportDeps */ false,
+        /* exportedDeps */ ImmutableSortedSet.<BuildRule>of(),
         JavacOptions.DEFAULTS
         );
 
@@ -176,7 +176,7 @@
             new FileSourcePath("android/java/src/com/facebook/common/util/data.json")
         ),
         /* proguargConfig */ Optional.<String>absent(),
-        /* exportDeps */ false,
+        /* exportedDeps */ ImmutableSortedSet.<BuildRule>of(),
         JavacOptions.DEFAULTS
         );
 
@@ -210,7 +210,7 @@
             new FileSourcePath("android/java/src/com/facebook/common/util/data.json")
         ),
         /* proguargConfig */ Optional.<String>absent(),
-        /* exportDeps */ false,
+        /* exportedDeps */ ImmutableSortedSet.<BuildRule>of(),
         JavacOptions.DEFAULTS);
 
     ImmutableList.Builder<Step> commands = ImmutableList.builder();
@@ -543,13 +543,28 @@
   }
 
   @Test
-  public void testExportDeps() {
+  public void testExportedDeps() {
     BuildRuleResolver ruleResolver = new BuildRuleResolver();
 
+    BuildTarget nonIncludedTarget = BuildTargetFactory.newInstance("//:not_included");
+    JavaLibraryRule notIncluded = ruleResolver.buildAndAddToIndex(
+        DefaultJavaLibraryRule.newJavaLibraryRuleBuilder(new FakeAbstractBuildRuleBuilderParams())
+            .setBuildTarget(nonIncludedTarget)
+            .addSrc("java/src/com/not_included/Raz.java"));
+
+    BuildTarget includedTarget = BuildTargetFactory.newInstance("//:included");
+    JavaLibraryRule included = ruleResolver.buildAndAddToIndex(
+        DefaultJavaLibraryRule.newJavaLibraryRuleBuilder(new FakeAbstractBuildRuleBuilderParams())
+            .setBuildTarget(includedTarget)
+            .addSrc("java/src/com/included/Rofl.java"));
+
     BuildTarget libraryOneTarget = BuildTargetFactory.newInstance("//:libone");
     JavaLibraryRule libraryOne = ruleResolver.buildAndAddToIndex(
         DefaultJavaLibraryRule.newJavaLibraryRuleBuilder(new FakeAbstractBuildRuleBuilderParams())
         .setBuildTarget(libraryOneTarget)
+        .addDep(BuildTargetFactory.newInstance("//:not_included"))
+        .addDep(BuildTargetFactory.newInstance("//:included"))
+        .addExportedDep(BuildTargetFactory.newInstance("//:included"))
         .addSrc("java/src/com/libone/Bar.java"));
 
     BuildTarget libraryTwoTarget = BuildTargetFactory.newInstance("//:libtwo");
@@ -558,7 +573,7 @@
         .setBuildTarget(libraryTwoTarget)
         .addSrc("java/src/com/libtwo/Foo.java")
         .addDep(BuildTargetFactory.newInstance("//:libone"))
-        .setExportDeps(true));
+        .addExportedDep(BuildTargetFactory.newInstance("//:libone")));
 
     BuildTarget parentTarget = BuildTargetFactory.newInstance("//:parent");
     JavaLibraryRule parent = ruleResolver.buildAndAddToIndex(
@@ -571,7 +586,21 @@
         "A java_library that depends on //:libone should include only libone.jar in its " +
             "classpath when compiling itself.",
         ImmutableSetMultimap.builder()
+            .put(notIncluded, "buck-out/gen/lib__not_included__output/not_included.jar")
+            .build(),
+        notIncluded.getOutputClasspathEntries());
+
+    assertEquals(
+        ImmutableSetMultimap.builder()
+            .put(included, "buck-out/gen/lib__included__output/included.jar")
+            .build(),
+        included.getOutputClasspathEntries());
+
+    assertEquals(
+        ImmutableSetMultimap.builder()
+            .put(included, "buck-out/gen/lib__included__output/included.jar")
             .put(libraryOne, "buck-out/gen/lib__libone__output/libone.jar")
+            .put(libraryOne, "buck-out/gen/lib__included__output/included.jar")
             .build(),
         libraryOne.getOutputClasspathEntries());
 
@@ -580,25 +609,23 @@
             "both libone.jar and libtwo.jar in its classpath when compiling itself.",
         ImmutableSetMultimap.builder()
             .put(libraryOne, "buck-out/gen/lib__libone__output/libone.jar")
+            .put(libraryOne, "buck-out/gen/lib__included__output/included.jar")
             .put(libraryTwo, "buck-out/gen/lib__libone__output/libone.jar")
             .put(libraryTwo, "buck-out/gen/lib__libtwo__output/libtwo.jar")
+            .put(libraryTwo, "buck-out/gen/lib__included__output/included.jar")
             .build(),
         libraryTwo.getOutputClasspathEntries());
 
     assertEquals(
-        "//:libtwo exports its deps, so both libone.jar and libtwo.jar should be on the classpath" +
-            " when compiling //:parent.",
-        ImmutableSetMultimap.builder()
-            .put(libraryTwo, "buck-out/gen/lib__libone__output/libone.jar")
-            .put(libraryTwo, "buck-out/gen/lib__libtwo__output/libtwo.jar")
-            .build(),
-        parent.getDeclaredClasspathEntries());
-
-    assertEquals(
         "A java_binary that depends on //:parent should include libone.jar, libtwo.jar and " +
             "parent.jar.",
         ImmutableSetMultimap.builder()
+            .put(included, "buck-out/gen/lib__included__output/included.jar")
+            .put(notIncluded, "buck-out/gen/lib__not_included__output/not_included.jar")
+            .put(libraryOne, "buck-out/gen/lib__included__output/included.jar")
             .put(libraryOne, "buck-out/gen/lib__libone__output/libone.jar")
+            .put(libraryTwo, "buck-out/gen/lib__included__output/included.jar")
+            .put(libraryTwo, "buck-out/gen/lib__not_included__output/not_included.jar")
             .put(libraryTwo, "buck-out/gen/lib__libone__output/libone.jar")
             .put(libraryTwo, "buck-out/gen/lib__libtwo__output/libtwo.jar")
             .put(parent, "buck-out/gen/lib__parent__output/parent.jar")
@@ -618,7 +645,7 @@
    * @see DefaultJavaLibraryRule#getAbiKeyForDeps()
    */
   @Test
-  public void testGetAbiKeyForDepsInThePresenceOfExportDeps() throws IOException {
+  public void testGetAbiKeyForDepsInThePresenceOfExportedDeps() throws IOException {
     // Create a java_library named //:tinylib with a hardcoded ABI key.
     String tinyLibAbiKeyHash = Strings.repeat("a", 40);
     JavaLibraryRule tinyLibrary = createDefaultJavaLibaryRuleWithAbiKey(
@@ -627,7 +654,7 @@
         // Must have a source file or else its ABI will be AbiWriterProtocol.EMPTY_ABI_KEY.
         /* srcs */ ImmutableSet.of("foo/Bar.java"),
         /* deps */ ImmutableSet.<BuildRule>of(),
-        /* exportDeps */ false);
+        /* exportedDeps */ ImmutableSortedSet.<BuildRule>of());
 
     // Create two java_library rules, each of which depends on //:tinylib, but only one of which
     // exports its deps.
@@ -637,13 +664,13 @@
         BuildTargetFactory.newInstance("//:common_with_export"),
         /* srcs */ ImmutableSet.<String>of(),
         /* deps */ ImmutableSet.<BuildRule>of(tinyLibrary),
-        /* exportDeps */ true);
+        /* exportedDeps */ ImmutableSortedSet.<BuildRule>of(tinyLibrary));
     DefaultJavaLibraryRule commonNoExport = createDefaultJavaLibaryRuleWithAbiKey(
         /* abiHash */ null,
         BuildTargetFactory.newInstance("//:common_no_export"),
         /* srcs */ ImmutableSet.<String>of(),
         /* deps */ ImmutableSet.<BuildRule>of(tinyLibrary),
-        /* exportDeps */ false);
+        /* exportedDeps */ ImmutableSortedSet.<BuildRule>of());
 
     // Verify getAbiKeyForDeps() for the two //:common_XXX rules.
     assertEquals(
@@ -679,7 +706,7 @@
         consumerNoExport.getAbiKeyForDeps());
     assertThat(
         "Although //:consumer_no_export and //:consumer_with_export have the same deps, " +
-        "the ABIs of their deps will differ because of the use of export_deps=True.",
+        "the ABIs of their deps will differ because of the use of exported_deps is non-empty",
         consumerNoExport.getAbiKeyForDeps(),
         not(equalTo(consumerWithExport.getAbiKeyForDeps())));
     String expectedAbiKeyNoDepsHashForConsumerWithExport = Hashing.sha1().newHasher()
@@ -699,7 +726,7 @@
    * @see DefaultJavaLibraryRule#getAbiKey()
    */
   @Test
-  public void testGetAbiKeyInThePresenceOfExportDeps() throws IOException {
+  public void testGetAbiKeyInThePresenceOfExportedDeps() throws IOException {
     // Create a java_library named //:commonlib with a hardcoded ABI key.
     String commonLibAbiKeyHash = Strings.repeat("a", 40);
     JavaLibraryRule commonLibrary = createDefaultJavaLibaryRuleWithAbiKey(
@@ -708,7 +735,7 @@
         // Must have a source file or else its ABI will be AbiWriterProtocol.EMPTY_ABI_KEY.
         /* srcs */ ImmutableSet.of("foo/Bar.java"),
         /* deps */ ImmutableSet.<BuildRule>of(),
-        /* exportDeps */ false);
+        /* exportedDeps */ ImmutableSortedSet.<BuildRule>of());
 
     // Create two java_library rules, each of which depends on //:commonlib, but only one of which
     // exports its deps.
@@ -718,14 +745,14 @@
         BuildTargetFactory.newInstance("//:lib_with_export"),
         /* srcs */ ImmutableSet.<String>of(),
         /* deps */ ImmutableSet.<BuildRule>of(commonLibrary),
-        /* exportDeps */ true);
+        /* exportedDeps */ ImmutableSortedSet.<BuildRule>of(commonLibrary));
     String libNoExportAbiKeyHash = Strings.repeat("c", 40);
     DefaultJavaLibraryRule libNoExport = createDefaultJavaLibaryRuleWithAbiKey(
         /* abiHash */ libNoExportAbiKeyHash,
         BuildTargetFactory.newInstance("//:lib_no_export"),
         /* srcs */ ImmutableSet.<String>of(),
         /* deps */ ImmutableSet.<BuildRule>of(commonLibrary),
-        /* exportDeps */ false);
+        /* exportedDeps */ ImmutableSortedSet.<BuildRule>of());
 
     // Verify getAbiKey() for the two //:lib_XXX rules.
     String expectedLibWithExportAbiKeyHash = Hashing.sha1().newHasher()
@@ -748,7 +775,7 @@
    * @see DefaultJavaLibraryRule#getAbiKey()
    */
   @Test
-  public void testGetAbiKeyRecursiveExportDeps() throws IOException {
+  public void testGetAbiKeyRecursiveExportedDeps() throws IOException {
     String libAAbiKeyHash = Strings.repeat("a", 40);
     String libBAbiKeyHash = Strings.repeat("b", 40);
     String libCAbiKeyHash = Strings.repeat("c", 40);
@@ -762,28 +789,28 @@
         // Must have a source file or else its ABI will be AbiWriterProtocol.EMPTY_ABI_KEY.
         /* srcs */ ImmutableSet.of("foo/Bar.java"),
         /* deps */ ImmutableSet.<BuildRule>of(),
-        /* exportDeps */ true);
+        /* exporedtDeps */ ImmutableSet.<BuildRule>of());
     JavaLibraryRule libC = createDefaultJavaLibaryRuleWithAbiKey(
         libCAbiKeyHash,
         BuildTargetFactory.newInstance("//:lib_c"),
         // Must have a source file or else its ABI will be AbiWriterProtocol.EMPTY_ABI_KEY.
         /* srcs */ ImmutableSet.of("foo/Bar.java"),
         /* deps */ ImmutableSet.<BuildRule>of(libD),
-        /* exportDeps */ true);
+        /* exporedtDeps */ ImmutableSet.<BuildRule>of(libD));
     JavaLibraryRule libB = createDefaultJavaLibaryRuleWithAbiKey(
         libBAbiKeyHash,
         BuildTargetFactory.newInstance("//:lib_b"),
         // Must have a source file or else its ABI will be AbiWriterProtocol.EMPTY_ABI_KEY.
         /* srcs */ ImmutableSet.of("foo/Bar.java"),
         /* deps */ ImmutableSet.<BuildRule>of(libC),
-        /* exportDeps */ true);
+        /* exportedDeps */ ImmutableSet.<BuildRule>of(libC));
     JavaLibraryRule libA = createDefaultJavaLibaryRuleWithAbiKey(
         libAAbiKeyHash,
         BuildTargetFactory.newInstance("//:lib_a"),
         // Must have a source file or else its ABI will be AbiWriterProtocol.EMPTY_ABI_KEY.
         /* srcs */ ImmutableSet.of("foo/Bar.java"),
         /* deps */ ImmutableSet.<BuildRule>of(libB),
-        /* exportDeps */ true);
+        /* exportedDeps */ ImmutableSet.<BuildRule>of(libB));
 
     assertEquals(
         "If a rule has no dependencies its final ABI key should be the rule's own ABI key.",
@@ -814,7 +841,6 @@
     String expectedLibAAbiKeyHash = Hashing.sha1().newHasher()
         .putUnencodedChars(expectedLibBAbiKeyHash)
         .putUnencodedChars(expectedLibCAbiKeyHash)
-        .putUnencodedChars(libDAbiKeyHash)
         .putUnencodedChars(libAAbiKeyHash)
         .hash()
         .toString();
@@ -831,28 +857,28 @@
         // Must have a source file or else its ABI will be AbiWriterProtocol.EMPTY_ABI_KEY.
         /* srcs */ ImmutableSet.of("foo/Bar.java"),
         /* deps */ ImmutableSet.<BuildRule>of(),
-        /* exportDeps */ false);
+        /* exportedDeps */ ImmutableSet.<BuildRule>of());
     libC = createDefaultJavaLibaryRuleWithAbiKey(
         libCAbiKeyHash,
         BuildTargetFactory.newInstance("//:lib_c2"),
         // Must have a source file or else its ABI will be AbiWriterProtocol.EMPTY_ABI_KEY.
         /* srcs */ ImmutableSet.of("foo/Bar.java"),
         /* deps */ ImmutableSet.<BuildRule>of(libD),
-        /* exportDeps */ false);
+        /* exportDeps */ ImmutableSet.<BuildRule>of());
     libB = createDefaultJavaLibaryRuleWithAbiKey(
         libBAbiKeyHash,
         BuildTargetFactory.newInstance("//:lib_b2"),
         // Must have a source file or else its ABI will be AbiWriterProtocol.EMPTY_ABI_KEY.
         /* srcs */ ImmutableSet.of("foo/Bar.java"),
         /* deps */ ImmutableSet.<BuildRule>of(libC),
-        /* exportDeps */ true);
+        /* exportedDeps */ ImmutableSet.<BuildRule>of(libC));
     libA = createDefaultJavaLibaryRuleWithAbiKey(
         libAAbiKeyHash,
         BuildTargetFactory.newInstance("//:lib_a2"),
         // Must have a source file or else its ABI will be AbiWriterProtocol.EMPTY_ABI_KEY.
         /* srcs */ ImmutableSet.of("foo/Bar.java"),
         /* deps */ ImmutableSet.<BuildRule>of(libB),
-        /* exportDeps */ true);
+        /* exportedDeps */ ImmutableSet.<BuildRule>of(libB));
 
     assertEquals(
         "If export_deps is false, the final ABI key should be the rule's own ABI key.",
@@ -877,7 +903,6 @@
     expectedLibAAbiKeyHash = Hashing.sha1().newHasher()
         .putUnencodedChars(expectedLibBAbiKeyHash)
         .putUnencodedChars(libCAbiKeyHash)
-        .putUnencodedChars(libDAbiKeyHash)
         .putUnencodedChars(libAAbiKeyHash)
         .hash()
         .toString();
@@ -893,13 +918,13 @@
       BuildTarget buildTarget,
       ImmutableSet<String> srcs,
       ImmutableSet<BuildRule> deps,
-      boolean exportDeps) {
+      ImmutableSet<BuildRule> exportedDeps) {
     return new DefaultJavaLibraryRule(
         new FakeBuildRuleParams(buildTarget, ImmutableSortedSet.copyOf(deps)),
         srcs,
         /* resources */ ImmutableSet.<SourcePath>of(),
         /* proguardConfig */ Optional.<String>absent(),
-        exportDeps,
+        exportedDeps,
         JavacOptions.builder().build()
         ) {
       @Override
@@ -1106,7 +1131,7 @@
             ImmutableSet.<String>of("MyClass.java"),
             ImmutableSet.<SourcePath>of(),
             Optional.of("MyProguardConfig"),
-            /* exportDeps */ false,
+            /* exportedDeps */ ImmutableSet.<BuildRule>of(),
             JavacOptions.DEFAULTS);
       }
     };
diff --git a/test/com/facebook/buck/java/FakeDefaultJavaLibraryRule.java b/test/com/facebook/buck/java/FakeDefaultJavaLibraryRule.java
index cfafdbd..79d7885 100644
--- a/test/com/facebook/buck/java/FakeDefaultJavaLibraryRule.java
+++ b/test/com/facebook/buck/java/FakeDefaultJavaLibraryRule.java
@@ -16,6 +16,7 @@
 
 package com.facebook.buck.java;
 
+import com.facebook.buck.rules.BuildRule;
 import com.facebook.buck.rules.BuildRuleParams;
 import com.facebook.buck.rules.BuildRuleResolver;
 import com.facebook.buck.rules.FakeAbstractBuildRuleBuilderParams;
@@ -35,13 +36,13 @@
                                        Set<SourcePath> resources,
                                        Optional<String> proguardConfig,
                                        AnnotationProcessingParams annotationProcessingParams,
-                                       boolean exportDeps,
+                                       Set<BuildRule> exportedDeps,
                                        boolean ruleInputsAreCached) {
     super(buildRuleParams,
         srcs,
         resources,
         proguardConfig,
-        exportDeps,
+        exportedDeps,
         JavacOptions.builder().setAnnotationProcessingData(annotationProcessingParams).build()
     );
 
@@ -71,7 +72,7 @@
           resources,
           proguardConfig,
           processingParams,
-          exportDeps,
+          getBuildTargetsAsBuildRules(ruleResolver, exportedDeps),
           ruleInputsAreCached);
     }
 
diff --git a/test/com/facebook/buck/java/testdata/warn_on_transitive/BUCK b/test/com/facebook/buck/java/testdata/warn_on_transitive/BUCK
index 1978a26..a8bfa9e 100644
--- a/test/com/facebook/buck/java/testdata/warn_on_transitive/BUCK
+++ b/test/com/facebook/buck/java/testdata/warn_on_transitive/BUCK
@@ -3,6 +3,11 @@
 # with some hard-coded Java source code into a single library.
 
 java_library(
+  name = 'blargh',
+  srcs = ['Blargh.java'],
+)
+
+java_library(
   name = 'meh',
   srcs = ['Meh.java'],
 )
@@ -10,14 +15,21 @@
 java_library(
   name = 'foo',
   srcs = ['Foo.java'],
-  export_deps = True,
-  deps = [':meh']
+  exported_deps = [
+    ':meh'
+  ],
+  deps = [
+    ':blargh',
+  ]
 )
 
 java_library(
   name = 'bar',
   srcs = ['Bar.java'],
-  deps = [':foo'],
+  deps = [
+    ':foo', 
+    ':blargh'
+  ],
 )
 
 java_library(
diff --git a/test/com/facebook/buck/java/testdata/warn_on_transitive/Blargh.java b/test/com/facebook/buck/java/testdata/warn_on_transitive/Blargh.java
new file mode 100644
index 0000000..8469ca1
--- /dev/null
+++ b/test/com/facebook/buck/java/testdata/warn_on_transitive/Blargh.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2013-present Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License. You may obtain
+ * a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.example;
+
+public class Blargh {}
diff --git a/test/com/facebook/buck/java/testdata/warn_on_transitive/Foo.java b/test/com/facebook/buck/java/testdata/warn_on_transitive/Foo.java
index 6682e61..8899454 100644
--- a/test/com/facebook/buck/java/testdata/warn_on_transitive/Foo.java
+++ b/test/com/facebook/buck/java/testdata/warn_on_transitive/Foo.java
@@ -17,5 +17,5 @@
 package com.example;
 
 public class Foo {
-  private Meh meh;  
+  private Meh meh;
 }
diff --git a/test/com/facebook/buck/java/testdata/warn_on_transitive/Raz.java b/test/com/facebook/buck/java/testdata/warn_on_transitive/Raz.java
index 95691e2..f58bca6 100644
--- a/test/com/facebook/buck/java/testdata/warn_on_transitive/Raz.java
+++ b/test/com/facebook/buck/java/testdata/warn_on_transitive/Raz.java
@@ -19,4 +19,5 @@
 public class Raz {
   private Bar bar;
   private Meh meh;
+  private Blargh blargh;
 }
diff --git a/testdata/com/facebook/buck/cli/TargetsCommandTestBuckJson1.js b/testdata/com/facebook/buck/cli/TargetsCommandTestBuckJson1.js
index 263363a..d6fd923 100644
--- a/testdata/com/facebook/buck/cli/TargetsCommandTestBuckJson1.js
+++ b/testdata/com/facebook/buck/cli/TargetsCommandTestBuckJson1.js
@@ -3,7 +3,7 @@
   "buck.output_file" : "{$OUTPUT_FILE}",
   "buck.base_path" : "testdata/com/facebook/buck/cli",
   "deps" : [ ],
-  "export_deps": false,
+  "exported_deps": [],
   "name" : "test-library",
   "proguard_config" : null, 
   "resources" : [ ],
diff --git a/third-party/java/jetty/BUCK b/third-party/java/jetty/BUCK
index cb78886..11d338b 100644
--- a/third-party/java/jetty/BUCK
+++ b/third-party/java/jetty/BUCK
@@ -10,8 +10,8 @@
 
 java_library(
   name = 'jetty',
-  export_deps = True,
-  deps = [
+  deps = [],
+  exported_deps = [
     ':jetty-all',
     ':servlet-api',
   ],
diff --git a/third-party/java/neo4j/BUCK b/third-party/java/neo4j/BUCK
index ee2ea6d..adda052 100644
--- a/third-party/java/neo4j/BUCK
+++ b/third-party/java/neo4j/BUCK
@@ -20,8 +20,8 @@
 
 java_library(
   name = 'neo4j',
-  export_deps = True,
-  deps = [
+  deps = [],
+  exported_deps = [
     ':geronimo-jta',
     ':lucene-core',
     ':neo4j-kernel',
