thingsboard-memoizeit

Changes

Details

diff --git a/dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTimeDao.java b/dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTimeDao.java
index 5852e3c..4a10617 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTimeDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/AbstractSearchTimeDao.java
@@ -21,34 +21,29 @@ import com.datastax.driver.core.querybuilder.QueryBuilder;
 import com.datastax.driver.core.querybuilder.Select;
 import com.datastax.driver.core.querybuilder.Select.Where;
 import com.datastax.driver.core.utils.UUIDs;
-import org.apache.commons.lang3.StringUtils;
-import org.thingsboard.server.common.data.page.TextPageLink;
 import org.thingsboard.server.common.data.page.TimePageLink;
 import org.thingsboard.server.dao.model.BaseEntity;
 import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.dao.model.SearchTextEntity;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.UUID;
 
-import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
 
-public abstract class AbstractSearchTimeDao<T extends BaseEntity<?>> extends AbstractModelDao<T> {
+public abstract class AbstractSearchTimeDao<E extends BaseEntity<D>, D> extends CassandraAbstractModelDao<E, D> {
 
 
-    protected List<T> findPageWithTimeSearch(String searchView, List<Clause> clauses, TimePageLink pageLink) {
+    protected List<E> findPageWithTimeSearch(String searchView, List<Clause> clauses, TimePageLink pageLink) {
         return findPageWithTimeSearch(searchView, clauses, Collections.emptyList(), pageLink);
     }
 
-    protected List<T> findPageWithTimeSearch(String searchView, List<Clause> clauses, Ordering ordering, TimePageLink pageLink) {
+    protected List<E> findPageWithTimeSearch(String searchView, List<Clause> clauses, Ordering ordering, TimePageLink pageLink) {
         return findPageWithTimeSearch(searchView, clauses, Collections.singletonList(ordering), pageLink);
     }
 
-
-    protected List<T> findPageWithTimeSearch(String searchView, List<Clause> clauses, List<Ordering> topLevelOrderings, TimePageLink pageLink) {
+    protected List<E> findPageWithTimeSearch(String searchView, List<Clause> clauses, List<Ordering> topLevelOrderings, TimePageLink pageLink) {
         Select select = select().from(searchView);
         Where query = select.where();
         for (Clause clause : clauses) {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesDao.java b/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesDao.java
index ae58d4d..3fb8ee2 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesDao.java
@@ -15,6 +15,7 @@
  */
 package org.thingsboard.server.dao.attributes;
 
+// CASSANDRA ???
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.ResultSetFuture;
 import com.google.common.util.concurrent.ListenableFuture;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesService.java b/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesService.java
index 6bf9fb2..ccca460 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/attributes/AttributesService.java
@@ -15,12 +15,10 @@
  */
 package org.thingsboard.server.dao.attributes;
 
+// CASSANDRA ???
 import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.ResultSetFuture;
 import com.google.common.util.concurrent.ListenableFuture;
-import org.thingsboard.server.common.data.id.DeviceId;
 import org.thingsboard.server.common.data.id.EntityId;
-import org.thingsboard.server.common.data.id.UUIDBased;
 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
 
 import java.util.Collection;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/attributes/BaseAttributesService.java b/dao/src/main/java/org/thingsboard/server/dao/attributes/BaseAttributesService.java
index 4361241..6fd734a 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/attributes/BaseAttributesService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/attributes/BaseAttributesService.java
@@ -15,16 +15,17 @@
  */
 package org.thingsboard.server.dao.attributes;
 
+// CASSANDRA ???
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.ResultSetFuture;
 import com.google.common.collect.Lists;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 import org.thingsboard.server.common.data.id.EntityId;
 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
 import org.thingsboard.server.dao.exception.IncorrectParameterException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
 import org.thingsboard.server.dao.service.Validator;
 
 import java.util.Collection;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraCluster.java b/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraCluster.java
index 62e3762..efe05f8 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraCluster.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraCluster.java
@@ -16,13 +16,8 @@
 package org.thingsboard.server.dao.cassandra;
 
 
-import com.datastax.driver.core.Cluster;
-import com.datastax.driver.core.ConsistencyLevel;
-import com.datastax.driver.core.HostDistance;
-import com.datastax.driver.core.PoolingOptions;
+import com.datastax.driver.core.*;
 import com.datastax.driver.core.ProtocolOptions.Compression;
-import com.datastax.driver.core.Session;
-import com.datastax.driver.core.exceptions.NoHostAvailableException;
 import com.datastax.driver.mapping.Mapper;
 import com.datastax.driver.mapping.MappingManager;
 import lombok.Data;
@@ -31,16 +26,13 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
-import org.thingsboard.server.dao.exception.DatabaseException;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
-import java.io.Closeable;
 import java.net.InetSocketAddress;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.StringTokenizer;
 
 @Component
 @Slf4j
diff --git a/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraQueryOptions.java b/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraQueryOptions.java
index d5460b0..27ac661 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraQueryOptions.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraQueryOptions.java
@@ -21,12 +21,9 @@ import lombok.Data;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
 
 import javax.annotation.PostConstruct;
 
-import static org.apache.commons.lang3.StringUtils.isNotBlank;
-
 @Component
 @Configuration
 @Data
diff --git a/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraSocketOptions.java b/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraSocketOptions.java
index c6f51d1..b4cb7ba 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraSocketOptions.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/cassandra/CassandraSocketOptions.java
@@ -15,13 +15,12 @@
  */
 package org.thingsboard.server.dao.cassandra;
 
+import com.datastax.driver.core.SocketOptions;
 import lombok.Data;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
 
-import com.datastax.driver.core.SocketOptions;
-
 import javax.annotation.PostConstruct;
 
 @Component
diff --git a/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorDao.java b/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorDao.java
index 7c43a76..330790d 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorDao.java
@@ -27,9 +27,10 @@ import org.thingsboard.server.common.data.page.TextPageLink;
 import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
 import org.thingsboard.server.common.data.plugin.ComponentScope;
 import org.thingsboard.server.common.data.plugin.ComponentType;
-import org.thingsboard.server.dao.AbstractSearchTextDao;
-import org.thingsboard.server.dao.model.ModelConstants;
+import org.thingsboard.server.dao.CassandraAbstractSearchTextDao;
+import org.thingsboard.server.dao.DaoUtil;
 import org.thingsboard.server.dao.model.ComponentDescriptorEntity;
+import org.thingsboard.server.dao.model.ModelConstants;
 
 import java.util.Arrays;
 import java.util.List;
@@ -44,7 +45,7 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
  */
 @Component
 @Slf4j
-public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentDescriptorEntity> implements ComponentDescriptorDao {
+public class BaseComponentDescriptorDao extends CassandraAbstractSearchTextDao<ComponentDescriptorEntity, ComponentDescriptor> implements ComponentDescriptorDao {
 
     @Override
     protected Class<ComponentDescriptorEntity> getColumnFamilyClass() {
@@ -57,10 +58,10 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
     }
 
     @Override
-    public Optional<ComponentDescriptorEntity> save(ComponentDescriptor component) {
+    public Optional<ComponentDescriptor> saveIfNotExist(ComponentDescriptor component) {
         ComponentDescriptorEntity entity = new ComponentDescriptorEntity(component);
         log.debug("Save component entity [{}]", entity);
-        Optional<ComponentDescriptorEntity> result = saveIfNotExist(entity);
+        Optional<ComponentDescriptor> result = saveIfNotExist(entity);
         if (log.isTraceEnabled()) {
             log.trace("Saved result: [{}] for component entity [{}]", result.isPresent(), result.orElse(null));
         } else {
@@ -70,19 +71,19 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
     }
 
     @Override
-    public ComponentDescriptorEntity findById(ComponentDescriptorId componentId) {
+    public ComponentDescriptor findById(ComponentDescriptorId componentId) {
         log.debug("Search component entity by id [{}]", componentId);
-        ComponentDescriptorEntity entity = super.findById(componentId.getId());
+        ComponentDescriptor componentDescriptor = super.findById(componentId.getId());
         if (log.isTraceEnabled()) {
-            log.trace("Search result: [{}] for component entity [{}]", entity != null, entity);
+            log.trace("Search result: [{}] for component entity [{}]", componentDescriptor != null, componentDescriptor);
         } else {
-            log.debug("Search result: [{}]", entity != null);
+            log.debug("Search result: [{}]", componentDescriptor != null);
         }
-        return entity;
+        return componentDescriptor;
     }
 
     @Override
-    public ComponentDescriptorEntity findByClazz(String clazz) {
+    public ComponentDescriptor findByClazz(String clazz) {
         log.debug("Search component entity by clazz [{}]", clazz);
         Select.Where query = select().from(getColumnFamilyName()).where(eq(ModelConstants.COMPONENT_DESCRIPTOR_CLASS_PROPERTY, clazz));
         log.trace("Execute query [{}]", query);
@@ -92,11 +93,11 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
         } else {
             log.debug("Search result: [{}]", entity != null);
         }
-        return entity;
+        return DaoUtil.getData(entity);
     }
 
     @Override
-    public List<ComponentDescriptorEntity> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) {
+    public List<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) {
         log.debug("Try to find component by type [{}] and pageLink [{}]", type, pageLink);
         List<ComponentDescriptorEntity> entities = findPageWithTextSearch(ModelConstants.COMPONENT_DESCRIPTOR_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
                 Arrays.asList(eq(ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY, type.name())), pageLink);
@@ -105,11 +106,11 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
         } else {
             log.debug("Search result: [{}]", entities.size());
         }
-        return entities;
+        return DaoUtil.convertDataList(entities);
     }
 
     @Override
-    public List<ComponentDescriptorEntity> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) {
+    public List<ComponentDescriptor> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) {
         log.debug("Try to find component by scope [{}] and type [{}] and pageLink [{}]", scope, type, pageLink);
         List<ComponentDescriptorEntity> entities = findPageWithTextSearch(ModelConstants.COMPONENT_DESCRIPTOR_BY_SCOPE_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
                 Arrays.asList(eq(ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY, type.name()),
@@ -119,20 +120,20 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
         } else {
             log.debug("Search result: [{}]", entities.size());
         }
-        return entities;
+        return DaoUtil.convertDataList(entities);
     }
 
-    public ResultSet removeById(UUID key) {
+    public boolean removeById(UUID key) {
         Statement delete = QueryBuilder.delete().all().from(ModelConstants.COMPONENT_DESCRIPTOR_BY_ID).where(eq(ModelConstants.ID_PROPERTY, key));
         log.debug("Remove request: {}", delete.toString());
-        return getSession().execute(delete);
+        return getSession().execute(delete).wasApplied();
     }
 
     @Override
     public void deleteById(ComponentDescriptorId id) {
         log.debug("Delete plugin meta-data entity by id [{}]", id);
-        ResultSet resultSet = removeById(id.getId());
-        log.debug("Delete result: [{}]", resultSet.wasApplied());
+        boolean result = removeById(id.getId());
+        log.debug("Delete result: [{}]", result);
     }
 
     @Override
@@ -144,7 +145,7 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
         log.debug("Delete result: [{}]", resultSet.wasApplied());
     }
 
-    private Optional<ComponentDescriptorEntity> saveIfNotExist(ComponentDescriptorEntity entity) {
+    private Optional<ComponentDescriptor> saveIfNotExist(ComponentDescriptorEntity entity) {
         if (entity.getId() == null) {
             entity.setId(UUIDs.timeBased());
         }
@@ -161,7 +162,7 @@ public class BaseComponentDescriptorDao extends AbstractSearchTextDao<ComponentD
                 .ifNotExists()
         );
         if (rs.wasApplied()) {
-            return Optional.of(entity);
+            return Optional.of(DaoUtil.getData(entity));
         } else {
             return Optional.empty();
         }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorService.java b/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorService.java
index 22fa19d..3a89e55 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/component/BaseComponentDescriptorService.java
@@ -32,16 +32,12 @@ import org.thingsboard.server.common.data.plugin.ComponentScope;
 import org.thingsboard.server.common.data.plugin.ComponentType;
 import org.thingsboard.server.dao.exception.DataValidationException;
 import org.thingsboard.server.dao.exception.IncorrectParameterException;
-import org.thingsboard.server.dao.model.ComponentDescriptorEntity;
 import org.thingsboard.server.dao.service.DataValidator;
 import org.thingsboard.server.dao.service.Validator;
 
 import java.util.List;
 import java.util.Optional;
 
-import static org.thingsboard.server.dao.DaoUtil.convertDataList;
-import static org.thingsboard.server.dao.DaoUtil.getData;
-
 /**
  * @author Andrew Shvayka
  */
@@ -55,39 +51,37 @@ public class BaseComponentDescriptorService implements ComponentDescriptorServic
     @Override
     public ComponentDescriptor saveComponent(ComponentDescriptor component) {
         componentValidator.validate(component);
-        Optional<ComponentDescriptorEntity> result = componentDescriptorDao.save(component);
+        Optional<ComponentDescriptor> result = componentDescriptorDao.saveIfNotExist(component);
         if (result.isPresent()) {
-            return getData(result.get());
+            return result.get();
         } else {
-            return getData(componentDescriptorDao.findByClazz(component.getClazz()));
+            return componentDescriptorDao.findByClazz(component.getClazz());
         }
     }
 
     @Override
     public ComponentDescriptor findById(ComponentDescriptorId componentId) {
         Validator.validateId(componentId, "Incorrect component id for search request.");
-        return getData(componentDescriptorDao.findById(componentId));
+        return componentDescriptorDao.findById(componentId);
     }
 
     @Override
     public ComponentDescriptor findByClazz(String clazz) {
         Validator.validateString(clazz, "Incorrect clazz for search request.");
-        return getData(componentDescriptorDao.findByClazz(clazz));
+        return componentDescriptorDao.findByClazz(clazz);
     }
 
     @Override
     public TextPageData<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) {
         Validator.validatePageLink(pageLink, "Incorrect PageLink object for search plugin components request.");
-        List<ComponentDescriptorEntity> pluginEntities = componentDescriptorDao.findByTypeAndPageLink(type, pageLink);
-        List<ComponentDescriptor> components = convertDataList(pluginEntities);
+        List<ComponentDescriptor> components = componentDescriptorDao.findByTypeAndPageLink(type, pageLink);
         return new TextPageData<>(components, pageLink);
     }
 
     @Override
     public TextPageData<ComponentDescriptor> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) {
         Validator.validatePageLink(pageLink, "Incorrect PageLink object for search plugin components request.");
-        List<ComponentDescriptorEntity> pluginEntities = componentDescriptorDao.findByScopeAndTypeAndPageLink(scope, type, pageLink);
-        List<ComponentDescriptor> components = convertDataList(pluginEntities);
+        List<ComponentDescriptor> components = componentDescriptorDao.findByScopeAndTypeAndPageLink(scope, type, pageLink);
         return new TextPageData<>(components, pageLink);
     }
 
diff --git a/dao/src/main/java/org/thingsboard/server/dao/component/ComponentDescriptorDao.java b/dao/src/main/java/org/thingsboard/server/dao/component/ComponentDescriptorDao.java
index 0496068..cfbcaae 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/component/ComponentDescriptorDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/component/ComponentDescriptorDao.java
@@ -21,7 +21,6 @@ import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
 import org.thingsboard.server.common.data.plugin.ComponentScope;
 import org.thingsboard.server.common.data.plugin.ComponentType;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.ComponentDescriptorEntity;
 
 import java.util.List;
 import java.util.Optional;
@@ -29,17 +28,17 @@ import java.util.Optional;
 /**
  * @author Andrew Shvayka
  */
-public interface ComponentDescriptorDao extends Dao<ComponentDescriptorEntity> {
+public interface ComponentDescriptorDao extends Dao<ComponentDescriptor> {
 
-    Optional<ComponentDescriptorEntity> save(ComponentDescriptor component);
+    Optional<ComponentDescriptor> saveIfNotExist(ComponentDescriptor component);
 
-    ComponentDescriptorEntity findById(ComponentDescriptorId componentId);
+    ComponentDescriptor findById(ComponentDescriptorId componentId);
 
-    ComponentDescriptorEntity findByClazz(String clazz);
+    ComponentDescriptor findByClazz(String clazz);
 
-    List<ComponentDescriptorEntity> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink);
+    List<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink);
 
-    List<ComponentDescriptorEntity> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink);
+    List<ComponentDescriptor> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink);
 
     void deleteById(ComponentDescriptorId componentId);
 
diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerDao.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerDao.java
index 6d7247b..e26fc98 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerDao.java
@@ -15,18 +15,17 @@
  */
 package org.thingsboard.server.dao.customer;
 
-import java.util.List;
-import java.util.UUID;
-
 import org.thingsboard.server.common.data.Customer;
 import org.thingsboard.server.common.data.page.TextPageLink;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.CustomerEntity;
+
+import java.util.List;
+import java.util.UUID;
 
 /**
  * The Interface CustomerDao.
  */
-public interface CustomerDao extends Dao<CustomerEntity> {
+public interface CustomerDao extends Dao<Customer> {
 
     /**
      * Save or update customer object
@@ -34,7 +33,7 @@ public interface CustomerDao extends Dao<CustomerEntity> {
      * @param customer the customer object
      * @return saved customer object
      */
-    CustomerEntity save(Customer customer);
+    Customer save(Customer customer);
     
     /**
      * Find customers by tenant id and page link.
@@ -43,6 +42,6 @@ public interface CustomerDao extends Dao<CustomerEntity> {
      * @param pageLink the page link
      * @return the list of customer objects
      */
-    List<CustomerEntity> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink);
+    List<Customer> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink);
     
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java
index 70321a2..566d718 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java
@@ -23,14 +23,14 @@ import org.thingsboard.server.common.data.page.TextPageLink;
 
 public interface CustomerService {
 
-    public Customer findCustomerById(CustomerId customerId);
+    Customer findCustomerById(CustomerId customerId);
     
-    public Customer saveCustomer(Customer customer);
+    Customer saveCustomer(Customer customer);
     
-    public void deleteCustomer(CustomerId customerId);
+    void deleteCustomer(CustomerId customerId);
     
-    public TextPageData<Customer> findCustomersByTenantId(TenantId tenantId, TextPageLink pageLink);
+    TextPageData<Customer> findCustomersByTenantId(TenantId tenantId, TextPageLink pageLink);
     
-    public void deleteCustomersByTenantId(TenantId tenantId);
+    void deleteCustomersByTenantId(TenantId tenantId);
     
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java
index 18ead42..3e9e472 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java
@@ -15,14 +15,12 @@
  */
 package org.thingsboard.server.dao.customer;
 
-import static org.thingsboard.server.dao.DaoUtil.convertDataList;
-import static org.thingsboard.server.dao.DaoUtil.getData;
-
-import java.util.List;
-
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 import org.thingsboard.server.common.data.Customer;
+import org.thingsboard.server.common.data.Tenant;
 import org.thingsboard.server.common.data.id.CustomerId;
 import org.thingsboard.server.common.data.id.TenantId;
 import org.thingsboard.server.common.data.page.TextPageData;
@@ -31,17 +29,13 @@ import org.thingsboard.server.dao.dashboard.DashboardService;
 import org.thingsboard.server.dao.device.DeviceService;
 import org.thingsboard.server.dao.exception.DataValidationException;
 import org.thingsboard.server.dao.exception.IncorrectParameterException;
-import org.thingsboard.server.dao.model.CustomerEntity;
-import org.thingsboard.server.dao.model.TenantEntity;
 import org.thingsboard.server.dao.service.DataValidator;
 import org.thingsboard.server.dao.service.PaginatedRemover;
+import org.thingsboard.server.dao.service.Validator;
 import org.thingsboard.server.dao.tenant.TenantDao;
 import org.thingsboard.server.dao.user.UserService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.thingsboard.server.dao.service.Validator;
+
+import java.util.List;
 @Service
 @Slf4j
 public class CustomerServiceImpl implements CustomerService {
@@ -65,16 +59,14 @@ public class CustomerServiceImpl implements CustomerService {
     public Customer findCustomerById(CustomerId customerId) {
         log.trace("Executing findCustomerById [{}]", customerId);
         Validator.validateId(customerId, "Incorrect customerId " + customerId);
-        CustomerEntity customerEntity = customerDao.findById(customerId.getId());
-        return getData(customerEntity);
+        return customerDao.findById(customerId.getId());
     }
 
     @Override
     public Customer saveCustomer(Customer customer) {
         log.trace("Executing saveCustomer [{}]", customer);
         customerValidator.validate(customer);
-        CustomerEntity customerEntity = customerDao.save(customer);
-        return getData(customerEntity);
+        return customerDao.save(customer);
     }
 
     @Override
@@ -96,8 +88,7 @@ public class CustomerServiceImpl implements CustomerService {
         log.trace("Executing findCustomersByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink);
         Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
         Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
-        List<CustomerEntity> customerEntities = customerDao.findCustomersByTenantId(tenantId.getId(), pageLink);
-        List<Customer> customers = convertDataList(customerEntities);
+        List<Customer> customers = customerDao.findCustomersByTenantId(tenantId.getId(), pageLink);
         return new TextPageData<Customer>(customers, pageLink);
     }
 
@@ -121,7 +112,7 @@ public class CustomerServiceImpl implements CustomerService {
                     if (customer.getTenantId() == null) {
                         throw new DataValidationException("Customer should be assigned to tenant!");
                     } else {
-                        TenantEntity tenant = tenantDao.findById(customer.getTenantId().getId());
+                        Tenant tenant = tenantDao.findById(customer.getTenantId().getId());
                         if (tenant == null) {
                             throw new DataValidationException("Customer is referencing to non-existent tenant!");
                         }
@@ -129,17 +120,17 @@ public class CustomerServiceImpl implements CustomerService {
                 }
     };
 
-    private PaginatedRemover<TenantId, CustomerEntity> customersByTenantRemover =
-            new PaginatedRemover<TenantId, CustomerEntity>() {
+    private PaginatedRemover<TenantId, Customer> customersByTenantRemover =
+            new PaginatedRemover<TenantId, Customer>() {
         
         @Override
-        protected List<CustomerEntity> findEntities(TenantId id, TextPageLink pageLink) {
+        protected List<Customer> findEntities(TenantId id, TextPageLink pageLink) {
             return customerDao.findCustomersByTenantId(id.getId(), pageLink);
         }
 
         @Override
-        protected void removeEntity(CustomerEntity entity) {
-            deleteCustomer(new CustomerId(entity.getId()));
+        protected void removeEntity(Customer entity) {
+            deleteCustomer(new CustomerId(entity.getUuidId()));
         }
     };
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/Dao.java b/dao/src/main/java/org/thingsboard/server/dao/Dao.java
index 2703cdc..f0580eb 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/Dao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/Dao.java
@@ -15,7 +15,6 @@
  */
 package org.thingsboard.server.dao;
 
-import com.datastax.driver.core.ResultSet;
 import com.google.common.util.concurrent.ListenableFuture;
 
 import java.util.List;
@@ -31,6 +30,6 @@ public interface Dao<T> {
 
     T save(T t);
 
-    ResultSet removeById(UUID id);
+    boolean removeById(UUID id);
 
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java b/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java
index 27499bb..42823a1 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java
@@ -15,15 +15,11 @@
  */
 package org.thingsboard.server.dao;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-
 import org.thingsboard.server.common.data.id.UUIDBased;
 import org.thingsboard.server.dao.model.ToData;
 
+import java.util.*;
+
 public abstract class DaoUtil {
 
     private DaoUtil() {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardDao.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardDao.java
index 2b9920a..f2563ca 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardDao.java
@@ -15,21 +15,13 @@
  */
 package org.thingsboard.server.dao.dashboard;
 
-import java.util.List;
-import java.util.UUID;
-
 import org.thingsboard.server.common.data.Dashboard;
-import org.thingsboard.server.common.data.page.TextPageLink;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.DashboardEntity;
-import org.thingsboard.server.dao.model.DashboardInfoEntity;
 
 /**
  * The Interface DashboardDao.
- *
- * @param <T> the generic type
  */
-public interface DashboardDao extends Dao<DashboardEntity> {
+public interface DashboardDao extends Dao<Dashboard> {
 
     /**
      * Save or update dashboard object
@@ -37,6 +29,6 @@ public interface DashboardDao extends Dao<DashboardEntity> {
      * @param dashboard the dashboard object
      * @return saved dashboard object
      */
-    DashboardEntity save(Dashboard dashboard);
+    Dashboard save(Dashboard dashboard);
 
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDao.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDao.java
index 9852b35..a26bd14 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardInfoDao.java
@@ -15,21 +15,17 @@
  */
 package org.thingsboard.server.dao.dashboard;
 
-import java.util.List;
-import java.util.UUID;
-
-import org.thingsboard.server.common.data.Dashboard;
+import org.thingsboard.server.common.data.DashboardInfo;
 import org.thingsboard.server.common.data.page.TextPageLink;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.DashboardEntity;
-import org.thingsboard.server.dao.model.DashboardInfoEntity;
+
+import java.util.List;
+import java.util.UUID;
 
 /**
  * The Interface DashboardInfoDao.
- *
- * @param <T> the generic type
  */
-public interface DashboardInfoDao extends Dao<DashboardInfoEntity> {
+public interface DashboardInfoDao extends Dao<DashboardInfo> {
 
     /**
      * Find dashboards by tenantId and page link.
@@ -38,7 +34,7 @@ public interface DashboardInfoDao extends Dao<DashboardInfoEntity> {
      * @param pageLink the page link
      * @return the list of dashboard objects
      */
-    List<DashboardInfoEntity> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink);
+    List<DashboardInfo> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink);
 
     /**
      * Find dashboards by tenantId, customerId and page link.
@@ -48,6 +44,6 @@ public interface DashboardInfoDao extends Dao<DashboardInfoEntity> {
      * @param pageLink the page link
      * @return the list of dashboard objects
      */
-    List<DashboardInfoEntity> findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink);
+    List<DashboardInfo> findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink);
 
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java
index 8c86064..b49b5b4 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java
@@ -25,22 +25,22 @@ import org.thingsboard.server.common.data.page.TextPageLink;
 
 public interface DashboardService {
     
-    public Dashboard findDashboardById(DashboardId dashboardId);
-    
-    public Dashboard saveDashboard(Dashboard dashboard);
-    
-    public Dashboard assignDashboardToCustomer(DashboardId dashboardId, CustomerId customerId);
+    Dashboard findDashboardById(DashboardId dashboardId);
 
-    public Dashboard unassignDashboardFromCustomer(DashboardId dashboardId);
+    Dashboard saveDashboard(Dashboard dashboard);
 
-    public void deleteDashboard(DashboardId dashboardId);
-    
-    public TextPageData<DashboardInfo> findDashboardsByTenantId(TenantId tenantId, TextPageLink pageLink);
+    Dashboard assignDashboardToCustomer(DashboardId dashboardId, CustomerId customerId);
 
-    public void deleteDashboardsByTenantId(TenantId tenantId);
-    
-    public TextPageData<DashboardInfo> findDashboardsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, TextPageLink pageLink);
+    Dashboard unassignDashboardFromCustomer(DashboardId dashboardId);
+
+    void deleteDashboard(DashboardId dashboardId);
+
+    TextPageData<DashboardInfo> findDashboardsByTenantId(TenantId tenantId, TextPageLink pageLink);
+
+    void deleteDashboardsByTenantId(TenantId tenantId);
+
+    TextPageData<DashboardInfo> findDashboardsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, TextPageLink pageLink);
+
+    void unassignCustomerDashboards(TenantId tenantId, CustomerId customerId);
 
-    public void unassignCustomerDashboards(TenantId tenantId, CustomerId customerId);
-    
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java
index 2e0abfb..fca73c4 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java
@@ -15,15 +15,14 @@
  */
 package org.thingsboard.server.dao.dashboard;
 
-import static org.thingsboard.server.dao.DaoUtil.convertDataList;
-import static org.thingsboard.server.dao.DaoUtil.getData;
-
-import java.util.List;
-
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.thingsboard.server.common.data.Customer;
 import org.thingsboard.server.common.data.Dashboard;
 import org.thingsboard.server.common.data.DashboardInfo;
+import org.thingsboard.server.common.data.Tenant;
 import org.thingsboard.server.common.data.id.CustomerId;
 import org.thingsboard.server.common.data.id.DashboardId;
 import org.thingsboard.server.common.data.id.TenantId;
@@ -31,15 +30,13 @@ import org.thingsboard.server.common.data.page.TextPageData;
 import org.thingsboard.server.common.data.page.TextPageLink;
 import org.thingsboard.server.dao.customer.CustomerDao;
 import org.thingsboard.server.dao.exception.DataValidationException;
-import org.thingsboard.server.dao.model.*;
+import org.thingsboard.server.dao.model.ModelConstants;
 import org.thingsboard.server.dao.service.DataValidator;
 import org.thingsboard.server.dao.service.PaginatedRemover;
-import org.thingsboard.server.dao.tenant.TenantDao;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
 import org.thingsboard.server.dao.service.Validator;
+import org.thingsboard.server.dao.tenant.TenantDao;
+
+import java.util.List;
 
 @Service
 @Slf4j
@@ -61,16 +58,14 @@ public class DashboardServiceImpl implements DashboardService {
     public Dashboard findDashboardById(DashboardId dashboardId) {
         log.trace("Executing findDashboardById [{}]", dashboardId);
         Validator.validateId(dashboardId, "Incorrect dashboardId " + dashboardId);
-        DashboardEntity dashboardEntity = dashboardDao.findById(dashboardId.getId());
-        return getData(dashboardEntity);
+        return dashboardDao.findById(dashboardId.getId());
     }
 
     @Override
     public Dashboard saveDashboard(Dashboard dashboard) {
         log.trace("Executing saveDashboard [{}]", dashboard);
         dashboardValidator.validate(dashboard);
-        DashboardEntity dashboardEntity = dashboardDao.save(dashboard);
-        return getData(dashboardEntity);
+        return dashboardDao.save(dashboard);
     }
     
     @Override
@@ -99,9 +94,8 @@ public class DashboardServiceImpl implements DashboardService {
         log.trace("Executing findDashboardsByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink);
         Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
         Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
-        List<DashboardInfoEntity> dashboardEntities = dashboardInfoDao.findDashboardsByTenantId(tenantId.getId(), pageLink);
-        List<DashboardInfo> dashboards = convertDataList(dashboardEntities);
-        return new TextPageData<DashboardInfo>(dashboards, pageLink);
+        List<DashboardInfo> dashboards = dashboardInfoDao.findDashboardsByTenantId(tenantId.getId(), pageLink);
+        return new TextPageData<>(dashboards, pageLink);
     }
 
     @Override
@@ -117,9 +111,8 @@ public class DashboardServiceImpl implements DashboardService {
         Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
         Validator.validateId(customerId, "Incorrect customerId " + customerId);
         Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
-        List<DashboardInfoEntity> dashboardEntities = dashboardInfoDao.findDashboardsByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink);
-        List<DashboardInfo> dashboards = convertDataList(dashboardEntities);
-        return new TextPageData<DashboardInfo>(dashboards, pageLink);
+        List<DashboardInfo> dashboards = dashboardInfoDao.findDashboardsByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink);
+        return new TextPageData<>(dashboards, pageLink);
     }
 
     @Override
@@ -140,7 +133,7 @@ public class DashboardServiceImpl implements DashboardService {
                     if (dashboard.getTenantId() == null) {
                         throw new DataValidationException("Dashboard should be assigned to tenant!");
                     } else {
-                        TenantEntity tenant = tenantDao.findById(dashboard.getTenantId().getId());
+                        Tenant tenant = tenantDao.findById(dashboard.getTenantId().getId());
                         if (tenant == null) {
                             throw new DataValidationException("Dashboard is referencing to non-existent tenant!");
                         }
@@ -148,32 +141,32 @@ public class DashboardServiceImpl implements DashboardService {
                     if (dashboard.getCustomerId() == null) {
                         dashboard.setCustomerId(new CustomerId(ModelConstants.NULL_UUID));
                     } else if (!dashboard.getCustomerId().getId().equals(ModelConstants.NULL_UUID)) {
-                        CustomerEntity customer = customerDao.findById(dashboard.getCustomerId().getId());
+                        Customer customer = customerDao.findById(dashboard.getCustomerId().getId());
                         if (customer == null) {
                             throw new DataValidationException("Can't assign dashboard to non-existent customer!");
                         }
-                        if (!customer.getTenantId().equals(dashboard.getTenantId().getId())) {
+                        if (!customer.getTenantId().getId().equals(dashboard.getTenantId().getId())) {
                             throw new DataValidationException("Can't assign dashboard to customer from different tenant!");
                         }
                     }
                 }
     };
     
-    private PaginatedRemover<TenantId, DashboardInfoEntity> tenantDashboardsRemover =
-            new PaginatedRemover<TenantId, DashboardInfoEntity>() {
+    private PaginatedRemover<TenantId, DashboardInfo> tenantDashboardsRemover =
+            new PaginatedRemover<TenantId, DashboardInfo>() {
         
         @Override
-        protected List<DashboardInfoEntity> findEntities(TenantId id, TextPageLink pageLink) {
+        protected List<DashboardInfo> findEntities(TenantId id, TextPageLink pageLink) {
             return dashboardInfoDao.findDashboardsByTenantId(id.getId(), pageLink);
         }
 
         @Override
-        protected void removeEntity(DashboardInfoEntity entity) {
-            deleteDashboard(new DashboardId(entity.getId()));
+        protected void removeEntity(DashboardInfo entity) {
+            deleteDashboard(new DashboardId(entity.getUuidId()));
         }
     };
     
-    class CustomerDashboardsUnassigner extends PaginatedRemover<CustomerId, DashboardInfoEntity> {
+    private class CustomerDashboardsUnassigner extends PaginatedRemover<CustomerId, DashboardInfo> {
         
         private TenantId tenantId;
         
@@ -182,13 +175,13 @@ public class DashboardServiceImpl implements DashboardService {
         }
 
         @Override
-        protected List<DashboardInfoEntity> findEntities(CustomerId id, TextPageLink pageLink) {
+        protected List<DashboardInfo> findEntities(CustomerId id, TextPageLink pageLink) {
             return dashboardInfoDao.findDashboardsByTenantIdAndCustomerId(tenantId.getId(), id.getId(), pageLink);
         }
 
         @Override
-        protected void removeEntity(DashboardInfoEntity entity) {
-            unassignDashboardFromCustomer(new DashboardId(entity.getId()));
+        protected void removeEntity(DashboardInfo entity) {
+            unassignDashboardFromCustomer(new DashboardId(entity.getUuidId()));
         }
         
     }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsDao.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsDao.java
index 89a4a02..c13129a 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsDao.java
@@ -15,18 +15,15 @@
  */
 package org.thingsboard.server.dao.device;
 
-import java.util.UUID;
-
 import org.thingsboard.server.common.data.security.DeviceCredentials;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.DeviceCredentialsEntity;
+
+import java.util.UUID;
 
 /**
  * The Interface DeviceCredentialsDao.
- *
- * @param <T> the generic type
  */
-public interface DeviceCredentialsDao extends Dao<DeviceCredentialsEntity> {
+public interface DeviceCredentialsDao extends Dao<DeviceCredentials> {
 
     /**
      * Save or update device credentials object
@@ -34,7 +31,7 @@ public interface DeviceCredentialsDao extends Dao<DeviceCredentialsEntity> {
      * @param deviceCredentials the device credentials object
      * @return saved device credentials object
      */
-    DeviceCredentialsEntity save(DeviceCredentials deviceCredentials);
+    DeviceCredentials save(DeviceCredentials deviceCredentials);
 
     /**
      * Find device credentials by device id.
@@ -42,7 +39,7 @@ public interface DeviceCredentialsDao extends Dao<DeviceCredentialsEntity> {
      * @param deviceId the device id
      * @return the device credentials object
      */
-    DeviceCredentialsEntity findByDeviceId(UUID deviceId);
+    DeviceCredentials findByDeviceId(UUID deviceId);
 
     /**
      * Find device credentials by credentials id.
@@ -50,6 +47,6 @@ public interface DeviceCredentialsDao extends Dao<DeviceCredentialsEntity> {
      * @param credentialsId the credentials id
      * @return the device credentials object
      */
-    DeviceCredentialsEntity findByCredentialsId(String credentialsId);
+    DeviceCredentials findByCredentialsId(String credentialsId);
 
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsServiceImpl.java
index 10e329a..ae23221 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsServiceImpl.java
@@ -26,10 +26,8 @@ import org.thingsboard.server.common.data.security.DeviceCredentials;
 import org.thingsboard.server.common.data.security.DeviceCredentialsType;
 import org.thingsboard.server.dao.EncryptionUtil;
 import org.thingsboard.server.dao.exception.DataValidationException;
-import org.thingsboard.server.dao.model.DeviceCredentialsEntity;
 import org.thingsboard.server.dao.service.DataValidator;
 
-import static org.thingsboard.server.dao.DaoUtil.getData;
 import static org.thingsboard.server.dao.service.Validator.validateId;
 import static org.thingsboard.server.dao.service.Validator.validateString;
 
@@ -47,16 +45,14 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
     public DeviceCredentials findDeviceCredentialsByDeviceId(DeviceId deviceId) {
         log.trace("Executing findDeviceCredentialsByDeviceId [{}]", deviceId);
         validateId(deviceId, "Incorrect deviceId " + deviceId);
-        DeviceCredentialsEntity deviceCredentialsEntity = deviceCredentialsDao.findByDeviceId(deviceId.getId());
-        return getData(deviceCredentialsEntity);
+        return deviceCredentialsDao.findByDeviceId(deviceId.getId());
     }
 
     @Override
     public DeviceCredentials findDeviceCredentialsByCredentialsId(String credentialsId) {
         log.trace("Executing findDeviceCredentialsByCredentialsId [{}]", credentialsId);
         validateString(credentialsId, "Incorrect credentialsId " + credentialsId);
-        DeviceCredentialsEntity deviceCredentialsEntity = deviceCredentialsDao.findByCredentialsId(credentialsId);
-        return getData(deviceCredentialsEntity);
+        return deviceCredentialsDao.findByCredentialsId(credentialsId);
     }
 
     @Override
@@ -75,7 +71,7 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
         }
         log.trace("Executing updateDeviceCredentials [{}]", deviceCredentials);
         credentialsValidator.validate(deviceCredentials);
-        return getData(deviceCredentialsDao.save(deviceCredentials));
+        return deviceCredentialsDao.save(deviceCredentials);
     }
 
     private void formatCertData(DeviceCredentials deviceCredentials) {
@@ -96,7 +92,7 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
 
                 @Override
                 protected void validateCreate(DeviceCredentials deviceCredentials) {
-                    DeviceCredentialsEntity existingCredentialsEntity = deviceCredentialsDao.findByCredentialsId(deviceCredentials.getCredentialsId());
+                    DeviceCredentials existingCredentialsEntity = deviceCredentialsDao.findByCredentialsId(deviceCredentials.getCredentialsId());
                     if (existingCredentialsEntity != null) {
                         throw new DataValidationException("Create of existent device credentials!");
                     }
@@ -104,12 +100,12 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
 
                 @Override
                 protected void validateUpdate(DeviceCredentials deviceCredentials) {
-                    DeviceCredentialsEntity existingCredentialsEntity = deviceCredentialsDao.findById(deviceCredentials.getUuidId());
-                    if (existingCredentialsEntity == null) {
+                    DeviceCredentials existingCredentials = deviceCredentialsDao.findById(deviceCredentials.getUuidId());
+                    if (existingCredentials == null) {
                         throw new DataValidationException("Unable to update non-existent device credentials!");
                     }
-                    DeviceCredentialsEntity sameCredentialsIdEntity = deviceCredentialsDao.findByCredentialsId(deviceCredentials.getCredentialsId());
-                    if (sameCredentialsIdEntity != null && !sameCredentialsIdEntity.getId().equals(deviceCredentials.getUuidId())) {
+                    DeviceCredentials sameCredentialsId = deviceCredentialsDao.findByCredentialsId(deviceCredentials.getCredentialsId());
+                    if (sameCredentialsId != null && !sameCredentialsId.getUuidId().equals(deviceCredentials.getUuidId())) {
                         throw new DataValidationException("Specified credentials are already registered!");
                     }
                 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceDao.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceDao.java
index b8d395c..86d2f8f 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceDao.java
@@ -15,21 +15,20 @@
  */
 package org.thingsboard.server.dao.device;
 
-import java.util.List;
-import java.util.Optional;
-import java.util.UUID;
-
 import com.google.common.util.concurrent.ListenableFuture;
 import org.thingsboard.server.common.data.Device;
 import org.thingsboard.server.common.data.page.TextPageLink;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.DeviceEntity;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
 
 /**
  * The Interface DeviceDao.
  *
  */
-public interface DeviceDao extends Dao<DeviceEntity> {
+public interface DeviceDao extends Dao<Device> {
 
     /**
      * Save or update device object
@@ -37,7 +36,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
      * @param device the device object
      * @return saved device object
      */
-    DeviceEntity save(Device device);
+    Device save(Device device);
 
     /**
      * Find devices by tenantId and page link.
@@ -46,7 +45,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
      * @param pageLink the page link
      * @return the list of device objects
      */
-    List<DeviceEntity> findDevicesByTenantId(UUID tenantId, TextPageLink pageLink);
+    List<Device> findDevicesByTenantId(UUID tenantId, TextPageLink pageLink);
 
     /**
      * Find devices by tenantId and devices Ids.
@@ -55,7 +54,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
      * @param deviceIds the device Ids
      * @return the list of device objects
      */
-    ListenableFuture<List<DeviceEntity>> findDevicesByTenantIdAndIdsAsync(UUID tenantId, List<UUID> deviceIds);
+    ListenableFuture<List<Device>> findDevicesByTenantIdAndIdsAsync(UUID tenantId, List<UUID> deviceIds);
 
     /**
      * Find devices by tenantId, customerId and page link.
@@ -65,7 +64,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
      * @param pageLink the page link
      * @return the list of device objects
      */
-    List<DeviceEntity> findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink);
+    List<Device> findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink);
 
     /**
      * Find devices by tenantId, customerId and devices Ids.
@@ -75,7 +74,7 @@ public interface DeviceDao extends Dao<DeviceEntity> {
      * @param deviceIds the device Ids
      * @return the list of device objects
      */
-    ListenableFuture<List<DeviceEntity>> findDevicesByTenantIdCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> deviceIds);
+    ListenableFuture<List<Device>> findDevicesByTenantIdCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> deviceIds);
 
     /**
      * Find devices by tenantId and device name.
@@ -84,5 +83,5 @@ public interface DeviceDao extends Dao<DeviceEntity> {
      * @param name the device name
      * @return the optional device object
      */
-    Optional<DeviceEntity> findDevicesByTenantIdAndName(UUID tenantId, String name);
+    Optional<Device> findDevicesByTenantIdAndName(UUID tenantId, String name);
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java
index 3d1ce31..4a36594 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java
@@ -43,13 +43,9 @@ import org.thingsboard.server.dao.tenant.TenantDao;
 import java.util.List;
 import java.util.Optional;
 
-import static org.thingsboard.server.dao.DaoUtil.convertDataList;
-import static org.thingsboard.server.dao.DaoUtil.getData;
-import static org.thingsboard.server.dao.DaoUtil.toUUIDs;
+import static org.thingsboard.server.dao.DaoUtil.*;
 import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
-import static org.thingsboard.server.dao.service.Validator.validateId;
-import static org.thingsboard.server.dao.service.Validator.validateIds;
-import static org.thingsboard.server.dao.service.Validator.validatePageLink;
+import static org.thingsboard.server.dao.service.Validator.*;
 
 @Service
 @Slf4j
@@ -71,15 +67,14 @@ public class DeviceServiceImpl implements DeviceService {
     public Device findDeviceById(DeviceId deviceId) {
         log.trace("Executing findDeviceById [{}]", deviceId);
         validateId(deviceId, "Incorrect deviceId " + deviceId);
-        DeviceEntity deviceEntity = deviceDao.findById(deviceId.getId());
-        return getData(deviceEntity);
+        return deviceDao.findById(deviceId.getId());
     }
 
     @Override
     public ListenableFuture<Device> findDeviceByIdAsync(DeviceId deviceId) {
         log.trace("Executing findDeviceById [{}]", deviceId);
         validateId(deviceId, "Incorrect deviceId " + deviceId);
-        ListenableFuture<DeviceEntity> deviceEntity = deviceDao.findByIdAsync(deviceId.getId());
+        ListenableFuture<Device> deviceEntity = deviceDao.findByIdAsync(deviceId.getId());
         return Futures.transform(deviceEntity, (Function<? super DeviceEntity, ? extends Device>) input -> getData(input));
     }
 
@@ -87,9 +82,9 @@ public class DeviceServiceImpl implements DeviceService {
     public Optional<Device> findDeviceByTenantIdAndName(TenantId tenantId, String name) {
         log.trace("Executing findDeviceByTenantIdAndName [{}][{}]", tenantId, name);
         validateId(tenantId, "Incorrect tenantId " + tenantId);
-        Optional<DeviceEntity> deviceEntityOpt = deviceDao.findDevicesByTenantIdAndName(tenantId.getId(), name);
+        Optional<Device> deviceEntityOpt = deviceDao.findDevicesByTenantIdAndName(tenantId.getId(), name);
         if (deviceEntityOpt.isPresent()) {
-            return Optional.of(getData(deviceEntityOpt.get()));
+            return Optional.of(deviceEntityOpt.get());
         } else {
             return Optional.empty();
         }
@@ -99,15 +94,15 @@ public class DeviceServiceImpl implements DeviceService {
     public Device saveDevice(Device device) {
         log.trace("Executing saveDevice [{}]", device);
         deviceValidator.validate(device);
-        DeviceEntity deviceEntity = deviceDao.save(device);
+        Device savedDevice = deviceDao.save(device);
         if (device.getId() == null) {
             DeviceCredentials deviceCredentials = new DeviceCredentials();
-            deviceCredentials.setDeviceId(new DeviceId(deviceEntity.getId()));
+            deviceCredentials.setDeviceId(new DeviceId(savedDevice.getUuidId()));
             deviceCredentials.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN);
             deviceCredentials.setCredentialsId(RandomStringUtils.randomAlphanumeric(20));
             deviceCredentialsService.createDeviceCredentials(deviceCredentials);
         }
-        return getData(deviceEntity);
+        return savedDevice;
     }
 
     @Override
@@ -140,8 +135,7 @@ public class DeviceServiceImpl implements DeviceService {
         log.trace("Executing findDevicesByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink);
         validateId(tenantId, "Incorrect tenantId " + tenantId);
         validatePageLink(pageLink, "Incorrect page link " + pageLink);
-        List<DeviceEntity> deviceEntities = deviceDao.findDevicesByTenantId(tenantId.getId(), pageLink);
-        List<Device> devices = convertDataList(deviceEntities);
+        List<Device> devices = deviceDao.findDevicesByTenantId(tenantId.getId(), pageLink);
         return new TextPageData<Device>(devices, pageLink);
     }
 
@@ -150,7 +144,7 @@ public class DeviceServiceImpl implements DeviceService {
         log.trace("Executing findDevicesByTenantIdAndIdsAsync, tenantId [{}], deviceIds [{}]", tenantId, deviceIds);
         validateId(tenantId, "Incorrect tenantId " + tenantId);
         validateIds(deviceIds, "Incorrect deviceIds " + deviceIds);
-        ListenableFuture<List<DeviceEntity>> deviceEntities = deviceDao.findDevicesByTenantIdAndIdsAsync(tenantId.getId(), toUUIDs(deviceIds));
+        ListenableFuture<List<Device>> devices = deviceDao.findDevicesByTenantIdAndIdsAsync(tenantId.getId(), toUUIDs(deviceIds));
         return Futures.transform(deviceEntities, (Function<List<DeviceEntity>, List<Device>>) input -> convertDataList(input));
     }
 
@@ -168,8 +162,7 @@ public class DeviceServiceImpl implements DeviceService {
         validateId(tenantId, "Incorrect tenantId " + tenantId);
         validateId(customerId, "Incorrect customerId " + customerId);
         validatePageLink(pageLink, "Incorrect page link " + pageLink);
-        List<DeviceEntity> deviceEntities = deviceDao.findDevicesByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink);
-        List<Device> devices = convertDataList(deviceEntities);
+        List<Device> devices = deviceDao.findDevicesByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink);
         return new TextPageData<Device>(devices, pageLink);
     }
 
diff --git a/dao/src/main/java/org/thingsboard/server/dao/EncryptionUtil.java b/dao/src/main/java/org/thingsboard/server/dao/EncryptionUtil.java
index 9a4e592..1d74d30 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/EncryptionUtil.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/EncryptionUtil.java
@@ -15,7 +15,6 @@
  */
 package org.thingsboard.server.dao;
 
-import com.google.common.base.CharMatcher;
 import lombok.extern.slf4j.Slf4j;
 import org.bouncycastle.crypto.digests.SHA3Digest;
 import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java b/dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java
index 625f1f5..65fc567 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java
@@ -15,6 +15,7 @@
  */
 package org.thingsboard.server.dao.event;
 
+// CASSANDRA ???
 import com.datastax.driver.core.utils.UUIDs;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -27,14 +28,11 @@ import org.thingsboard.server.common.data.id.TenantId;
 import org.thingsboard.server.common.data.page.TimePageData;
 import org.thingsboard.server.common.data.page.TimePageLink;
 import org.thingsboard.server.dao.exception.DataValidationException;
-import org.thingsboard.server.dao.model.EventEntity;
 import org.thingsboard.server.dao.service.DataValidator;
 
 import java.util.List;
 import java.util.Optional;
 
-import static org.thingsboard.server.dao.DaoUtil.convertDataList;
-import static org.thingsboard.server.dao.DaoUtil.getData;
 import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
 
 @Service
@@ -59,7 +57,7 @@ public class BaseEventService implements EventService {
         if (StringUtils.isEmpty(event.getUid())) {
             event.setUid(event.getId().toString());
         }
-        return getData(eventDao.save(event));
+        return eventDao.save(event);
     }
 
     @Override
@@ -75,8 +73,8 @@ public class BaseEventService implements EventService {
         if (event.getId() == null) {
             event.setId(new EventId(UUIDs.timeBased()));
         }
-        Optional<EventEntity> result = eventDao.saveIfNotExists(event);
-        return result.isPresent() ? Optional.of(getData(result.get())) : Optional.empty();
+        Optional<Event> result = eventDao.saveIfNotExists(event);
+        return result.isPresent() ? Optional.of(result.get()) : Optional.empty();
     }
 
     @Override
@@ -93,22 +91,19 @@ public class BaseEventService implements EventService {
         if (StringUtils.isEmpty(eventUid)) {
             throw new DataValidationException("Event uid should be specified!.");
         }
-        EventEntity entity = eventDao.findEvent(tenantId.getId(), entityId, eventType, eventUid);
-        return entity != null ? Optional.of(getData(entity)) : Optional.empty();
+        Event event = eventDao.findEvent(tenantId.getId(), entityId, eventType, eventUid);
+        return event != null ? Optional.of(event) : Optional.empty();
     }
 
     @Override
     public TimePageData<Event> findEvents(TenantId tenantId, EntityId entityId, TimePageLink pageLink) {
-        List<EventEntity> entities = eventDao.findEvents(tenantId.getId(), entityId, pageLink);
-        List<Event> events = convertDataList(entities);
+        List<Event> events = eventDao.findEvents(tenantId.getId(), entityId, pageLink);
         return new TimePageData<Event>(events, pageLink);
     }
 
-
     @Override
     public TimePageData<Event> findEvents(TenantId tenantId, EntityId entityId, String eventType, TimePageLink pageLink) {
-        List<EventEntity> entities = eventDao.findEvents(tenantId.getId(), entityId, eventType, pageLink);
-        List<Event> events = convertDataList(entities);
+        List<Event> events = eventDao.findEvents(tenantId.getId(), entityId, eventType, pageLink);
         return new TimePageData<Event>(events, pageLink);
     }
 
diff --git a/dao/src/main/java/org/thingsboard/server/dao/event/EventDao.java b/dao/src/main/java/org/thingsboard/server/dao/event/EventDao.java
index 1556a5c..846c476 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/event/EventDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/event/EventDao.java
@@ -19,7 +19,6 @@ import org.thingsboard.server.common.data.Event;
 import org.thingsboard.server.common.data.id.EntityId;
 import org.thingsboard.server.common.data.page.TimePageLink;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.EventEntity;
 
 import java.util.List;
 import java.util.Optional;
@@ -27,10 +26,8 @@ import java.util.UUID;
 
 /**
  * The Interface DeviceDao.
- *
- * @param <T> the generic type
  */
-public interface EventDao extends Dao<EventEntity> {
+public interface EventDao extends Dao<Event> {
 
     /**
      * Save or update event object
@@ -38,7 +35,7 @@ public interface EventDao extends Dao<EventEntity> {
      * @param event the event object
      * @return saved event object
      */
-    EventEntity save(Event event);
+    Event save(Event event);
 
     /**
      * Save event object if it is not yet saved
@@ -46,7 +43,7 @@ public interface EventDao extends Dao<EventEntity> {
      * @param event the event object
      * @return saved event object
      */
-    Optional<EventEntity> saveIfNotExists(Event event);
+    Optional<Event> saveIfNotExists(Event event);
 
     /**
      * Find event by tenantId, entityId and eventUid.
@@ -57,7 +54,7 @@ public interface EventDao extends Dao<EventEntity> {
      * @param eventUid the eventUid
      * @return the event
      */
-    EventEntity findEvent(UUID tenantId, EntityId entityId, String eventType, String eventUid);
+    Event findEvent(UUID tenantId, EntityId entityId, String eventType, String eventUid);
 
     /**
      * Find events by tenantId, entityId and pageLink.
@@ -67,7 +64,7 @@ public interface EventDao extends Dao<EventEntity> {
      * @param pageLink the pageLink
      * @return the event list
      */
-    List<EventEntity> findEvents(UUID tenantId, EntityId entityId, TimePageLink pageLink);
+    List<Event> findEvents(UUID tenantId, EntityId entityId, TimePageLink pageLink);
 
     /**
      * Find events by tenantId, entityId, eventType and pageLink.
@@ -78,5 +75,5 @@ public interface EventDao extends Dao<EventEntity> {
      * @param pageLink the pageLink
      * @return the event list
      */
-    List<EventEntity> findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink);
+    List<Event> findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink);
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/event/EventService.java b/dao/src/main/java/org/thingsboard/server/dao/event/EventService.java
index 9237c89..1fb40f1 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/event/EventService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/event/EventService.java
@@ -21,7 +21,6 @@ import org.thingsboard.server.common.data.id.TenantId;
 import org.thingsboard.server.common.data.page.TimePageData;
 import org.thingsboard.server.common.data.page.TimePageLink;
 
-import java.util.List;
 import java.util.Optional;
 
 public interface EventService {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginService.java b/dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginService.java
index 99560d2..b9b73c6 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginService.java
@@ -17,8 +17,6 @@ package org.thingsboard.server.dao.plugin;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.thingsboard.server.common.data.id.PluginId;
@@ -29,13 +27,12 @@ import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
 import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
 import org.thingsboard.server.common.data.plugin.ComponentType;
 import org.thingsboard.server.common.data.plugin.PluginMetaData;
+import org.thingsboard.server.common.data.rule.RuleMetaData;
 import org.thingsboard.server.dao.component.ComponentDescriptorService;
 import org.thingsboard.server.dao.exception.DataValidationException;
 import org.thingsboard.server.dao.exception.DatabaseException;
 import org.thingsboard.server.dao.exception.IncorrectParameterException;
 import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.dao.model.PluginMetaDataEntity;
-import org.thingsboard.server.dao.model.RuleMetaDataEntity;
 import org.thingsboard.server.dao.rule.RuleDao;
 import org.thingsboard.server.dao.service.DataValidator;
 import org.thingsboard.server.dao.service.PaginatedRemover;
@@ -46,9 +43,6 @@ import java.util.List;
 import java.util.UUID;
 import java.util.stream.Collectors;
 
-import static org.thingsboard.server.dao.DaoUtil.convertDataList;
-import static org.thingsboard.server.dao.DaoUtil.getData;
-
 @Service
 @Slf4j
 public class BasePluginService implements PluginService {
@@ -73,7 +67,7 @@ public class BasePluginService implements PluginService {
             plugin.setTenantId(SYSTEM_TENANT);
         }
         if (plugin.getId() != null) {
-            PluginMetaData oldVersion = getData(pluginDao.findById(plugin.getId()));
+            PluginMetaData oldVersion = pluginDao.findById(plugin.getId());
             if (plugin.getState() == null) {
                 plugin.setState(oldVersion.getState());
             } else if (plugin.getState() != oldVersion.getState()) {
@@ -92,33 +86,32 @@ public class BasePluginService implements PluginService {
         } else if (!ComponentType.PLUGIN.equals(descriptor.getType())) {
             throw new IncorrectParameterException("Plugin class is actually " + descriptor.getType() + "!");
         }
-        PluginMetaDataEntity entity = pluginDao.findByApiToken(plugin.getApiToken());
-        if (entity != null && (plugin.getId() == null || !entity.getId().equals(plugin.getId().getId()))) {
+        PluginMetaData savedPlugin = pluginDao.findByApiToken(plugin.getApiToken());
+        if (savedPlugin != null && (plugin.getId() == null || !savedPlugin.getId().getId().equals(plugin.getId().getId()))) {
             throw new IncorrectParameterException("API token is already reserved!");
         }
         if (!componentDescriptorService.validate(descriptor, plugin.getConfiguration())) {
             throw new IncorrectParameterException("Filters configuration is not valid!");
         }
-        return getData(pluginDao.save(plugin));
+        return pluginDao.save(plugin);
     }
 
     @Override
     public PluginMetaData findPluginById(PluginId pluginId) {
         Validator.validateId(pluginId, "Incorrect plugin id for search request.");
-        return getData(pluginDao.findById(pluginId));
+        return pluginDao.findById(pluginId);
     }
 
     @Override
     public PluginMetaData findPluginByApiToken(String apiToken) {
         Validator.validateString(apiToken, "Incorrect plugin apiToken for search request.");
-        return getData(pluginDao.findByApiToken(apiToken));
+        return pluginDao.findByApiToken(apiToken);
     }
 
     @Override
     public TextPageData<PluginMetaData> findSystemPlugins(TextPageLink pageLink) {
         Validator.validatePageLink(pageLink, "Incorrect PageLink object for search system plugin request.");
-        List<PluginMetaDataEntity> pluginEntities = pluginDao.findByTenantIdAndPageLink(SYSTEM_TENANT, pageLink);
-        List<PluginMetaData> plugins = convertDataList(pluginEntities);
+        List<PluginMetaData> plugins = pluginDao.findByTenantIdAndPageLink(SYSTEM_TENANT, pageLink);
         return new TextPageData<>(plugins, pageLink);
     }
 
@@ -126,8 +119,7 @@ public class BasePluginService implements PluginService {
     public TextPageData<PluginMetaData> findTenantPlugins(TenantId tenantId, TextPageLink pageLink) {
         Validator.validateId(tenantId, "Incorrect tenant id for search plugins request.");
         Validator.validatePageLink(pageLink, "Incorrect PageLink object for search plugin request.");
-        List<PluginMetaDataEntity> pluginEntities = pluginDao.findByTenantIdAndPageLink(tenantId, pageLink);
-        List<PluginMetaData> plugins = convertDataList(pluginEntities);
+        List<PluginMetaData> plugins = pluginDao.findByTenantIdAndPageLink(tenantId, pageLink);
         return new TextPageData<>(plugins, pageLink);
     }
 
@@ -152,8 +144,7 @@ public class BasePluginService implements PluginService {
         log.trace("Executing findAllTenantPluginsByTenantIdAndPageLink, tenantId [{}], pageLink [{}]", tenantId, pageLink);
         Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
         Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
-        List<PluginMetaDataEntity> pluginsEntities = pluginDao.findAllTenantPluginsByTenantId(tenantId.getId(), pageLink);
-        List<PluginMetaData> plugins = convertDataList(pluginsEntities);
+        List<PluginMetaData> plugins = pluginDao.findAllTenantPluginsByTenantId(tenantId.getId(), pageLink);
         return new TextPageData<>(plugins, pageLink);
     }
 
@@ -181,8 +172,8 @@ public class BasePluginService implements PluginService {
 
     @Override
     public void suspendPluginById(PluginId pluginId) {
-        PluginMetaDataEntity plugin = pluginDao.findById(pluginId);
-        List<RuleMetaDataEntity> affectedRules = ruleDao.findRulesByPlugin(plugin.getApiToken())
+        PluginMetaData plugin = pluginDao.findById(pluginId);
+        List<RuleMetaData> affectedRules = ruleDao.findRulesByPlugin(plugin.getApiToken())
                 .stream().filter(rule -> rule.getState() == ComponentLifecycleState.ACTIVE).collect(Collectors.toList());
         if (affectedRules.isEmpty()) {
             updateLifeCycleState(pluginId, ComponentLifecycleState.SUSPENDED);
@@ -193,7 +184,7 @@ public class BasePluginService implements PluginService {
 
     private void updateLifeCycleState(PluginId pluginId, ComponentLifecycleState state) {
         Validator.validateId(pluginId, "Incorrect plugin id for state change request.");
-        PluginMetaDataEntity plugin = pluginDao.findById(pluginId);
+        PluginMetaData plugin = pluginDao.findById(pluginId);
         if (plugin != null) {
             plugin.setState(state);
             pluginDao.save(plugin);
@@ -209,8 +200,8 @@ public class BasePluginService implements PluginService {
     }
 
     private void checkRulesAndDelete(UUID pluginId) {
-        PluginMetaDataEntity plugin = pluginDao.findById(pluginId);
-        List<RuleMetaDataEntity> affectedRules = ruleDao.findRulesByPlugin(plugin.getApiToken());
+        PluginMetaData plugin = pluginDao.findById(pluginId);
+        List<RuleMetaData> affectedRules = ruleDao.findRulesByPlugin(plugin.getApiToken());
         if (affectedRules.isEmpty()) {
             pluginDao.deleteById(pluginId);
         } else {
@@ -244,17 +235,17 @@ public class BasePluginService implements PluginService {
                 }
             };
 
-    private PaginatedRemover<TenantId, PluginMetaDataEntity> tenantPluginRemover =
-            new PaginatedRemover<TenantId, PluginMetaDataEntity>() {
+    private PaginatedRemover<TenantId, PluginMetaData> tenantPluginRemover =
+            new PaginatedRemover<TenantId, PluginMetaData>() {
 
                 @Override
-                protected List<PluginMetaDataEntity> findEntities(TenantId id, TextPageLink pageLink) {
+                protected List<PluginMetaData> findEntities(TenantId id, TextPageLink pageLink) {
                     return pluginDao.findByTenantIdAndPageLink(id, pageLink);
                 }
 
                 @Override
-                protected void removeEntity(PluginMetaDataEntity entity) {
-                    checkRulesAndDelete(entity.getId());
+                protected void removeEntity(PluginMetaData entity) {
+                    checkRulesAndDelete(entity.getUuidId());
                 }
             };
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/plugin/PluginDao.java b/dao/src/main/java/org/thingsboard/server/dao/plugin/PluginDao.java
index 0adf125..1a48b20 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/plugin/PluginDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/plugin/PluginDao.java
@@ -20,24 +20,23 @@ import org.thingsboard.server.common.data.id.TenantId;
 import org.thingsboard.server.common.data.page.TextPageLink;
 import org.thingsboard.server.common.data.plugin.PluginMetaData;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.PluginMetaDataEntity;
 
 import java.util.List;
 import java.util.UUID;
 
-public interface PluginDao extends Dao<PluginMetaDataEntity> {
+public interface PluginDao extends Dao<PluginMetaData> {
 
-    PluginMetaDataEntity save(PluginMetaData plugin);
+    PluginMetaData save(PluginMetaData plugin);
 
-    PluginMetaDataEntity findById(PluginId pluginId);
+    PluginMetaData findById(PluginId pluginId);
 
-    PluginMetaDataEntity findByApiToken(String apiToken);
+    PluginMetaData findByApiToken(String apiToken);
 
     void deleteById(UUID id);
 
     void deleteById(PluginId pluginId);
 
-    List<PluginMetaDataEntity> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
+    List<PluginMetaData> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
 
     /**
      * Find all tenant plugins (including system) by tenantId and page link.
@@ -46,6 +45,6 @@ public interface PluginDao extends Dao<PluginMetaDataEntity> {
      * @param pageLink the page link
      * @return the list of plugins objects
      */
-    List<PluginMetaDataEntity> findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink);
+    List<PluginMetaData> findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink);
 
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleService.java
index e57c9f9..87e35ed 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleService.java
@@ -34,7 +34,6 @@ import org.thingsboard.server.dao.component.ComponentDescriptorService;
 import org.thingsboard.server.dao.exception.DataValidationException;
 import org.thingsboard.server.dao.exception.DatabaseException;
 import org.thingsboard.server.dao.exception.IncorrectParameterException;
-import org.thingsboard.server.dao.model.RuleMetaDataEntity;
 import org.thingsboard.server.dao.plugin.PluginService;
 import org.thingsboard.server.dao.service.DataValidator;
 import org.thingsboard.server.dao.service.PaginatedRemover;
@@ -45,8 +44,6 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.function.Function;
 
-import static org.thingsboard.server.dao.DaoUtil.convertDataList;
-import static org.thingsboard.server.dao.DaoUtil.getData;
 import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
 import static org.thingsboard.server.dao.service.Validator.validateId;
 import static org.thingsboard.server.dao.service.Validator.validatePageLink;
@@ -74,7 +71,7 @@ public class BaseRuleService implements RuleService {
             rule.setTenantId(systemTenantId);
         }
         if (rule.getId() != null) {
-            RuleMetaData oldVersion = getData(ruleDao.findById(rule.getId()));
+            RuleMetaData oldVersion = ruleDao.findById(rule.getId());
             if (rule.getState() == null) {
                 rule.setState(oldVersion.getState());
             } else if (rule.getState() != oldVersion.getState()) {
@@ -94,7 +91,7 @@ public class BaseRuleService implements RuleService {
         }
         validateComponentJson(rule.getAction(), ComponentType.ACTION);
         validateRuleAndPluginState(rule);
-        return getData(ruleDao.save(rule));
+        return ruleDao.save(rule);
     }
 
     private void validateFilters(JsonNode filtersJson) {
@@ -163,30 +160,27 @@ public class BaseRuleService implements RuleService {
     @Override
     public RuleMetaData findRuleById(RuleId ruleId) {
         validateId(ruleId, "Incorrect rule id for search rule request.");
-        return getData(ruleDao.findById(ruleId.getId()));
+        return ruleDao.findById(ruleId.getId());
     }
 
     @Override
     public List<RuleMetaData> findPluginRules(String pluginToken) {
-        List<RuleMetaDataEntity> ruleEntities = ruleDao.findRulesByPlugin(pluginToken);
-        return convertDataList(ruleEntities);
+        return ruleDao.findRulesByPlugin(pluginToken);
     }
 
     @Override
     public TextPageData<RuleMetaData> findSystemRules(TextPageLink pageLink) {
         validatePageLink(pageLink, "Incorrect PageLink object for search rule request.");
-        List<RuleMetaDataEntity> ruleEntities = ruleDao.findByTenantIdAndPageLink(systemTenantId, pageLink);
-        List<RuleMetaData> plugins = convertDataList(ruleEntities);
-        return new TextPageData<>(plugins, pageLink);
+        List<RuleMetaData> rules = ruleDao.findByTenantIdAndPageLink(systemTenantId, pageLink);
+        return new TextPageData<>(rules, pageLink);
     }
 
     @Override
     public TextPageData<RuleMetaData> findTenantRules(TenantId tenantId, TextPageLink pageLink) {
         validateId(tenantId, "Incorrect tenant id for search rule request.");
         validatePageLink(pageLink, "Incorrect PageLink object for search rule request.");
-        List<RuleMetaDataEntity> ruleEntities = ruleDao.findByTenantIdAndPageLink(tenantId, pageLink);
-        List<RuleMetaData> plugins = convertDataList(ruleEntities);
-        return new TextPageData<>(plugins, pageLink);
+        List<RuleMetaData> rules = ruleDao.findByTenantIdAndPageLink(tenantId, pageLink);
+        return new TextPageData<>(rules, pageLink);
     }
 
     @Override
@@ -210,8 +204,7 @@ public class BaseRuleService implements RuleService {
         log.trace("Executing findAllTenantRulesByTenantIdAndPageLink, tenantId [{}], pageLink [{}]", tenantId, pageLink);
         Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
         Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
-        List<RuleMetaDataEntity> rulesEntities = ruleDao.findAllTenantRulesByTenantId(tenantId.getId(), pageLink);
-        List<RuleMetaData> rules = convertDataList(rulesEntities);
+        List<RuleMetaData> rules = ruleDao.findAllTenantRulesByTenantId(tenantId.getId(), pageLink);
         return new TextPageData<>(rules, pageLink);
     }
 
@@ -251,10 +244,10 @@ public class BaseRuleService implements RuleService {
 
     private void updateLifeCycleState(RuleId ruleId, ComponentLifecycleState state) {
         Validator.validateId(ruleId, "Incorrect rule id for state change request.");
-        RuleMetaDataEntity rule = ruleDao.findById(ruleId);
+        RuleMetaData rule = ruleDao.findById(ruleId);
         if (rule != null) {
             rule.setState(state);
-            validateRuleAndPluginState(getData(rule));
+            validateRuleAndPluginState(rule);
             ruleDao.save(rule);
         } else {
             throw new DatabaseException("Plugin not found!");
@@ -277,17 +270,17 @@ public class BaseRuleService implements RuleService {
                 }
             };
 
-    private PaginatedRemover<TenantId, RuleMetaDataEntity> tenantRulesRemover =
-            new PaginatedRemover<TenantId, RuleMetaDataEntity>() {
+    private PaginatedRemover<TenantId, RuleMetaData> tenantRulesRemover =
+            new PaginatedRemover<TenantId, RuleMetaData>() {
 
                 @Override
-                protected List<RuleMetaDataEntity> findEntities(TenantId id, TextPageLink pageLink) {
+                protected List<RuleMetaData> findEntities(TenantId id, TextPageLink pageLink) {
                     return ruleDao.findByTenantIdAndPageLink(id, pageLink);
                 }
 
                 @Override
-                protected void removeEntity(RuleMetaDataEntity entity) {
-                    ruleDao.deleteById(entity.getId());
+                protected void removeEntity(RuleMetaData entity) {
+                    ruleDao.deleteById(entity.getUuidId());
                 }
             };
 
diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/RuleDao.java b/dao/src/main/java/org/thingsboard/server/dao/rule/RuleDao.java
index c2d09c7..ea12b74 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/rule/RuleDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/rule/RuleDao.java
@@ -20,20 +20,19 @@ import org.thingsboard.server.common.data.id.TenantId;
 import org.thingsboard.server.common.data.page.TextPageLink;
 import org.thingsboard.server.common.data.rule.RuleMetaData;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.RuleMetaDataEntity;
 
 import java.util.List;
 import java.util.UUID;
 
-public interface RuleDao extends Dao<RuleMetaDataEntity> {
+public interface RuleDao extends Dao<RuleMetaData> {
 
-    RuleMetaDataEntity save(RuleMetaData rule);
+    RuleMetaData save(RuleMetaData rule);
 
-    RuleMetaDataEntity findById(RuleId ruleId);
+    RuleMetaData findById(RuleId ruleId);
 
-    List<RuleMetaDataEntity> findRulesByPlugin(String pluginToken);
+    List<RuleMetaData> findRulesByPlugin(String pluginToken);
 
-    List<RuleMetaDataEntity> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
+    List<RuleMetaData> findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
 
     /**
      * Find all tenant rules (including system) by tenantId and page link.
@@ -42,7 +41,7 @@ public interface RuleDao extends Dao<RuleMetaDataEntity> {
      * @param pageLink the page link
      * @return the list of rules objects
      */
-    List<RuleMetaDataEntity> findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink);
+    List<RuleMetaData> findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink);
 
     void deleteById(UUID id);
 
diff --git a/dao/src/main/java/org/thingsboard/server/dao/service/DataValidator.java b/dao/src/main/java/org/thingsboard/server/dao/service/DataValidator.java
index 2f3aef7..e460cd0 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/service/DataValidator.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/service/DataValidator.java
@@ -15,18 +15,15 @@
  */
 package org.thingsboard.server.dao.service;
 
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
+import com.fasterxml.jackson.databind.JsonNode;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.validator.routines.EmailValidator;
 import org.thingsboard.server.common.data.BaseData;
 import org.thingsboard.server.dao.exception.DataValidationException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-import com.fasterxml.jackson.databind.JsonNode;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
 
 @Slf4j
 public abstract class DataValidator<D extends BaseData<?>> {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/service/PaginatedRemover.java b/dao/src/main/java/org/thingsboard/server/dao/service/PaginatedRemover.java
index 554a3c1..98c7fd9 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/service/PaginatedRemover.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/service/PaginatedRemover.java
@@ -1,12 +1,12 @@
 /**
  * Copyright © 2016-2017 The Thingsboard Authors
- *
+ * <p>
  * 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
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
  * 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.
@@ -15,33 +15,35 @@
  */
 package org.thingsboard.server.dao.service;
 
+import org.thingsboard.server.common.data.id.IdBased;
+import org.thingsboard.server.common.data.page.TextPageLink;
+
 import java.util.List;
 import java.util.UUID;
 
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.dao.model.BaseEntity;
+public abstract class PaginatedRemover<I, D extends IdBased<?>> {
 
-public abstract class PaginatedRemover<I, E extends BaseEntity<?>> {
+    private static final int DEFAULT_LIMIT = 100;
 
     public void removeEntitites(I id) {
-        TextPageLink pageLink = new TextPageLink(100);
+        TextPageLink pageLink = new TextPageLink(DEFAULT_LIMIT);
         boolean hasNext = true;
         while (hasNext) {
-            List<E> entities = findEntities(id, pageLink);
-            for (E entity : entities) {
+            List<D> entities = findEntities(id, pageLink);
+            for (D entity : entities) {
                 removeEntity(entity);
             }
             hasNext = entities.size() == pageLink.getLimit();
             if (hasNext) {
-                int index = entities.size()-1;
-                UUID idOffset = entities.get(index).getId();
+                int index = entities.size() - 1;
+                UUID idOffset = entities.get(index).getUuidId();
                 pageLink.setIdOffset(idOffset);
             }
-        } 
+        }
     }
-    
-    protected abstract List<E> findEntities(I id, TextPageLink pageLink);
-    
-    protected abstract void removeEntity(E entity);
-    
+
+    protected abstract List<D> findEntities(I id, TextPageLink pageLink);
+
+    protected abstract void removeEntity(D entity);
+
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsDao.java b/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsDao.java
index c5c6768..b0ed852 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsDao.java
@@ -17,9 +17,8 @@ package org.thingsboard.server.dao.settings;
 
 import org.thingsboard.server.common.data.AdminSettings;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.AdminSettingsEntity;
 
-public interface AdminSettingsDao extends Dao<AdminSettingsEntity> {
+public interface AdminSettingsDao extends Dao<AdminSettings> {
 
     /**
      * Save or update admin settings object
@@ -27,7 +26,7 @@ public interface AdminSettingsDao extends Dao<AdminSettingsEntity> {
      * @param adminSettings the admin settings object
      * @return saved admin settings object
      */
-    AdminSettingsEntity save(AdminSettings adminSettings);
+    AdminSettings save(AdminSettings adminSettings);
     
     /**
      * Find admin settings by key.
@@ -35,6 +34,6 @@ public interface AdminSettingsDao extends Dao<AdminSettingsEntity> {
      * @param key the key
      * @return the admin settings object
      */
-    AdminSettingsEntity findByKey(String key);
+    AdminSettings findByKey(String key);
 
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsService.java b/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsService.java
index 4c6e7ce..49576b1 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsService.java
@@ -20,10 +20,10 @@ import org.thingsboard.server.common.data.id.AdminSettingsId;
 
 public interface AdminSettingsService {
 
-    public AdminSettings findAdminSettingsById(AdminSettingsId adminSettingsId);
+    AdminSettings findAdminSettingsById(AdminSettingsId adminSettingsId);
 
-    public AdminSettings findAdminSettingsByKey(String key);
+    AdminSettings findAdminSettingsByKey(String key);
     
-    public AdminSettings saveAdminSettings(AdminSettings adminSettings);
+    AdminSettings saveAdminSettings(AdminSettings adminSettings);
     
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsServiceImpl.java
index c6d1a6b..6bfa293 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/settings/AdminSettingsServiceImpl.java
@@ -15,19 +15,14 @@
  */
 package org.thingsboard.server.dao.settings;
 
-import static org.thingsboard.server.dao.DaoUtil.getData;
-
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 import org.thingsboard.server.common.data.AdminSettings;
 import org.thingsboard.server.common.data.id.AdminSettingsId;
 import org.thingsboard.server.dao.exception.DataValidationException;
-import org.thingsboard.server.dao.model.AdminSettingsEntity;
 import org.thingsboard.server.dao.service.DataValidator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
 import org.thingsboard.server.dao.service.Validator;
 
 @Service
@@ -41,24 +36,21 @@ public class AdminSettingsServiceImpl implements AdminSettingsService {
     public AdminSettings findAdminSettingsById(AdminSettingsId adminSettingsId) {
         log.trace("Executing findAdminSettingsById [{}]", adminSettingsId);
         Validator.validateId(adminSettingsId, "Incorrect adminSettingsId " + adminSettingsId);
-        AdminSettingsEntity adminSettingsEntity = adminSettingsDao.findById(adminSettingsId.getId());
-        return getData(adminSettingsEntity);
+        return  adminSettingsDao.findById(adminSettingsId.getId());
     }
 
     @Override
     public AdminSettings findAdminSettingsByKey(String key) {
         log.trace("Executing findAdminSettingsByKey [{}]", key);
         Validator.validateString(key, "Incorrect key " + key);
-        AdminSettingsEntity adminSettingsEntity = adminSettingsDao.findByKey(key);
-        return getData(adminSettingsEntity);
+        return adminSettingsDao.findByKey(key);
     }
 
     @Override
     public AdminSettings saveAdminSettings(AdminSettings adminSettings) {
         log.trace("Executing saveAdminSettings [{}]", adminSettings);
         adminSettingsValidator.validate(adminSettings);
-        AdminSettingsEntity adminSettingsEntity = adminSettingsDao.save(adminSettings);
-        return getData(adminSettingsEntity);
+        return adminSettingsDao.save(adminSettings);
     }
     
     private DataValidator<AdminSettings> adminSettingsValidator =
diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantDao.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantDao.java
index c1b71fc..9c230d9 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantDao.java
@@ -15,14 +15,13 @@
  */
 package org.thingsboard.server.dao.tenant;
 
-import java.util.List;
-
 import org.thingsboard.server.common.data.Tenant;
 import org.thingsboard.server.common.data.page.TextPageLink;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.TenantEntity;
 
-public interface TenantDao extends Dao<TenantEntity> {
+import java.util.List;
+
+public interface TenantDao extends Dao<Tenant> {
 
     /**
      * Save or update tenant object
@@ -30,7 +29,7 @@ public interface TenantDao extends Dao<TenantEntity> {
      * @param tenant the tenant object
      * @return saved tenant object
      */
-    TenantEntity save(Tenant tenant);
+    Tenant save(Tenant tenant);
     
     /**
      * Find tenants by region and page link.
@@ -39,6 +38,6 @@ public interface TenantDao extends Dao<TenantEntity> {
      * @param pageLink the page link
      * @return the list of tenant objects
      */
-    List<TenantEntity> findTenantsByRegion(String region, TextPageLink pageLink);
+    List<Tenant> findTenantsByRegion(String region, TextPageLink pageLink);
     
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java
index 7e56e19..13b5090 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantService.java
@@ -22,16 +22,14 @@ import org.thingsboard.server.common.data.page.TextPageLink;
 
 public interface TenantService {
 
-    public Tenant findTenantById(TenantId tenantId);
+    Tenant findTenantById(TenantId tenantId);
     
-    public Tenant saveTenant(Tenant tenant);
+    Tenant saveTenant(Tenant tenant);
     
-    public void deleteTenant(TenantId tenantId);
+    void deleteTenant(TenantId tenantId);
     
-    public TextPageData<Tenant> findTenants(TextPageLink pageLink);
+    TextPageData<Tenant> findTenants(TextPageLink pageLink);
     
-    //public TextPageData<Tenant> findTenantsByTitle(String title, PageLink pageLink);
-    
-    public void deleteTenants();
+    void deleteTenants();
     
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java
index 9deb828..976cb71 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java
@@ -15,13 +15,10 @@
  */
 package org.thingsboard.server.dao.tenant;
 
-import static org.thingsboard.server.dao.DaoUtil.convertDataList;
-import static org.thingsboard.server.dao.DaoUtil.getData;
-
-import java.util.List;
-
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 import org.thingsboard.server.common.data.Tenant;
 import org.thingsboard.server.common.data.id.TenantId;
 import org.thingsboard.server.common.data.page.TextPageData;
@@ -30,19 +27,16 @@ import org.thingsboard.server.dao.customer.CustomerService;
 import org.thingsboard.server.dao.dashboard.DashboardService;
 import org.thingsboard.server.dao.device.DeviceService;
 import org.thingsboard.server.dao.exception.DataValidationException;
-import org.thingsboard.server.dao.model.TenantEntity;
 import org.thingsboard.server.dao.plugin.PluginService;
 import org.thingsboard.server.dao.rule.RuleService;
 import org.thingsboard.server.dao.service.DataValidator;
 import org.thingsboard.server.dao.service.PaginatedRemover;
-import org.thingsboard.server.dao.user.UserService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
 import org.thingsboard.server.dao.service.Validator;
+import org.thingsboard.server.dao.user.UserService;
 import org.thingsboard.server.dao.widget.WidgetsBundleService;
 
+import java.util.List;
+
 @Service
 @Slf4j
 public class TenantServiceImpl implements TenantService {
@@ -77,8 +71,7 @@ public class TenantServiceImpl implements TenantService {
     public Tenant findTenantById(TenantId tenantId) {
         log.trace("Executing findTenantById [{}]", tenantId);
         Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
-        TenantEntity tenantEntity = tenantDao.findById(tenantId.getId());
-        return getData(tenantEntity);
+        return tenantDao.findById(tenantId.getId());
     }
 
     @Override
@@ -86,8 +79,7 @@ public class TenantServiceImpl implements TenantService {
         log.trace("Executing saveTenant [{}]", tenant);
         tenant.setRegion(DEFAULT_TENANT_REGION);
         tenantValidator.validate(tenant);
-        TenantEntity tenantEntity = tenantDao.save(tenant);
-        return getData(tenantEntity);
+        return tenantDao.save(tenant);
     }
 
     @Override
@@ -108,9 +100,8 @@ public class TenantServiceImpl implements TenantService {
     public TextPageData<Tenant> findTenants(TextPageLink pageLink) {
         log.trace("Executing findTenants pageLink [{}]", pageLink);
         Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
-        List<TenantEntity> tenantEntities = tenantDao.findTenantsByRegion(DEFAULT_TENANT_REGION, pageLink);
-        List<Tenant> tenants = convertDataList(tenantEntities);
-        return new TextPageData<Tenant>(tenants, pageLink);
+        List<Tenant> tenants = tenantDao.findTenantsByRegion(DEFAULT_TENANT_REGION, pageLink);
+        return new TextPageData<>(tenants, pageLink);
     }
 
     @Override
@@ -132,17 +123,17 @@ public class TenantServiceImpl implements TenantService {
                 }
     };
     
-    private PaginatedRemover<String, TenantEntity> tenantsRemover =
-            new PaginatedRemover<String, TenantEntity>() {
+    private PaginatedRemover<String, Tenant> tenantsRemover =
+            new PaginatedRemover<String, Tenant>() {
         
         @Override
-        protected List<TenantEntity> findEntities(String region, TextPageLink pageLink) {
+        protected List<Tenant> findEntities(String region, TextPageLink pageLink) {
             return tenantDao.findTenantsByRegion(region, pageLink);
         }
 
         @Override
-        protected void removeEntity(TenantEntity entity) {
-            deleteTenant(new TenantId(entity.getId()));
+        protected void removeEntity(Tenant entity) {
+            deleteTenant(new TenantId(entity.getUuidId()));
         }
     };
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java
index f27ed6e..71102b1 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java
@@ -15,34 +15,25 @@
  */
 package org.thingsboard.server.dao.timeseries;
 
+// CASSANDRA ???
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.ResultSetFuture;
 import com.datastax.driver.core.Row;
-import com.google.common.base.Function;
 import com.google.common.collect.Lists;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 import org.thingsboard.server.common.data.id.UUIDBased;
-import org.thingsboard.server.common.data.kv.BaseTsKvQuery;
 import org.thingsboard.server.common.data.kv.TsKvEntry;
 import org.thingsboard.server.common.data.kv.TsKvQuery;
 import org.thingsboard.server.dao.exception.IncorrectParameterException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
 import org.thingsboard.server.dao.service.Validator;
 
-import javax.annotation.Nullable;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneOffset;
-import java.util.*;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.stream.Collectors;
+import java.util.Collection;
+import java.util.List;
+import java.util.UUID;
 
 import static org.apache.commons.lang3.StringUtils.isBlank;
 
diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesDao.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesDao.java
index 177003d..afa5c95 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesDao.java
@@ -15,6 +15,7 @@
  */
 package org.thingsboard.server.dao.timeseries;
 
+// CASSANDRA ???
 import com.datastax.driver.core.ResultSetFuture;
 import com.datastax.driver.core.Row;
 import com.google.common.util.concurrent.ListenableFuture;
@@ -22,8 +23,6 @@ import org.thingsboard.server.common.data.kv.TsKvEntry;
 import org.thingsboard.server.common.data.kv.TsKvQuery;
 
 import java.util.List;
-import java.util.Optional;
-import java.util.Set;
 import java.util.UUID;
 
 /**
diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesService.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesService.java
index cd53e94..28ed5dd 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/TimeseriesService.java
@@ -15,18 +15,17 @@
  */
 package org.thingsboard.server.dao.timeseries;
 
+// CASSANDRA ???
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.ResultSetFuture;
 import com.datastax.driver.core.Row;
 import com.google.common.util.concurrent.ListenableFuture;
-import org.thingsboard.server.common.data.id.DeviceId;
 import org.thingsboard.server.common.data.id.UUIDBased;
 import org.thingsboard.server.common.data.kv.TsKvEntry;
 import org.thingsboard.server.common.data.kv.TsKvQuery;
 
 import java.util.Collection;
 import java.util.List;
-import java.util.Set;
 
 /**
  * @author Andrew Shvayka
diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/TsKvQueryCursor.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/TsKvQueryCursor.java
index cad1232..ed53733 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/TsKvQueryCursor.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/TsKvQueryCursor.java
@@ -15,7 +15,6 @@
  */
 package org.thingsboard.server.dao.timeseries;
 
-import lombok.Data;
 import lombok.Getter;
 import org.thingsboard.server.common.data.kv.TsKvEntry;
 import org.thingsboard.server.common.data.kv.TsKvQuery;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserCredentialsDao.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserCredentialsDao.java
index 52045bc..5861fa1 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/user/UserCredentialsDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserCredentialsDao.java
@@ -15,18 +15,15 @@
  */
 package org.thingsboard.server.dao.user;
 
-import java.util.UUID;
-
 import org.thingsboard.server.common.data.security.UserCredentials;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.UserCredentialsEntity;
+
+import java.util.UUID;
 
 /**
  * The Interface UserCredentialsDao.
- *
- * @param <T> the generic type
  */
-public interface UserCredentialsDao extends Dao<UserCredentialsEntity> {
+public interface UserCredentialsDao extends Dao<UserCredentials> {
 
     /**
      * Save or update user credentials object
@@ -34,7 +31,7 @@ public interface UserCredentialsDao extends Dao<UserCredentialsEntity> {
      * @param userCredentials the user credentials object
      * @return saved user credentials object
      */
-    UserCredentialsEntity save(UserCredentials userCredentials);
+    UserCredentials save(UserCredentials userCredentials);
 
     /**
      * Find user credentials by user id.
@@ -42,22 +39,22 @@ public interface UserCredentialsDao extends Dao<UserCredentialsEntity> {
      * @param userId the user id
      * @return the user credentials object
      */
-    UserCredentialsEntity findByUserId(UUID userId);
-    
+    UserCredentials findByUserId(UUID userId);
+
     /**
      * Find user credentials by activate token.
      *
      * @param activateToken the activate token
      * @return the user credentials object
      */
-    UserCredentialsEntity findByActivateToken(String activateToken);
-    
+    UserCredentials findByActivateToken(String activateToken);
+
     /**
      * Find user credentials by reset token.
      *
      * @param resetToken the reset token
      * @return the user credentials object
      */
-    UserCredentialsEntity findByResetToken(String resetToken);
-    
+    UserCredentials findByResetToken(String resetToken);
+
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java
index e84d68b..292099a 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java
@@ -15,15 +15,14 @@
  */
 package org.thingsboard.server.dao.user;
 
-import java.util.List;
-import java.util.UUID;
-
 import org.thingsboard.server.common.data.User;
 import org.thingsboard.server.common.data.page.TextPageLink;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.UserEntity;
 
-public interface UserDao extends Dao<UserEntity> {
+import java.util.List;
+import java.util.UUID;
+
+public interface UserDao extends Dao<User> {
 
     /**
      * Save or update user object
@@ -31,7 +30,7 @@ public interface UserDao extends Dao<UserEntity> {
      * @param user the user object
      * @return saved user entity
      */
-    UserEntity save(User user);
+    User save(User user);
 
     /**
      * Find user by email.
@@ -39,7 +38,7 @@ public interface UserDao extends Dao<UserEntity> {
      * @param email the email
      * @return the user entity
      */
-    UserEntity findByEmail(String email);
+    User findByEmail(String email);
     
     /**
      * Find tenant admin users by tenantId and page link.
@@ -48,7 +47,7 @@ public interface UserDao extends Dao<UserEntity> {
      * @param pageLink the page link
      * @return the list of user entities
      */
-    List<UserEntity> findTenantAdmins(UUID tenantId, TextPageLink pageLink);
+    List<User> findTenantAdmins(UUID tenantId, TextPageLink pageLink);
     
     /**
      * Find customer users by tenantId, customerId and page link.
@@ -58,6 +57,6 @@ public interface UserDao extends Dao<UserEntity> {
      * @param pageLink the page link
      * @return the list of user entities
      */
-    List<UserEntity> findCustomerUsers(UUID tenantId, UUID customerId, TextPageLink pageLink);
+    List<User> findCustomerUsers(UUID tenantId, UUID customerId, TextPageLink pageLink);
     
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserService.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserService.java
index f4043a0..92380c6 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/user/UserService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserService.java
@@ -25,32 +25,32 @@ import org.thingsboard.server.common.data.security.UserCredentials;
 
 public interface UserService {
 	
-	public User findUserById(UserId userId);
+	User findUserById(UserId userId);
 
-	public User findUserByEmail(String email);
+	User findUserByEmail(String email);
 	
-	public User saveUser(User user);
+	User saveUser(User user);
 
-	public UserCredentials findUserCredentialsByUserId(UserId userId);	
+	UserCredentials findUserCredentialsByUserId(UserId userId);
 	
-	public UserCredentials findUserCredentialsByActivateToken(String activateToken);
+	UserCredentials findUserCredentialsByActivateToken(String activateToken);
 
-	public UserCredentials findUserCredentialsByResetToken(String resetToken);
+	UserCredentials findUserCredentialsByResetToken(String resetToken);
 
-	public UserCredentials saveUserCredentials(UserCredentials userCredentials);
+	UserCredentials saveUserCredentials(UserCredentials userCredentials);
 	
-	public UserCredentials activateUserCredentials(String activateToken, String password);
+	UserCredentials activateUserCredentials(String activateToken, String password);
 	
-	public UserCredentials requestPasswordReset(String email);
+	UserCredentials requestPasswordReset(String email);
 
-	public void deleteUser(UserId userId);
+	void deleteUser(UserId userId);
 	
-	public TextPageData<User> findTenantAdmins(TenantId tenantId, TextPageLink pageLink);
+	TextPageData<User> findTenantAdmins(TenantId tenantId, TextPageLink pageLink);
 	
-	public void deleteTenantAdmins(TenantId tenantId);
+	void deleteTenantAdmins(TenantId tenantId);
 	
-	public TextPageData<User> findCustomerUsers(TenantId tenantId, CustomerId customerId, TextPageLink pageLink);
+	TextPageData<User> findCustomerUsers(TenantId tenantId, CustomerId customerId, TextPageLink pageLink);
 	    
-	public void deleteCustomerUsers(TenantId tenantId, CustomerId customerId);
+	void deleteCustomerUsers(TenantId tenantId, CustomerId customerId);
 	
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java
index 9ad9102..7f4d6c0 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java
@@ -15,17 +15,13 @@
  */
 package org.thingsboard.server.dao.user;
 
-import static org.thingsboard.server.dao.DaoUtil.convertDataList;
-import static org.thingsboard.server.dao.DaoUtil.getData;
-import static org.thingsboard.server.dao.service.Validator.validateId;
-import static org.thingsboard.server.dao.service.Validator.validatePageLink;
-import static org.thingsboard.server.dao.service.Validator.validateString;
-
-import java.util.List;
-
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.thingsboard.server.common.data.Customer;
+import org.thingsboard.server.common.data.Tenant;
 import org.thingsboard.server.common.data.User;
 import org.thingsboard.server.common.data.id.CustomerId;
 import org.thingsboard.server.common.data.id.TenantId;
@@ -37,19 +33,21 @@ import org.thingsboard.server.common.data.security.UserCredentials;
 import org.thingsboard.server.dao.customer.CustomerDao;
 import org.thingsboard.server.dao.exception.DataValidationException;
 import org.thingsboard.server.dao.exception.IncorrectParameterException;
-import org.thingsboard.server.dao.model.*;
+import org.thingsboard.server.dao.model.ModelConstants;
 import org.thingsboard.server.dao.service.DataValidator;
 import org.thingsboard.server.dao.service.PaginatedRemover;
 import org.thingsboard.server.dao.tenant.TenantDao;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+import static org.thingsboard.server.dao.service.Validator.*;
 
 @Service
 @Slf4j
 public class UserServiceImpl implements UserService {
 
+    private static final int DEFAULT_TOKEN_LENGTH = 30;
+
     @Autowired
     private UserDao userDao;
     
@@ -66,63 +64,57 @@ public class UserServiceImpl implements UserService {
 	public User findUserByEmail(String email) {
 	    log.trace("Executing findUserByEmail [{}]", email);
 		validateString(email, "Incorrect email " + email);
-		UserEntity userEntity = userDao.findByEmail(email);
-		return getData(userEntity);
+		return userDao.findByEmail(email);
 	}
 
 	@Override
 	public User findUserById(UserId userId) {
 	    log.trace("Executing findUserById [{}]", userId);
 		validateId(userId, "Incorrect userId " + userId);
-		UserEntity userEntity = userDao.findById(userId.getId());
-		return getData(userEntity);
+		return userDao.findById(userId.getId());
 	}
 
     @Override
     public User saveUser(User user) {
         log.trace("Executing saveUser [{}]", user);
         userValidator.validate(user);
-        UserEntity userEntity = userDao.save(user);
+        User savedUser = userDao.save(user);
         if (user.getId() == null) {
             UserCredentials userCredentials = new UserCredentials();
             userCredentials.setEnabled(false);
-            userCredentials.setActivateToken(RandomStringUtils.randomAlphanumeric(30));
-            userCredentials.setUserId(new UserId(userEntity.getId()));
+            userCredentials.setActivateToken(RandomStringUtils.randomAlphanumeric(DEFAULT_TOKEN_LENGTH));
+            userCredentials.setUserId(new UserId(savedUser.getUuidId()));
             userCredentialsDao.save(userCredentials);
         }        
-        return getData(userEntity);
+        return savedUser;
     }
     
     @Override
     public UserCredentials findUserCredentialsByUserId(UserId userId) {
         log.trace("Executing findUserCredentialsByUserId [{}]", userId);
         validateId(userId, "Incorrect userId " + userId);
-        UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByUserId(userId.getId());
-        return getData(userCredentialsEntity);
+        return userCredentialsDao.findByUserId(userId.getId());
     }
 
     @Override
     public UserCredentials findUserCredentialsByActivateToken(String activateToken) {
         log.trace("Executing findUserCredentialsByActivateToken [{}]", activateToken);
         validateString(activateToken, "Incorrect activateToken " + activateToken);
-        UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByActivateToken(activateToken);
-        return getData(userCredentialsEntity);
+        return userCredentialsDao.findByActivateToken(activateToken);
     }
 
     @Override
     public UserCredentials findUserCredentialsByResetToken(String resetToken) {
         log.trace("Executing findUserCredentialsByResetToken [{}]", resetToken);
         validateString(resetToken, "Incorrect resetToken " + resetToken);
-        UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByResetToken(resetToken);
-        return getData(userCredentialsEntity);
+        return userCredentialsDao.findByResetToken(resetToken);
     }
 
     @Override
     public UserCredentials saveUserCredentials(UserCredentials userCredentials) {
         log.trace("Executing saveUserCredentials [{}]", userCredentials);
         userCredentialsValidator.validate(userCredentials);
-        UserCredentialsEntity userCredentialsEntity = userCredentialsDao.save(userCredentials);
-        return getData(userCredentialsEntity);
+        return userCredentialsDao.save(userCredentials);
     }
     
     @Override
@@ -130,11 +122,10 @@ public class UserServiceImpl implements UserService {
         log.trace("Executing activateUserCredentials activateToken [{}], password [{}]", activateToken, password);
         validateString(activateToken, "Incorrect activateToken " + activateToken);
         validateString(password, "Incorrect password " + password);
-        UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByActivateToken(activateToken);
-        if (userCredentialsEntity == null) {
+        UserCredentials userCredentials = userCredentialsDao.findByActivateToken(activateToken);
+        if (userCredentials == null) {
             throw new IncorrectParameterException(String.format("Unable to find user credentials by activateToken [%s]", activateToken));
         }
-        UserCredentials userCredentials = getData(userCredentialsEntity);
         if (userCredentials.isEnabled()) {
             throw new IncorrectParameterException("User credentials already activated");
         }
@@ -149,16 +140,15 @@ public class UserServiceImpl implements UserService {
     public UserCredentials requestPasswordReset(String email) {
         log.trace("Executing requestPasswordReset email [{}]", email);
         validateString(email, "Incorrect email " + email);
-        UserEntity userEntity = userDao.findByEmail(email);
-        if (userEntity == null) {
+        User user = userDao.findByEmail(email);
+        if (user == null) {
             throw new IncorrectParameterException(String.format("Unable to find user by email [%s]", email));
         }
-        UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByUserId(userEntity.getId());
-        UserCredentials userCredentials = getData(userCredentialsEntity);
+        UserCredentials userCredentials = userCredentialsDao.findByUserId(user.getUuidId());
         if (!userCredentials.isEnabled()) {
             throw new IncorrectParameterException("Unable to reset password for inactive user");
         }
-        userCredentials.setResetToken(RandomStringUtils.randomAlphanumeric(30));
+        userCredentials.setResetToken(RandomStringUtils.randomAlphanumeric(DEFAULT_TOKEN_LENGTH));
         return saveUserCredentials(userCredentials);
     }
 
@@ -167,8 +157,8 @@ public class UserServiceImpl implements UserService {
     public void deleteUser(UserId userId) {
         log.trace("Executing deleteUser [{}]", userId);
         validateId(userId, "Incorrect userId " + userId);
-        UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByUserId(userId.getId());
-        userCredentialsDao.removeById(userCredentialsEntity.getId());
+        UserCredentials userCredentials = userCredentialsDao.findByUserId(userId.getId());
+        userCredentialsDao.removeById(userCredentials.getUuidId());
         userDao.removeById(userId.getId());
     }
 
@@ -177,9 +167,8 @@ public class UserServiceImpl implements UserService {
         log.trace("Executing findTenantAdmins, tenantId [{}], pageLink [{}]", tenantId, pageLink);
         validateId(tenantId, "Incorrect tenantId " + tenantId);
         validatePageLink(pageLink, "Incorrect page link " + pageLink);
-        List<UserEntity> userEntities = userDao.findTenantAdmins(tenantId.getId(), pageLink);
-        List<User> users = convertDataList(userEntities);
-        return new TextPageData<User>(users, pageLink);
+        List<User> users = userDao.findTenantAdmins(tenantId.getId(), pageLink);
+        return new TextPageData<>(users, pageLink);
     }
 
     @Override
@@ -195,9 +184,8 @@ public class UserServiceImpl implements UserService {
         validateId(tenantId, "Incorrect tenantId " + tenantId);
         validateId(customerId, "Incorrect customerId " + customerId);
         validatePageLink(pageLink, "Incorrect page link " + pageLink);
-        List<UserEntity> userEntities = userDao.findCustomerUsers(tenantId.getId(), customerId.getId(), pageLink);
-        List<User> users = convertDataList(userEntities);
-        return new TextPageData<User>(users, pageLink);
+        List<User> users = userDao.findCustomerUsers(tenantId.getId(), customerId.getId(), pageLink);
+        return new TextPageData<>(users, pageLink);
     }
 
     @Override
@@ -266,16 +254,16 @@ public class UserServiceImpl implements UserService {
                                 + " already present in database!");
                     }
                     if (!tenantId.getId().equals(ModelConstants.NULL_UUID)) {
-                        TenantEntity tenant = tenantDao.findById(user.getTenantId().getId());
+                        Tenant tenant = tenantDao.findById(user.getTenantId().getId());
                         if (tenant == null) {
                             throw new DataValidationException("User is referencing to non-existent tenant!");
                         }
                     }
                     if (!customerId.getId().equals(ModelConstants.NULL_UUID)) {
-                        CustomerEntity customer = customerDao.findById(user.getCustomerId().getId());
+                        Customer customer = customerDao.findById(user.getCustomerId().getId());
                         if (customer == null) {
                             throw new DataValidationException("User is referencing to non-existent customer!");
-                        } else if (!customer.getTenantId().equals(tenantId.getId())) {
+                        } else if (!customer.getTenantId().getId().equals(tenantId.getId())) {
                             throw new DataValidationException("User can't be assigned to customer from different tenant!");
                         }
                     }
@@ -303,7 +291,7 @@ public class UserServiceImpl implements UserService {
                             throw new DataValidationException("Enabled user credentials can't have activate token!");
                         }
                     }
-                    UserCredentialsEntity existingUserCredentialsEntity = userCredentialsDao.findById(userCredentials.getId().getId());
+                    UserCredentials existingUserCredentialsEntity = userCredentialsDao.findById(userCredentials.getId().getId());
                     if (existingUserCredentialsEntity == null) {
                         throw new DataValidationException("Unable to update non-existent user credentials!");
                     }
@@ -314,21 +302,21 @@ public class UserServiceImpl implements UserService {
                 }
     };
     
-    private PaginatedRemover<TenantId, UserEntity> tenantAdminsRemover =
-            new PaginatedRemover<TenantId, UserEntity>() {
+    private PaginatedRemover<TenantId, User> tenantAdminsRemover =
+            new PaginatedRemover<TenantId, User>() {
         
         @Override
-        protected List<UserEntity> findEntities(TenantId id, TextPageLink pageLink) {
+        protected List<User> findEntities(TenantId id, TextPageLink pageLink) {
             return userDao.findTenantAdmins(id.getId(), pageLink);
         }
 
         @Override
-        protected void removeEntity(UserEntity entity) {
-            deleteUser(new UserId(entity.getId()));
+        protected void removeEntity(User entity) {
+            deleteUser(new UserId(entity.getUuidId()));
         }
     };
     
-    class CustomerUsersRemover extends PaginatedRemover<CustomerId, UserEntity> {
+    private class CustomerUsersRemover extends PaginatedRemover<CustomerId, User> {
         
         private TenantId tenantId;
         
@@ -337,14 +325,14 @@ public class UserServiceImpl implements UserService {
         }
 
         @Override
-        protected List<UserEntity> findEntities(CustomerId id, TextPageLink pageLink) {
+        protected List<User> findEntities(CustomerId id, TextPageLink pageLink) {
             return userDao.findCustomerUsers(tenantId.getId(), id.getId(), pageLink);
  
         }
 
         @Override
-        protected void removeEntity(UserEntity entity) {
-            deleteUser(new UserId(entity.getId()));
+        protected void removeEntity(User entity) {
+            deleteUser(new UserId(entity.getUuidId()));
         }
         
     }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDao.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDao.java
index 0e04f91..d8c6044 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDao.java
@@ -18,17 +18,14 @@ package org.thingsboard.server.dao.widget;
 import org.thingsboard.server.common.data.page.TextPageLink;
 import org.thingsboard.server.common.data.widget.WidgetsBundle;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.WidgetsBundleEntity;
 
 import java.util.List;
 import java.util.UUID;
 
 /**
  * The Interface WidgetsBundleDao.
- *
- * @param <T> the generic type
  */
-public interface WidgetsBundleDao extends Dao<WidgetsBundleEntity> {
+public interface WidgetsBundleDao extends Dao<WidgetsBundle> {
 
     /**
      * Save or update widgets bundle object
@@ -36,7 +33,7 @@ public interface WidgetsBundleDao extends Dao<WidgetsBundleEntity> {
      * @param widgetsBundle the widgets bundle object
      * @return saved widgets bundle object
      */
-    WidgetsBundleEntity save(WidgetsBundle widgetsBundle);
+    WidgetsBundle save(WidgetsBundle widgetsBundle);
 
     /**
      * Find widgets bundle by tenantId and alias.
@@ -45,7 +42,7 @@ public interface WidgetsBundleDao extends Dao<WidgetsBundleEntity> {
      * @param alias the alias
      * @return the widgets bundle object
      */
-    WidgetsBundleEntity findWidgetsBundleByTenantIdAndAlias(UUID tenantId, String alias);
+    WidgetsBundle findWidgetsBundleByTenantIdAndAlias(UUID tenantId, String alias);
 
     /**
      * Find system widgets bundles by page link.
@@ -53,7 +50,7 @@ public interface WidgetsBundleDao extends Dao<WidgetsBundleEntity> {
      * @param pageLink the page link
      * @return the list of widgets bundles objects
      */
-    List<WidgetsBundleEntity> findSystemWidgetsBundles(TextPageLink pageLink);
+    List<WidgetsBundle> findSystemWidgetsBundles(TextPageLink pageLink);
 
     /**
      * Find tenant widgets bundles by tenantId and page link.
@@ -62,7 +59,7 @@ public interface WidgetsBundleDao extends Dao<WidgetsBundleEntity> {
      * @param pageLink the page link
      * @return the list of widgets bundles objects
      */
-    List<WidgetsBundleEntity> findTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink);
+    List<WidgetsBundle> findTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink);
 
     /**
      * Find all tenant widgets bundles (including system) by tenantId and page link.
@@ -71,7 +68,7 @@ public interface WidgetsBundleDao extends Dao<WidgetsBundleEntity> {
      * @param pageLink the page link
      * @return the list of widgets bundles objects
      */
-    List<WidgetsBundleEntity> findAllTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink);
+    List<WidgetsBundle> findAllTenantWidgetsBundlesByTenantId(UUID tenantId, TextPageLink pageLink);
 
 }
 
diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java
index 4b91c26..27f9211 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java
@@ -25,24 +25,24 @@ import java.util.List;
 
 public interface WidgetsBundleService {
 
-    public WidgetsBundle findWidgetsBundleById(WidgetsBundleId widgetsBundleId);
+    WidgetsBundle findWidgetsBundleById(WidgetsBundleId widgetsBundleId);
 
-    public WidgetsBundle saveWidgetsBundle(WidgetsBundle widgetsBundle);
+    WidgetsBundle saveWidgetsBundle(WidgetsBundle widgetsBundle);
 
-    public void deleteWidgetsBundle(WidgetsBundleId widgetsBundleId);
+    void deleteWidgetsBundle(WidgetsBundleId widgetsBundleId);
 
-    public WidgetsBundle findWidgetsBundleByTenantIdAndAlias(TenantId tenantId, String alias);
+    WidgetsBundle findWidgetsBundleByTenantIdAndAlias(TenantId tenantId, String alias);
 
-    public TextPageData<WidgetsBundle> findSystemWidgetsBundlesByPageLink(TextPageLink pageLink);
+    TextPageData<WidgetsBundle> findSystemWidgetsBundlesByPageLink(TextPageLink pageLink);
 
-    public List<WidgetsBundle> findSystemWidgetsBundles();
+    List<WidgetsBundle> findSystemWidgetsBundles();
 
-    public TextPageData<WidgetsBundle> findTenantWidgetsBundlesByTenantId(TenantId tenantId, TextPageLink pageLink);
+    TextPageData<WidgetsBundle> findTenantWidgetsBundlesByTenantId(TenantId tenantId, TextPageLink pageLink);
 
-    public TextPageData<WidgetsBundle> findAllTenantWidgetsBundlesByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
+    TextPageData<WidgetsBundle> findAllTenantWidgetsBundlesByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
 
-    public List<WidgetsBundle> findAllTenantWidgetsBundlesByTenantId(TenantId tenantId);
+    List<WidgetsBundle> findAllTenantWidgetsBundlesByTenantId(TenantId tenantId);
 
-    public void deleteWidgetsBundlesByTenantId(TenantId tenantId);
+    void deleteWidgetsBundlesByTenantId(TenantId tenantId);
 
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java
index 2262e14..9e90aca 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java
@@ -17,10 +17,9 @@ package org.thingsboard.server.dao.widget;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.thingsboard.server.common.data.Tenant;
 import org.thingsboard.server.common.data.id.TenantId;
 import org.thingsboard.server.common.data.id.WidgetsBundleId;
 import org.thingsboard.server.common.data.page.TextPageData;
@@ -29,8 +28,6 @@ import org.thingsboard.server.common.data.widget.WidgetsBundle;
 import org.thingsboard.server.dao.exception.DataValidationException;
 import org.thingsboard.server.dao.exception.IncorrectParameterException;
 import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.dao.model.TenantEntity;
-import org.thingsboard.server.dao.model.WidgetsBundleEntity;
 import org.thingsboard.server.dao.service.DataValidator;
 import org.thingsboard.server.dao.service.PaginatedRemover;
 import org.thingsboard.server.dao.service.Validator;
@@ -39,13 +36,12 @@ import org.thingsboard.server.dao.tenant.TenantDao;
 import java.util.ArrayList;
 import java.util.List;
 
-import static org.thingsboard.server.dao.DaoUtil.convertDataList;
-import static org.thingsboard.server.dao.DaoUtil.getData;
-
 @Service
 @Slf4j
 public class WidgetsBundleServiceImpl implements WidgetsBundleService {
 
+    private static final int DEFAULT_WIDGETS_BUNDLE_LIMIT = 300;
+
     @Autowired
     private WidgetsBundleDao widgetsBundleDao;
 
@@ -59,16 +55,14 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
     public WidgetsBundle findWidgetsBundleById(WidgetsBundleId widgetsBundleId) {
         log.trace("Executing findWidgetsBundleById [{}]", widgetsBundleId);
         Validator.validateId(widgetsBundleId, "Incorrect widgetsBundleId " + widgetsBundleId);
-        WidgetsBundleEntity widgetsBundleEntity = widgetsBundleDao.findById(widgetsBundleId.getId());
-        return getData(widgetsBundleEntity);
+        return widgetsBundleDao.findById(widgetsBundleId.getId());
     }
 
     @Override
     public WidgetsBundle saveWidgetsBundle(WidgetsBundle widgetsBundle) {
         log.trace("Executing saveWidgetsBundle [{}]", widgetsBundle);
         widgetsBundleValidator.validate(widgetsBundle);
-        WidgetsBundleEntity widgetsBundleEntity = widgetsBundleDao.save(widgetsBundle);
-        return getData(widgetsBundleEntity);
+        return widgetsBundleDao.save(widgetsBundle);
     }
 
     @Override
@@ -88,25 +82,22 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
         log.trace("Executing findWidgetsBundleByTenantIdAndAlias, tenantId [{}], alias [{}]", tenantId, alias);
         Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
         Validator.validateString(alias, "Incorrect alias " + alias);
-        WidgetsBundleEntity widgetsBundleEntity = widgetsBundleDao.findWidgetsBundleByTenantIdAndAlias(tenantId.getId(), alias);
-        return getData(widgetsBundleEntity);
+        return widgetsBundleDao.findWidgetsBundleByTenantIdAndAlias(tenantId.getId(), alias);
     }
 
     @Override
     public TextPageData<WidgetsBundle> findSystemWidgetsBundlesByPageLink(TextPageLink pageLink) {
         log.trace("Executing findSystemWidgetsBundles, pageLink [{}]", pageLink);
         Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
-        List<WidgetsBundleEntity> widgetsBundlesEntities = widgetsBundleDao.findSystemWidgetsBundles(pageLink);
-        List<WidgetsBundle> widgetsBundles = convertDataList(widgetsBundlesEntities);
-        return new TextPageData<>(widgetsBundles, pageLink);
+        return new TextPageData<>(widgetsBundleDao.findSystemWidgetsBundles(pageLink), pageLink);
     }
 
     @Override
     public List<WidgetsBundle> findSystemWidgetsBundles() {
         log.trace("Executing findSystemWidgetsBundles");
         List<WidgetsBundle> widgetsBundles = new ArrayList<>();
-        TextPageLink pageLink = new TextPageLink(300);
-        TextPageData<WidgetsBundle> pageData = null;
+        TextPageLink pageLink = new TextPageLink(DEFAULT_WIDGETS_BUNDLE_LIMIT);
+        TextPageData<WidgetsBundle> pageData;
         do {
             pageData = findSystemWidgetsBundlesByPageLink(pageLink);
             widgetsBundles.addAll(pageData.getData());
@@ -122,9 +113,7 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
         log.trace("Executing findTenantWidgetsBundlesByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink);
         Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
         Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
-        List<WidgetsBundleEntity> widgetsBundlesEntities = widgetsBundleDao.findTenantWidgetsBundlesByTenantId(tenantId.getId(), pageLink);
-        List<WidgetsBundle> widgetsBundles = convertDataList(widgetsBundlesEntities);
-        return new TextPageData<>(widgetsBundles, pageLink);
+        return new TextPageData<>(widgetsBundleDao.findTenantWidgetsBundlesByTenantId(tenantId.getId(), pageLink), pageLink);
     }
 
     @Override
@@ -132,9 +121,7 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
         log.trace("Executing findAllTenantWidgetsBundlesByTenantIdAndPageLink, tenantId [{}], pageLink [{}]", tenantId, pageLink);
         Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
         Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
-        List<WidgetsBundleEntity> widgetsBundlesEntities = widgetsBundleDao.findAllTenantWidgetsBundlesByTenantId(tenantId.getId(), pageLink);
-        List<WidgetsBundle> widgetsBundles = convertDataList(widgetsBundlesEntities);
-        return new TextPageData<>(widgetsBundles, pageLink);
+        return new TextPageData<>(widgetsBundleDao.findAllTenantWidgetsBundlesByTenantId(tenantId.getId(), pageLink), pageLink);
     }
 
     @Override
@@ -142,8 +129,8 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
         log.trace("Executing findAllTenantWidgetsBundlesByTenantId, tenantId [{}]", tenantId);
         Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
         List<WidgetsBundle> widgetsBundles = new ArrayList<>();
-        TextPageLink pageLink = new TextPageLink(300);
-        TextPageData<WidgetsBundle> pageData = null;
+        TextPageLink pageLink = new TextPageLink(DEFAULT_WIDGETS_BUNDLE_LIMIT);
+        TextPageData<WidgetsBundle> pageData;
         do {
             pageData = findAllTenantWidgetsBundlesByTenantIdAndPageLink(tenantId, pageLink);
             widgetsBundles.addAll(pageData.getData());
@@ -173,7 +160,7 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
                         widgetsBundle.setTenantId(new TenantId(ModelConstants.NULL_UUID));
                     }
                     if (!widgetsBundle.getTenantId().getId().equals(ModelConstants.NULL_UUID)) {
-                        TenantEntity tenant = tenantDao.findById(widgetsBundle.getTenantId().getId());
+                        Tenant tenant = tenantDao.findById(widgetsBundle.getTenantId().getId());
                         if (tenant == null) {
                             throw new DataValidationException("Widgets bundle is referencing to non-existent tenant!");
                         }
@@ -185,7 +172,7 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
                     String alias = widgetsBundle.getTitle().toLowerCase().replaceAll("\\W+", "_");
                     String originalAlias = alias;
                     int c = 1;
-                    WidgetsBundleEntity withSameAlias;
+                    WidgetsBundle withSameAlias;
                     do {
                         withSameAlias = widgetsBundleDao.findWidgetsBundleByTenantIdAndAlias(widgetsBundle.getTenantId().getId(), alias);
                         if (withSameAlias != null) {
@@ -197,8 +184,8 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
 
                 @Override
                 protected void validateUpdate(WidgetsBundle widgetsBundle) {
-                    WidgetsBundleEntity storedWidgetsBundle = widgetsBundleDao.findById(widgetsBundle.getId().getId());
-                    if (!storedWidgetsBundle.getTenantId().equals(widgetsBundle.getTenantId().getId())) {
+                    WidgetsBundle storedWidgetsBundle = widgetsBundleDao.findById(widgetsBundle.getId().getId());
+                    if (!storedWidgetsBundle.getTenantId().getId().equals(widgetsBundle.getTenantId().getId())) {
                         throw new DataValidationException("Can't move existing widgets bundle to different tenant!");
                     }
                     if (!storedWidgetsBundle.getAlias().equals(widgetsBundle.getAlias())) {
@@ -208,17 +195,17 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService {
 
             };
 
-    private PaginatedRemover<TenantId, WidgetsBundleEntity> tenantWidgetsBundleRemover =
-            new PaginatedRemover<TenantId, WidgetsBundleEntity>() {
+    private PaginatedRemover<TenantId, WidgetsBundle> tenantWidgetsBundleRemover =
+            new PaginatedRemover<TenantId, WidgetsBundle>() {
 
                 @Override
-                protected List<WidgetsBundleEntity> findEntities(TenantId id, TextPageLink pageLink) {
+                protected List<WidgetsBundle> findEntities(TenantId id, TextPageLink pageLink) {
                     return widgetsBundleDao.findTenantWidgetsBundlesByTenantId(id.getId(), pageLink);
                 }
 
                 @Override
-                protected void removeEntity(WidgetsBundleEntity entity) {
-                    deleteWidgetsBundle(new WidgetsBundleId(entity.getId()));
+                protected void removeEntity(WidgetsBundle entity) {
+                    deleteWidgetsBundle(new WidgetsBundleId(entity.getUuidId()));
                 }
             };
 
diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeDao.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeDao.java
index dd85c10..dce7064 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeDao.java
@@ -17,17 +17,14 @@ package org.thingsboard.server.dao.widget;
 
 import org.thingsboard.server.common.data.widget.WidgetType;
 import org.thingsboard.server.dao.Dao;
-import org.thingsboard.server.dao.model.WidgetTypeEntity;
 
 import java.util.List;
 import java.util.UUID;
 
 /**
  * The Interface WidgetTypeDao.
- *
- * @param <T> the generic type
  */
-public interface WidgetTypeDao extends Dao<WidgetTypeEntity> {
+public interface WidgetTypeDao extends Dao<WidgetType> {
 
     /**
      * Save or update widget type object
@@ -35,7 +32,7 @@ public interface WidgetTypeDao extends Dao<WidgetTypeEntity> {
      * @param widgetType the widget type object
      * @return saved widget type object
      */
-    WidgetTypeEntity save(WidgetType widgetType);
+    WidgetType save(WidgetType widgetType);
 
     /**
      * Find widget types by tenantId and bundleAlias.
@@ -44,7 +41,7 @@ public interface WidgetTypeDao extends Dao<WidgetTypeEntity> {
      * @param bundleAlias the bundle alias
      * @return the list of widget types objects
      */
-    List<WidgetTypeEntity> findWidgetTypesByTenantIdAndBundleAlias(UUID tenantId, String bundleAlias);
+    List<WidgetType> findWidgetTypesByTenantIdAndBundleAlias(UUID tenantId, String bundleAlias);
 
     /**
      * Find widget type by tenantId, bundleAlias and alias.
@@ -54,6 +51,6 @@ public interface WidgetTypeDao extends Dao<WidgetTypeEntity> {
      * @param alias the alias
      * @return the widget type object
      */
-    WidgetTypeEntity findByTenantIdBundleAliasAndAlias(UUID tenantId, String bundleAlias, String alias);
+    WidgetType findByTenantIdBundleAliasAndAlias(UUID tenantId, String bundleAlias, String alias);
 
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java
index 5ff931c..dcc70f7 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeService.java
@@ -23,16 +23,16 @@ import java.util.List;
 
 public interface WidgetTypeService {
 
-    public WidgetType findWidgetTypeById(WidgetTypeId widgetTypeId);
+    WidgetType findWidgetTypeById(WidgetTypeId widgetTypeId);
 
-    public WidgetType saveWidgetType(WidgetType widgetType);
+    WidgetType saveWidgetType(WidgetType widgetType);
 
-    public void deleteWidgetType(WidgetTypeId widgetTypeId);
+    void deleteWidgetType(WidgetTypeId widgetTypeId);
 
-    public List<WidgetType> findWidgetTypesByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias);
+    List<WidgetType> findWidgetTypesByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias);
 
-    public WidgetType findWidgetTypeByTenantIdBundleAliasAndAlias(TenantId tenantId, String bundleAlias, String alias);
+    WidgetType findWidgetTypeByTenantIdBundleAliasAndAlias(TenantId tenantId, String bundleAlias, String alias);
 
-    public void deleteWidgetTypesByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias);
+    void deleteWidgetTypesByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias);
 
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java
index 45a0c71..f533f71 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java
@@ -17,8 +17,6 @@ package org.thingsboard.server.dao.widget;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.thingsboard.server.common.data.Tenant;
@@ -28,19 +26,12 @@ import org.thingsboard.server.common.data.widget.WidgetType;
 import org.thingsboard.server.common.data.widget.WidgetsBundle;
 import org.thingsboard.server.dao.exception.DataValidationException;
 import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.dao.model.TenantEntity;
-import org.thingsboard.server.dao.model.WidgetTypeEntity;
-import org.thingsboard.server.dao.model.WidgetsBundleEntity;
 import org.thingsboard.server.dao.service.DataValidator;
 import org.thingsboard.server.dao.service.Validator;
 import org.thingsboard.server.dao.tenant.TenantDao;
-import org.thingsboard.server.dao.tenant.TenantService;
 
 import java.util.List;
 
-import static org.thingsboard.server.dao.DaoUtil.convertDataList;
-import static org.thingsboard.server.dao.DaoUtil.getData;
-
 @Service
 @Slf4j
 public class WidgetTypeServiceImpl implements WidgetTypeService {
@@ -58,16 +49,14 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
     public WidgetType findWidgetTypeById(WidgetTypeId widgetTypeId) {
         log.trace("Executing findWidgetTypeById [{}]", widgetTypeId);
         Validator.validateId(widgetTypeId, "Incorrect widgetTypeId " + widgetTypeId);
-        WidgetTypeEntity widgetTypeEntity = widgetTypeDao.findById(widgetTypeId.getId());
-        return getData(widgetTypeEntity);
+        return widgetTypeDao.findById(widgetTypeId.getId());
     }
 
     @Override
     public WidgetType saveWidgetType(WidgetType widgetType) {
         log.trace("Executing saveWidgetType [{}]", widgetType);
         widgetTypeValidator.validate(widgetType);
-        WidgetTypeEntity widgetTypeEntity = widgetTypeDao.save(widgetType);
-        return getData(widgetTypeEntity);
+        return widgetTypeDao.save(widgetType);
     }
 
     @Override
@@ -82,8 +71,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
         log.trace("Executing findWidgetTypesByTenantIdAndBundleAlias, tenantId [{}], bundleAlias [{}]", tenantId, bundleAlias);
         Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
         Validator.validateString(bundleAlias, "Incorrect bundleAlias " + bundleAlias);
-        List<WidgetTypeEntity> widgetTypesEntities = widgetTypeDao.findWidgetTypesByTenantIdAndBundleAlias(tenantId.getId(), bundleAlias);
-        return convertDataList(widgetTypesEntities);
+        return widgetTypeDao.findWidgetTypesByTenantIdAndBundleAlias(tenantId.getId(), bundleAlias);
     }
 
     @Override
@@ -92,8 +80,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
         Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
         Validator.validateString(bundleAlias, "Incorrect bundleAlias " + bundleAlias);
         Validator.validateString(alias, "Incorrect alias " + alias);
-        WidgetTypeEntity widgetTypeEntity = widgetTypeDao.findByTenantIdBundleAliasAndAlias(tenantId.getId(), bundleAlias, alias);
-        return getData(widgetTypeEntity);
+        return widgetTypeDao.findByTenantIdBundleAliasAndAlias(tenantId.getId(), bundleAlias, alias);
     }
 
     @Override
@@ -101,9 +88,9 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
         log.trace("Executing deleteWidgetTypesByTenantIdAndBundleAlias, tenantId [{}], bundleAlias [{}]", tenantId, bundleAlias);
         Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
         Validator.validateString(bundleAlias, "Incorrect bundleAlias " + bundleAlias);
-        List<WidgetTypeEntity> widgetTypesEntities = widgetTypeDao.findWidgetTypesByTenantIdAndBundleAlias(tenantId.getId(), bundleAlias);
-        for (WidgetTypeEntity widgetTypeEntity : widgetTypesEntities) {
-            deleteWidgetType(new WidgetTypeId(widgetTypeEntity.getId()));
+        List<WidgetType> widgetTypes = widgetTypeDao.findWidgetTypesByTenantIdAndBundleAlias(tenantId.getId(), bundleAlias);
+        for (WidgetType widgetType : widgetTypes) {
+            deleteWidgetType(new WidgetTypeId(widgetType.getUuidId()));
         }
     }
 
@@ -124,7 +111,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
                         widgetType.setTenantId(new TenantId(ModelConstants.NULL_UUID));
                     }
                     if (!widgetType.getTenantId().getId().equals(ModelConstants.NULL_UUID)) {
-                        TenantEntity tenant = tenantDao.findById(widgetType.getTenantId().getId());
+                        Tenant tenant = tenantDao.findById(widgetType.getTenantId().getId());
                         if (tenant == null) {
                             throw new DataValidationException("Widget type is referencing to non-existent tenant!");
                         }
@@ -133,8 +120,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
 
                 @Override
                 protected void validateCreate(WidgetType widgetType) {
-
-                    WidgetsBundleEntity widgetsBundle = widgetsBundleService.findWidgetsBundleByTenantIdAndAlias(widgetType.getTenantId().getId(), widgetType.getBundleAlias());
+                    WidgetsBundle widgetsBundle = widgetsBundleService.findWidgetsBundleByTenantIdAndAlias(widgetType.getTenantId().getId(), widgetType.getBundleAlias());
                     if (widgetsBundle == null) {
                         throw new DataValidationException("Widget type is referencing to non-existent widgets bundle!");
                     }
@@ -142,7 +128,7 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
                     String alias = widgetType.getName().toLowerCase().replaceAll("\\W+", "_");
                     String originalAlias = alias;
                     int c = 1;
-                    WidgetTypeEntity withSameAlias;
+                    WidgetType withSameAlias;
                     do {
                         withSameAlias = widgetTypeDao.findByTenantIdBundleAliasAndAlias(widgetType.getTenantId().getId(), widgetType.getBundleAlias(), alias);
                         if (withSameAlias != null) {
@@ -154,8 +140,8 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
 
                 @Override
                 protected void validateUpdate(WidgetType widgetType) {
-                    WidgetTypeEntity storedWidgetType = widgetTypeDao.findById(widgetType.getId().getId());
-                    if (!storedWidgetType.getTenantId().equals(widgetType.getTenantId().getId())) {
+                    WidgetType storedWidgetType = widgetTypeDao.findById(widgetType.getId().getId());
+                    if (!storedWidgetType.getTenantId().getId().equals(widgetType.getTenantId().getId())) {
                         throw new DataValidationException("Can't move existing widget type to different tenant!");
                     }
                     if (!storedWidgetType.getBundleAlias().equals(widgetType.getBundleAlias())) {