diff --git a/generator/templates/dawn_wire/client/ApiProcs.cpp b/generator/templates/dawn_wire/client/ApiProcs.cpp
index a604a7f..00a207f 100644
--- a/generator/templates/dawn_wire/client/ApiProcs.cpp
+++ b/generator/templates/dawn_wire/client/ApiProcs.cpp
@@ -23,6 +23,7 @@
 #include <vector>
 
 namespace dawn_wire { namespace client {
+
     namespace {
 
         //* Outputs an rvalue that's the number of elements a pointer member points to.
@@ -176,8 +177,8 @@
                     }
                 {% endif %}
 
+                auto self = reinterpret_cast<{{as_wireType(type)}}>(cSelf);
                 {% if Suffix not in client_handwritten_commands %}
-                    auto self = reinterpret_cast<{{as_wireType(type)}}>(cSelf);
                     Device* device = self->device;
                     {{Suffix}}Cmd cmd;
 
@@ -202,9 +203,9 @@
                         return reinterpret_cast<{{as_cType(method.return_type.name)}}>(allocation->object.get());
                     {% endif %}
                 {% else %}
-                    return ClientHandwritten{{Suffix}}(cSelf
+                    return self->{{method.name.CamelCase()}}(
                         {%- for arg in method.arguments -%}
-                            , {{as_varName(arg.name)}}
+                            {%if not loop.first %}, {% endif %} {{as_varName(arg.name)}}
                         {%- endfor -%});
                 {% endif %}
             }
@@ -235,6 +236,12 @@
         {% endif %}
     {% endfor %}
 
+    void ClientDeviceReference(WGPUDevice) {
+    }
+
+    void ClientDeviceRelease(WGPUDevice) {
+    }
+
     namespace {
         WGPUInstance ClientCreateInstance(WGPUInstanceDescriptor const* descriptor) {
             UNREACHABLE();
diff --git a/src/dawn_wire/BUILD.gn b/src/dawn_wire/BUILD.gn
index aa8b0c0..8b33d5c 100644
--- a/src/dawn_wire/BUILD.gn
+++ b/src/dawn_wire/BUILD.gn
@@ -64,7 +64,6 @@
     "WireDeserializeAllocator.h",
     "WireServer.cpp",
     "client/ApiObjects.h",
-    "client/ApiProcs.cpp",
     "client/Buffer.cpp",
     "client/Buffer.h",
     "client/Client.cpp",
diff --git a/src/dawn_wire/CMakeLists.txt b/src/dawn_wire/CMakeLists.txt
index 579d46a..e7927fa 100644
--- a/src/dawn_wire/CMakeLists.txt
+++ b/src/dawn_wire/CMakeLists.txt
@@ -30,7 +30,6 @@
     "WireDeserializeAllocator.h"
     "WireServer.cpp"
     "client/ApiObjects.h"
-    "client/ApiProcs.cpp"
     "client/Buffer.cpp"
     "client/Buffer.h"
     "client/Client.cpp"
diff --git a/src/dawn_wire/client/ApiProcs.cpp b/src/dawn_wire/client/ApiProcs.cpp
deleted file mode 100644
index db4365b..0000000
--- a/src/dawn_wire/client/ApiProcs.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2019 The Dawn Authors
-//
-// 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.
-
-#include "dawn_wire/client/ApiObjects.h"
-#include "dawn_wire/client/ApiProcs_autogen.h"
-#include "dawn_wire/client/Client.h"
-
-namespace dawn_wire { namespace client {
-
-    void ClientHandwrittenBufferMapReadAsync(WGPUBuffer cBuffer,
-                                             WGPUBufferMapReadCallback callback,
-                                             void* userdata) {
-        Buffer* buffer = reinterpret_cast<Buffer*>(cBuffer);
-        buffer->MapReadAsync(callback, userdata);
-    }
-
-    void ClientHandwrittenBufferMapWriteAsync(WGPUBuffer cBuffer,
-                                              WGPUBufferMapWriteCallback callback,
-                                              void* userdata) {
-        Buffer* buffer = reinterpret_cast<Buffer*>(cBuffer);
-        buffer->MapWriteAsync(callback, userdata);
-    }
-
-    void ClientHandwrittenBufferSetSubData(WGPUBuffer cBuffer,
-                                           uint64_t start,
-                                           uint64_t count,
-                                           const void* data) {
-        Buffer* buffer = reinterpret_cast<Buffer*>(cBuffer);
-        buffer->SetSubData(start, count, data);
-    }
-
-    void* ClientHandwrittenBufferGetMappedRange(WGPUBuffer cBuffer) {
-        Buffer* buffer = reinterpret_cast<Buffer*>(cBuffer);
-        return buffer->GetMappedRange();
-    }
-
-    const void* ClientHandwrittenBufferGetConstMappedRange(WGPUBuffer cBuffer) {
-        Buffer* buffer = reinterpret_cast<Buffer*>(cBuffer);
-        return buffer->GetConstMappedRange();
-    }
-
-    void ClientHandwrittenBufferUnmap(WGPUBuffer cBuffer) {
-        Buffer* buffer = reinterpret_cast<Buffer*>(cBuffer);
-        buffer->Unmap();
-    }
-
-    void ClientHandwrittenBufferDestroy(WGPUBuffer cBuffer) {
-        Buffer* buffer = reinterpret_cast<Buffer*>(cBuffer);
-        buffer->Destroy();
-    }
-
-    WGPUBuffer ClientHandwrittenDeviceCreateBuffer(WGPUDevice cDevice,
-                                                   const WGPUBufferDescriptor* descriptor) {
-        Device* device = reinterpret_cast<Device*>(cDevice);
-        return Buffer::Create(device, descriptor);
-    }
-
-    WGPUCreateBufferMappedResult ClientHandwrittenDeviceCreateBufferMapped(
-        WGPUDevice cDevice,
-        const WGPUBufferDescriptor* descriptor) {
-        Device* device = reinterpret_cast<Device*>(cDevice);
-        return Buffer::CreateMapped(device, descriptor);
-    }
-
-    void ClientHandwrittenDevicePushErrorScope(WGPUDevice cDevice, WGPUErrorFilter filter) {
-        Device* device = reinterpret_cast<Device*>(cDevice);
-        device->PushErrorScope(filter);
-    }
-
-    bool ClientHandwrittenDevicePopErrorScope(WGPUDevice cDevice,
-                                              WGPUErrorCallback callback,
-                                              void* userdata) {
-        Device* device = reinterpret_cast<Device*>(cDevice);
-        return device->RequestPopErrorScope(callback, userdata);
-    }
-
-    uint64_t ClientHandwrittenFenceGetCompletedValue(WGPUFence cSelf) {
-        Fence* fence = reinterpret_cast<Fence*>(cSelf);
-        return fence->GetCompletedValue();
-    }
-
-    void ClientHandwrittenFenceOnCompletion(WGPUFence cFence,
-                                            uint64_t value,
-                                            WGPUFenceOnCompletionCallback callback,
-                                            void* userdata) {
-        Fence* fence = reinterpret_cast<Fence*>(cFence);
-        fence->OnCompletion(value, callback, userdata);
-    }
-
-    WGPUFence ClientHandwrittenQueueCreateFence(WGPUQueue cSelf,
-                                                WGPUFenceDescriptor const* descriptor) {
-        Queue* queue = reinterpret_cast<Queue*>(cSelf);
-        return queue->CreateFence(descriptor);
-    }
-
-    void ClientHandwrittenQueueSignal(WGPUQueue cQueue, WGPUFence cFence, uint64_t signalValue) {
-        Queue* queue = reinterpret_cast<Queue*>(cQueue);
-        queue->Signal(cFence, signalValue);
-    }
-
-    void ClientHandwrittenQueueWriteBuffer(WGPUQueue cQueue,
-                                           WGPUBuffer cBuffer,
-                                           uint64_t bufferOffset,
-                                           const void* data,
-                                           size_t size) {
-        Queue* queue = reinterpret_cast<Queue*>(cQueue);
-        queue->WriteBuffer(cBuffer, bufferOffset, data, size);
-    }
-
-    void ClientDeviceReference(WGPUDevice) {
-    }
-
-    void ClientDeviceRelease(WGPUDevice) {
-    }
-
-    WGPUQueue ClientHandwrittenDeviceGetDefaultQueue(WGPUDevice cSelf) {
-        Device* device = reinterpret_cast<Device*>(cSelf);
-        return device->GetDefaultQueue();
-    }
-
-    void ClientHandwrittenDeviceSetUncapturedErrorCallback(WGPUDevice cSelf,
-                                                           WGPUErrorCallback callback,
-                                                           void* userdata) {
-        Device* device = reinterpret_cast<Device*>(cSelf);
-        device->SetUncapturedErrorCallback(callback, userdata);
-    }
-    void ClientHandwrittenDeviceSetDeviceLostCallback(WGPUDevice cSelf,
-                                                      WGPUDeviceLostCallback callback,
-                                                      void* userdata) {
-        Device* device = reinterpret_cast<Device*>(cSelf);
-        device->SetDeviceLostCallback(callback, userdata);
-    }
-
-}}  // namespace dawn_wire::client
diff --git a/src/dawn_wire/client/ClientDoers.cpp b/src/dawn_wire/client/ClientDoers.cpp
index 55818ba..8ec5e5a 100644
--- a/src/dawn_wire/client/ClientDoers.cpp
+++ b/src/dawn_wire/client/ClientDoers.cpp
@@ -43,7 +43,7 @@
     bool Client::DoDevicePopErrorScopeCallback(uint64_t requestSerial,
                                                WGPUErrorType errorType,
                                                const char* message) {
-        return mDevice->PopErrorScope(requestSerial, errorType, message);
+        return mDevice->OnPopErrorScopeCallback(requestSerial, errorType, message);
     }
 
     bool Client::DoBufferMapReadAsyncCallback(Buffer* buffer,
diff --git a/src/dawn_wire/client/Device.cpp b/src/dawn_wire/client/Device.cpp
index 43361b3..64b1b04 100644
--- a/src/dawn_wire/client/Device.cpp
+++ b/src/dawn_wire/client/Device.cpp
@@ -91,7 +91,7 @@
         mClient->SerializeCommand(cmd);
     }
 
-    bool Device::RequestPopErrorScope(WGPUErrorCallback callback, void* userdata) {
+    bool Device::PopErrorScope(WGPUErrorCallback callback, void* userdata) {
         if (mErrorScopeStackSize == 0) {
             return false;
         }
@@ -111,7 +111,9 @@
         return true;
     }
 
-    bool Device::PopErrorScope(uint64_t requestSerial, WGPUErrorType type, const char* message) {
+    bool Device::OnPopErrorScopeCallback(uint64_t requestSerial,
+                                         WGPUErrorType type,
+                                         const char* message) {
         switch (type) {
             case WGPUErrorType_NoError:
             case WGPUErrorType_Validation:
@@ -135,6 +137,15 @@
         return true;
     }
 
+    WGPUBuffer Device::CreateBuffer(const WGPUBufferDescriptor* descriptor) {
+        return Buffer::Create(this, descriptor);
+    }
+
+    WGPUCreateBufferMappedResult Device::CreateBufferMapped(
+        const WGPUBufferDescriptor* descriptor) {
+        return Buffer::CreateMapped(this, descriptor);
+    }
+
     WGPUQueue Device::GetDefaultQueue() {
         mDefaultQueue->refcount++;
         return reinterpret_cast<WGPUQueue>(mDefaultQueue);
diff --git a/src/dawn_wire/client/Device.h b/src/dawn_wire/client/Device.h
index 42dff18..5981124 100644
--- a/src/dawn_wire/client/Device.h
+++ b/src/dawn_wire/client/Device.h
@@ -32,14 +32,18 @@
         ~Device();
 
         Client* GetClient();
-        void HandleError(WGPUErrorType errorType, const char* message);
-        void HandleDeviceLost(const char* message);
         void SetUncapturedErrorCallback(WGPUErrorCallback errorCallback, void* errorUserdata);
         void SetDeviceLostCallback(WGPUDeviceLostCallback errorCallback, void* errorUserdata);
-
         void PushErrorScope(WGPUErrorFilter filter);
-        bool RequestPopErrorScope(WGPUErrorCallback callback, void* userdata);
-        bool PopErrorScope(uint64_t requestSerial, WGPUErrorType type, const char* message);
+        bool PopErrorScope(WGPUErrorCallback callback, void* userdata);
+        WGPUBuffer CreateBuffer(const WGPUBufferDescriptor* descriptor);
+        WGPUCreateBufferMappedResult CreateBufferMapped(const WGPUBufferDescriptor* descriptor);
+
+        void HandleError(WGPUErrorType errorType, const char* message);
+        void HandleDeviceLost(const char* message);
+        bool OnPopErrorScopeCallback(uint64_t requestSerial,
+                                     WGPUErrorType type,
+                                     const char* message);
 
         WGPUQueue GetDefaultQueue();
 
