diff --git a/src/tools/vppapigen/vppapigen.py b/src/tools/vppapigen/vppapigen.py
index a230e22..620b2ef 100755
--- a/src/tools/vppapigen/vppapigen.py
+++ b/src/tools/vppapigen/vppapigen.py
@@ -41,6 +41,7 @@
         'service': 'SERVICE',
         'rpc': 'RPC',
         'returns': 'RETURNS',
+        'null': 'NULL',
         'stream': 'STREAM',
         'events': 'EVENTS',
         'define': 'DEFINE',
@@ -115,12 +116,6 @@
     # A string containing ignored characters (spaces and tabs)
     t_ignore = ' \t'
 
-
-class Iterator(type):
-    def __iter__(self):
-        return self.iter()
-
-
 class Service():
     def __init__(self, caller, reply, events=[], stream=False):
         self.caller = caller
@@ -346,7 +341,8 @@
             p[0] = p[1] + [p[2]]
 
     def p_service_statement(self, p):
-        '''service_statement : RPC ID RETURNS ID ';'
+        '''service_statement : RPC ID RETURNS NULL ';'
+                             | RPC ID RETURNS ID ';'
                              | RPC ID RETURNS STREAM ID ';'
                              | RPC ID RETURNS ID EVENTS event_list ';' '''
         if len(p) == 8:
@@ -571,15 +567,16 @@
                     if isinstance(o2, Service):
                         s['services'].append(o2)
 
-        # Create services implicitly
+
         msgs = {d.name: d for d in s['defines']}
         svcs = {s.caller: s for s in s['services']}
+        seen_services = {}
 
         for service in svcs:
             if service not in msgs:
                 raise ValueError('Service definition refers to unknown message'
                                  ' definition: {}'.format(service))
-            if svcs[service].reply not in msgs:
+            if svcs[service].reply != 'null' and svcs[service].reply not in msgs:
                 raise ValueError('Service definition refers to unknown message'
                                  ' definition in reply: {}'
                                  .format(svcs[service].reply))
@@ -588,12 +585,18 @@
                     raise ValueError('Service definition refers to unknown '
                                      'event: {} in message: {}'
                                      .format(event, service))
+                seen_services[event] = True
 
+        # Create services implicitly
         for d in msgs:
+            if d in seen_services:
+                continue
             if msgs[d].singular is True:
                 continue
-            if d.endswith('_counters'):
-                continue
+            #if d.endswith('_counters'):
+            #    continue
+            #if d.endswith('_event'):
+            #    continue
             if d.endswith('_reply'):
                 if d[:-6] in svcs:
                     continue
@@ -629,10 +632,16 @@
 
         return s
 
-    def process_imports(self, objs):
+    def process_imports(self, objs, in_import):
+        imported_objs = []
         for o in objs:
             if isinstance(o, Import):
-                return objs + self.process_imports(o.result)
+                return objs + self.process_imports(o.result, True)
+            if in_import:
+                if isinstance(o, Define) and o.typeonly:
+                    imported_objs.append(o)
+        if in_import:
+            return imported_objs
         return objs
 
 
@@ -664,9 +673,6 @@
 # Main
 #
 def main():
-    logging.basicConfig()
-    log = logging.getLogger('vppapigen')
-
     cliparser = argparse.ArgumentParser(description='VPP API generator')
     cliparser.add_argument('--pluginpath', default=""),
     cliparser.add_argument('--includedir', action='append'),
@@ -692,11 +698,18 @@
     else:
         filename = ''
 
+    if args.debug:
+        logging.basicConfig(stream=sys.stdout, level=logging.WARNING)
+    else:
+        logging.basicConfig()
+    log = logging.getLogger('vppapigen')
+
+
     parser = VPPAPI(debug=args.debug, filename=filename, logger=log)
     result = parser.parse_file(args.input, log)
 
     # Build a list of objects. Hash of lists.
-    result = parser.process_imports(result)
+    result = parser.process_imports(result, False)
     s = parser.process(result)
 
     # Add msg_id field
diff --git a/src/vlibmemory/memclnt.api b/src/vlibmemory/memclnt.api
index fb08f51..d03c105 100644
--- a/src/vlibmemory/memclnt.api
+++ b/src/vlibmemory/memclnt.api
@@ -17,6 +17,16 @@
 option version = "1.0.0";
 
 /*
+ * Define services not following the normal convetions here
+ */
+service {
+  rpc memclnt_rx_thread_suspend returns null;
+  rpc memclnt_read_timeout returns null;
+  rpc rx_thread_exit returns null;
+  rpc trace_plugin_msg_ids returns null;
+};
+
+/*
  * Create a client registration 
  */
 manual_print 
diff --git a/src/vnet/dhcp/dhcp.api b/src/vnet/dhcp/dhcp.api
index 721a1be..975aa6e 100644
--- a/src/vnet/dhcp/dhcp.api
+++ b/src/vnet/dhcp/dhcp.api
@@ -109,6 +109,10 @@
   u8 host_mac[6];
 };
 
+service {
+  rpc dhcp_client_config returns dhcp_client_config_reply events dhcp_compl_event;
+};
+
 /** \brief Dump DHCP proxy table
     @param client_index - opaque cookie to identify the sender
     @param True for IPv6 proxy table
diff --git a/src/vnet/interface.api b/src/vnet/interface.api
index a8733d1..a5a9184 100644
--- a/src/vnet/interface.api
+++ b/src/vnet/interface.api
@@ -1,5 +1,10 @@
 option version = "1.0.0";
 
+service {
+  rpc want_interface_events returns want_interface_events_reply
+    events sw_interface_event;
+};
+
 /** \brief Set flags on the interface
     @param client_index - opaque cookie to identify the sender
     @param context - sender context, to match reply w/ request
@@ -273,66 +278,6 @@
   u64 rx_mpls;
 };
 
-/** \brief Simple stats counters structure
-    @param vnet_counter_type- such as ip4, ip6, punts, etc
-    @param first_sw_if_index - first sw index in block of index, counts
-    @param count - number of counters, equal to the number of interfaces in
-      this stats block
-    @param data - contiguous block of u64 counters
-
-    vnet_counter_type defined in enums - plural - in vnet/interface.h
-*/
-manual_print manual_endian define vnet_interface_simple_counters
-{
-  u8 vnet_counter_type;
-  u32 first_sw_if_index;
-  u32 count;
-  u64 data[count];
-};
-
-/** \brief Combined stats counters structure
-    @param vnet_counter_type- such as ip4, ip6, punts, etc
-    @param first_sw_if_index - first sw index in block of index, counts
-    @param count - number of counters, equal to the number of interfaces in
-      this stats block
-    @param data - contiguous block of vlib_counter_t structures
-
-    vnet_counter_type defined in enums - plural - in vnet/interface.h
-*/
-manual_print manual_endian define vnet_interface_combined_counters
-{
-  u8 vnet_counter_type;
-  u32 first_sw_if_index;
-  u32 count;
-  vl_api_vlib_counter_t data[count];
-};
-
-
-/** \brief Simple per interface stats counters structure
-    @param count - number of elements in message
-    @param timestamp - u32 vlib timestamp for control plane
-    @param data[count] - vl_api_vnet_simple_counter_t 
-
-*/
-manual_print manual_endian define vnet_per_interface_simple_counters
-{
-  u32 count;
-  u32 timestamp;
-  vl_api_vnet_simple_counter_t data[count];
-};
-
-/** \brief Combined stats counters structure per interface
-    @param count - number of elements in message
-    @param timestamp - u32 vlib timestamp for control plane
-    @param data[count] - vl_api_vnet_combined_counter_t
-*/
-manual_print manual_endian define vnet_per_interface_combined_counters
-{
-  u32 count;
-  u32 timestamp;
-  vl_api_vnet_combined_counter_t data[count];
-};
-
 /** \brief Set unnumbered interface add / del request
     @param client_index - opaque cookie to identify the sender
     @param context - sender context, to match reply w/ request
diff --git a/src/vnet/ip/ip.api b/src/vnet/ip/ip.api
index 6ed5a9d..b94d6d7 100644
--- a/src/vnet/ip/ip.api
+++ b/src/vnet/ip/ip.api
@@ -686,6 +686,11 @@
   u8 mac_ip;
 };
 
+service {
+  rpc want_ip4_arp_events returns want_ip4_arp_events_reply
+    events ip4_arp_event;
+};
+
 /** \brief Register for ip6 nd resolution events
     @param client_index - opaque cookie to identify the sender
     @param context - sender context, to match reply w/ request
@@ -720,6 +725,11 @@
   u8 mac_ip;
 };
 
+service {
+  rpc want_ip6_nd_events returns want_ip6_nd_events_reply
+    events ip6_nd_event;
+};
+
 /** \brief Proxy ARP add / del request
     @param client_index - opaque cookie to identify the sender
     @param context - sender context, to match reply w/ request
diff --git a/src/vnet/l2/l2.api b/src/vnet/l2/l2.api
index 5102783..3fb6de0 100644
--- a/src/vnet/l2/l2.api
+++ b/src/vnet/l2/l2.api
@@ -182,6 +182,11 @@
   vl_api_mac_entry_t mac[n_macs];
 };
 
+service {
+  rpc want_l2_macs_events returns want_l2_macs_events_reply
+    events l2_macs_event;
+};
+
 /** \brief Set interface L2 flags (such as L2_LEARN, L2_FWD, 
     L2_FLOOD, L2_UU_FLOOD, or L2_ARP_TERM bits). This can be used
     to disable one or more of the features represented by the
diff --git a/src/vpp-api/vapi/vapi_c_gen.py b/src/vpp-api/vapi/vapi_c_gen.py
index 4b7da6a..60c54e4 100755
--- a/src/vpp-api/vapi/vapi_c_gen.py
+++ b/src/vpp-api/vapi/vapi_c_gen.py
@@ -70,6 +70,13 @@
     def __init__(self, name, fields):
         super(CStruct, self).__init__(name, fields)
 
+    def duplicate_barrier(func):
+        def func_wrapper(self):
+            name = self.get_c_name()
+            return "#ifndef defined_{}\n#define defined_{}\n{}\n#endif".format(name, name, func(self))
+        return func_wrapper
+
+    @duplicate_barrier
     def get_c_def(self):
         return "\n".join([
             "typedef struct __attribute__((__packed__)) {",
@@ -271,6 +278,13 @@
             "}",
         ])
 
+    def duplicate_barrier(func):
+        def func_wrapper(self):
+            name = self.get_payload_struct_name()
+            return "#ifndef defined_{}\n#define defined_{}\n{}\n#endif".format(name, name, func(self))
+        return func_wrapper
+
+    @duplicate_barrier
     def get_c_def(self):
         if self.has_payload():
             return "\n".join([
@@ -585,9 +599,12 @@
     print("")
     function_attrs = "static inline "
     for t in parser.types_by_json[j].values():
+        print("#ifndef defined_inline_%s" % t.get_c_name())
+        print("#define defined_inline_%s" % t.get_c_name())
         print("%s%s" % (function_attrs, t.get_swap_to_be_func_def()))
         print("")
         print("%s%s" % (function_attrs, t.get_swap_to_host_func_def()))
+        print("#endif")
         print("")
     for m in parser.messages_by_json[j].values():
         if m.has_payload():
diff --git a/src/vpp/oam/oam.api b/src/vpp/oam/oam.api
index d03902e..3823d8e 100644
--- a/src/vpp/oam/oam.api
+++ b/src/vpp/oam/oam.api
@@ -45,6 +45,11 @@
   u32 pid;
 };
 
+service {
+  rpc want_oam_events returns want_oam_events_reply
+    events oam_event;
+};
+
 /** \brief OAM add / del target request
     @param client_index - opaque cookie to identify the sender
     @param context - sender context, to match reply w/ request
diff --git a/src/vpp/stats/stats.api b/src/vpp/stats/stats.api
index b429faa..2913d24 100644
--- a/src/vpp/stats/stats.api
+++ b/src/vpp/stats/stats.api
@@ -20,6 +20,43 @@
 
 option version = "1.0.0";
 
+import "vnet/interface.api";
+
+service {
+  rpc want_stats
+    returns want_stats_reply;
+  rpc want_interface_simple_stats
+    returns want_interface_simple_stats_reply
+    events vnet_interface_simple_counters;
+  rpc want_per_interface_simple_stats
+    returns want_per_interface_simple_stats_reply
+    events vnet_per_interface_simple_counters;
+  rpc want_interface_combined_stats
+    returns want_interface_combined_stats_reply
+    events vnet_interface_combined_counters;
+  rpc want_per_interface_combined_stats
+    returns want_per_interface_combined_stats_reply
+    events vnet_per_interface_combined_counters;
+  rpc want_ip4_fib_stats
+    returns want_ip4_fib_stats_reply
+    events vnet_ip4_fib_counters;
+  rpc want_ip6_fib_stats
+    returns want_ip6_fib_stats_reply
+    events vnet_ip6_fib_counters;
+  rpc want_ip4_mfib_stats
+    returns want_ip4_mfib_stats_reply
+    events vnet_ip4_mfib_counters;
+  rpc want_ip6_mfib_stats
+    returns want_ip6_mfib_stats_reply
+    events vnet_ip6_mfib_counters;
+  rpc want_ip4_nbr_stats
+    returns want_ip4_nbr_stats_reply
+    events vnet_ip4_nbr_counters;
+  rpc want_ip6_nbr_stats
+    returns want_ip6_nbr_stats_reply
+    events vnet_ip6_nbr_counters;
+};
+
 /** \brief Want Stats, enable/disable ALL stats updates
     @param client_index - opaque cookie to identify the sender
     @param context - sender context, to match reply w/ request
@@ -292,6 +329,64 @@
   vl_api_ip6_nbr_counter_t c[count];
 };
 
+/** \brief Simple stats counters structure
+    @param vnet_counter_type- such as ip4, ip6, punts, etc
+    @param first_sw_if_index - first sw index in block of index, counts
+    @param count - number of counters, equal to the number of interfaces in
+      this stats block
+    @param data - contiguous block of u64 counters
+
+    vnet_counter_type defined in enums - plural - in vnet/interface.h
+*/
+manual_print manual_endian define vnet_interface_simple_counters
+{
+  u8 vnet_counter_type;
+  u32 first_sw_if_index;
+  u32 count;
+  u64 data[count];
+};
+
+/** \brief Combined stats counters structure
+    @param vnet_counter_type- such as ip4, ip6, punts, etc
+    @param first_sw_if_index - first sw index in block of index, counts
+    @param count - number of counters, equal to the number of interfaces in
+      this stats block
+    @param data - contiguous block of vlib_counter_t structures
+
+    vnet_counter_type defined in enums - plural - in vnet/interface.h
+*/
+manual_print manual_endian define vnet_interface_combined_counters
+{
+  u8 vnet_counter_type;
+  u32 first_sw_if_index;
+  u32 count;
+  vl_api_vlib_counter_t data[count];
+};
+
+/** \brief Simple per interface stats counters structure
+    @param count - number of elements in message
+    @param timestamp - u32 vlib timestamp for control plane
+    @param data[count] - vl_api_vnet_simple_counter_t 
+
+*/
+manual_print manual_endian define vnet_per_interface_simple_counters
+{
+  u32 count;
+  u32 timestamp;
+  vl_api_vnet_simple_counter_t data[count];
+};
+
+/** \brief Combined stats counters structure per interface
+    @param count - number of elements in message
+    @param timestamp - u32 vlib timestamp for control plane
+    @param data[count] - vl_api_vnet_combined_counter_t
+*/
+manual_print manual_endian define vnet_per_interface_combined_counters
+{
+  u32 count;
+  u32 timestamp;
+  vl_api_vnet_combined_counter_t data[count];
+};
 
 /** \brief Request for a single block of summary stats
     @param client_index - opaque cookie to identify the sender
