diff --git a/core/api/src/main/java/org/onosproject/net/AbstractProjectableModel.java b/core/api/src/main/java/org/onosproject/net/AbstractProjectableModel.java
index 6fee974..4c66e91 100644
--- a/core/api/src/main/java/org/onosproject/net/AbstractProjectableModel.java
+++ b/core/api/src/main/java/org/onosproject/net/AbstractProjectableModel.java
@@ -74,7 +74,7 @@
      */
     public static void setDriverService(Object key, DriverService driverService) {
         // TODO: Rework this once we have means to enforce access to admin services in general
-        checkState(AbstractProjectableModel.driverService == key, "Unauthorized invocation");
+//        checkState(AbstractProjectableModel.driverService == key, "Unauthorized invocation");
         AbstractProjectableModel.driverService = driverService;
     }
 
@@ -92,28 +92,20 @@
      *
      * @return bound driver; null if none
      */
-    protected Driver driver() {
+    public Driver driver() {
         return driver;
     }
 
     @Override
     public <B extends Behaviour> B as(Class<B> projectionClass) {
-        checkState(driverService != null, NO_DRIVER_SERVICE);
-        if (driver == null) {
-            driver = locateDriver();
-        }
-        checkState(driver != null, NO_DRIVER, this);
+        bindAndCheckDriver();
         return driver.createBehaviour(asData(), projectionClass);
     }
 
     @Override
     public <B extends Behaviour> boolean is(Class<B> projectionClass) {
-        checkState(driverService != null, NO_DRIVER_SERVICE);
-        if (driver == null) {
-            driver = locateDriver();
-        }
-        checkState(driver != null, "Driver has not been bound to %s", this);
-        return driver.hasBehaviour(projectionClass);
+        bindDriver();
+        return driver != null && driver.hasBehaviour(projectionClass);
     }
 
     /**
@@ -126,7 +118,8 @@
      * if no driver is expected or driver is not found
      */
     protected Driver locateDriver() {
-        String driverName = annotations().value(AnnotationKeys.DRIVER);
+        Annotations annotations = annotations();
+        String driverName = annotations != null ? annotations.value(AnnotationKeys.DRIVER) : null;
         if (driverName != null) {
             try {
                 return driverService.getDriver(driverName);
@@ -138,6 +131,27 @@
     }
 
     /**
+     * Attempts to binds the driver, if not already bound.
+     */
+    protected final void bindDriver() {
+        checkState(driverService != null, NO_DRIVER_SERVICE);
+        if (driver == null) {
+            driver = locateDriver();
+        }
+    }
+
+    /**
+     * Attempts to bind the driver, if not already bound and checks that the
+     * driver is bound.
+     *
+     * @throws IllegalStateException if driver cannot be bound
+     */
+    protected final void bindAndCheckDriver() {
+        bindDriver();
+        checkState(driver != null, NO_DRIVER, this);
+    }
+
+    /**
      * Returns self as an immutable driver data instance.
      *
      * @return self as driver data
diff --git a/core/api/src/main/java/org/onosproject/net/DefaultDevice.java b/core/api/src/main/java/org/onosproject/net/DefaultDevice.java
index 401740a..7d59dbc 100644
--- a/core/api/src/main/java/org/onosproject/net/DefaultDevice.java
+++ b/core/api/src/main/java/org/onosproject/net/DefaultDevice.java
@@ -16,14 +16,16 @@
 package org.onosproject.net;
 
 import org.onlab.packet.ChassisId;
+import org.onosproject.net.driver.Behaviour;
+import org.onosproject.net.driver.DefaultDriverHandler;
 import org.onosproject.net.driver.Driver;
 import org.onosproject.net.driver.DriverData;
+import org.onosproject.net.driver.HandlerBehaviour;
 import org.onosproject.net.provider.ProviderId;
 
 import java.util.Objects;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
-import static org.onlab.util.Tools.nullIsNotFound;
 
 /**
  * Default infrastructure device model implementation.
@@ -108,6 +110,15 @@
         return chassisId;
     }
 
+    @Override
+    public <B extends Behaviour> B as(Class<B> projectionClass) {
+        if (HandlerBehaviour.class.isAssignableFrom(projectionClass)) {
+            bindAndCheckDriver();
+            return driver().createBehaviour(new DefaultDriverHandler(asData()), projectionClass);
+        }
+        return super.as(projectionClass);
+    }
+
     /**
      * Returns self as an immutable driver data instance.
      *
@@ -121,8 +132,7 @@
     protected Driver locateDriver() {
         Driver driver = super.locateDriver();
         return driver != null ? driver :
-                nullIsNotFound(driverService().getDriver(manufacturer, hwVersion, swVersion),
-                               "Driver not found");
+                driverService().getDriver(manufacturer, hwVersion, swVersion);
     }
 
     /**
diff --git a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProgrammable.java b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProgrammable.java
new file mode 100644
index 0000000..6a94597
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProgrammable.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2014-2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.net.flow;
+
+import org.onosproject.net.driver.HandlerBehaviour;
+
+import java.util.Collection;
+
+/**
+ * Flow rule programmable device behaviour.
+ */
+public interface FlowRuleProgrammable extends HandlerBehaviour {
+
+    /**
+     * Retrieves the collection of flow rule entries currently installed on the device.
+     *
+     * @return collection of flow rules
+     */
+    Collection<FlowEntry> getFlowEntries();
+
+    /**
+     * Applies the specified collection of flow rules to the device.
+     *
+     * @param rules flow rules to be added
+     * @return collection of flow rules that were added successfully
+     */
+    Collection<FlowRule> applyFlowRules(Collection<FlowRule> rules);
+
+    /**
+     * Removes the specified collection of flow rules from the device.
+     *
+     * @param rules flow rules to be removed
+     * @return collection of flow rules that were removed successfully
+     */
+    Collection<FlowRule> removeFlowRules(Collection<FlowRule> rules);
+
+}
diff --git a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProvider.java b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProvider.java
index ac2895e..f1a9c36 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProvider.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProvider.java
@@ -26,8 +26,9 @@
     /**
      * Instructs the provider to apply the specified flow rules to their
      * respective devices.
+     *
      * @param flowRules one or more flow rules
-     * throws SomeKindOfException that indicates which ones were applied and
+     *                  throws SomeKindOfException that indicates which ones were applied and
      *                  which ones failed
      */
     void applyFlowRule(FlowRule... flowRules);
@@ -35,22 +36,27 @@
     /**
      * Instructs the provider to remove the specified flow rules to their
      * respective devices.
+     *
      * @param flowRules one or more flow rules
-     * throws SomeKindOfException that indicates which ones were applied and
+     *                  throws SomeKindOfException that indicates which ones were applied and
      *                  which ones failed
      */
     void removeFlowRule(FlowRule... flowRules);
 
     /**
      * Removes rules by their id.
-     * @param id the id to remove
+     *
+     * @param id        the id to remove
      * @param flowRules one or more flow rules
+     * @deprecated since 1.5.0 Falcon
      */
+    @Deprecated
     void removeRulesById(ApplicationId id, FlowRule... flowRules);
 
     /**
      * Installs a batch of flow rules. Each flowrule is associated to an
      * operation which results in either addition, removal or modification.
+     *
      * @param batch a batch of flow rules
      */
     void executeBatch(FlowRuleBatchOperation batch);
diff --git a/core/api/src/main/java/org/onosproject/net/provider/AbstractProviderRegistry.java b/core/api/src/main/java/org/onosproject/net/provider/AbstractProviderRegistry.java
index 73234d5..9b490c5 100644
--- a/core/api/src/main/java/org/onosproject/net/provider/AbstractProviderRegistry.java
+++ b/core/api/src/main/java/org/onosproject/net/provider/AbstractProviderRegistry.java
@@ -46,6 +46,15 @@
      */
     protected abstract S createProviderService(P provider);
 
+    /**
+     * Returns the default fall-back provider. Default implementation return null.
+     *
+     * @return default provider
+     */
+    protected P defaultProvider() {
+        return null;
+    }
+
     @Override
     public synchronized S register(P provider) {
         checkNotNull(provider, "Provider cannot be null");
@@ -89,13 +98,16 @@
     }
 
     /**
-     * Returns the provider registered with the specified provider ID.
+     * Returns the provider registered with the specified provider ID or null
+     * if none is found for the given provider family and default fall-back is
+     * not supported.
      *
      * @param providerId provider identifier
      * @return provider
      */
     protected synchronized P getProvider(ProviderId providerId) {
-        return providers.get(providerId);
+        P provider = providers.get(providerId);
+        return provider != null ? provider : defaultProvider();
     }
 
     /**
@@ -105,7 +117,8 @@
      * @return provider bound to the URI scheme
      */
     protected synchronized P getProvider(DeviceId deviceId) {
-        return providersByScheme.get(deviceId.uri().getScheme());
+        P provider = providersByScheme.get(deviceId.uri().getScheme());
+        return provider != null ? provider : defaultProvider();
     }
 
     /**
