diff --git a/src/vnet/classify/classify.api b/src/vnet/classify/classify.api
index 52ab186..38c7343 100644
--- a/src/vnet/classify/classify.api
+++ b/src/vnet/classify/classify.api
@@ -13,14 +13,16 @@
  * limitations under the License.
  */
 
-option version = "2.0.0";
+option version = "3.0.0";
+
+import "vnet/interface_types.api";
 
 /** \brief Add/Delete classification table request
     @param client_index - opaque cookie to identify the sender
     @param context - sender context, to match reply w/ request
     @param is_add- if non-zero add the table, else delete it
     @param del_chain - if non-zero delete the whole chain of tables
-    @param table_index - if add, reuturns index of the created table, else specifies the table to delete  
+    @param table_index - if add, returns index of the created table, else specifies the table to delete
     @param nbuckets - number of buckets when adding a table
     @param memory_size - memory size when adding a table
     @param match_n_vectors - number of match vectors
@@ -44,24 +46,24 @@
 {
   u32 client_index;
   u32 context;
-  u8 is_add;
-  u8 del_chain;
-  u32 table_index;
-  u32 nbuckets;
-  u32 memory_size;
-  u32 skip_n_vectors;
-  u32 match_n_vectors;
-  u32 next_table_index;
-  u32 miss_next_index;
-  u32 current_data_flag;
-  i32 current_data_offset;
+  bool is_add;
+  bool del_chain;
+  u32 table_index [default=0xffffffff];
+  u32 nbuckets [default=2];
+  u32 memory_size [default=2097152];
+  u32 skip_n_vectors [default=0];
+  u32 match_n_vectors [default=1];
+  u32 next_table_index [default=0xffffffff];
+  u32 miss_next_index [default=0xffffffff];
+  u8 current_data_flag [default=0];
+  i16 current_data_offset [default=0];
   u32 mask_len;
   u8 mask[mask_len];
 };
 
 /** \brief Add/Delete classification table response
     @param context - sender context, to match reply w/ request
-    @param retval - return code for the table add/del requst
+    @param retval - return code for the table add/del request
     @param new_table_index - for add, returned index of the new table
     @param skip_n_vectors - for add, returned value of skip_n_vectors in table
     @param match_n_vectors -for add, returned value of match_n_vectors in table
@@ -75,6 +77,14 @@
   u32 match_n_vectors;
 };
 
+enum classify_action : u8
+{
+  CLASSIFY_API_ACTION_NONE = 0,
+  CLASSIFY_API_ACTION_SET_IP4_FIB_INDEX = 1,
+  CLASSIFY_API_ACTION_SET_IP6_FIB_INDEX = 2,
+  CLASSIFY_API_ACTION_SET_METADATA = 3,
+};
+
 /** \brief Classify add / del session request
     @param client_index - opaque cookie to identify the sender
     @param context - sender context, to match reply w/ request
@@ -92,7 +102,7 @@
            2: Classified IP packets will be looked up from the
               specified ipv6 fib table (configured by metadata as VRF id).
               Only valid for L3 input ACL node
-           3: Classified packet will be steered to source routig policy
+           3: Classified packet will be steered to source routing policy
               of given index (in metadata).
               This is only valid for IPv6 packets redirected to a source
               routing node.
@@ -110,13 +120,13 @@
 {
   u32 client_index;
   u32 context;
-  u8 is_add;
+  bool is_add;
   u32 table_index;
-  u32 hit_next_index;
-  u32 opaque_index;
-  i32 advance;
-  u8 action;
-  u32 metadata;
+  u32 hit_next_index [default=0xffffffff];
+  u32 opaque_index [default=0xffffffff];
+  i32 advance [default=0];
+  vl_api_classify_action_t action [default=0];
+  u32 metadata [default=0];
   u32 match_len;
   u8 match[match_len];
 };
@@ -129,33 +139,43 @@
     @param ip6_table_index - ip6 classify table index (~0 for skip)
     @param l2_table_index  -  l2 classify table index (~0 for skip)
     @param is_add - Set if non-zero, else unset
-    Note: User is recommeneded to use just one valid table_index per call.
+    Note: User is recommended to use just one valid table_index per call.
           (ip4_table_index, ip6_table_index, or l2_table_index)
 */
 autoreply define policer_classify_set_interface
 {
   u32 client_index;
   u32 context;
-  u32 sw_if_index;
+  vl_api_interface_index_t sw_if_index;
   u32 ip4_table_index;
   u32 ip6_table_index;
   u32 l2_table_index;
-  u8 is_add;
+  bool is_add;
 };
 
