diff --git a/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancerFactory2.java b/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancerFactory2.java
new file mode 100644
index 0000000..3471265
--- /dev/null
+++ b/grpclb/src/main/java/io/grpc/grpclb/GrpclbLoadBalancerFactory2.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2017, Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *    * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *    * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ *    * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package io.grpc.grpclb;
+
+import io.grpc.ExperimentalApi;
+import io.grpc.LoadBalancer2;
+import io.grpc.PickFirstBalancerFactory2;
+import io.grpc.util.RoundRobinLoadBalancerFactory2;
+
+/**
+ * A factory for {@link LoadBalancer2}s that uses the GRPCLB protocol.
+ *
+ * <p><strong>TECHNICAL PREVIEW: </strong>The name of this class is temporary. It will be renamed to
+ * {@code GrpclbLoadBalancerFactory} during <a href="https://github.com/grpc/grpc-java/issues/2656">
+ * transition to LBv2</a>. You should use it only if you want to experiment the LBv2 code path.
+ *
+ * <p><b>Experimental:</b>This only works with the GRPCLB load-balancer service, which is not
+ * available yet. Right now it's only good for internal testing.
+ */
+@ExperimentalApi("https://github.com/grpc/grpc-java/issues/1782")
+public class GrpclbLoadBalancerFactory2 extends LoadBalancer2.Factory {
+
+  private static final GrpclbLoadBalancerFactory2 instance = new GrpclbLoadBalancerFactory2();
+
+  private GrpclbLoadBalancerFactory2() {
+  }
+
+  public static GrpclbLoadBalancerFactory2 getInstance() {
+    return instance;
+  }
+
+  @Override
+  public LoadBalancer2 newLoadBalancer(LoadBalancer2.Helper helper) {
+    return new GrpclbLoadBalancer2(
+        helper, PickFirstBalancerFactory2.getInstance(),
+        RoundRobinLoadBalancerFactory2.getInstance());
+  }
+}
