diff --git a/Interface.cpp b/Interface.cpp
index ef4b573..f845bc5 100644
--- a/Interface.cpp
+++ b/Interface.cpp
@@ -46,5 +46,66 @@
     return true;
 }
 
+const std::vector<Method *> &Interface::methods() const {
+    return mMethods;
+}
+
+std::string Interface::getCppType(StorageMode mode, std::string *extra) const {
+    extra->clear();
+    const std::string base = "::android::sp<" + name() + ">";
+
+    switch (mode) {
+        case StorageMode_Stack:
+        case StorageMode_Result:
+            return base;
+
+        case StorageMode_Argument:
+            return "const " + base + "&";
+    }
+}
+
+void Interface::emitReaderWriter(
+        Formatter &out,
+        const std::string &name,
+        const std::string &parcelObj,
+        bool parcelObjIsPointer,
+        bool isReader,
+        ErrorMode mode) const {
+    const std::string parcelObjDeref =
+        parcelObj + (parcelObjIsPointer ? "->" : ".");
+
+    if (isReader) {
+        const std::string binderName = "_aidl_" + name + "_binder";
+
+        out << "::android::sp<::android::hidl::IBinder> "
+            << binderName << ";\n";
+
+        out << "_aidl_err = ";
+        out << parcelObjDeref
+            << "readNullableStrongBinder(&"
+            << binderName
+            << ");\n";
+
+        handleError(out, mode);
+
+        out << name
+            << " = "
+            << this->name()
+            << "::asInterface("
+            << binderName
+            << ");\n";
+    } else {
+        out << "_aidl_err = ";
+        out << parcelObjDeref
+            << "writeStrongBinder("
+            << this->name()
+            << "::asBinder("
+            << name
+            << "));\n";
+
+        handleError(out, mode);
+    }
+}
+
 }  // namespace android
 