+enum policer_classify_table : u8
+{
+  POLICER_CLASSIFY_API_TABLE_IP4,
+  POLICER_CLASSIFY_API_TABLE_IP6,
+  POLICER_CLASSIFY_API_TABLE_L2,
+};
+
+
 /** \brief Get list of policer classify interfaces and tables
     @param client_index - opaque cookie to identify the sender
     @param context - sender context, to match reply w/ request
     @param type - classify table type
+    @param sw_if_index - filter on sw_if_index
 */
 define policer_classify_dump
 {
   u32 client_index;
   u32 context;
-  u8 type;
+  vl_api_policer_classify_table_t type;
+  vl_api_interface_index_t sw_if_index;
 };
 
-/** \brief Policer iclassify operational state response.
+/** \brief Policer classify operational state response.
     @param context - sender context, to match reply w/ request
     @param sw_if_index - software interface index
     @param table_index - classify table index
@@ -163,7 +183,7 @@
 define policer_classify_details
 {
   u32 context;
-  u32 sw_if_index;
+  vl_api_interface_index_t sw_if_index;
   u32 table_index;
 };
 
@@ -199,7 +219,7 @@
 {
   u32 client_index;
   u32 context;
-  u32 sw_if_index;
+  vl_api_interface_index_t sw_if_index;
 };
 
 /** \brief Reply for classify table id by interface index request
@@ -214,7 +234,7 @@
 {
   u32 context;
   i32 retval;
-  u32 sw_if_index;
+  vl_api_interface_index_t sw_if_index;
   u32 l2_table_id;
   u32 ip4_table_id;
   u32 ip6_table_id;
@@ -300,27 +320,35 @@
     @param ip6_table_index - ip6 classify table index (~0 for skip)
     @param l2_table_index  -  l2 classify table index (~0 for skip)
     @param is_add - Set if non-zero, else unset
-    Note: User is recommeneded to use just one valid table_index per call.
+    Note: User is recommended to use just one valid table_index per call.
           (ip4_table_index, ip6_table_index, or l2_table_index)
 */
 autoreply define flow_classify_set_interface {
     u32 client_index;
     u32 context;
-    u32 sw_if_index;
+    vl_api_interface_index_t sw_if_index;
     u32 ip4_table_index;
     u32 ip6_table_index;
-    u8  is_add;
+    bool is_add;
+};
+
+enum flow_classify_table : u8
+{
+  FLOW_CLASSIFY_API_TABLE_IP4,
+  FLOW_CLASSIFY_API_TABLE_IP6,
 };
 
 /** \brief Get list of flow classify interfaces and tables
     @param client_index - opaque cookie to identify the sender
     @param context - sender context, to match reply w/ request
-    @param type - classify table type
+    @param type - flow classify table type
+    @param sw_if_index - filter on sw_if_index
 */
 define flow_classify_dump {
     u32 client_index;
     u32 context;
-    u8 type;
+    vl_api_flow_classify_table_t type;
+    vl_api_interface_index_t sw_if_index;
 };
 
 /** \brief Flow classify operational state response.
@@ -330,11 +358,11 @@
 */
 define flow_classify_details {
     u32 context;
-    u32 sw_if_index;
+    vl_api_interface_index_t sw_if_index;
     u32 table_index;
 };
 
-/** \brief Set/unset the classification table for an interface request 
+/** \brief Set/unset the classification table for an interface request
     @param client_index - opaque cookie to identify the sender
     @param context - sender context, to match reply w/ request
     @param is_ipv6 - ipv6 if non-zero, else ipv4
@@ -345,8 +373,8 @@
 {
   u32 client_index;
   u32 context;
-  u8 is_ipv6;
-  u32 sw_if_index;
+  bool is_ipv6;
+  vl_api_interface_index_t sw_if_index;
   u32 table_index;		/* ~0 => off */
 };
 
