diff --git a/pkg/models/device/db.go b/pkg/models/device/db.go
new file mode 100644
index 0000000..a98213e
--- /dev/null
+++ b/pkg/models/device/db.go
@@ -0,0 +1,191 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+ *
+ * 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 modifiablecomponent stores ModifiableComponent methods and functions
+package device
+
+import (
+	"context"
+	"encoding/json"
+	"errors"
+	"fmt"
+
+	"github.com/opencord/device-management-interface/go/dmi"
+
+	"github.com/opencord/voltha-lib-go/v4/pkg/log"
+
+	"github.com/opencord/opendevice-manager/pkg/db"
+
+	copy "github.com/jinzhu/copier"
+)
+
+// DBGetByName func reads device record by name
+func DBGetByName(ctx context.Context, name string) (*DeviceRecord, error) {
+	if name == "" {
+		logger.Errorw(ctx, "DBGetByName-failed-missing-device-name", log.Fields{})
+		return nil, errors.New("name field is empty")
+	}
+
+	logger.Debugw(ctx, "DBGetByName-invoked", log.Fields{"name": name})
+	defer logger.Debugw(ctx, "DBGetByName-completed", log.Fields{"name": name})
+
+	if val, ok := cache.nameToRec.Load(name); ok {
+		return val.(*DeviceRecord), nil
+	}
+
+	key := fmt.Sprintf(DbPathNameToRecord, name)
+	entry, err := db.Read(ctx, key)
+	if err != nil {
+		logger.Errorw(ctx, "DBGetByName-failed-read-db", log.Fields{"error": err, "key": key})
+		return nil, err
+	}
+
+	rec := new(DeviceRecord)
+	if err = json.Unmarshal([]byte(entry), rec); err != nil {
+		logger.Errorw(ctx, "Failed-to-unmarshal-at-DBGetByName", log.Fields{"reason": err, "entry": entry})
+		return nil, err
+	}
+
+	cache.nameToRec.Store(name, rec)
+
+	return rec, nil
+}
+
+// DBGetByUuid func reads device record by Uuid
+func DBGetByUuid(ctx context.Context, uuid string) (*DeviceRecord, error) {
+
+	if uuid == "" {
+		logger.Errorw(ctx, "DBGetByUuid-failed-missing-device-uuid", log.Fields{})
+		return nil, errors.New("uuid field is empty")
+	}
+
+	logger.Debugw(ctx, "DBGetByUuid-invoked", log.Fields{"uuid": uuid})
+	defer logger.Debugw(ctx, "DBGetByUuid-completed", log.Fields{"uuid": uuid})
+
+	var name string
+	var err error
+
+	if val, ok := cache.uuidToName.Load(uuid); ok {
+		name = val.(string)
+	} else {
+
+		key := fmt.Sprintf(DbPathUuidToName, uuid)
+		name, err = db.Read(ctx, key)
+		if err != nil {
+			logger.Errorw(ctx, "DBGetByUuid-failed-read-db", log.Fields{"error": err, "key": key})
+			return nil, err
+		}
+	}
+
+	cache.uuidToName.Store(uuid, name)
+
+	return DBGetByName(ctx, name)
+}
+
+// DBGetAll func returns all device records
+func DBGetAll(ctx context.Context) ([]*DeviceRecord, error) {
+	key := fmt.Sprintf(DbPathNameToRecord, "")
+	kvPairs, err := db.ReadAll(ctx, key)
+	if err != nil {
+		logger.Errorw(ctx, "DBGetAll-failed-read-db", log.Fields{"error": err, "key": key})
+		return nil, err
+	}
+
+	var listDevs []*DeviceRecord
+
+	for _, entry := range kvPairs {
+		rec := new(DeviceRecord)
+		if err = json.Unmarshal([]byte(entry), rec); err != nil {
+			logger.Errorw(ctx, "Failed-to-unmarshal-at-DBGetByName", log.Fields{"reason": err, "entry": entry})
+		} else {
+			listDevs = append(listDevs, rec)
+		}
+	}
+
+	logger.Infow(ctx, "DBGetAll-success", log.Fields{"entry": listDevs})
+
+	return listDevs, nil
+}
+
+// DBAddByName inserts Device Info record to DB with Name as Key
+func (rec *DeviceRecord) DBAddByName(ctx context.Context) error {
+	if rec.Name == "" {
+		logger.Errorw(ctx, "DBAddByName-failed-missing-device-name", log.Fields{"rec": rec})
+		return errors.New("missing name")
+	}
+	key := fmt.Sprintf(DbPathNameToRecord, rec.Name)
+	b, _ := json.Marshal(rec)
+	entry := string(b)
+	err := db.Put(ctx, key, entry)
+	cache.nameToRec.Store(rec.Name, rec)
+	logger.Infow(ctx, "Inserting-device-info-to-Db-in-DBAddByName-method", log.Fields{"rec": rec, "error": err})
+	return err
+}
+
+// DBAddUuidLookup creates a lookup of name from uuid
+func (rec *DeviceRecord) DBAddUuidLookup(ctx context.Context) error {
+	if rec.Uuid == "" || rec.Name == "" {
+		logger.Errorw(ctx, "DBAddUuidLookup-failed-missing-device-name-or-uuid", log.Fields{"rec": rec})
+		return errors.New("missing name")
+	}
+	key := fmt.Sprintf(DbPathUuidToName, rec.Uuid)
+	err := db.Put(ctx, key, rec.Name)
+	cache.uuidToName.Store(rec.Uuid, rec.Name)
+	logger.Infow(ctx, "DBAddUuidLookup-success", log.Fields{"rec": rec, "error": err})
+	return err
+}
+
+// DBDelRecord deletes all entries for Device Info
+func (rec *DeviceRecord) DBDelRecord(ctx context.Context) error {
+
+	var err error
+
+	if rec.Name != "" {
+		key := fmt.Sprintf(DbPathNameToRecord, rec.Name)
+		logger.Infow(ctx, "deleting-device-info-record-using-name", log.Fields{"name": rec.Name, "key": key})
+		err = db.Del(ctx, key)
+		cache.nameToRec.Delete(rec.Name)
+	}
+
+	if err == nil && rec.Uuid != "" {
+		key := fmt.Sprintf(DbPathUuidToName, rec.Uuid)
+		logger.Infow(ctx, "deleting-device-info-record-using-uuid", log.Fields{"uuid": rec.Uuid, "key": key})
+		err = db.Del(ctx, key)
+		cache.uuidToName.Delete(rec.Uuid)
+	}
+
+	return err
+}
+
+// DBSaveHwInfo stores hardware copies info from response and stores in db
+func (rec *DeviceRecord) DBSaveHwInfo(ctx context.Context, hw *dmi.Hardware) error {
+	defer logger.Infow(ctx, "saving-hw-info-to-device-record-completed", log.Fields{"rec": rec})
+	rec.LastBooted = hw.LastBooted
+	rec.LastChange = hw.LastChange
+	name := rec.Name
+	uuid := rec.Uuid
+	if err := copy.Copy(&rec, &hw.Root); err != nil {
+		logger.Errorw(ctx, "copy-failed-at-DBSaveHwInfo", log.Fields{"rec": rec, "error": err, "hw": hw})
+		return err
+	}
+	rec.Children = []string{}
+	for _, child := range hw.Root.Children {
+		rec.Children = append(rec.Children, child.Uuid.Uuid)
+	}
+	rec.Name = name
+	rec.Uuid = uuid
+	return rec.DBAddByName(ctx)
+}
diff --git a/pkg/models/device/models.go b/pkg/models/device/models.go
new file mode 100644
index 0000000..ab9611d
--- /dev/null
+++ b/pkg/models/device/models.go
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+ *
+ * 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 device stores methods and functions related to device
+package device
+
+import (
+	"context"
+	"sync"
+
+	"github.com/opencord/device-management-interface/go/dmi"
+
+	"github.com/jinzhu/copier"
+	"github.com/opencord/opendevice-manager/pkg/config"
+
+	v1 "github.com/opencord/opendevice-manager/pkg/models/device/v1"
+	"github.com/opencord/voltha-lib-go/v4/pkg/log"
+)
+
+// Constants defined are the DB Path meant for storing device info records
+const (
+	DbPathUuidToName   = config.DBPrefix + config.CurDBVer + "/DevRec/DevUuid/%s"
+	DbPathNameToRecord = config.DBPrefix + config.CurDBVer + "/DevRec/DevName/%s"
+)
+
+// deviceCache stores device informations in buffer
+type deviceCache struct {
+	nameToRec  *sync.Map // nameToRecord maintains cache for mapping from name to main record
+	uuidToName *sync.Map // uuidToName maintains cache for mapping from uuid to name
+}
+
+var cache *deviceCache
+
+// logger represents the log object
+var logger log.CLogger
+
+// initCache initialises device cache
+func initCache() {
+	cache = new(deviceCache)
+	cache.nameToRec = new(sync.Map)
+	cache.uuidToName = new(sync.Map)
+}
+
+// init function for the package
+func init() {
+	logger = config.Initlog()
+	initCache()
+}
+
+// ClearCacheEntry clearsentry from device cache
+func ClearCacheEntry(ctx context.Context, name, uuid string) {
+	if name != "" {
+		logger.Debugw(ctx, "Clearing-name-key-from-device-cache", log.Fields{"name": name})
+		cache.nameToRec.Delete(name)
+	}
+	if uuid != "" {
+		logger.Debugw(ctx, "Clearing-uuid-key-from-device-cache", log.Fields{"uuid": uuid})
+		cache.uuidToName.Delete(name)
+	}
+}
+
+// DeviceRecord refers to the structure defined for storing OLT info
+type DeviceRecord v1.DeviceRecordV1_0
+
+// NewDeviceRecord return record for aliased ModifiableComponent
+func NewDeviceRecord(ctx context.Context, req *dmi.ModifiableComponent) (*DeviceRecord, error) {
+	rec := new(DeviceRecord)
+	err := copier.Copy(&rec, &req)
+	if err != nil {
+		logger.Errorw(ctx, "Failed-at-creating-object-for-new-device-info", log.Fields{"error": err, "req": req})
+		return nil, err
+	}
+	rec.Uri = req.Uri.Uri
+	rec.State = new(dmi.ComponentState)
+	rec.State.AdminState = req.AdminState
+	logger.Infow(ctx, "Successful-at-creating-object-for-new-device-info", log.Fields{"new-object": rec})
+	return rec, nil
+}
diff --git a/pkg/models/device/util.go b/pkg/models/device/util.go
new file mode 100644
index 0000000..8930cab
--- /dev/null
+++ b/pkg/models/device/util.go
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+ *
+ * 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 modifiablecomponent stores ModifiableComponent methods and functions
+package device
+
+import (
+	"context"
+
+	"github.com/opencord/device-management-interface/go/dmi"
+
+	"github.com/opencord/voltha-lib-go/v4/pkg/log"
+)
+
+// GetLoggableEntitiesFromDevRec represnets the fetch the log level with entity from device record
+func (rec *DeviceRecord) GetLoggableEntitiesFromDevRec(ctx context.Context, entities []string) ([]*dmi.EntitiesLogLevel, bool) {
+
+	var traceLevel, debugLevel, infoLevel, warnLevel, errorLevel []string
+
+	if len(entities) > 0 {
+		// getLogLevel request for given entities
+		for _, entity := range entities {
+			if logLevel, ok := rec.Logging.LoggableEntities[entity]; ok {
+				switch logLevel {
+				case dmi.LogLevel_TRACE:
+					traceLevel = append(traceLevel, entity)
+				case dmi.LogLevel_DEBUG:
+					debugLevel = append(debugLevel, entity)
+				case dmi.LogLevel_INFO:
+					infoLevel = append(infoLevel, entity)
+				case dmi.LogLevel_WARN:
+					warnLevel = append(warnLevel, entity)
+				case dmi.LogLevel_ERROR:
+					errorLevel = append(errorLevel, entity)
+				}
+			} else {
+				logger.Warnw(ctx, "entity-was-not-found-in-device-record", log.Fields{"device-name": rec.Name, "entity": entity})
+				return nil, false
+			}
+
+		}
+	} else if len(rec.Logging.LoggableEntities) == 0 {
+		// if LoggableEntities length is zero means loglevel is applicable for entire hardware
+		logger.Debug(ctx, "all-entities-have-common-loglevel", log.Fields{"device-name": rec.Name, "log-level": rec.Logging.LogLevel})
+		return []*dmi.EntitiesLogLevel{{LogLevel: rec.Logging.LogLevel}}, true
+	} else {
+		// get globle log level or get loggble entities will  invoke here
+		logger.Debug(ctx, "all-entities-have-diffrent-loglevel", log.Fields{"device-name": rec.Name})
+		for entity, logLevel := range rec.Logging.LoggableEntities {
+			switch logLevel {
+			case dmi.LogLevel_TRACE:
+				traceLevel = append(traceLevel, entity)
+			case dmi.LogLevel_DEBUG:
+				debugLevel = append(debugLevel, entity)
+			case dmi.LogLevel_INFO:
+				infoLevel = append(infoLevel, entity)
+			case dmi.LogLevel_WARN:
+				warnLevel = append(warnLevel, entity)
+			case dmi.LogLevel_ERROR:
+				errorLevel = append(errorLevel, entity)
+			}
+		}
+	}
+
+	entitiesLogLevel := []*dmi.EntitiesLogLevel{
+		{LogLevel: dmi.LogLevel_TRACE, Entities: traceLevel},
+		{LogLevel: dmi.LogLevel_DEBUG, Entities: debugLevel},
+		{LogLevel: dmi.LogLevel_INFO, Entities: infoLevel},
+		{LogLevel: dmi.LogLevel_WARN, Entities: warnLevel},
+		{LogLevel: dmi.LogLevel_ERROR, Entities: errorLevel},
+	}
+	logger.Debug(ctx, "entities-with-log-level", log.Fields{"entities": entitiesLogLevel})
+
+	return entitiesLogLevel, true
+}
+
+// SaveLoggableEntities func is is used to save the log level with entity in device record
+func (rec *DeviceRecord) SaveLoggableEntities(ctx context.Context, listEntities []*dmi.EntitiesLogLevel) {
+
+	if rec.Logging.LoggableEntities == nil {
+
+		logger.Debug(ctx, "allocating-memory-for-loggable-entitie", log.Fields{"device-name": rec.Name})
+		rec.Logging.LoggableEntities = make(map[string]dmi.LogLevel)
+	}
+
+	if len(listEntities) == 1 && listEntities[0].Entities == nil {
+
+		logger.Debug(ctx, "set-global-log-level", log.Fields{"device-name": rec.Name})
+		rec.Logging.LogLevel = listEntities[0].LogLevel
+
+	} else {
+
+		logger.Debug(ctx, "setting-entity-log-level", log.Fields{"device-name": rec.Name, "list-of-entities": listEntities})
+		for _, entities := range listEntities {
+			logLevel := entities.LogLevel
+			for _, entity := range entities.Entities {
+				rec.Logging.LoggableEntities[entity] = logLevel
+			}
+		}
+	}
+}
diff --git a/pkg/models/device/v1/models.go b/pkg/models/device/v1/models.go
new file mode 100644
index 0000000..cf0a1ad
--- /dev/null
+++ b/pkg/models/device/v1/models.go
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+ *
+ * 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 contains version v1 of Device Info
+package v1
+
+import (
+	"github.com/golang/protobuf/ptypes/timestamp"
+	"github.com/opencord/device-management-interface/go/dmi"
+)
+
+type DeviceRecordV1_0 struct {
+	Uuid         string               `json:"uuid,omitempty"`
+	Name         string               `json:"name,omitempty"`
+	Make         string               `json:"make,omitempty"`
+	Class        dmi.ComponentType    `json:"class,omitempty"`
+	Parent       *dmi.Component       `json:"parent,omitempty"`
+	ParentRelPos int32                `json:"parent_rel_pos,omitempty"`
+	Alias        string               `json:"alias,omitempty"`
+	AssetId      string               `json:"asset_id,omitempty"`
+	Uri          string               `json:"uri,omitempty"`
+	HardwareRev  string               `json:"hardware_rev,omitempty"`
+	FirmwareRev  string               `json:"firmware_rev,omitempty"`
+	SoftwareRev  string               `json:"software_rev,omitempty"`
+	SerialNum    string               `json:"serial_num,omitempty"`
+	ModelName    string               `json:"model_name,omitempty"`
+	MfgName      string               `json:"mfg_name,omitempty"`
+	MfgDate      *timestamp.Timestamp `json:"mfg_date,omitempty"`
+	State        *dmi.ComponentState  `json:"state,omitempty"`
+	Inventories  map[string]string    `json:"inventories,omitempty"`
+	Children     []string             `json:"children,omitempty"` // Children stores uuid of all direct child
+	Logging      LoggingInfo          `json:"logging,omitempty"`
+	LastChange   *timestamp.Timestamp `json:"last_change,omitempty"`
+	LastBooted   *timestamp.Timestamp `json:"last_booted,omitempty"` // Timestamp at which the hardware last booted
+}
+
+type LoggingInfo struct {
+	EndPoint         string                  `json:"end_point,omitempty"`
+	Protocol         string                  `json:"protocol,omitempty"`
+	LogLevel         dmi.LogLevel            `json:"log_level,omitempty"`
+	LoggableEntities map[string]dmi.LogLevel `json:"loggable_entities,omitempty"`
+}
