diff --git a/internal/pkg/openflow/feature.go b/internal/pkg/openflow/feature.go
new file mode 100644
index 0000000..706a84c
--- /dev/null
+++ b/internal/pkg/openflow/feature.go
@@ -0,0 +1,57 @@
+/*
+   Copyright 2020 the original author or authors.
+
+   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 openflow
+
+import (
+	"context"
+	"encoding/json"
+	ofp "github.com/donNewtonAlpha/goloxi/of13"
+	"github.com/opencord/voltha-lib-go/v2/pkg/log"
+	"github.com/opencord/voltha-protos/v2/go/common"
+)
+
+func (ofc *OFClient) handleFeatureRequest(request *ofp.FeaturesRequest) error {
+	if logger.V(log.DebugLevel) {
+		js, _ := json.Marshal(request)
+		logger.Debugw("handleFeatureRequest called",
+			log.Fields{
+				"device-id": ofc.DeviceID,
+				"request":   js})
+	}
+	var id = common.ID{Id: ofc.DeviceID}
+	logicalDevice, err := ofc.VolthaClient.GetLogicalDevice(context.Background(), &id)
+	reply := ofp.NewFeaturesReply()
+	reply.SetVersion(4)
+	reply.SetXid(request.GetXid())
+	features := logicalDevice.GetSwitchFeatures()
+	reply.SetDatapathId(logicalDevice.GetDatapathId())
+	reply.SetNBuffers(features.GetNBuffers())
+	reply.SetNTables(uint8(features.GetNTables()))
+	reply.SetAuxiliaryId(uint8(features.GetAuxiliaryId()))
+	capabilities := features.GetCapabilities()
+	reply.SetCapabilities(ofp.Capabilities(capabilities))
+
+	if logger.V(log.DebugLevel) {
+		js, _ := json.Marshal(reply)
+		logger.Debugw("handleFeatureRequestReturn",
+			log.Fields{
+				"device-id": ofc.DeviceID,
+				"reply":     js})
+	}
+	err = ofc.SendMessage(reply)
+	return err
+}
