diff --git a/CMakeLists.txt b/CMakeLists.txt
index 16f3ab7..a3a9091 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -60,10 +60,17 @@
 
 include_directories (${CMAKE_CURRENT_SOURCE_DIR}/include)
 
+SET(bicFile "")
+
+if(BIC)
+   SET(bicFile "src/biccommands.cpp")
+endif()
+
 add_library (zfboemcmds
              SHARED src/oemcommands.cpp src/appcommands.cpp
              src/storagecommands.cpp src/usb-dbg.cpp
-             src/selcommands.cpp src/transportcommands.cpp)
+             src/selcommands.cpp src/transportcommands.cpp ${bicFile})
+
 set_target_properties (zfboemcmds PROPERTIES VERSION "0.1.0")
 set_target_properties (zfboemcmds PROPERTIES SOVERSION "0")
 target_link_libraries (zfboemcmds sdbusplus)
diff --git a/include/biccommands.hpp b/include/biccommands.hpp
new file mode 100644
index 0000000..6613a54
--- /dev/null
+++ b/include/biccommands.hpp
@@ -0,0 +1,3 @@
+
+// Command for getting device id
+constexpr uint8_t cmdOemBicInfo = 0x01;
diff --git a/src/biccommands.cpp b/src/biccommands.cpp
new file mode 100644
index 0000000..4c6ea4e
--- /dev/null
+++ b/src/biccommands.cpp
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c)  2018 Intel Corporation.
+ * Copyright (c)  2018-present Facebook.
+ *
+ * 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.
+ */
+
+#include <ipmid/api.hpp>
+#include <ipmid/api-types.hpp>
+
+#include <commandutils.hpp>
+#include <biccommands.hpp>
+#include <phosphor-logging/log.hpp>
+
+#include <vector>
+#include <iostream>
+
+namespace ipmi
+{
+
+using namespace phosphor::logging;
+
+static void registerBICFunctions() __attribute__((constructor));
+
+extern message::Response::ptr executeIpmiCommand(message::Request::ptr);
+
+//----------------------------------------------------------------------
+// ipmiOemBicHandler (IPMI/Section - ) (CMD_OEM_BIC_INFO)
+// This Function will handle BIC request for netfn=0x38 and cmd=1
+// send the response back to the sender.
+//----------------------------------------------------------------------
+
+ipmi::RspType<std::array<uint8_t, 3>, uint8_t, uint2_t, uint6_t, uint8_t,
+              uint8_t, ipmi::message::Payload>
+    ipmiOemBicHandler(ipmi::Context::ptr ctx, std::array<uint8_t, 3> iana,
+                      uint8_t interface, uint2_t lun, uint6_t netFnReq,
+                      uint8_t cmdReq, std::vector<uint8_t> data)
+{
+
+    ipmi::message::Response::ptr res;
+
+    // Updating the correct netfn and cmd in the ipmi Context
+    ctx->netFn = ((uint8_t)netFnReq);
+    ctx->cmd = cmdReq;
+
+    // creating ipmi message request for calling executeIpmiCommand function
+    auto req = std::make_shared<ipmi::message::Request>(
+        ctx, std::forward<std::vector<uint8_t>>(data));
+
+    // Calling executeIpmiCommand request function
+    res = ipmi::executeIpmiCommand(req);
+
+    // sending the response with headers and payload
+    return ipmi::responseSuccess(iana, interface, lun, ++netFnReq, cmdReq,
+                                 res->cc, res->payload);
+}
+
+static void registerBICFunctions(void)
+{
+
+    phosphor::logging::log<phosphor::logging::level::INFO>(
+        "Registering BIC commands");
+
+    ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnOemFive,
+                          cmdOemBicInfo, ipmi::Privilege::User,
+                          ipmiOemBicHandler);
+    return;
+}
+
+} // namespace ipmi
