diff --git a/application/build.gradle b/application/build.gradle
index 8074ea1d81..ce8b10f994 100644
--- a/application/build.gradle
+++ b/application/build.gradle
@@ -49,7 +49,7 @@ ospackage {
     from(mainJar) {
         // Strip the version from the jar filename
         rename { String fileName ->
-            fileName.replace("-${project.version}", "")
+            "${pkgName}.jar"
         }
         fileMode 0500
         into "bin"
diff --git a/application/pom.xml b/application/pom.xml
index 268f6993d7..0c531216fb 100644
--- a/application/pom.xml
+++ b/application/pom.xml
@@ -379,6 +379,7 @@
                 org.springframework.boot
                 spring-boot-maven-plugin
                 
+                    boot
                     ZIP
                     true
                     true
@@ -408,7 +409,7 @@
                     
                         -PprojectBuildDir=${project.build.directory}
                         -PprojectVersion=${project.version}
-                        -PmainJar=${project.build.directory}/${project.build.finalName}.${project.packaging}
+                        -PmainJar=${project.build.directory}/${project.build.finalName}-boot.${project.packaging}
                         -PpkgName=${pkg.name}
                         -PpkgInstallFolder=${pkg.installFolder}
                         -PpkgLogFolder=${pkg.logFolder}
diff --git a/application/src/main/java/org/thingsboard/server/config/ThingsboardMessageConfiguration.java b/application/src/main/java/org/thingsboard/server/config/ThingsboardMessageConfiguration.java
index 99bec5b946..f1ef6e1227 100644
--- a/application/src/main/java/org/thingsboard/server/config/ThingsboardMessageConfiguration.java
+++ b/application/src/main/java/org/thingsboard/server/config/ThingsboardMessageConfiguration.java
@@ -18,12 +18,14 @@ package org.thingsboard.server.config;
 import org.springframework.context.MessageSource;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
 import org.springframework.context.support.ResourceBundleMessageSource;
 
 @Configuration
 public class ThingsboardMessageConfiguration {
 
     @Bean
+    @Primary
     public MessageSource messageSource() {
         ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
         messageSource.setBasename("i18n/messages");
diff --git a/application/src/main/java/org/thingsboard/server/controller/WidgetsBundleController.java b/application/src/main/java/org/thingsboard/server/controller/WidgetsBundleController.java
index e06962b43f..6d0f1102b8 100644
--- a/application/src/main/java/org/thingsboard/server/controller/WidgetsBundleController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/WidgetsBundleController.java
@@ -33,7 +33,7 @@ import java.util.List;
 @RequestMapping("/api")
 public class WidgetsBundleController extends BaseController {
 
-    @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
+    @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
     @RequestMapping(value = "/widgetsBundle/{widgetsBundleId}", method = RequestMethod.GET)
     @ResponseBody
     public WidgetsBundle getWidgetsBundleById(@PathVariable("widgetsBundleId") String strWidgetsBundleId) throws ThingsboardException {
@@ -76,7 +76,7 @@ public class WidgetsBundleController extends BaseController {
         }
     }
 
-    @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
+    @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
     @RequestMapping(value = "/widgetsBundles", params = { "limit" }, method = RequestMethod.GET)
     @ResponseBody
     public TextPageData getWidgetsBundles(
@@ -97,7 +97,7 @@ public class WidgetsBundleController extends BaseController {
         }
     }
 
-    @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
+    @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
     @RequestMapping(value = "/widgetsBundles", method = RequestMethod.GET)
     @ResponseBody
     public List getWidgetsBundles() throws ThingsboardException {
diff --git a/application/src/main/java/org/thingsboard/server/service/mail/DefaultMailService.java b/application/src/main/java/org/thingsboard/server/service/mail/DefaultMailService.java
index b11517cc6b..70949d2757 100644
--- a/application/src/main/java/org/thingsboard/server/service/mail/DefaultMailService.java
+++ b/application/src/main/java/org/thingsboard/server/service/mail/DefaultMailService.java
@@ -26,6 +26,7 @@ import javax.mail.internet.MimeMessage;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.velocity.app.VelocityEngine;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.thingsboard.server.exception.ThingsboardErrorCode;
 import org.thingsboard.server.exception.ThingsboardException;
 import org.thingsboard.server.common.data.AdminSettings;
@@ -50,6 +51,7 @@ public class DefaultMailService implements MailService {
     private MessageSource messages;
     
     @Autowired
+    @Qualifier("velocityEngine")
     private VelocityEngine engine;
     
     private JavaMailSenderImpl mailSender;
@@ -101,6 +103,11 @@ public class DefaultMailService implements MailService {
             throw new IncorrectParameterException(String.format("Invalid smtp port value: %s", strPort));
         }
     }
+
+    @Override
+    public void sendEmail(String email, String subject, String message) throws ThingsboardException {
+        sendMail(mailSender, mailFrom, email, subject, message);
+    }
     
     @Override
     public void sendTestMail(JsonNode jsonConfig, String email) throws ThingsboardException {
diff --git a/application/src/main/java/org/thingsboard/server/service/mail/MailService.java b/application/src/main/java/org/thingsboard/server/service/mail/MailService.java
index e1352533d4..9e440589c7 100644
--- a/application/src/main/java/org/thingsboard/server/service/mail/MailService.java
+++ b/application/src/main/java/org/thingsboard/server/service/mail/MailService.java
@@ -22,6 +22,8 @@ import com.fasterxml.jackson.databind.JsonNode;
 public interface MailService {
 
     void updateMailConfiguration();
+
+    void sendEmail(String email, String subject, String message) throws ThingsboardException;
     
     void sendTestMail(JsonNode config, String email) throws ThingsboardException;
     
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 17784d188b..a3ab6bd09a 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
@@ -156,7 +156,7 @@ public class UserServiceImpl implements UserService {
         UserCredentialsEntity userCredentialsEntity = userCredentialsDao.findByUserId(userEntity.getId());
         UserCredentials userCredentials = getData(userCredentialsEntity);
         if (!userCredentials.isEnabled()) {
-            throw new IncorrectParameterException("Unable to reset password for unactive user");
+            throw new IncorrectParameterException("Unable to reset password for inactive user");
         }
         userCredentials.setResetToken(RandomStringUtils.randomAlphanumeric(30));
         return saveUserCredentials(userCredentials);