diff --git a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
index cceceef..b24c7ac 100644
--- a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
+++ b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
@@ -285,7 +285,7 @@
             processTableZero(install);
             processTableOne(install);
             processTableTwo(install);
-            processTableThree(install);
+            processTableFour(install);
             processTableFive(install);
             processTableSix(install);
             processTableNine(install);
@@ -305,7 +305,7 @@
             FlowRule rule = new DefaultFlowRule(deviceId, selector.build(),
                                                 treatment.build(),
                                                 CONTROLLER_PRIORITY, appId, 0,
-                                                true);
+                                                true, FlowRule.Type.FIRST);
 
             FlowRuleOperations.Builder ops = FlowRuleOperations.builder();
 
@@ -319,7 +319,7 @@
 
             rule = new DefaultFlowRule(deviceId, selector.build(),
                                        treatment.build(), DROP_PRIORITY, appId,
-                                       0, true, FlowRule.Type.VLAN_MPLS);
+                                       0, true, FlowRule.Type.FIRST);
 
             ops = install ? ops.add(rule) : ops.remove(rule);
 
@@ -433,7 +433,7 @@
             }));
         }
 
-        private void processTableThree(boolean install) {
+        private void processTableFour(boolean install) {
             TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
             TrafficTreatment.Builder treatment = DefaultTrafficTreatment
                     .builder();
@@ -469,7 +469,7 @@
 
             rule = new DefaultFlowRule(deviceId, selector.build(),
                                        treatment.build(), DROP_PRIORITY, appId,
-                                       0, true, FlowRule.Type.VLAN_MPLS);
+                                       0, true, FlowRule.Type.ETHER);
 
             ops = install ? ops.add(rule) : ops.remove(rule);
 
diff --git a/cli/src/main/java/org/onosproject/cli/net/FlowsListCommand.java b/cli/src/main/java/org/onosproject/cli/net/FlowsListCommand.java
index e0b98ed..77a7719 100644
--- a/cli/src/main/java/org/onosproject/cli/net/FlowsListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/FlowsListCommand.java
@@ -52,7 +52,7 @@
     public static final String ANY = "any";
 
     private static final String FMT =
-            "   id=%s, state=%s, bytes=%s, packets=%s, duration=%s, priority=%s, appId=%s";
+            "   id=%s, state=%s, bytes=%s, packets=%s, duration=%s, priority=%s, tableId=%s appId=%s";
     private static final String TFMT = "      treatment=%s";
     private static final String SFMT = "      selector=%s";
 
@@ -131,6 +131,7 @@
                 .put("bytes", flow.bytes())
                 .put("packets", flow.packets())
                 .put("life", flow.life())
+                .put("tableId", flow.type().toString())
                 .put("appId", coreService.getAppId(flow.appId()).name());
         result.set("selector", crit);
         result.set("treatment", instr);
@@ -185,7 +186,7 @@
         if (!empty) {
             for (FlowEntry f : flows) {
                 print(FMT, Long.toHexString(f.id().value()), f.state(),
-                      f.bytes(), f.packets(), f.life(), f.priority(),
+                      f.bytes(), f.packets(), f.life(), f.priority(), f.type(),
                       coreService.getAppId(f.appId()).name());
                 print(SFMT, f.selector().criteria());
                 print(TFMT, f.treatment().instructions());
diff --git a/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowRule.java b/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowRule.java
index 441f9a0..c8105c9 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowRule.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowRule.java
@@ -180,11 +180,11 @@
      * @see java.lang.Object#equals(java.lang.Object)
      */
     public int hashCode() {
-        return Objects.hash(deviceId, selector, priority);
+        return Objects.hash(deviceId, selector, priority, type);
     }
 
     public int hash() {
-        return Objects.hash(deviceId, selector, treatment);
+        return Objects.hash(deviceId, selector, treatment, type);
     }
 
     @Override
@@ -202,7 +202,8 @@
             DefaultFlowRule that = (DefaultFlowRule) obj;
             return Objects.equals(deviceId, that.deviceId) &&
                     Objects.equals(priority, that.priority) &&
-                    Objects.equals(selector, that.selector);
+                    Objects.equals(selector, that.selector) &&
+                    Objects.equals(type, that.type);
 
         }
         return false;
@@ -216,6 +217,7 @@
                 .add("priority", priority)
                 .add("selector", selector.criteria())
                 .add("treatment", treatment == null ? "N/A" : treatment.instructions())
+                .add("table type", type)
                 .add("created", created)
                 .toString();
     }
diff --git a/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java b/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java
index 462875a..53aff49 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java
@@ -33,7 +33,8 @@
      * For single table switch, Default is used.
      */
     public static enum Type {
-        /* Default type - used in flow rule for single table switch */
+        /* Default type - used in flow rule for single table switch
+         * NOTE: this setting should not be used as Table 0 in a multi-table pipeline*/
         DEFAULT,
         /* Used in flow entry for IP table */
         IP,
@@ -48,11 +49,14 @@
         /* VLAN table */
         VLAN,
 
-        /* L2 table */
+        /* Ethtype table */
         ETHER,
 
         /* Class of Service table */
         COS,
+
+        /* Table 0 in a multi-table pipeline */
+        FIRST,
     }
 
     //TODO: build cookie value
diff --git a/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/OFCorsaSwitchDriver.java b/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/OFCorsaSwitchDriver.java
index fde80ed..6009420 100644
--- a/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/OFCorsaSwitchDriver.java
+++ b/openflow/drivers/src/main/java/org/onosproject/openflow/drivers/OFCorsaSwitchDriver.java
@@ -63,7 +63,7 @@
         if (msg.getType() == OFType.FLOW_MOD) {
             OFFlowMod flowMod = (OFFlowMod) msg;
             OFFlowMod.Builder builder = flowMod.createBuilder();
-            List<OFInstruction> instructions = builder.getInstructions();
+            List<OFInstruction> instructions = flowMod.getInstructions();
             List<OFInstruction> newInstructions = Lists.newArrayList();
             for (OFInstruction i : instructions) {
                 if (i instanceof OFInstructionGotoTable) {
@@ -106,9 +106,11 @@
                                             .setTableId(TableId.of(LOCAL_TABLE)).build());
                             break;
                         case NONE:
-                            newInstructions.add(
+                            log.error("Should never have to go to Table 0");
+                            /*newInstructions.add(
                                     gotoTable.createBuilder()
                                             .setTableId(TableId.of(0)).build());
+                            */
                             break;
                         default:
                             log.warn("Unknown table type: {}", tid);
@@ -147,8 +149,10 @@
                     log.warn("Unknown table type: {}", type);
             }
             builder.setInstructions(newInstructions);
-            this.write(builder.build());
-            log.info("Installed {}", builder.build());
+            OFMessage msgnew = builder.build();
+            this.write(msgnew);
+            log.debug("Installed {}", msgnew);
+
         } else {
             this.write(msg);
         }
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
index b1848f2..00bb197 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
@@ -97,19 +97,20 @@
         Match match = buildMatch();
         List<OFAction> actions = buildActions();
         List<OFInstruction> instructions = buildInstructions();
+
         // FIXME had to revert back to using apply-actions instead of
         // write-actions because LINC-OE apparently doesn't support
         // write-actions. I would prefer to change this back in the future
         // because apply-actions is an optional instruction in OF 1.3.
 
-        OFInstruction applyActions =
-                factory().instructions().applyActions(actions);
-
-        instructions.add(applyActions);
+        if (actions != null) {
+            OFInstruction applyActions =
+                    factory().instructions().applyActions(actions);
+            instructions.add(applyActions);
+        }
 
         long cookie = flowRule().id().value();
 
-
         OFFlowAdd fm = factory().buildFlowAdd()
                 .setXid(xid)
                 .setCookie(U64.of(cookie))
@@ -129,14 +130,15 @@
         Match match = buildMatch();
         List<OFAction> actions = buildActions();
         List<OFInstruction> instructions = buildInstructions();
-        OFInstruction applyActions =
-                factory().instructions().applyActions(actions);
 
-        instructions.add(applyActions);
+        if (actions != null) {
+            OFInstruction applyActions =
+                    factory().instructions().applyActions(actions);
+            instructions.add(applyActions);
+        }
 
         long cookie = flowRule().id().value();
 
-
         OFFlowMod fm = factory().buildFlowModify()
                 .setXid(xid)
                 .setCookie(U64.of(cookie))
@@ -189,6 +191,7 @@
 
     private List<OFAction> buildActions() {
         List<OFAction> actions = new LinkedList<>();
+        boolean tableFound = false;
         if (treatment == null) {
             return actions;
         }
@@ -223,12 +226,17 @@
                     break;
                 case TABLE:
                     //FIXME: should not occur here.
+                    tableFound = true;
                     break;
                 default:
                     log.warn("Instruction type {} not yet implemented.", i.type());
             }
         }
-
+        if (tableFound && actions.isEmpty()) {
+            // handles the case where there are no actions, but there is
+            // a goto instruction for the next table
+            return null;
+        }
         return actions;
     }
 
