diff --git a/transport/include/hidl/HidlBinderSupport.h b/transport/include/hidl/HidlBinderSupport.h
index 13b67fd..08989e2 100644
--- a/transport/include/hidl/HidlBinderSupport.h
+++ b/transport/include/hidl/HidlBinderSupport.h
@@ -23,7 +23,9 @@
 #include <hidl/MQDescriptor.h>
 #include <hidl/Static.h>
 #include <hwbinder/IBinder.h>
+#include <hwbinder/IPCThreadState.h>
 #include <hwbinder/Parcel.h>
+#include <hwbinder/ProcessState.h>
 #include <android/hidl/base/1.0/BnBase.h>
 // Defines functions for hidl_string, hidl_version, Status, hidl_vec, MQDescriptor,
 // etc. to interact with Parcel.
@@ -353,6 +355,14 @@
     }
 }
 
+inline void configureBinderRpcThreadpool(size_t maxThreads, bool callerWillJoin) {
+    ProcessState::self()->setThreadPoolConfiguration(maxThreads, callerWillJoin /*callerJoinsPool*/);
+}
+
+inline void joinBinderRpcThreadpool() {
+    IPCThreadState::self()->joinThreadPool();
+}
+
 }  // namespace hardware
 }  // namespace android
 
diff --git a/transport/include/hidl/HidlTransportSupport.h b/transport/include/hidl/HidlTransportSupport.h
index 190227f..eabb75d 100644
--- a/transport/include/hidl/HidlTransportSupport.h
+++ b/transport/include/hidl/HidlTransportSupport.h
@@ -24,6 +24,35 @@
 namespace android {
 namespace hardware {
 
+/* Configures the threadpool used for handling incoming RPC calls in this process.
+ *
+ * This method MUST be called before interacting with any HIDL interfaces,
+ * including the IFoo::getService and IFoo::registerAsService methods.
+ *
+ * @param maxThreads maximum number of threads in this process
+ * @param callerWillJoin whether the caller will join the threadpool later.
+ *
+ * Note that maxThreads must include the caller thread if callerWillJoin is true;
+ *
+ * If you want to create a threadpool of 5 threads, without the caller ever joining:
+ *   configureRpcThreadPool(5, false);
+ * If you want to create a threadpool of 1 thread, with the caller joining:
+ *   configureRpcThreadPool(1, true); // transport won't launch any threads by itself
+ *
+ */
+inline void configureRpcThreadpool(size_t maxThreads, bool callerWillJoin) {
+    // TODO(b/32756130) this should be transport-dependent
+    configureBinderRpcThreadpool(maxThreads, callerWillJoin);
+}
+
+/* Joins a threadpool that you configured earlier with
+ * configureRpcThreadPool(x, true);
+ */
+inline void joinRpcThreadpool() {
+    // TODO(b/32756130) this should be transport-dependent
+    joinBinderRpcThreadpool();
+}
+
 // cast the interface IParent to IChild.
 // Return nullptr if parent is null or any failure.
 template<typename IChild, typename IParent, typename BpChild, typename BpParent>
diff --git a/transport/include/hidl/LegacySupport.h b/transport/include/hidl/LegacySupport.h
index 2ff1785..8fd1795 100644
--- a/transport/include/hidl/LegacySupport.h
+++ b/transport/include/hidl/LegacySupport.h
@@ -14,10 +14,9 @@
  * limitations under the License.
  */
 
+#include <hidl/HidlTransportSupport.h>
+#include <sys/wait.h>
 #include <utils/Log.h>
-
-#include <hwbinder/IPCThreadState.h>
-#include <hwbinder/ProcessState.h>
 #include <utils/Errors.h>
 #include <utils/StrongPointer.h>
 
@@ -53,27 +52,16 @@
 }
 
 /**
- * Launches the RPC threadpool. This method never returns.
- *
- * Return value is exit status.
- */
-inline int launchRpcServer(size_t maxThreads) {
-    ProcessState::self()->setThreadPoolMaxThreadCount(maxThreads);
-    ProcessState::self()->startThreadPool();
-    IPCThreadState::self()->joinThreadPool();
-
-    return 0;
-}
-
-/**
  * Creates default passthrough service implementation. This method never returns.
  *
  * Return value is exit status.
  */
 template<class Interface>
-int defaultPassthroughServiceImplementation(std::string name) {
+int defaultPassthroughServiceImplementation(std::string name, size_t maxThreads = 1) {
+    configureRpcThreadpool(maxThreads, true);
     registerPassthroughServiceImplementation<Interface>(name);
-    return launchRpcServer(0);
+    joinRpcThreadpool();
+    return 0;
 }
 
 }  // namespace hardware
