flowrules are pushed: we still have an intermittent hang though
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficSelector.java b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficSelector.java
new file mode 100644
index 0000000..9ec49e4
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficSelector.java
@@ -0,0 +1,44 @@
+package org.onlab.onos.net.flow;
+
+import static org.slf4j.LoggerFactory.getLogger;
+
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.onlab.onos.net.flow.criteria.Criterion;
+import org.slf4j.Logger;
+
+public final class DefaultTrafficSelector implements TrafficSelector {
+
+    private final List<Criterion> selector;
+
+    private DefaultTrafficSelector(List<Criterion> selector) {
+        this.selector = Collections.unmodifiableList(selector);
+    }
+
+    @Override
+    public List<Criterion> criteria() {
+        return selector;
+    }
+
+    public static class Builder implements TrafficSelector.Builder {
+
+        private final Logger log = getLogger(getClass());
+
+        private final List<Criterion> selector = new LinkedList<>();
+
+        @Override
+        public TrafficSelector.Builder add(Criterion criterion) {
+            selector.add(criterion);
+            return this;
+        }
+
+        @Override
+        public TrafficSelector build() {
+            return new DefaultTrafficSelector(selector);
+        }
+
+    }
+
+}