diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl
index 30d20d8..25c01bb 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl
@@ -14,19 +14,19 @@
  public:
   static const char* Name_;
 
-  typedef {{interface.name}}Proxy Proxy_;
-  typedef {{interface.name}}Stub Stub_;
+  using Proxy_ = {{interface.name}}Proxy;
+  using Stub_ = {{interface.name}}Stub;
 
-  typedef {{interface.name}}RequestValidator RequestValidator_;
+  using RequestValidator_ = {{interface.name}}RequestValidator;
 {%- if interface|has_callbacks %}
-  typedef {{interface.name}}ResponseValidator ResponseValidator_;
+  using ResponseValidator_ = {{interface.name}}ResponseValidator;
 {%- else %}
-  typedef mojo::PassThroughFilter ResponseValidator_;
+  using ResponseValidator_ = mojo::PassThroughFilter;
 {%- endif %}
 {% if interface.client %}
-  typedef {{interface.client}} Client;
+  using Client = {{interface.client}};
 {% else %}
-  typedef mojo::NoInterface Client;
+  using Client = mojo::NoInterface;
 {% endif %}
 
 {#--- Constants #}
@@ -44,6 +44,9 @@
   virtual ~{{interface.name}}() {}
 
 {%- for method in interface.methods %}
+{%    if method.response_parameters != None %}
+  using {{method.name}}Callback = {{interface_macros.declare_callback(method)}};
+{%-   endif %}
   virtual void {{method.name}}({{interface_macros.declare_request_params("", method)}}) = 0;
 {%- endfor %}
 };
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
index fdbe8ca..2b45808 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
@@ -104,12 +104,12 @@
     : public mojo::MessageReceiver {
  public:
   {{class_name}}_{{method.name}}_ForwardToCallback(
-      const {{interface_macros.declare_callback(method)}}& callback)
+      const {{class_name}}::{{method.name}}Callback& callback)
       : callback_(callback) {
   }
   virtual bool Accept(mojo::Message* message) override;
  private:
-  {{interface_macros.declare_callback(method)}} callback_;
+  {{class_name}}::{{method.name}}Callback callback_;
   MOJO_DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback);
 };
 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept(
@@ -175,7 +175,7 @@
 {%-     set params_description =
             "%s.%s response"|format(interface.name, method.name) %}
 class {{class_name}}_{{method.name}}_ProxyToResponder
-    : public {{interface_macros.declare_callback(method)}}::Runnable {
+    : public {{class_name}}::{{method.name}}Callback::Runnable {
  public:
   virtual ~{{class_name}}_{{method.name}}_ProxyToResponder() {
     delete responder_;
@@ -257,10 +257,10 @@
               message->mutable_payload());
 
       params->DecodePointersAndHandles(message->mutable_handles());
-      {{interface_macros.declare_callback(method)}}::Runnable* runnable =
+      {{class_name}}::{{method.name}}Callback::Runnable* runnable =
           new {{class_name}}_{{method.name}}_ProxyToResponder(
               message->request_id(), responder);
-      {{interface_macros.declare_callback(method)}} callback(runnable);
+      {{class_name}}::{{method.name}}Callback callback(runnable);
       {{alloc_params(method.parameters)|indent(6)}}
       // A null |sink_| typically means there is a missing call to
       // InterfacePtr::set_client().
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl
index fbefce2..7644b2e 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl
@@ -17,7 +17,7 @@
 {%- macro declare_request_params(prefix, method) -%}
 {{declare_params(prefix, method.parameters)}}
 {%-   if method.response_parameters != None -%}
-{%- if method.parameters %}, {% endif %}
-const {{declare_callback(method)}}& callback
+{%- if method.parameters %}, {% endif -%}
+const {{method.name}}Callback& callback
 {%-   endif -%}
 {%- endmacro -%}
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl
index 3da6c32..25449b7 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl
@@ -40,16 +40,16 @@
 {#--- Interface Forward Declarations -#}
 {%  for interface in interfaces %}
 class {{interface.name}};
-typedef mojo::InterfacePtr<{{interface.name}}> {{interface.name}}Ptr;
+using {{interface.name}}Ptr = mojo::InterfacePtr<{{interface.name}}>;
 {%  endfor %}
 
 {#--- Struct Forward Declarations -#}
 {%  for struct in structs %}
 class {{struct.name}};
 {%    if struct|should_inline %}
-typedef mojo::InlinedStructPtr<{{struct.name}}> {{struct.name}}Ptr;
+using {{struct.name}}Ptr = mojo::InlinedStructPtr<{{struct.name}}>;
 {%    else %}
-typedef mojo::StructPtr<{{struct.name}}> {{struct.name}}Ptr;
+using {{struct.name}}Ptr = mojo::StructPtr<{{struct.name}}>;
 {%    endif %}
 {%  endfor %}
 
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl
index 25b39b3..ebcba7b 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl
@@ -1,7 +1,7 @@
 
 class {{struct.name}} {
  public:
-  typedef internal::{{struct.name}}_Data Data_;
+  using Data_ = internal::{{struct.name}}_Data;
 
 {#--- Constants #}
 {%- for constant in struct.constants %}
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_declaration.tmpl
index 91ea7cf..0420c8d 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_declaration.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_declaration.tmpl
@@ -1,7 +1,7 @@
 class {{union.name}} {
  public:
-  typedef internal::{{union.name}}_Data Data_;
-  typedef Data_::{{union.name}}_Tag Tag;
+  using Data_ = internal::{{union.name}}_Data;
+  using Tag = Data_::{{union.name}}_Tag;
 
   static {{union.name}}Ptr New();
 