@@ -362,12 +390,12 @@
 {
   u32 client_index;
   u32 context;
-  u32 sw_if_index;
+  vl_api_interface_index_t sw_if_index;
   /* 3 x ~0 => off */
   u32 ip4_table_index;
   u32 ip6_table_index;
   u32 other_table_index;
-  u8 is_input;
+  bool is_input;
 };
 
 /** \brief Set/unset input ACL interface
@@ -378,18 +406,18 @@
     @param ip6_table_index - ip6 classify table index (~0 for skip)
     @param l2_table_index  -  l2 classify table index (~0 for skip)
     @param is_add - Set input ACL if non-zero, else unset
-    Note: User is recommeneded to use just one valid table_index per call.
+    Note: User is recommended to use just one valid table_index per call.
           (ip4_table_index, ip6_table_index, or l2_table_index)
 */
 autoreply define input_acl_set_interface
 {
   u32 client_index;
   u32 context;
-  u32 sw_if_index;
+  vl_api_interface_index_t sw_if_index;
   u32 ip4_table_index;
   u32 ip6_table_index;
   u32 l2_table_index;
-  u8 is_add;
+  bool is_add;
 };
 
 /** \brief Set/unset output ACL interface
@@ -400,18 +428,18 @@
     @param ip6_table_index - ip6 classify table index (~0 for skip)
     @param l2_table_index  -  l2 classify table index (~0 for skip)
     @param is_add - Set output ACL if non-zero, else unset
-    Note: User is recommeneded to use just one valid table_index per call.
+    Note: User is recommended to use just one valid table_index per call.
           (ip4_table_index, ip6_table_index, or l2_table_index)
 */
 autoreply define output_acl_set_interface
 {
   u32 client_index;
   u32 context;
-  u32 sw_if_index;
+  vl_api_interface_index_t sw_if_index;
   u32 ip4_table_index;
   u32 ip6_table_index;
   u32 l2_table_index;
-  u8 is_add;
+  bool is_add;
 };
 
 /*
@@ -419,4 +447,3 @@
  * eval: (c-set-style "gnu")
  * End:
  */
- 
diff --git a/src/vnet/classify/classify_api.c b/src/vnet/classify/classify_api.c
index 98f4366..0725a9c 100644
--- a/src/vnet/classify/classify_api.c
+++ b/src/vnet/classify/classify_api.c
@@ -71,8 +71,6 @@
 _(match_n_vectors)                              \
 _(next_table_index)                             \
 _(miss_next_index)                              \
-_(current_data_flag)                            \
-_(current_data_offset)                          \
 _(mask_len)
 
 static void vl_api_classify_add_del_table_t_handler
@@ -112,6 +110,9 @@
 	table_index = ~0;
     }
 
+  u8 current_data_flag = mp->current_data_flag;
+  i16 current_data_offset = clib_net_to_host_i16 (mp->current_data_offset);
+
   rv = vnet_classify_add_del_table
     (cm, mp->mask, nbuckets, memory_size,
      skip_n_vectors, match_n_vectors,
@@ -125,9 +126,9 @@
     if (rv == 0 && mp->is_add)
       {
         t = pool_elt_at_index (cm->tables, table_index);
-        rmp->skip_n_vectors = ntohl(t->skip_n_vectors);
-        rmp->match_n_vectors = ntohl(t->match_n_vectors);
-        rmp->new_table_index = ntohl(table_index);
+        rmp->skip_n_vectors = htonl(t->skip_n_vectors);
+        rmp->match_n_vectors = htonl(t->match_n_vectors);
+        rmp->new_table_index = htonl(table_index);
       }
     else
       {
@@ -229,12 +230,18 @@
   policer_classify_main_t *pcm = &policer_classify_main;
   u32 *vec_tbl;
   int i;
+  u32 filter_sw_if_index;
 
   reg = vl_api_client_index_to_registration (mp->client_index);
   if (!reg)
     return;
 
-  vec_tbl = pcm->classify_table_index_by_sw_if_index[mp->type];
+  filter_sw_if_index = ntohl (mp->sw_if_index);
+  if (filter_sw_if_index != ~0)
+    vec_tbl =
+      &pcm->classify_table_index_by_sw_if_index[mp->type][filter_sw_if_index];
+  else
+    vec_tbl = pcm->classify_table_index_by_sw_if_index[mp->type];
 
   if (vec_len (vec_tbl))
     {
@@ -505,12 +512,18 @@
   flow_classify_main_t *pcm = &flow_classify_main;
   u32 *vec_tbl;
   int i;
+  u32 filter_sw_if_index;
 
   reg = vl_api_client_index_to_registration (mp->client_index);
   if (!reg)
     return;
 
-  vec_tbl = pcm->classify_table_index_by_sw_if_index[mp->type];
+  filter_sw_if_index = ntohl (mp->sw_if_index);
+  if (filter_sw_if_index != ~0)
+    vec_tbl =
+      &pcm->classify_table_index_by_sw_if_index[mp->type][filter_sw_if_index];
+  else
+    vec_tbl = pcm->classify_table_index_by_sw_if_index[mp->type];
 
   if (vec_len (vec_tbl))
     {
