diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/CogboardConstants.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/CogboardConstants.kt
index 9e4a45c2d..b52bd69cb 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/CogboardConstants.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/CogboardConstants.kt
@@ -4,92 +4,115 @@ import io.vertx.core.json.JsonObject
 
 class CogboardConstants {
     companion object {
-
         const val DEFAULT_WEB_SOCKET_PORT = 9001
-        const val STATUS_CODE_401 = 401
-        const val STATUS_CODE_200 = 200
-        const val PROP_ID = "id"
-        const val PROP_EVENT_TYPE = "eventType"
-        const val PROP_BOARDS = "boards"
-        const val PROP_BOARDS_BY_ID = "boardsById"
-        const val PROP_BOARDS_ALL = "allBoards"
-        const val PROP_WIDGETS = "widgets"
-        const val PROP_WIDGETS_BY_ID = "widgetsById"
-        const val PROP_AVAILABLE_WIDGETS = "widgetTypes"
-        const val PROP_STATUS = "status"
-        const val PROP_WIDGET_STATUS = "widgetStatus"
-        const val PROP_ERROR_MESSAGE = "errorMessage"
-        const val PROP_ERROR_CAUSE = "errorCause"
-        const val PROP_DISABLED = "disabled"
-        const val PROP_HEADERS = "headers"
-        const val PROP_CONTENT = "content"
-        const val PROP_WIDGET_TYPE = "type"
-        const val PROP_AUTHENTICATION_TYPES = "authenticationTypes"
-        const val PROP_SCHEDULE_PERIOD = "schedulePeriod"
-        const val PROP_SCHEDULE_PERIOD_DEFAULT = 120L // 120 seconds
-        const val PROP_SCHEDULE_DELAY_DEFAULT = 10L // 10 seconds
-        const val PROP_URL = "url"
-        const val PROP_REQUEST_ID = "requestId"
-        const val PROP_PUBLIC_URL = "publicUrl"
-        const val PROP_USER = "user"
-        const val PROP_USERNAME = "username"
-        const val PROP_PASSWORD = "password"
-        const val PROP_CURRENT_PASSWORD = "currentPassword"
-        const val PROP_NEW_PASSWORD = "newPassword"
-        const val PROP_TOKEN = "token"
-        const val PROP_BODY = "body"
-        const val PROP_EVENT_ADDRESS = "event.address"
-        const val PROP_ENDPOINT = "endpoint"
-        const val PROP_ENDPOINTS = "endpoints"
-        const val PROP_ENDPOINT_LOADED = "endpoint.loaded"
-        const val PROP_CREDENTIAL = "credential"
-        const val PROP_CREDENTIALS = "credentials"
-        const val PROP_LAST_UPDATED = "lastUpdated"
-        const val PROP_ARRAY = "array"
-        const val PROP_STATUS_CODE = "statusCode"
-        const val PROP_STATUS_MESSAGE = "statusMessage"
-        const val PROP_EXPECTED_STATUS_CODE = "expectedStatusCode"
-        const val PROP_REQUEST_METHOD = "requestMethod"
-        const val PROP_EXPECTED_RESPONSE_BODY = "expectedResponseBody"
-        const val PROP_CONTENT_TYPE = "contentType"
-        const val PROP_PATH = "path"
-        const val PROP_LABEL = "label"
-        const val PROP_BOARD_COLUMN_MAX = 20
-        const val PROP_BOARD_COLUMN_MIN = 4
-        const val PROP_NAME = "name"
-        const val PROP_DISPLAY = "display"
-        const val PROP_VALUE = "value"
-        const val PROP_RELEASE_NAME = "releaseName"
-        const val PROP_JQL_QUERY = "jqlQuery"
-        const val PROP_BUCKET_QUERIES = "bucketQueries"
-        const val PROP_BUCKET_NAME = "bucketName"
+        val DEFAULT_VALUES: JsonObject = JsonObject().put(Props.SCHEDULE_PERIOD, Props.SCHEDULE_PERIOD_DEFAULT)
+        fun errorResponse(message: String = ""): JsonObject = JsonObject().put("status", "failed $message")
+    }
+
+    class StatusCode {
+        companion object {
+            const val a401 = 401
+            const val a200 = 200
+        }
+    }
 
-        const val EVENT_SEND_MESSAGE_TO_WEBSOCKET = "cogboard.websocket.message"
-        const val EVENT_VERSION_CONFIG = "cogboard.config.handler.version"
-        const val EVENT_BOARDS_CONFIG = "cogboard.config.boards"
-        const val EVENT_UPDATE_WIDGET_CONTENT_CONFIG = "cogboard.config.widget.contentUpdate"
-        const val EVENT_UPDATE_WIDGET_CONFIG = "cogboard.config.widget.update"
-        const val EVENT_REFRESH_WIDGET_CONFIG = "cogboard.config.widget.refresh"
-        const val EVENT_DELETE_WIDGET_CONFIG = "cogboard.config.widget.delete"
-        const val EVENT_PURGE_WIDGET_CONFIG = "cogboard.config.widget.purge"
-        const val EVENT_ENDPOINTS = "cogboard.config.endpoints"
-        const val EVENT_UPDATE_ENDPOINTS = "cogboard.config.endpoints.update"
-        const val EVENT_CREDENTIALS = "cogboard.config.credentials"
-        const val EVENT_UPDATE_CREDENTIALS = "cogboard.config.credentials.update"
-        const val EVENT_USER_CONTROL = "cogboard.config.user.control"
-        const val EVENT_HTTP_GET = "cogboard.httpclient.get"
-        const val EVENT_HTTP_CHECK = "cogboard.httpclient.check"
-        const val EVENT_HTTP_POST = "cogboard.httpclient.post"
-        const val EVENT_HTTP_PUT = "cogboard.httpclient.put"
-        const val EVENT_HTTP_DELETE = "cogboard.httpclient.delete"
-        const val REQUEST_METHOD_GET = "get"
-        const val REQUEST_METHOD_POST = "post"
-        const val REQUEST_METHOD_PUT = "put"
-        const val REQUEST_METHOD_DELETE = "delete"
+    class Props {
+        companion object {
+            const val ID = "id"
+            const val EVENT_TYPE = "eventType"
+            const val BOARDS = "boards"
+            const val BOARDS_BY_ID = "boardsById"
+            const val BOARDS_ALL = "allBoards"
+            const val WIDGETS = "widgets"
+            const val WIDGETS_BY_ID = "widgetsById"
+            const val AVAILABLE_WIDGETS = "widgetTypes"
+            const val STATUS = "status"
+            const val WIDGET_STATUS = "widgetStatus"
+            const val ERROR_MESSAGE = "errorMessage"
+            const val ERROR_CAUSE = "errorCause"
+            const val DISABLED = "disabled"
+            const val HEADERS = "headers"
+            const val CONTENT = "content"
+            const val WIDGET_TYPE = "type"
+            const val AUTHENTICATION_TYPES = "authenticationTypes"
+            const val SCHEDULE_PERIOD = "schedulePeriod"
+            const val SCHEDULE_PERIOD_DEFAULT = 120L // 120 seconds
+            const val SCHEDULE_DELAY_DEFAULT = 10L // 10 seconds
+            const val URL = "url"
+            const val REQUEST_ID = "requestId"
+            const val PUBLIC_URL = "publicUrl"
+            const val USER = "user"
+            const val USERNAME = "username"
+            const val PASSWORD = "password"
+            const val CURRENT_PASSWORD = "currentPassword"
+            const val NEW_PASSWORD = "newPassword"
+            const val TOKEN = "token"
+            const val BODY = "body"
+            const val EVENT_ADDRESS = "event.address"
+            const val ENDPOINT = "endpoint"
+            const val ENDPOINTS = "endpoints"
+            const val ENDPOINT_LOADED = "endpoint.loaded"
+            const val CREDENTIAL = "credential"
+            const val CREDENTIALS = "credentials"
+            const val LAST_UPDATED = "lastUpdated"
+            const val ARRAY = "array"
+            const val STATUS_CODE = "statusCode"
+            const val STATUS_MESSAGE = "statusMessage"
+            const val EXPECTED_STATUS_CODE = "expectedStatusCode"
+            const val REQUEST_METHOD = "requestMethod"
+            const val EXPECTED_RESPONSE_BODY = "expectedResponseBody"
+            const val CONTENT_TYPE = "contentType"
+            const val PATH = "path"
+            const val LABEL = "label"
+            const val BOARD_COLUMN_MAX = 20
+            const val BOARD_COLUMN_MIN = 4
+            const val NAME = "name"
+            const val DISPLAY = "display"
+            const val VALUE = "value"
+            const val RELEASE_NAME = "releaseName"
+            const val JQL_QUERY = "jqlQuery"
+            const val BUCKET_QUERIES = "bucketQueries"
+            const val BUCKET_NAME = "bucketName"
+        }
+    }
 
-        val DEFAULT_VALUES: JsonObject = JsonObject()
-                .put(PROP_SCHEDULE_PERIOD, PROP_SCHEDULE_PERIOD_DEFAULT)
+    class RequestMethod {
+        companion object {
+            const val GET = "get"
+            const val POST = "post"
+            const val PUT = "put"
+            const val DELETE = "delete"
+        }
+    }
 
-        fun errorResponse(message: String = ""): JsonObject = JsonObject().put("status", "failed $message")
+    class Event {
+        companion object {
+            const val SEND_MESSAGE_TO_WEBSOCKET = "cogboard.websocket.message"
+            const val VERSION_CONFIG = "cogboard.config.handler.version"
+            const val BOARDS_CONFIG = "cogboard.config.boards"
+            const val UPDATE_WIDGET_CONTENT_CONFIG = "cogboard.config.widget.contentUpdate"
+            const val UPDATE_WIDGET_CONFIG = "cogboard.config.widget.update"
+            const val REFRESH_WIDGET_CONFIG = "cogboard.config.widget.refresh"
+            const val DELETE_WIDGET_CONFIG = "cogboard.config.widget.delete"
+            const val PURGE_WIDGET_CONFIG = "cogboard.config.widget.purge"
+            const val ENDPOINTS = "cogboard.config.endpoints"
+            const val UPDATE_ENDPOINTS = "cogboard.config.endpoints.update"
+            const val CREDENTIALS = "cogboard.config.credentials"
+            const val UPDATE_CREDENTIALS = "cogboard.config.credentials.update"
+            const val USER_CONTROL = "cogboard.config.user.control"
+            const val HTTP_GET = "cogboard.httpclient.get"
+            const val HTTP_CHECK = "cogboard.httpclient.check"
+            const val HTTP_POST = "cogboard.httpclient.post"
+            const val HTTP_PUT = "cogboard.httpclient.put"
+            const val HTTP_DELETE = "cogboard.httpclient.delete"
+        }
+    }
+
+    class EventType {
+        companion object {
+            const val WIDGET_UPDATE = "widget-update"
+            const val CONFIG_SAVED = "config-saved"
+            const val NEW_VERSION = "new-version"
+        }
     }
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/CredentialsConfig.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/CredentialsConfig.kt
index fe1624928..45778e4ef 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/CredentialsConfig.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/CredentialsConfig.kt
@@ -1,13 +1,13 @@
 package com.cognifide.cogboard.config
 
-import com.cognifide.cogboard.CogboardConstants
+import com.cognifide.cogboard.CogboardConstants.Props
 
 class CredentialsConfig {
 
     companion object {
-        const val CREDENTIALS_ARRAY = CogboardConstants.PROP_CREDENTIALS
-        const val CREDENTIAL_ID_PROP = CogboardConstants.PROP_ID
-        const val CREDENTIAL_ID_PREFIX = CogboardConstants.PROP_CREDENTIAL
-        const val CREDENTIAL_LABEL_PROP = CogboardConstants.PROP_LABEL
+        const val CREDENTIALS_ARRAY = Props.CREDENTIALS
+        const val CREDENTIAL_ID_PROP = Props.ID
+        const val CREDENTIAL_ID_PREFIX = Props.CREDENTIAL
+        const val CREDENTIAL_LABEL_PROP = Props.LABEL
     }
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointLoader.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointLoader.kt
index 98529e0fe..97609a8c2 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointLoader.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointLoader.kt
@@ -1,8 +1,6 @@
 package com.cognifide.cogboard.config
 
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_PASSWORD
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_TOKEN
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_USER
+import com.cognifide.cogboard.CogboardConstants.Props
 import com.cognifide.cogboard.config.EndpointsConfig.Companion.CREDENTIALS_PROP
 import com.cognifide.cogboard.config.service.CredentialsService
 import com.cognifide.cogboard.config.service.EndpointsService
@@ -30,9 +28,9 @@ class EndpointLoader(
     private fun JsonObject.attachCredentials(): JsonObject {
         this.remove(CREDENTIALS_PROP)?.let { credId ->
             credentials.findById(credId as String).let { credentials ->
-                this.put(PROP_USER, credentials.getString(PROP_USER) ?: "")
-                this.put(PROP_PASSWORD, credentials.getString(PROP_PASSWORD) ?: "")
-                this.put(PROP_TOKEN, credentials.getString(PROP_TOKEN) ?: "")
+                this.put(Props.USER, credentials.getString(Props.USER) ?: "")
+                this.put(Props.PASSWORD, credentials.getString(Props.PASSWORD) ?: "")
+                this.put(Props.TOKEN, credentials.getString(Props.TOKEN) ?: "")
             }
         }
         return this
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointsConfig.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointsConfig.kt
index d4c281f0d..d2ac8feb7 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointsConfig.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointsConfig.kt
@@ -1,14 +1,14 @@
 package com.cognifide.cogboard.config
 
-import com.cognifide.cogboard.CogboardConstants
+import com.cognifide.cogboard.CogboardConstants.Props
 
 class EndpointsConfig {
 
     companion object {
-        const val ENDPOINTS_ARRAY = CogboardConstants.PROP_ENDPOINTS
-        const val ENDPOINT_ID_PROP = CogboardConstants.PROP_ID
-        const val ENDPOINT_ID_PREFIX = CogboardConstants.PROP_ENDPOINT
-        const val ENDPOINT_LABEL_PROP = CogboardConstants.PROP_LABEL
-        const val CREDENTIALS_PROP = CogboardConstants.PROP_CREDENTIALS
+        const val ENDPOINTS_ARRAY = Props.ENDPOINTS
+        const val ENDPOINT_ID_PROP = Props.ID
+        const val ENDPOINT_ID_PREFIX = Props.ENDPOINT
+        const val ENDPOINT_LABEL_PROP = Props.LABEL
+        const val CREDENTIALS_PROP = Props.CREDENTIALS
     }
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/BoardsController.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/BoardsController.kt
index 38568413a..7ac89f0f6 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/BoardsController.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/BoardsController.kt
@@ -16,21 +16,24 @@ class BoardsController(private val factory: ControllerFactory = ControllerFactor
         val contentRepository = ContentRepository()
         sender = ConfirmationSender(vertx)
         boardsConfigService = BoardsConfigService(
-                contentRepository,
-                EntityCleanupHelper(vertx))
+            contentRepository,
+            EntityCleanupHelper(vertx)
+        )
 
-        factory.create(CogboardConstants.EVENT_BOARDS_CONFIG, vertx, prepareConfig())
+        factory.create(CogboardConstants.Event.BOARDS_CONFIG, vertx, prepareConfig())
     }
 
     private fun prepareConfig() = mapOf<String, (JsonObject) -> String>(
-            "update" to { body -> update(body) },
-            "get" to { _ -> get() }
+        "update" to { body -> update(body) },
+        "get" to { _ -> get() }
     )
 
     private fun update(body: JsonObject): String {
-        val saved = boardsConfigService.saveBoardsConfig(body)
+        boardsConfigService.saveBoardsConfig(body)
         sender.sendOk()
-        return saved.toString()
+        return JsonObject()
+            .put("message", "OK")
+            .toString()
     }
 
     private fun get() = boardsConfigService.loadBoardsConfig().toString()
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/ConfirmationSender.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/ConfirmationSender.kt
index 7528695d6..5b1e013f8 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/ConfirmationSender.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/ConfirmationSender.kt
@@ -1,34 +1,24 @@
 package com.cognifide.cogboard.config.controller
 
-import com.cognifide.cogboard.CogboardConstants
+import com.cognifide.cogboard.CogboardConstants.Event
+import com.cognifide.cogboard.CogboardConstants.EventType
+import com.cognifide.cogboard.CogboardConstants.Props
 import io.vertx.core.Vertx
 import io.vertx.core.json.JsonObject
-import io.vertx.core.logging.Logger
-import io.vertx.core.logging.LoggerFactory
 
 class ConfirmationSender(private val vertx: Vertx) {
 
     fun sendOk() {
-        vertx.eventBus().send(CogboardConstants.EVENT_SEND_MESSAGE_TO_WEBSOCKET,
-                JsonObject().message(OK_MESSAGE))
-    }
-
-    fun sendError(body: JsonObject) {
-        LOGGER.error("$ERROR_MESSAGE \nconfig:\n$body")
-        vertx.eventBus().send(CogboardConstants.EVENT_SEND_MESSAGE_TO_WEBSOCKET,
-                JsonObject().message(ERROR_MESSAGE))
+        vertx.eventBus().send(Event.SEND_MESSAGE_TO_WEBSOCKET, JsonObject().message(OK_MESSAGE))
     }
 
     private fun JsonObject.message(message: String): JsonObject {
         return this
-                .put(CogboardConstants.PROP_EVENT_TYPE, PROP_EVENT_TYPE_NOTIFICATION_CONFIG_SAVE)
-                .put("message", message)
+            .put(Props.EVENT_TYPE, EventType.CONFIG_SAVED)
+            .put("message", message)
     }
 
     companion object {
-        private val LOGGER: Logger = LoggerFactory.getLogger(ConfirmationSender::class.java)
         private const val OK_MESSAGE = "Configuration saved"
-        private const val ERROR_MESSAGE = "Configuration not saved - wrong configuration"
-        private const val PROP_EVENT_TYPE_NOTIFICATION_CONFIG_SAVE = "notification-config-save"
     }
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/CredentialsController.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/CredentialsController.kt
index e2efaf6a9..b417d92b6 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/CredentialsController.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/CredentialsController.kt
@@ -1,7 +1,7 @@
 package com.cognifide.cogboard.config.controller
 
-import com.cognifide.cogboard.CogboardConstants.Companion.EVENT_CREDENTIALS
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_PASSWORD
+import com.cognifide.cogboard.CogboardConstants.Event
+import com.cognifide.cogboard.CogboardConstants.Props
 import com.cognifide.cogboard.config.CredentialsConfig.Companion.CREDENTIAL_ID_PROP
 import com.cognifide.cogboard.config.service.CredentialsService
 import io.vertx.core.AbstractVerticle
@@ -14,7 +14,7 @@ class CredentialsController : AbstractVerticle() {
 
     override fun start() {
         credentialsService = CredentialsService()
-        factory.create(EVENT_CREDENTIALS, vertx, prepareConfig())
+        factory.create(Event.CREDENTIALS, vertx, prepareConfig())
     }
 
     private fun prepareConfig() = mapOf<String, (JsonObject) -> String>(
@@ -36,7 +36,7 @@ class CredentialsController : AbstractVerticle() {
             }
 
     private fun JsonObject.filterSensitiveData(): JsonObject {
-        this.remove(PROP_PASSWORD)
+        this.remove(Props.PASSWORD)
         return this
     }
 
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/EndpointsController.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/EndpointsController.kt
index cf6971d1d..47fa5e8ab 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/EndpointsController.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/EndpointsController.kt
@@ -1,6 +1,7 @@
 package com.cognifide.cogboard.config.controller
 
-import com.cognifide.cogboard.CogboardConstants
+import com.cognifide.cogboard.CogboardConstants.Props
+import com.cognifide.cogboard.CogboardConstants.Event
 import com.cognifide.cogboard.config.EndpointsConfig.Companion.ENDPOINT_ID_PROP
 import com.cognifide.cogboard.config.service.EndpointsService
 import com.cognifide.cogboard.utils.ExtensionFunctions.findAllByKeyValue
@@ -16,7 +17,7 @@ class EndpointsController : AbstractVerticle() {
 
     override fun start() {
         endpointsService = EndpointsService()
-        factory.create(CogboardConstants.EVENT_ENDPOINTS, vertx, prepareConfig())
+        factory.create(Event.ENDPOINTS, vertx, prepareConfig())
 
         listenOnCredentialsUpdate()
         listenOnEndpointsUpdate()
@@ -47,26 +48,26 @@ class EndpointsController : AbstractVerticle() {
 
     private fun listenOnCredentialsUpdate() = vertx
             .eventBus()
-            .consumer<JsonObject>(CogboardConstants.EVENT_UPDATE_CREDENTIALS)
+            .consumer<JsonObject>(Event.UPDATE_CREDENTIALS)
             .handler {
                 val relatedEndpoints = endpointsWithChangedCredentials(it)
-                val message = JsonObject().put(CogboardConstants.PROP_ENDPOINTS, relatedEndpoints)
-                vertx.eventBus().send(CogboardConstants.EVENT_REFRESH_WIDGET_CONFIG, message)
+                val message = JsonObject().put(Props.ENDPOINTS, relatedEndpoints)
+                vertx.eventBus().send(Event.REFRESH_WIDGET_CONFIG, message)
             }
 
     private fun listenOnEndpointsUpdate() = vertx
             .eventBus()
-            .consumer<JsonObject>(CogboardConstants.EVENT_UPDATE_ENDPOINTS)
+            .consumer<JsonObject>(Event.UPDATE_ENDPOINTS)
             .handler {
-                val message = JsonObject().put(CogboardConstants.PROP_ENDPOINTS, JsonArray().add(it.body()))
-                vertx.eventBus().send(CogboardConstants.EVENT_REFRESH_WIDGET_CONFIG, message)
+                val message = JsonObject().put(Props.ENDPOINTS, JsonArray().add(it.body()))
+                vertx.eventBus().send(Event.REFRESH_WIDGET_CONFIG, message)
             }
 
     private fun endpointsWithChangedCredentials(it: Message<JsonObject>): List<JsonObject>? {
-        val changedCredentialId = it.body().getString(CogboardConstants.PROP_ID)
+        val changedCredentialId = it.body().getString(Props.ID)
         return changedCredentialId
                 ?.let { id ->
-                    endpointsService.getAllEndpoints().findAllByKeyValue(id, CogboardConstants.PROP_CREDENTIALS)
+                    endpointsService.getAllEndpoints().findAllByKeyValue(id, Props.CREDENTIALS)
                 }
     }
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/UserController.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/UserController.kt
index a1ed1c1ee..71d47b993 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/UserController.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/UserController.kt
@@ -1,6 +1,6 @@
 package com.cognifide.cogboard.config.controller
 
-import com.cognifide.cogboard.CogboardConstants.Companion.EVENT_USER_CONTROL
+import com.cognifide.cogboard.CogboardConstants.Event
 import com.cognifide.cogboard.config.service.UserService
 import io.vertx.core.AbstractVerticle
 import io.vertx.core.json.JsonObject
@@ -12,7 +12,7 @@ class UserController : AbstractVerticle() {
 
     override fun start() {
         userService = UserService()
-        factory.create(EVENT_USER_CONTROL, vertx, prepareConfig())
+        factory.create(Event.USER_CONTROL, vertx, prepareConfig())
     }
 
     private fun prepareConfig() = mapOf<String, (JsonObject) -> String>(
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/VersionController.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/VersionController.kt
index 041395eb6..609e4e3e8 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/VersionController.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/VersionController.kt
@@ -1,6 +1,8 @@
 package com.cognifide.cogboard.config.controller
 
-import com.cognifide.cogboard.CogboardConstants
+import com.cognifide.cogboard.CogboardConstants.Props
+import com.cognifide.cogboard.CogboardConstants.Event
+import com.cognifide.cogboard.CogboardConstants.EventType
 import com.cognifide.cogboard.config.service.VersionService
 import io.vertx.core.AbstractVerticle
 import io.vertx.core.http.HttpHeaders
@@ -19,7 +21,7 @@ class VersionController : AbstractVerticle() {
 
     private fun listenOnCheckVersion() = vertx
             .eventBus()
-            .consumer<JsonObject>(CogboardConstants.EVENT_VERSION_CONFIG)
+            .consumer<JsonObject>(Event.VERSION_CONFIG)
             .handler {
                 if (versionService.isLatestVersionAvailable()) {
                     sendResponse(versionService.prepareVersionResponse())
@@ -39,23 +41,22 @@ class VersionController : AbstractVerticle() {
 
     private fun sendResponse(response: JsonObject) {
         val message = JsonObject()
-        message.put(CogboardConstants.PROP_EVENT_TYPE, PROP_EVENT_TYPE_NEW_VERSION)
-        message.put(CogboardConstants.PROP_CONTENT, response)
-        vertx.eventBus().send(CogboardConstants.EVENT_SEND_MESSAGE_TO_WEBSOCKET, message)
+        message.put(Props.EVENT_TYPE, EventType.NEW_VERSION)
+        message.put(Props.CONTENT, response)
+        vertx.eventBus().send(Event.SEND_MESSAGE_TO_WEBSOCKET, message)
     }
 
     private fun sendRequestForNewVersion() {
-        vertx.eventBus().send(CogboardConstants.EVENT_HTTP_GET,
+        vertx.eventBus().send(Event.HTTP_GET,
                 JsonObject()
-                        .put(CogboardConstants.PROP_URL, GITHUB_REPOSITORY_LATEST_VERSION_URL)
-                        .put(CogboardConstants.PROP_EVENT_ADDRESS, NEW_VERSION_RESPONSE)
-                        .put(CogboardConstants.PROP_HEADERS, JsonObject()
+                        .put(Props.URL, GITHUB_REPOSITORY_LATEST_VERSION_URL)
+                        .put(Props.EVENT_ADDRESS, NEW_VERSION_RESPONSE)
+                        .put(Props.HEADERS, JsonObject()
                                 .put(HttpHeaders.USER_AGENT.toString(), USER_AGENT_HEADER))
         )
     }
 
     companion object {
-        const val PROP_EVENT_TYPE_NEW_VERSION = "new-version"
         const val GITHUB_REPOSITORY_LATEST_VERSION_URL =
                 "https://api.github.com/repos/wttech/cogboard/releases/latest"
         const val USER_AGENT_HEADER = "Cogboard"
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/WidgetsController.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/WidgetsController.kt
index 90b84b9c3..f66ab489c 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/WidgetsController.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/WidgetsController.kt
@@ -1,6 +1,7 @@
 package com.cognifide.cogboard.config.controller
 
-import com.cognifide.cogboard.CogboardConstants
+import com.cognifide.cogboard.CogboardConstants.Event
+import com.cognifide.cogboard.CogboardConstants.Props
 import com.cognifide.cogboard.config.helper.EntityCleanupHelper
 import com.cognifide.cogboard.config.service.BoardsConfigService
 import com.cognifide.cogboard.config.service.WidgetRuntimeService
@@ -34,31 +35,31 @@ class WidgetsController : AbstractVerticle() {
 
     private fun listenOnWidgetUpdate() = vertx
             .eventBus()
-            .consumer<JsonObject>(CogboardConstants.EVENT_UPDATE_WIDGET_CONFIG)
+            .consumer<JsonObject>(Event.UPDATE_WIDGET_CONFIG)
             .handler { widgetRuntimeService.createOrUpdateWidget(it.body()) }
 
     private fun listenOnWidgetRefresh() = vertx
             .eventBus()
-            .consumer<JsonObject>(CogboardConstants.EVENT_REFRESH_WIDGET_CONFIG)
+            .consumer<JsonObject>(Event.REFRESH_WIDGET_CONFIG)
             .handler {
-                val ids = it.body().getValue(CogboardConstants.PROP_ENDPOINTS)
+                val ids = it.body().getValue(Props.ENDPOINTS)
                 widgetRuntimeService.reloadWidgetsWithChangedEndpoints(ids as JsonArray)
             }
 
     private fun listenOnWidgetContentUpdate() = vertx
             .eventBus()
-            .consumer<JsonObject>(CogboardConstants.EVENT_UPDATE_WIDGET_CONTENT_CONFIG)
+            .consumer<JsonObject>(Event.UPDATE_WIDGET_CONTENT_CONFIG)
             .handler {
                 widgetRuntimeService.handleWidgetContentUpdate(it.body())
             }
 
     private fun listenOnWidgetDelete() = vertx
             .eventBus()
-            .consumer<JsonObject>(CogboardConstants.EVENT_DELETE_WIDGET_CONFIG)
+            .consumer<JsonObject>(Event.DELETE_WIDGET_CONFIG)
             .handler { widgetRuntimeService.destroyWidget("Delete", it.body()) }
 
     private fun listenOnWidgetPurge() = vertx
             .eventBus()
-            .consumer<JsonObject>(CogboardConstants.EVENT_PURGE_WIDGET_CONFIG)
+            .consumer<JsonObject>(Event.PURGE_WIDGET_CONFIG)
             .handler { widgetRuntimeService.destroyWidget("Purge", it.body()) }
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/handler/VersionHandler.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/handler/VersionHandler.kt
index cfcb1cf9b..d1c7f0276 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/handler/VersionHandler.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/handler/VersionHandler.kt
@@ -15,7 +15,7 @@ class VersionHandler : RoutingHandlerFactory {
     override fun create(vertx: Vertx?, config: JsonObject?): Handler<RoutingContext> = Handler { event ->
         vertx
                 ?.eventBus()
-                ?.publish(CogboardConstants.EVENT_VERSION_CONFIG, JsonObject())
+                ?.publish(CogboardConstants.Event.VERSION_CONFIG, JsonObject())
         event
                 .response()
                 .endEmptyJson()
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/helper/EntityCleanupHelper.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/helper/EntityCleanupHelper.kt
index d031316e7..61616194d 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/helper/EntityCleanupHelper.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/helper/EntityCleanupHelper.kt
@@ -3,7 +3,8 @@ package com.cognifide.cogboard.config.helper
 import io.vertx.core.Vertx
 import io.vertx.core.json.JsonArray
 import io.vertx.core.json.JsonObject
-import com.cognifide.cogboard.CogboardConstants as CC
+import com.cognifide.cogboard.CogboardConstants.Props
+import com.cognifide.cogboard.CogboardConstants.Event
 
 class EntityCleanupHelper(private val vertx: Vertx) {
     fun handle(oldConfig: JsonObject, newConfig: JsonObject): List<String> {
@@ -27,8 +28,8 @@ class EntityCleanupHelper(private val vertx: Vertx) {
             .map { it.toString() }
 
         val declaredWidgets = config
-            .getJsonObject(CC.PROP_WIDGETS)
-            .getJsonObject(CC.PROP_WIDGETS_BY_ID)
+            .getJsonObject(Props.WIDGETS)
+            .getJsonObject(Props.WIDGETS_BY_ID)
             .map { it.key.toString() }
             .toList()
 
@@ -42,23 +43,23 @@ class EntityCleanupHelper(private val vertx: Vertx) {
 
     private fun getBoardWidgets(config: JsonObject, it: Any): JsonArray? =
         config
-            .getJsonObject(CC.PROP_BOARDS)
-            .getJsonObject(CC.PROP_BOARDS_BY_ID)
+            .getJsonObject(Props.BOARDS)
+            .getJsonObject(Props.BOARDS_BY_ID)
             .getJsonObject(it.toString())
-            ?.getJsonArray(CC.PROP_WIDGETS)
+            ?.getJsonArray(Props.WIDGETS)
 
     private fun getAllBoards(config: JsonObject) =
         config
-            .getJsonObject(CC.PROP_BOARDS)
-            .getJsonArray(CC.PROP_BOARDS_ALL)
+            .getJsonObject(Props.BOARDS)
+            .getJsonArray(Props.BOARDS_ALL)
 
     private fun sendWidgetPurgeEvent(widgetId: String) =
         vertx
             .eventBus()
             .publish(
-                CC.EVENT_PURGE_WIDGET_CONFIG,
+                Event.PURGE_WIDGET_CONFIG,
                 JsonObject().put(
-                    CC.PROP_ID,
+                    Props.ID,
                     widgetId)
             )
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/BoardsConfigService.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/BoardsConfigService.kt
index 3eb203b53..ce6f1c7e4 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/BoardsConfigService.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/BoardsConfigService.kt
@@ -1,13 +1,12 @@
 package com.cognifide.cogboard.config.service
 
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_CONTENT
+import com.cognifide.cogboard.CogboardConstants.Props
 import com.cognifide.cogboard.config.helper.EntityCleanupHelper
 import com.cognifide.cogboard.storage.ContentRepository
 import com.cognifide.cogboard.storage.Storage
 import com.cognifide.cogboard.storage.VolumeStorageFactory.boards
 import com.cognifide.cogboard.widget.WidgetIndex
 import io.vertx.core.json.JsonObject
-import com.cognifide.cogboard.CogboardConstants as CC
 
 class BoardsConfigService(
     private val contentRepository: ContentRepository = ContentRepository(),
@@ -15,17 +14,16 @@ class BoardsConfigService(
     private val storage: Storage = boards()
 ) {
 
-    fun saveBoardsConfig(boardsConfig: JsonObject): JsonObject {
+    fun saveBoardsConfig(boardsConfig: JsonObject) {
         val cleanBoardsConfig = executeForWidgets(boardsConfig, this::resetContentNode)
         handleDeletedEntities(cleanBoardsConfig)
         storage.saveConfig(cleanBoardsConfig)
-        return boardsConfig
     }
 
     fun loadBoardsConfig(): JsonObject {
         val config = storage.loadConfig()
         executeForWidgets(config, this::addContent)
-        config.getJsonObject(CC.PROP_WIDGETS).put(CC.PROP_AVAILABLE_WIDGETS, WidgetIndex.availableWidgets())
+        config.getJsonObject(Props.WIDGETS).put(Props.AVAILABLE_WIDGETS, WidgetIndex.availableWidgets())
         return config
     }
 
@@ -40,15 +38,15 @@ class BoardsConfigService(
     }
 
     private fun getWidgetById(boardsConfig: JsonObject) =
-            boardsConfig.getJsonObject(CC.PROP_WIDGETS)
-                    ?.getJsonObject(CC.PROP_WIDGETS_BY_ID) ?: JsonObject()
+            boardsConfig.getJsonObject(Props.WIDGETS)
+                    ?.getJsonObject(Props.WIDGETS_BY_ID) ?: JsonObject()
 
     private fun resetContentNode(widgetId: String, widget: JsonObject) {
-        widget.put(PROP_CONTENT, JsonObject())
+        widget.put(Props.CONTENT, JsonObject())
     }
 
     private fun addContent(widgetId: String, widget: JsonObject) {
-        widget.put(PROP_CONTENT, contentRepository.get(widgetId))
+        widget.put(Props.CONTENT, contentRepository.get(widgetId))
     }
 
     private fun executeForWidgets(
@@ -68,8 +66,8 @@ class BoardsConfigService(
             ?.handle(storage.loadConfig(), boardsConfig)
             ?.forEach {
                 boardsConfig
-                    .getJsonObject(CC.PROP_WIDGETS)
-                    .getJsonObject(CC.PROP_WIDGETS_BY_ID)
+                    .getJsonObject(Props.WIDGETS)
+                    .getJsonObject(Props.WIDGETS_BY_ID)
                     .remove(it)
             }
     }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/UserService.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/UserService.kt
index 99576fe74..9e0356126 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/UserService.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/UserService.kt
@@ -1,9 +1,6 @@
 package com.cognifide.cogboard.config.service
 
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_CURRENT_PASSWORD
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_NEW_PASSWORD
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_PASSWORD
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_USER
+import com.cognifide.cogboard.CogboardConstants.Props
 import com.cognifide.cogboard.config.model.Admin
 import com.cognifide.cogboard.storage.Storage
 import com.cognifide.cogboard.storage.VolumeStorageFactory.admin
@@ -18,7 +15,7 @@ class UserService(
     fun save(newLoginData: JsonObject): JsonObject {
         val wrongPassMsg = config.getString("wrongPassMsg") ?: "Please, enter correct Password"
         val admin = newLoginData.toAdmin()
-        val currentPassword = newLoginData.getString(PROP_CURRENT_PASSWORD)
+        val currentPassword = newLoginData.getString(Props.CURRENT_PASSWORD)
         return if (confirmPassword(currentPassword)) {
             update(admin)
             response()
@@ -26,7 +23,7 @@ class UserService(
     }
 
     private fun confirmPassword(currentPassword: String): Boolean {
-        return config.getString(PROP_PASSWORD) == currentPassword
+        return config.getString(Props.PASSWORD) == currentPassword
     }
 
     private fun update(admin: JsonObject) {
@@ -35,8 +32,8 @@ class UserService(
     }
 
     private fun JsonObject.toAdmin(): JsonObject {
-        val user = config.getString(PROP_USER)
-        val newPassword = this.getString(PROP_NEW_PASSWORD)
+        val user = config.getString(Props.USER)
+        val newPassword = this.getString(Props.NEW_PASSWORD)
         return JsonObject.mapFrom(Admin(user, newPassword))
     }
 
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/WidgetRuntimeService.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/WidgetRuntimeService.kt
index 2f4913a08..167122cc6 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/WidgetRuntimeService.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/WidgetRuntimeService.kt
@@ -1,6 +1,7 @@
 package com.cognifide.cogboard.config.service
 
-import com.cognifide.cogboard.CogboardConstants
+import com.cognifide.cogboard.CogboardConstants.Props
+import com.cognifide.cogboard.CogboardConstants.Event
 import com.cognifide.cogboard.config.EndpointLoader
 import com.cognifide.cogboard.storage.ContentRepository
 import com.cognifide.cogboard.widget.Widget
@@ -48,7 +49,7 @@ class WidgetRuntimeService(
     fun reloadWidgetsWithChangedEndpoints(endpoints: JsonArray) {
         val endpointIds = endpoints.stream()
                 .map { it as JsonObject }
-                .map { it.getValue(CogboardConstants.PROP_ID) }
+                .map { it.getValue(Props.ID) }
                 .collect(Collectors.toList())
 
         widgets.map { it.value }
@@ -57,7 +58,7 @@ class WidgetRuntimeService(
     }
 
     private fun getEndpointId(widget: Widget): String {
-        return widget.config().getString(CogboardConstants.PROP_ENDPOINT, "")
+        return widget.config().getString(Props.ENDPOINT, "")
     }
 
     fun handleWidgetContentUpdate(widgetConfig: JsonObject) {
@@ -86,13 +87,13 @@ class WidgetRuntimeService(
     }
 
     private fun JsonObject.getId(): String? =
-            this.getString(CogboardConstants.PROP_ID)
+            this.getString(Props.ID)
 
     private fun JsonObject.attachEndpoint() {
-        val endpointId = this.getString(CogboardConstants.PROP_ENDPOINT)
+        val endpointId = this.getString(Props.ENDPOINT)
         endpointId?.let {
             val endpoint = EndpointLoader().loadWithSensitiveData(endpointId)
-            this.put(CogboardConstants.PROP_ENDPOINT_LOADED, endpoint)
+            this.put(Props.ENDPOINT_LOADED, endpoint)
         }
     }
 
@@ -100,6 +101,6 @@ class WidgetRuntimeService(
         val LOGGER: Logger = LoggerFactory.getLogger(WidgetRuntimeService::class.java)
 
         internal fun createWidgetContentUpdateAddress(id: String) =
-                CogboardConstants.EVENT_UPDATE_WIDGET_CONTENT_CONFIG + '.' + id
+                Event.UPDATE_WIDGET_CONTENT_CONFIG + '.' + id
     }
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/validation/boards/BoardsValidator.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/validation/boards/BoardsValidator.kt
index a04041e33..366beb7c8 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/validation/boards/BoardsValidator.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/validation/boards/BoardsValidator.kt
@@ -1,11 +1,11 @@
 package com.cognifide.cogboard.config.validation.boards
 
+import com.cognifide.cogboard.CogboardConstants.Props
 import com.cognifide.cogboard.config.model.Board
 import com.cognifide.cogboard.config.model.Config
 import com.cognifide.cogboard.config.validation.Validator
 import com.fasterxml.jackson.databind.JsonMappingException
 import com.fasterxml.jackson.module.kotlin.readValue
-import com.cognifide.cogboard.CogboardConstants as CC
 
 object BoardsValidator : Validator {
 
@@ -41,8 +41,8 @@ object BoardsValidator : Validator {
 
         if (!checkColumnsRange(board)) {
             errors.add(BoardsValidationError(board,
-                    "Columns number should be between ${CC.PROP_BOARD_COLUMN_MIN} and " +
-                            "${CC.PROP_BOARD_COLUMN_MAX}"))
+                    "Columns number should be between ${Props.BOARD_COLUMN_MIN} and " +
+                            "${Props.BOARD_COLUMN_MAX}"))
         }
         if (!checkTitleLength(board)) {
             errors.add(BoardsValidationError(board,
@@ -60,7 +60,7 @@ object BoardsValidator : Validator {
     }
 
     private fun checkColumnsRange(board: Board) =
-            board.columns in CC.PROP_BOARD_COLUMN_MIN..CC.PROP_BOARD_COLUMN_MAX
+            board.columns in Props.BOARD_COLUMN_MIN..Props.BOARD_COLUMN_MAX
 
     private fun checkTitleLength(board: Board) =
             board.title.length in TITLE_LENGTH_MIN..TITLE_LENGTH_MAX
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/HttpClient.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/HttpClient.kt
index 603a133bd..f67097c02 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/HttpClient.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/HttpClient.kt
@@ -1,8 +1,7 @@
 package com.cognifide.cogboard.http
 
-import com.cognifide.cogboard.CogboardConstants as CC
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_STATUS_CODE
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_STATUS_MESSAGE
+import com.cognifide.cogboard.CogboardConstants.Event
+import com.cognifide.cogboard.CogboardConstants.Props
 import com.cognifide.cogboard.http.HttpConstants.CONTENT_TYPE_JSON
 import com.cognifide.cogboard.http.HttpConstants.HEADER_CONTENT_TYPE
 import com.cognifide.cogboard.http.auth.AuthenticationFactory
@@ -32,45 +31,45 @@ class HttpClient : AbstractVerticle() {
     }
 
     private fun registerGET(client: WebClient) {
-        vertx.eventBus().consumer<JsonObject>(CC.EVENT_HTTP_GET).handler { message ->
+        vertx.eventBus().consumer<JsonObject>(Event.HTTP_GET).handler { message ->
             message.body()?.let {
-                val httpRequest = client.getAbs(it.getString(CC.PROP_URL))
+                val httpRequest = client.getAbs(it.getString(Props.URL))
                 makeRequest(httpRequest, it)
             }
         }
     }
 
     private fun registerCHECK(client: WebClient) {
-        vertx.eventBus().consumer<JsonObject>(CC.EVENT_HTTP_CHECK).handler { message ->
+        vertx.eventBus().consumer<JsonObject>(Event.HTTP_CHECK).handler { message ->
             message.body()?.let {
-                val httpRequest = client.getAbs(it.getString(CC.PROP_URL))
+                val httpRequest = client.getAbs(it.getString(Props.URL))
                 makeRequest(httpRequest, it)
             }
         }
     }
 
     private fun registerPUT(client: WebClient) {
-        vertx.eventBus().consumer<JsonObject>(CC.EVENT_HTTP_PUT).handler { message ->
+        vertx.eventBus().consumer<JsonObject>(Event.HTTP_PUT).handler { message ->
             message.body()?.let {
-                val httpRequest = client.putAbs(it.getString(CC.PROP_URL))
+                val httpRequest = client.putAbs(it.getString(Props.URL))
                 makeRequest(httpRequest, it)
             }
         }
     }
 
     private fun registerPOST(client: WebClient) {
-        vertx.eventBus().consumer<JsonObject>(CC.EVENT_HTTP_POST).handler { message ->
+        vertx.eventBus().consumer<JsonObject>(Event.HTTP_POST).handler { message ->
             message.body()?.let {
-                val httpRequest = client.postAbs(it.getString(CC.PROP_URL))
+                val httpRequest = client.postAbs(it.getString(Props.URL))
                 makeRequest(httpRequest, it)
             }
         }
     }
 
     private fun registerDELETE(client: WebClient) {
-        vertx.eventBus().consumer<JsonObject>(CC.EVENT_HTTP_DELETE).handler { message ->
+        vertx.eventBus().consumer<JsonObject>(Event.HTTP_DELETE).handler { message ->
             message.body()?.let {
-                val httpRequest = client.deleteAbs(it.getString(CC.PROP_URL))
+                val httpRequest = client.deleteAbs(it.getString(Props.URL))
                 makeRequest(httpRequest, it)
             }
         }
@@ -78,9 +77,9 @@ class HttpClient : AbstractVerticle() {
 
     private fun makeRequest(httpRequest: HttpRequest<Buffer>, config: JsonObject) {
         val request = initRequest(httpRequest, config)
-        val address = config.getString(CC.PROP_EVENT_ADDRESS)
-        val body = config.getJsonObject(CC.PROP_BODY)
-        val requestId = config.getString(CC.PROP_REQUEST_ID) ?: ""
+        val address = config.getString(Props.EVENT_ADDRESS)
+        val body = config.getJsonObject(Props.BODY)
+        val requestId = config.getString(Props.REQUEST_ID) ?: ""
 
         body?.let {
             executeCheckRequest(request, address, body)
@@ -90,12 +89,12 @@ class HttpClient : AbstractVerticle() {
     }
 
     private fun initRequest(request: HttpRequest<Buffer>, config: JsonObject): HttpRequest<Buffer> {
-        val user = config.getString(CC.PROP_USER) ?: ""
-        val pass = config.getString(CC.PROP_PASSWORD) ?: ""
-        val token = config.getString(CC.PROP_TOKEN) ?: ""
-        val contentType = config.getString(CC.PROP_CONTENT_TYPE) ?: CONTENT_TYPE_JSON
-        val headers = config.getJsonObject(CC.PROP_HEADERS) ?: JsonObject()
-        val authTypesString = config.getString(CC.PROP_AUTHENTICATION_TYPES)
+        val user = config.getString(Props.USER) ?: ""
+        val pass = config.getString(Props.PASSWORD) ?: ""
+        val token = config.getString(Props.TOKEN) ?: ""
+        val contentType = config.getString(Props.CONTENT_TYPE) ?: CONTENT_TYPE_JSON
+        val headers = config.getJsonObject(Props.HEADERS) ?: JsonObject()
+        val authTypesString = config.getString(Props.AUTHENTICATION_TYPES)
 
         val authTypes = if (authTypesString != null) Json.decodeValue(authTypesString)
         else JsonArray()
@@ -157,11 +156,11 @@ class HttpClient : AbstractVerticle() {
         request.sendJsonObject(body) {
             val result = JsonObject()
             if (it.succeeded()) {
-                result.put(PROP_STATUS_CODE, it.result().statusCode())
-                result.put(PROP_STATUS_MESSAGE, it.result().statusMessage())
-                result.put(CC.PROP_BODY, it.result().bodyAsString())
+                result.put(Props.STATUS_CODE, it.result().statusCode())
+                result.put(Props.STATUS_MESSAGE, it.result().statusMessage())
+                result.put(Props.BODY, it.result().bodyAsString())
             } else {
-                result.put(PROP_STATUS_MESSAGE, "unsuccessful")
+                result.put(Props.STATUS_MESSAGE, "unsuccessful")
                 LOGGER.error(it.cause()?.message)
             }
             vertx.eventBus().send(address, result)
@@ -172,15 +171,15 @@ class HttpClient : AbstractVerticle() {
         request.send {
             if (!it.succeeded()) {
                 vertx.eventBus().send(address, JsonObject()
-                        .put(CC.PROP_ERROR_MESSAGE, "Http Error")
-                        .put(CC.PROP_ERROR_CAUSE, it.cause()?.message)
-                        .put(CC.PROP_REQUEST_ID, requestId))
+                        .put(Props.ERROR_MESSAGE, "Http Error")
+                        .put(Props.ERROR_CAUSE, it.cause()?.message)
+                        .put(Props.REQUEST_ID, requestId))
                 LOGGER.error(it.cause()?.message)
             } else {
                 toJson(it.result()).let { json ->
-                    json.put(PROP_STATUS_CODE, it.result().statusCode())
-                    json.put(PROP_STATUS_MESSAGE, it.result().statusMessage())
-                    json.put(CC.PROP_REQUEST_ID, requestId)
+                    json.put(Props.STATUS_CODE, it.result().statusCode())
+                    json.put(Props.STATUS_MESSAGE, it.result().statusMessage())
+                    json.put(Props.REQUEST_ID, requestId)
                     vertx.eventBus().send(address, json)
                 }
             }
@@ -192,9 +191,9 @@ class HttpClient : AbstractVerticle() {
             response.bodyAsJsonObject()
         } catch (e: DecodeException) {
             try {
-                JsonObject().put(CC.PROP_ARRAY, response.bodyAsJsonArray())
+                JsonObject().put(Props.ARRAY, response.bodyAsJsonArray())
             } catch (e: DecodeException) {
-                JsonObject().put(CC.PROP_BODY, response.bodyAsString())
+                JsonObject().put(Props.BODY, response.bodyAsString())
             }
         } catch (e: IllegalStateException) {
             JsonObject()
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/WebSocketsServer.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/WebSocketsServer.kt
index cff68e7a3..3e97877f3 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/WebSocketsServer.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/WebSocketsServer.kt
@@ -25,7 +25,7 @@ class WebSocketsServer : AbstractVerticle() {
         LOGGER.info("Starting <{}>", this::class.java.simpleName)
 
         val sockets: MutableSet<ServerWebSocket> = hashSetOf()
-        val consumer = vertx.eventBus().consumer<JsonObject>(CogboardConstants.EVENT_SEND_MESSAGE_TO_WEBSOCKET)
+        val consumer = vertx.eventBus().consumer<JsonObject>(CogboardConstants.Event.SEND_MESSAGE_TO_WEBSOCKET)
 
         vertx.createHttpServer().websocketHandler { socket ->
             sockets.add(socket)
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/LoginHandler.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/LoginHandler.kt
index 9fe9f9663..6a70f0f65 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/LoginHandler.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/LoginHandler.kt
@@ -1,9 +1,7 @@
 package com.cognifide.cogboard.security
 
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_PASSWORD
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_USER
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_USERNAME
-import com.cognifide.cogboard.CogboardConstants.Companion.STATUS_CODE_401
+import com.cognifide.cogboard.CogboardConstants.Props
+import com.cognifide.cogboard.CogboardConstants.StatusCode
 import com.cognifide.cogboard.config.model.Admin
 import com.cognifide.cogboard.storage.Storage
 import com.cognifide.cogboard.storage.VolumeStorageFactory
@@ -29,8 +27,8 @@ class LoginHandler(val storage: Storage = VolumeStorageFactory.admin()) : Routin
 
         return Handler { ctx ->
             ctx.bodyAsJson?.let {
-                val username = it.getString(PROP_USERNAME, "")
-                val password = it.getString(PROP_PASSWORD, "")
+                val username = it.getString(Props.USERNAME, "")
+                val password = it.getString(Props.PASSWORD, "")
                 val admin = getAdmin(username)
                 when {
                     admin == null -> sendUnauthorized(ctx, wrongUserMsg)
@@ -49,9 +47,9 @@ class LoginHandler(val storage: Storage = VolumeStorageFactory.admin()) : Routin
 
     private fun getAdmin(name: String): Admin? {
         val admin = storage.loadConfig()
-        val username = admin.getString(PROP_USER)
+        val username = admin.getString(Props.USER)
         return if (username == name) {
-            val password = admin.getString(PROP_PASSWORD)
+            val password = admin.getString(Props.PASSWORD)
             Admin(username, password)
         } else null
     }
@@ -60,6 +58,6 @@ class LoginHandler(val storage: Storage = VolumeStorageFactory.admin()) : Routin
         admin.password.isNotBlank() && admin.password == password
 
     private fun sendUnauthorized(ctx: RoutingContext, message: String) {
-        ctx.response().setStatusMessage(message).setStatusCode(STATUS_CODE_401).end()
+        ctx.response().setStatusMessage(message).setStatusCode(StatusCode.a401).end()
     }
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/SessionHandler.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/SessionHandler.kt
index 554de2f80..214f895cc 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/SessionHandler.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/SessionHandler.kt
@@ -1,6 +1,6 @@
 package com.cognifide.cogboard.security
 
-import com.cognifide.cogboard.CogboardConstants.Companion.STATUS_CODE_401
+import com.cognifide.cogboard.CogboardConstants.StatusCode
 import com.cognifide.cogboard.utils.ExtensionFunctions.asJsonObject
 import com.cognifide.cogboard.storage.Storage
 import com.cognifide.cogboard.storage.VolumeStorageFactory
@@ -45,6 +45,6 @@ class SessionHandler(val storage: Storage = VolumeStorageFactory.admin()) : Rout
     }
 
     private fun sendUnauthorized(ctx: RoutingContext, message: String) {
-        ctx.response().setStatusMessage(message).setStatusCode(STATUS_CODE_401).end()
+        ctx.response().setStatusMessage(message).setStatusCode(StatusCode.a401).end()
     }
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/utils/ExtensionFunctions.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/utils/ExtensionFunctions.kt
index f907935ff..394ebc2f3 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/utils/ExtensionFunctions.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/utils/ExtensionFunctions.kt
@@ -1,6 +1,6 @@
 package com.cognifide.cogboard.utils
 
-import com.cognifide.cogboard.CogboardConstants
+import com.cognifide.cogboard.CogboardConstants.Props
 import io.vertx.core.json.JsonArray
 import io.vertx.core.json.JsonObject
 import io.vertx.ext.auth.KeyStoreOptions
@@ -10,7 +10,7 @@ import java.util.stream.Collectors
 
 object ExtensionFunctions {
 
-    fun JsonArray.findById(idValue: String, idKey: String = CogboardConstants.PROP_ID): JsonObject {
+    fun JsonArray.findById(idValue: String, idKey: String = Props.ID): JsonObject {
         return this.findByKeyValue(idValue, idKey)
     }
 
@@ -37,7 +37,7 @@ object ExtensionFunctions {
                 .collect(Collectors.toList())
     }
 
-    fun JsonArray.getObjectPositionById(idValue: String, idKey: String = CogboardConstants.PROP_ID): Int {
+    fun JsonArray.getObjectPositionById(idValue: String, idKey: String = Props.ID): Int {
         var index = 0
         while (index < this.size()) {
             val credential = this.getJsonObject(index)
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/AsyncWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/AsyncWidget.kt
index 52330e30f..80dd5cf97 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/AsyncWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/AsyncWidget.kt
@@ -1,6 +1,7 @@
 package com.cognifide.cogboard.widget
 
-import com.cognifide.cogboard.CogboardConstants
+import com.cognifide.cogboard.CogboardConstants.Props
+import com.cognifide.cogboard.CogboardConstants.Event
 import com.cognifide.cogboard.config.service.BoardsConfigService
 import com.cognifide.cogboard.http.auth.AuthenticationType
 import io.vertx.core.Vertx
@@ -18,12 +19,12 @@ abstract class AsyncWidget(
     serv: BoardsConfigService
 ) : BaseWidget(vertx, config, serv) {
 
-    val user: String = config.endpointProp(CogboardConstants.PROP_USER)
-    val password: String = config.endpointProp(CogboardConstants.PROP_PASSWORD)
-    val token: String = config.endpointProp(CogboardConstants.PROP_TOKEN)
-    val url: String = config.endpointProp(CogboardConstants.PROP_URL)
-    val publicUrl: String = config.endpointProp(CogboardConstants.PROP_PUBLIC_URL).ifBlank { url }
-    private val contentType: String = config.getString(CogboardConstants.PROP_CONTENT_TYPE)
+    val user: String = config.endpointProp(Props.USER)
+    val password: String = config.endpointProp(Props.PASSWORD)
+    val token: String = config.endpointProp(Props.TOKEN)
+    val url: String = config.endpointProp(Props.URL)
+    val publicUrl: String = config.endpointProp(Props.PUBLIC_URL).ifBlank { url }
+    private val contentType: String = config.getString(Props.CONTENT_TYPE)
             ?: com.cognifide.cogboard.http.HttpConstants.CONTENT_TYPE_JSON
 
     private lateinit var consumer: MessageConsumer<JsonObject>
@@ -63,46 +64,46 @@ abstract class AsyncWidget(
     abstract fun handleResponse(responseBody: JsonObject)
 
     protected fun httpGet(url: String, requestId: String = "") {
-        vertx.eventBus().send(CogboardConstants.EVENT_HTTP_GET,
+        vertx.eventBus().send(Event.HTTP_GET,
                 basicProps(url)
-                        .put(CogboardConstants.PROP_REQUEST_ID, requestId)
-                        .put(CogboardConstants.PROP_TOKEN, token)
+                        .put(Props.REQUEST_ID, requestId)
+                        .put(Props.TOKEN, token)
         )
     }
 
     protected fun httpGetStatus(url: String) {
-        vertx.eventBus().send(CogboardConstants.EVENT_HTTP_CHECK,
+        vertx.eventBus().send(Event.HTTP_CHECK,
                 basicProps(url)
         )
     }
 
     protected fun httpPut(url: String, body: JsonObject) {
-        vertx.eventBus().send(CogboardConstants.EVENT_HTTP_PUT,
+        vertx.eventBus().send(Event.HTTP_PUT,
                 basicProps(url)
-                        .put(CogboardConstants.PROP_BODY, body)
+                        .put(Props.BODY, body)
         )
     }
 
     protected fun httpPost(url: String, body: JsonObject) {
-        vertx.eventBus().send(CogboardConstants.EVENT_HTTP_POST,
+        vertx.eventBus().send(Event.HTTP_POST,
                 basicProps(url)
-                        .put(CogboardConstants.PROP_BODY, body)
+                        .put(Props.BODY, body)
         )
     }
 
     protected fun httpDelete(url: String) {
-        vertx.eventBus().send(CogboardConstants.EVENT_HTTP_DELETE,
+        vertx.eventBus().send(Event.HTTP_DELETE,
                 basicProps(url)
         )
     }
 
     private fun basicProps(url: String): JsonObject {
         return JsonObject()
-                .put(CogboardConstants.PROP_URL, url)
-                .put(CogboardConstants.PROP_EVENT_ADDRESS, eventBusAddress)
-                .put(CogboardConstants.PROP_USER, user)
-                .put(CogboardConstants.PROP_PASSWORD, password)
-                .put(CogboardConstants.PROP_AUTHENTICATION_TYPES, Json.encode(authenticationTypes()))
-                .put(CogboardConstants.PROP_CONTENT_TYPE, contentType)
+                .put(Props.URL, url)
+                .put(Props.EVENT_ADDRESS, eventBusAddress)
+                .put(Props.USER, user)
+                .put(Props.PASSWORD, password)
+                .put(Props.AUTHENTICATION_TYPES, Json.encode(authenticationTypes()))
+                .put(Props.CONTENT_TYPE, contentType)
     }
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/BaseWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/BaseWidget.kt
index d1053ed9c..24985ebd4 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/BaseWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/BaseWidget.kt
@@ -9,7 +9,11 @@ import java.util.Date
 import java.util.Timer
 import java.util.TimerTask
 import kotlin.concurrent.timerTask
-import com.cognifide.cogboard.CogboardConstants as CC
+import com.cognifide.cogboard.CogboardConstants.Props
+import com.cognifide.cogboard.CogboardConstants.Event
+import com.cognifide.cogboard.CogboardConstants.EventType
+import com.cognifide.cogboard.CogboardConstants.StatusCode
+import com.cognifide.cogboard.CogboardConstants.Companion.DEFAULT_VALUES
 
 /**
  * Base widget class for extending - use this class if your new widget needs to do some computations on backend.
@@ -24,16 +28,16 @@ abstract class BaseWidget(
     private var consumer: MessageConsumer<JsonObject>? = null
 
     override val id: String
-        get() = config.getString(CC.PROP_ID)
+        get() = config.getString(Props.ID)
 
     override val type: String
-        get() = config.getString(CC.PROP_WIDGET_TYPE)
+        get() = config.getString(Props.WIDGET_TYPE)
 
     val eventBusAddress: String
         get() = "event.widget.$id"
 
     val schedulePeriod: Long
-        get() = config.getLong(CC.PROP_SCHEDULE_PERIOD) ?: CC.PROP_SCHEDULE_PERIOD_DEFAULT
+        get() = config.getLong(Props.SCHEDULE_PERIOD) ?: Props.SCHEDULE_PERIOD_DEFAULT
 
     var task: TimerTask? = null
 
@@ -41,7 +45,7 @@ abstract class BaseWidget(
      * Attach all default values to config
      */
     init {
-        CC.DEFAULT_VALUES.forEach {
+        DEFAULT_VALUES.forEach {
             if (!config.containsKey(it.key)) with(config) { put(it.key, it.value) }
         }
     }
@@ -58,13 +62,13 @@ abstract class BaseWidget(
      */
     override fun send(state: Any, dontWrap: Boolean) {
         val data = if (dontWrap && state is JsonObject) state
-        else JsonObject().put(CC.PROP_CONTENT, state)
+        else JsonObject().put(Props.CONTENT, state)
 
-        data.put(CC.PROP_ID, id)
-        data.put(CC.PROP_EVENT_TYPE, PROP_EVENT_TYPE_WIDGET_UPDATE)
-        data.getJsonObject(CC.PROP_CONTENT).attachUpdateDate()
-        boardService.saveContent(id, data.getJsonObject(CC.PROP_CONTENT))
-        vertx.eventBus().send(CC.EVENT_SEND_MESSAGE_TO_WEBSOCKET, data)
+        data.put(Props.ID, id)
+        data.put(Props.EVENT_TYPE, EventType.WIDGET_UPDATE)
+        data.getJsonObject(Props.CONTENT).attachUpdateDate()
+        boardService.saveContent(id, data.getJsonObject(Props.CONTENT))
+        vertx.eventBus().send(Event.SEND_MESSAGE_TO_WEBSOCKET, data)
     }
 
     /**
@@ -72,9 +76,9 @@ abstract class BaseWidget(
      */
     fun sendConfigurationError(cause: String = "") {
         send(JsonObject()
-                .put(CC.PROP_ERROR_MESSAGE, "Configuration Error")
-                .put(CC.PROP_ERROR_CAUSE, cause)
-                .put(CC.PROP_WIDGET_STATUS, Widget.Status.ERROR_CONFIGURATION)
+                .put(Props.ERROR_MESSAGE, "Configuration Error")
+                .put(Props.ERROR_CAUSE, cause)
+                .put(Props.WIDGET_STATUS, Widget.Status.ERROR_CONFIGURATION)
         )
     }
 
@@ -83,8 +87,8 @@ abstract class BaseWidget(
     }
 
     fun checkAuthorized(responseBody: JsonObject): Boolean {
-        val statusCode = responseBody.getInteger(CC.PROP_STATUS_CODE, CC.STATUS_CODE_200)
-        return if (statusCode == CC.STATUS_CODE_401) {
+        val statusCode = responseBody.getInteger(Props.STATUS_CODE, StatusCode.a200)
+        return if (statusCode == StatusCode.a401) {
             sendConfigurationError("Unauthorized")
             false
         } else true
@@ -94,7 +98,7 @@ abstract class BaseWidget(
      * Will start Schedule when schedulePeriod > 0, execute once otherwise
      */
     override fun start(): Widget {
-        if (config.getBoolean(CC.PROP_DISABLED) != true) {
+        if (config.getBoolean(Props.DISABLED) != true) {
             startWithSchedule()
         }
         return this
@@ -131,22 +135,21 @@ abstract class BaseWidget(
     private fun startWithSchedule() {
         if (schedulePeriod > 0L) {
             task = timerTask { updateState() }
-            Timer().schedule(task, CC.PROP_SCHEDULE_DELAY_DEFAULT, schedulePeriod * TO_SECONDS)
+            Timer().schedule(task, Props.SCHEDULE_DELAY_DEFAULT, schedulePeriod * TO_SECONDS)
         } else {
             updateState()
         }
     }
 
     private fun JsonObject.attachUpdateDate() {
-        this.put(CC.PROP_LAST_UPDATED, Date().time)
+        this.put(Props.LAST_UPDATED, Date().time)
     }
 
     protected fun JsonObject.endpointProp(prop: String): String {
-        return this.getJsonObject(CC.PROP_ENDPOINT_LOADED)?.getString(prop) ?: ""
+        return this.getJsonObject(Props.ENDPOINT_LOADED)?.getString(prop) ?: ""
     }
 
     companion object {
-        const val PROP_EVENT_TYPE_WIDGET_UPDATE = "widget-update"
         const val TO_SECONDS = 1000
     }
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/WidgetIndex.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/WidgetIndex.kt
index 5b727c854..70e8e7992 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/WidgetIndex.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/WidgetIndex.kt
@@ -1,6 +1,6 @@
 package com.cognifide.cogboard.widget
 
-import com.cognifide.cogboard.CogboardConstants as CC
+import com.cognifide.cogboard.CogboardConstants.Props
 import com.cognifide.cogboard.config.service.BoardsConfigService
 import com.cognifide.cogboard.storage.VolumeStorageFactory.appConfig
 import com.cognifide.cogboard.widget.type.AemBundleInfoWidget
@@ -60,8 +60,8 @@ class WidgetIndex {
                     .filter { !excludedWidgets.contains(it.key) }
                     .forEach {
                         widgetsJson.add(JsonObject()
-                                .put(CC.PROP_VALUE, it.value.simpleName)
-                                .put(CC.PROP_DISPLAY, it.key))
+                                .put(Props.VALUE, it.value.simpleName)
+                                .put(Props.DISPLAY, it.key))
                     }
             return widgetsJson
         }
@@ -70,7 +70,7 @@ class WidgetIndex {
          * @return new widget instance or default widget instance for all widgets that don't require any backend logic.
          */
         fun create(config: JsonObject, vertx: Vertx): BaseWidget {
-            val typeName = config.getString(CC.PROP_WIDGET_TYPE)
+            val typeName = config.getString(Props.WIDGET_TYPE)
             val widgetType = AVAILABLE_WIDGETS
                     .values
                     .stream()
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/ContentUpdateWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/ContentUpdateWidget.kt
index 7df1e27db..914f4f52e 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/ContentUpdateWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/ContentUpdateWidget.kt
@@ -14,7 +14,7 @@ class ContentUpdateWidget : RoutingHandlerFactory {
     override fun create(vertx: Vertx?, config: JsonObject?): Handler<RoutingContext> = Handler { event ->
         vertx
             ?.eventBus()
-            ?.publish(CogboardConstants.EVENT_UPDATE_WIDGET_CONTENT_CONFIG, event.body.toJsonObject())
+            ?.publish(CogboardConstants.Event.UPDATE_WIDGET_CONTENT_CONFIG, event.body.toJsonObject())
         event
             .response()
             .end(config?.getJsonObject("body", DEFAULT_NO_BODY)?.encode())
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/DeleteWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/DeleteWidget.kt
index 5d3dab857..5d757fb27 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/DeleteWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/DeleteWidget.kt
@@ -14,7 +14,7 @@ class DeleteWidget : RoutingHandlerFactory {
     override fun create(vertx: Vertx?, config: JsonObject?): Handler<RoutingContext> = Handler { event ->
         vertx
                 ?.eventBus()
-                ?.publish(CogboardConstants.EVENT_DELETE_WIDGET_CONFIG, event.body.toJsonObject())
+                ?.publish(CogboardConstants.Event.DELETE_WIDGET_CONFIG, event.body.toJsonObject())
         event.reroute("/api/session/refresh")
     }
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/UpdateWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/UpdateWidget.kt
index 2fb65badb..dfa3b2896 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/UpdateWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/UpdateWidget.kt
@@ -14,7 +14,7 @@ class UpdateWidget : RoutingHandlerFactory {
     override fun create(vertx: Vertx?, config: JsonObject?): Handler<RoutingContext> = Handler { event ->
         vertx
                 ?.eventBus()
-                ?.publish(CogboardConstants.EVENT_UPDATE_WIDGET_CONFIG, event.body.toJsonObject())
+                ?.publish(CogboardConstants.Event.UPDATE_WIDGET_CONFIG, event.body.toJsonObject())
         event.reroute("/api/session/refresh")
     }
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemBundleInfoWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemBundleInfoWidget.kt
index 8e7b05add..12d092fd6 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemBundleInfoWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemBundleInfoWidget.kt
@@ -6,7 +6,7 @@ import com.cognifide.cogboard.widget.Widget
 import io.vertx.core.Vertx
 import io.vertx.core.json.JsonArray
 import io.vertx.core.json.JsonObject
-import com.cognifide.cogboard.CogboardConstants as CC
+import com.cognifide.cogboard.CogboardConstants.Props
 
 class AemBundleInfoWidget(
     vertx: Vertx,
@@ -67,11 +67,11 @@ class AemBundleInfoWidget(
         val url = "$url/system/console/bundles"
 
         return JsonObject()
-            .put(CC.PROP_URL, url)
+            .put(Props.URL, url)
             .put(PROP_BUNDLE_STATUS, numericStatus)
             .put(PROP_EXCLUDED_BUNDLES, excludedBundles)
             .put(PROP_INACTIVE_BUNDLES, inactiveBundles)
-            .put(CC.PROP_WIDGET_STATUS, statusByNumbers(numericStatus))
+            .put(Props.WIDGET_STATUS, statusByNumbers(numericStatus))
     }
 
     private fun statusByNumbers(numericStatus: MutableMap<String, Int>): Widget.Status {
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemHealthcheckWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemHealthcheckWidget.kt
index 50077a8fe..7ee825fa9 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemHealthcheckWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemHealthcheckWidget.kt
@@ -1,6 +1,5 @@
 package com.cognifide.cogboard.widget.type
 
-import com.cognifide.cogboard.CogboardConstants
 import com.cognifide.cogboard.config.service.BoardsConfigService
 import com.cognifide.cogboard.widget.AsyncWidget
 import com.cognifide.cogboard.widget.Widget
@@ -10,6 +9,7 @@ import com.cognifide.cogboard.widget.Widget.Status.UNSTABLE
 import io.vertx.core.Vertx
 import io.vertx.core.json.JsonArray
 import io.vertx.core.json.JsonObject
+import com.cognifide.cogboard.CogboardConstants.Props
 
 class AemHealthcheckWidget(
     vertx: Vertx,
@@ -23,7 +23,7 @@ class AemHealthcheckWidget(
         if (checkAuthorized(responseBody)) {
             if (responseBody.containsKey("HealthCheck")) {
                 sendSuccess(responseBody)
-            } else sendConfigurationError(responseBody.getString(CogboardConstants.PROP_ERROR_CAUSE))
+            } else sendConfigurationError(responseBody.getString(Props.ERROR_CAUSE))
         }
     }
 
@@ -32,7 +32,7 @@ class AemHealthcheckWidget(
         val content = JsonObject()
         val status = attachHealthChecks(content, healthChecksResponse)
 
-        content.put(CogboardConstants.PROP_WIDGET_STATUS, status)
+        content.put(Props.WIDGET_STATUS, status)
 
         send(content)
     }
@@ -53,7 +53,7 @@ class AemHealthcheckWidget(
         var widgetStatus = OK
         val overviewUrl = "$publicUrl/$OVERVIEW_PATH"
         val result = JsonObject()
-        content.put(CogboardConstants.PROP_URL, overviewUrl)
+        content.put(Props.URL, overviewUrl)
         content.put("healthChecks", result)
 
         selectedHealthChecks
@@ -61,15 +61,15 @@ class AemHealthcheckWidget(
                 .map { it as String }
                 .forEach { healthcheckName ->
                     healthChecksResponse.getJsonObject(healthcheckName)?.let {
-                        val status = Widget.Status.from(it.getString(CogboardConstants.PROP_STATUS))
+                        val status = Widget.Status.from(it.getString(Props.STATUS))
                         val url = "$publicUrl/$DETAILS_PATH/$healthcheckName"
 
                         if (status == FAIL) widgetStatus = FAIL
                         if (status == UNSTABLE && widgetStatus == OK) widgetStatus = UNSTABLE
 
                         result.put(healthcheckName, JsonObject()
-                                .put(CogboardConstants.PROP_STATUS, status)
-                                .put(CogboardConstants.PROP_URL, url)
+                                .put(Props.STATUS, status)
+                                .put(Props.URL, url)
                         )
                     }
                 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidget.kt
index 4c37bfc64..2fcf863a6 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidget.kt
@@ -5,7 +5,7 @@ import com.cognifide.cogboard.widget.AsyncWidget
 import com.cognifide.cogboard.widget.Widget
 import io.vertx.core.Vertx
 import io.vertx.core.json.JsonObject
-import com.cognifide.cogboard.CogboardConstants as CC
+import com.cognifide.cogboard.CogboardConstants.Props
 
 class BambooDeploymentWidget(
     vertx: Vertx,
@@ -29,9 +29,9 @@ class BambooDeploymentWidget(
 
     private fun sendNeverDeployed() {
         send(JsonObject()
-                .put(CC.PROP_ERROR_MESSAGE, "Never Deployed")
-                .put(CC.PROP_ERROR_CAUSE, "")
-                .put(CC.PROP_WIDGET_STATUS, Widget.Status.UNKNOWN))
+                .put(Props.ERROR_MESSAGE, "Never Deployed")
+                .put(Props.ERROR_CAUSE, "")
+                .put(Props.WIDGET_STATUS, Widget.Status.UNKNOWN))
     }
 
     private fun sendSuccess(result: JsonObject) {
@@ -39,9 +39,9 @@ class BambooDeploymentWidget(
         val deploymentResultId = result.getInteger("id")
 
         result.apply {
-            put(CC.PROP_URL, constructUrl(deploymentResultId))
-            put(CC.PROP_RELEASE_NAME, deploymentVersionName)
-            put(CC.PROP_WIDGET_STATUS, getStatus(result))
+            put(Props.URL, constructUrl(deploymentResultId))
+            put(Props.RELEASE_NAME, deploymentVersionName)
+            put(Props.WIDGET_STATUS, getStatus(result))
             remove("items")
         }
 
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooPlanWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooPlanWidget.kt
index 40645e27f..fce78a77b 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooPlanWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooPlanWidget.kt
@@ -5,7 +5,7 @@ import com.cognifide.cogboard.widget.AsyncWidget
 import com.cognifide.cogboard.widget.Widget
 import io.vertx.core.Vertx
 import io.vertx.core.json.JsonObject
-import com.cognifide.cogboard.CogboardConstants as CC
+import com.cognifide.cogboard.CogboardConstants.Props
 
 class BambooPlanWidget(
     vertx: Vertx,
@@ -29,17 +29,17 @@ class BambooPlanWidget(
 
     private fun sendNeverBuilt() {
         send(JsonObject()
-                .put(CC.PROP_ERROR_MESSAGE, "Never Built")
-                .put(CC.PROP_ERROR_CAUSE, "")
-                .put(CC.PROP_WIDGET_STATUS, Widget.Status.UNKNOWN))
+                .put(Props.ERROR_MESSAGE, "Never Built")
+                .put(Props.ERROR_CAUSE, "")
+                .put(Props.WIDGET_STATUS, Widget.Status.UNKNOWN))
     }
 
     private fun sendSuccess(results: JsonObject) {
         results.getJsonArray("result")?.first().let {
             val result = it as JsonObject
 
-            result.put(CC.PROP_URL, extractUrl(result.getString("buildResultKey")))
-                    .put(CC.PROP_WIDGET_STATUS, Widget.Status.from(result.getString("state")))
+            result.put(Props.URL, extractUrl(result.getString("buildResultKey")))
+                    .put(Props.WIDGET_STATUS, Widget.Status.from(result.getString("state")))
 
             send(result)
         }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JenkinsJobWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JenkinsJobWidget.kt
index 1dbc54c2c..dcfc2961b 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JenkinsJobWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JenkinsJobWidget.kt
@@ -8,7 +8,7 @@ import com.cognifide.cogboard.widget.Widget
 import io.vertx.core.Vertx
 import io.vertx.core.json.JsonObject
 import kotlin.streams.toList
-import com.cognifide.cogboard.CogboardConstants as CC
+import com.cognifide.cogboard.CogboardConstants.Props
 
 class JenkinsJobWidget(
     vertx: Vertx,
@@ -37,8 +37,8 @@ class JenkinsJobWidget(
         else Widget.Status.from(lastBuild.getString("result", ""))
 
         lastBuild.put("branch", extractBranchInfo(lastBuild))
-            .put(CC.PROP_URL, lastBuild.getString(CC.PROP_URL, "").makeUrlPublic(publicUrl))
-            .put(CC.PROP_WIDGET_STATUS, status)
+            .put(Props.URL, lastBuild.getString(Props.URL, "").makeUrlPublic(publicUrl))
+            .put(Props.WIDGET_STATUS, status)
 
         send(lastBuild)
     }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JiraBucketsWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JiraBucketsWidget.kt
index 0da4836c5..a0cabe480 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JiraBucketsWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JiraBucketsWidget.kt
@@ -5,31 +5,30 @@ import com.cognifide.cogboard.widget.AsyncWidget
 import io.vertx.core.Vertx
 import io.vertx.core.json.JsonArray
 import io.vertx.core.json.JsonObject
-import com.cognifide.cogboard.CogboardConstants as CC
-
+import com.cognifide.cogboard.CogboardConstants.Props
 class JiraBucketsWidget(
     vertx: Vertx,
     config: JsonObject,
     serv: BoardsConfigService
 ) : AsyncWidget(vertx, config, serv) {
 
-    private val bucketQueries: JsonArray = config.getJsonArray(CC.PROP_BUCKET_QUERIES)
+    private val bucketQueries: JsonArray = config.getJsonArray(Props.BUCKET_QUERIES)
     private val buckets: JsonArray = JsonArray()
 
     init {
         bucketQueries.forEach {
             if (it is JsonObject) {
                 buckets.add(JsonObject()
-                        .put(CC.PROP_ID, it.getString(CC.PROP_ID))
-                        .put(CC.PROP_NAME, it.getString(CC.PROP_BUCKET_NAME))
-                        .put(CC.PROP_URL, createBucketUrl(it)))
+                        .put(Props.ID, it.getString(Props.ID))
+                        .put(Props.NAME, it.getString(Props.BUCKET_NAME))
+                        .put(Props.URL, createBucketUrl(it)))
             }
         }
     }
 
     override fun handleResponse(responseBody: JsonObject) {
         val totalIssues = responseBody.getInteger("total")
-        val bucketId = responseBody.getString(CC.PROP_REQUEST_ID)
+        val bucketId = responseBody.getString(Props.REQUEST_ID)
 
         (buckets.first { compareId(bucketId, it) } as JsonObject)
                 .put("issueCounts", totalIssues ?: "Error")
@@ -38,16 +37,16 @@ class JiraBucketsWidget(
     }
 
     private fun createBucketUrl(bucket: JsonObject) =
-            "${url}jira/issues/?jql=${bucket.getString(CC.PROP_JQL_QUERY)}&maxResults=0"
+            "${url}jira/issues/?jql=${bucket.getString(Props.JQL_QUERY)}&maxResults=0"
 
-    private fun compareId(bucketId: String?, it: Any?) = bucketId == (it as JsonObject).getString(CC.PROP_ID)
+    private fun compareId(bucketId: String?, it: Any?) = bucketId == (it as JsonObject).getString(Props.ID)
 
     override fun updateState() {
         if (url.isNotBlank()) {
             bucketQueries.list.forEach { bucketQuery ->
                 if (bucketQuery is JsonObject) {
-                    val bucketId = bucketQuery.getString(CC.PROP_ID)
-                    val jqlQuery = bucketQuery.getString(CC.PROP_JQL_QUERY)
+                    val bucketId = bucketQuery.getString(Props.ID)
+                    val jqlQuery = bucketQuery.getString(Props.JQL_QUERY)
                     httpGet(url = "$url/jira/rest/api/2/search/?jql=$jqlQuery&maxResults=0",
                             requestId = bucketId)
                 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/ServiceCheckWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/ServiceCheckWidget.kt
index 7c24fc064..cc59d40e4 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/ServiceCheckWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/ServiceCheckWidget.kt
@@ -1,17 +1,7 @@
 package com.cognifide.cogboard.widget.type
 
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_BODY
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_EXPECTED_RESPONSE_BODY
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_EXPECTED_STATUS_CODE
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_PATH
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_REQUEST_METHOD
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_STATUS_CODE
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_URL
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_WIDGET_STATUS
-import com.cognifide.cogboard.CogboardConstants.Companion.REQUEST_METHOD_DELETE
-import com.cognifide.cogboard.CogboardConstants.Companion.REQUEST_METHOD_GET
-import com.cognifide.cogboard.CogboardConstants.Companion.REQUEST_METHOD_POST
-import com.cognifide.cogboard.CogboardConstants.Companion.REQUEST_METHOD_PUT
+import com.cognifide.cogboard.CogboardConstants.Props
+import com.cognifide.cogboard.CogboardConstants.RequestMethod
 import com.cognifide.cogboard.config.service.BoardsConfigService
 import com.cognifide.cogboard.http.auth.AuthenticationType
 import com.cognifide.cogboard.widget.AsyncWidget
@@ -27,13 +17,13 @@ class ServiceCheckWidget(
     serv: BoardsConfigService
 ) : AsyncWidget(vertx, config, serv) {
 
-    private val expectedStatusCode = config.getInteger(PROP_EXPECTED_STATUS_CODE, 0)
-    private val requestMethod = config.getString(PROP_REQUEST_METHOD, EMPTY_STRING)
-    private val requestBody = config.getString(PROP_BODY, EMPTY_STRING)
-    private val expectedResponseBody = config.getString(PROP_EXPECTED_RESPONSE_BODY, EMPTY_STRING)
+    private val expectedStatusCode = config.getInteger(Props.EXPECTED_STATUS_CODE, 0)
+    private val requestMethod = config.getString(Props.REQUEST_METHOD, EMPTY_STRING)
+    private val requestBody = config.getString(Props.BODY, EMPTY_STRING)
+    private val expectedResponseBody = config.getString(Props.EXPECTED_RESPONSE_BODY, EMPTY_STRING)
     private val urlToCheck: String
-        get() = if (publicUrl.isNotBlank()) "$publicUrl${config.getString(PROP_PATH, EMPTY_STRING)}"
-        else config.getString(PROP_PATH, EMPTY_STRING)
+        get() = if (publicUrl.isNotBlank()) "$publicUrl${config.getString(Props.PATH, EMPTY_STRING)}"
+        else config.getString(Props.PATH, EMPTY_STRING)
 
     override fun authenticationTypes(): Set<AuthenticationType> {
         return setOf(AuthenticationType.TOKEN, AuthenticationType.BASIC)
@@ -42,8 +32,8 @@ class ServiceCheckWidget(
     override fun updateState() {
         if (urlToCheck.isNotBlank()) {
             when (requestMethod) {
-                REQUEST_METHOD_GET -> httpGet(url = urlToCheck)
-                REQUEST_METHOD_DELETE -> httpDelete(url = urlToCheck)
+                RequestMethod.GET -> httpGet(url = urlToCheck)
+                RequestMethod.DELETE -> httpDelete(url = urlToCheck)
                 else -> handlePostPut()
             }
         } else {
@@ -54,9 +44,9 @@ class ServiceCheckWidget(
     private fun handlePostPut() {
         try {
             val body = if (requestBody.isNotBlank()) JsonObject(requestBody) else JsonObject()
-            if (requestMethod == REQUEST_METHOD_PUT) {
+            if (requestMethod == RequestMethod.PUT) {
                 httpPut(url = urlToCheck, body = body)
-            } else if (requestMethod == REQUEST_METHOD_POST) {
+            } else if (requestMethod == RequestMethod.POST) {
                 httpPost(url = urlToCheck, body = body)
             }
         } catch (e: DecodeException) {
@@ -65,16 +55,16 @@ class ServiceCheckWidget(
     }
 
     override fun handleResponse(responseBody: JsonObject) {
-        responseBody.put(PROP_URL, urlToCheck)
-            .put(PROP_EXPECTED_RESPONSE_BODY, expectedResponseBody)
-            .put(PROP_EXPECTED_STATUS_CODE, expectedStatusCode)
-            .put(PROP_WIDGET_STATUS, getStatusResponse(responseBody))
+        responseBody.put(Props.URL, urlToCheck)
+            .put(Props.EXPECTED_RESPONSE_BODY, expectedResponseBody)
+            .put(Props.EXPECTED_STATUS_CODE, expectedStatusCode)
+            .put(Props.WIDGET_STATUS, getStatusResponse(responseBody))
 
         send(responseBody)
     }
 
     private fun getStatusResponse(responseBody: JsonObject): Widget.Status {
-        val statusCode = responseBody.getInteger(PROP_STATUS_CODE, 0)
+        val statusCode = responseBody.getInteger(Props.STATUS_CODE, 0)
         val isStatusEquals = Widget.Status.compare(expectedStatusCode, statusCode)
         val isBodyEquals = isResponseBodyEquals(responseBody)
 
@@ -85,7 +75,7 @@ class ServiceCheckWidget(
 
     private fun isResponseBodyEquals(responseBody: JsonObject): Boolean {
         return if (expectedResponseBody.isNotBlank()) {
-            responseBody.getString(PROP_BODY)?.contains(expectedResponseBody) == true
+            responseBody.getString(Props.BODY)?.contains(expectedResponseBody) == true
         } else expectedResponseBody.isEmpty()
     }
 }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/randompicker/RandomPickerWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/randompicker/RandomPickerWidget.kt
index a1301833e..8f5ad6dae 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/randompicker/RandomPickerWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/randompicker/RandomPickerWidget.kt
@@ -1,6 +1,5 @@
 package com.cognifide.cogboard.widget.type.randompicker
 
-import com.cognifide.cogboard.CogboardConstants
 import com.cognifide.cogboard.config.service.BoardsConfigService
 import com.cognifide.cogboard.storage.ContentRepository
 import com.cognifide.cogboard.widget.BaseWidget
@@ -8,6 +7,7 @@ import io.vertx.core.Vertx
 import io.vertx.core.json.JsonArray
 import io.vertx.core.json.JsonObject
 import java.time.LocalDateTime
+import com.cognifide.cogboard.CogboardConstants.Props
 import java.time.ZoneOffset
 
 class RandomPickerWidget(
@@ -22,7 +22,7 @@ class RandomPickerWidget(
     private val isDaily: Boolean = config.getBoolean(PROP_IS_DAILY, false)
 
     init {
-        super.config.put(CogboardConstants.PROP_SCHEDULE_PERIOD, SYNC_INTERVAL)
+        super.config.put(Props.SCHEDULE_PERIOD, SYNC_INTERVAL)
         createDynamicChangeSubscriber()?.handler { userEventCycle() }
     }
 
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/sonarqube/SonarQubeWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/sonarqube/SonarQubeWidget.kt
index e9f659d96..870666a55 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/sonarqube/SonarQubeWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/sonarqube/SonarQubeWidget.kt
@@ -1,6 +1,5 @@
 package com.cognifide.cogboard.widget.type.sonarqube
 
-import com.cognifide.cogboard.CogboardConstants
 import com.cognifide.cogboard.config.service.BoardsConfigService
 import com.cognifide.cogboard.http.auth.AuthenticationType
 import com.cognifide.cogboard.widget.AsyncWidget
@@ -8,6 +7,7 @@ import com.cognifide.cogboard.widget.Widget
 import io.vertx.core.Vertx
 import io.vertx.core.json.JsonArray
 import io.vertx.core.json.JsonObject
+import com.cognifide.cogboard.CogboardConstants.Props
 
 class SonarQubeWidget(
     vertx: Vertx,
@@ -39,8 +39,8 @@ class SonarQubeWidget(
             val content = data.copy()
 
             attachMetrics(content, it)
-            content.put(CogboardConstants.PROP_URL, version.getDashboardUrl(publicUrl, key, idNumber))
-                    .put(CogboardConstants.PROP_WIDGET_STATUS, extractStatus(it))
+            content.put(Props.URL, version.getDashboardUrl(publicUrl, key, idNumber))
+                    .put(Props.WIDGET_STATUS, extractStatus(it))
 
             send(content)
         }
diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/zabbix/ZabbixWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/zabbix/ZabbixWidget.kt
index ab99d4d7b..471ffdc0f 100644
--- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/zabbix/ZabbixWidget.kt
+++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/zabbix/ZabbixWidget.kt
@@ -1,6 +1,5 @@
 package com.cognifide.cogboard.widget.type.zabbix
 
-import com.cognifide.cogboard.CogboardConstants
 import com.cognifide.cogboard.config.service.BoardsConfigService
 import com.cognifide.cogboard.http.auth.AuthenticationType
 import com.cognifide.cogboard.widget.AsyncWidget
@@ -11,6 +10,7 @@ import io.vertx.core.json.JsonObject
 import io.vertx.core.logging.Logger
 import io.vertx.core.logging.LoggerFactory
 import kotlin.math.roundToLong
+import com.cognifide.cogboard.CogboardConstants.Props
 
 class ZabbixWidget(
     vertx: Vertx,
@@ -42,8 +42,8 @@ class ZabbixWidget(
 
     private fun attachCredentialsToBody(): JsonObject {
         val credentials = JsonObject()
-                .put(CogboardConstants.PROP_USER, user)
-                .put(CogboardConstants.PROP_PASSWORD, password)
+                .put(Props.USER, user)
+                .put(Props.PASSWORD, password)
         return prepareRequestBody(USER_LOGIN, credentials)
     }
 
@@ -76,7 +76,7 @@ class ZabbixWidget(
                 .put(IS_EXPANDED_CONTENT, hasExpandedContent(responseParams.extractValue(NAME)))
                 .put(NAME, responseParams.extractValue(NAME))
                 .put(HISTORY, modifyHistory(responseParams))
-                .put(CogboardConstants.PROP_WIDGET_STATUS, getStatusResponse(lastValue))
+                .put(Props.WIDGET_STATUS, getStatusResponse(lastValue))
         send(state)
     }
 
@@ -93,7 +93,7 @@ class ZabbixWidget(
     }
 
     private fun fetchHistoryFromContent(): Map<String, Any> {
-        val widgetId = config.getString(CogboardConstants.PROP_ID)
+        val widgetId = config.getString(Props.ID)
         val content = boardService.getContent(widgetId)
         return content.getJsonObject(HISTORY, JsonObject()).map
     }
@@ -127,8 +127,8 @@ class ZabbixWidget(
         LOGGER.error("Error message: $errorMessage; Cause: $errorCause")
 
         send(JsonObject()
-                .put(CogboardConstants.PROP_ERROR_MESSAGE, errorMessage)
-                .put(CogboardConstants.PROP_ERROR_CAUSE, errorCause))
+                .put(Props.ERROR_MESSAGE, errorMessage)
+                .put(Props.ERROR_CAUSE, errorCause))
     }
 
     private fun saveToken(token: String) {
diff --git a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/config/storage/VolumeStorageTest.kt b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/config/storage/VolumeStorageTest.kt
index 746bce950..8b023d694 100644
--- a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/config/storage/VolumeStorageTest.kt
+++ b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/config/storage/VolumeStorageTest.kt
@@ -1,9 +1,6 @@
 package com.cognifide.cogboard.config.storage
 
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_BOARDS
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_CREDENTIALS
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_ENDPOINTS
-import com.cognifide.cogboard.CogboardConstants.Companion.PROP_USER
+import com.cognifide.cogboard.CogboardConstants.Props
 import com.cognifide.cogboard.config.ConfigType
 import com.cognifide.cogboard.storage.VolumeStorage
 import io.vertx.core.json.JsonObject
@@ -19,10 +16,10 @@ internal class VolumeStorageTest {
     private val storagePath = VolumeStorageTest::class.java.getResource("/board").path
 
     private val configs = listOf(
-            Triple(ConfigType.ADMIN, "admin.json", PROP_USER),
-            Triple(ConfigType.CREDENTIALS, "credentials.json", PROP_CREDENTIALS),
-            Triple(ConfigType.BOARDS, "config.json", PROP_BOARDS),
-            Triple(ConfigType.ENDPOINTS, "endpoints.json", PROP_ENDPOINTS)
+            Triple(ConfigType.ADMIN, "admin.json", Props.USER),
+            Triple(ConfigType.CREDENTIALS, "credentials.json", Props.CREDENTIALS),
+            Triple(ConfigType.BOARDS, "config.json", Props.BOARDS),
+            Triple(ConfigType.ENDPOINTS, "endpoints.json", Props.ENDPOINTS)
     )
 
     @TestFactory
diff --git a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/WidgetIndexTest.kt b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/WidgetIndexTest.kt
index 27dc854ec..b3bce5368 100644
--- a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/WidgetIndexTest.kt
+++ b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/WidgetIndexTest.kt
@@ -1,6 +1,6 @@
 package com.cognifide.cogboard.widget
 
-import com.cognifide.cogboard.CogboardConstants as CC
+import com.cognifide.cogboard.CogboardConstants.Props
 import com.cognifide.cogboard.widget.type.ServiceCheckWidget
 import com.cognifide.cogboard.widget.type.WhiteSpaceWidget
 import com.cognifide.cogboard.widget.type.WidgetTestBase
@@ -43,12 +43,12 @@ class WidgetIndexTest : WidgetTestBase() {
         val widget = WidgetIndex.availableWidgets()
                 .stream()
                 .map { it as JsonObject }
-                .filter { it.getString(CC.PROP_DISPLAY) == "Zabbix" }
+                .filter { it.getString(Props.DISPLAY) == "Zabbix" }
                 .findFirst()
                 .orElse(JsonObject())
 
-        assertEquals("Zabbix", widget.getString(CC.PROP_DISPLAY))
-        assertEquals("ZabbixWidget", widget.getString(CC.PROP_VALUE))
+        assertEquals("Zabbix", widget.getString(Props.DISPLAY))
+        assertEquals("ZabbixWidget", widget.getString(Props.VALUE))
     }
 
     @Test
@@ -56,15 +56,15 @@ class WidgetIndexTest : WidgetTestBase() {
         val widget = WidgetIndex.availableWidgets()
                 .stream()
                 .map { it as JsonObject }
-                .filter { it.getString(CC.PROP_DISPLAY) == "Service Check" }
+                .filter { it.getString(Props.DISPLAY) == "Service Check" }
                 .findFirst()
                 .orElse(JsonObject())
 
-        assertEquals("Service Check", widget.getString(CC.PROP_DISPLAY))
-        assertEquals("ServiceCheckWidget", widget.getString(CC.PROP_VALUE))
+        assertEquals("Service Check", widget.getString(Props.DISPLAY))
+        assertEquals("ServiceCheckWidget", widget.getString(Props.VALUE))
     }
 
-    private fun config(type: String) = JsonObject().put(CC.PROP_WIDGET_TYPE, type)
+    private fun config(type: String) = JsonObject().put(Props.WIDGET_TYPE, type)
 
     override fun widgetName() = "not required"
 }
\ No newline at end of file
diff --git a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidgetTest.kt b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidgetTest.kt
index 09e02be42..df60fc818 100644
--- a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidgetTest.kt
+++ b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidgetTest.kt
@@ -1,6 +1,6 @@
 package com.cognifide.cogboard.widget.type
 
-import com.cognifide.cogboard.CogboardConstants
+import com.cognifide.cogboard.CogboardConstants.Props
 import io.vertx.core.json.JsonObject
 import org.junit.jupiter.api.Assertions
 import org.junit.jupiter.api.BeforeEach
@@ -13,7 +13,7 @@ class BambooDeploymentWidgetTest : WidgetTestBase() {
 
     override fun initWidget(): JsonObject =
             super.initWidget()
-                    .put(CogboardConstants.PROP_ENDPOINT_LOADED,
+                    .put(Props.ENDPOINT_LOADED,
                             JsonObject().put("url", "https://test.bamboo.com"))
 
     @BeforeEach
diff --git a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/WidgetTestBase.kt b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/WidgetTestBase.kt
index 3a5bb9b55..1cbed7d04 100644
--- a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/WidgetTestBase.kt
+++ b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/WidgetTestBase.kt
@@ -1,6 +1,6 @@
 package com.cognifide.cogboard.widget.type
 
-import com.cognifide.cogboard.CogboardConstants
+import com.cognifide.cogboard.CogboardConstants.Props
 import com.cognifide.cogboard.config.service.BoardsConfigService
 import com.cognifide.cogboard.storage.ContentRepository
 import io.vertx.core.Vertx
@@ -51,20 +51,20 @@ abstract class WidgetTestBase {
 
     fun captureWhatIsSent(eventBus: EventBus, captor: ArgumentCaptor<JsonObject>): Pair<JsonObject, JsonObject> {
         verify(eventBus).send(eq("cogboard.websocket.message"), captor.capture())
-        return Pair(captor.value, captor.value.getJsonObject(CogboardConstants.PROP_CONTENT))
+        return Pair(captor.value, captor.value.getJsonObject(Props.CONTENT))
     }
 
     fun assertStatus(expected: String, result: JsonObject) {
-        assertEquals(expected, result.getJsonObject(CogboardConstants.PROP_CONTENT)
-                .getString(CogboardConstants.PROP_WIDGET_STATUS))
+        assertEquals(expected, result.getJsonObject(Props.CONTENT)
+                .getString(Props.WIDGET_STATUS))
     }
 
     fun assertUpdateDatePresent(result: JsonObject) {
-        assertNotNull(result.getJsonObject(CogboardConstants.PROP_CONTENT)
-                .getLong(CogboardConstants.PROP_LAST_UPDATED))
+        assertNotNull(result.getJsonObject(Props.CONTENT)
+                .getLong(Props.LAST_UPDATED))
     }
 
     fun assertURL(expected: String, result: JsonObject) {
-        assertEquals(expected, result.getString(CogboardConstants.PROP_URL))
+        assertEquals(expected, result.getString(Props.URL))
     }
 }
diff --git a/cogboard-webapp/src/App.js b/cogboard-webapp/src/App.js
index a02ba2bbc..6923d0a06 100644
--- a/cogboard-webapp/src/App.js
+++ b/cogboard-webapp/src/App.js
@@ -14,7 +14,8 @@ import {
 import {
   saveDataSuccess,
   loginSuccess,
-  guestLoginSuccess
+  guestLoginSuccess,
+  refetchInitData
 } from './actions/actionCreators';
 import { getIsWaitingForNewVersion } from './selectors';
 import { useInterval } from './hooks';
@@ -28,6 +29,7 @@ import ServerErrorPage from './components/ServerErrorPage';
 
 function App() {
   const appInitialized = useSelector(({ app }) => app.initialized);
+  const refetchInitialData = useSelector(({ app }) => app.requiresRefetching);
   const dispatch = useDispatch();
   const isWaitingForNewVersion = useSelector(getIsWaitingForNewVersion);
   const pullingNewVersionInfoDelay = isWaitingForNewVersion
@@ -44,6 +46,12 @@ function App() {
     dispatch(fetchInitialData());
   }, [dispatch]);
 
+  useEffect(() => {
+    if (refetchInitialData) {
+      dispatch(fetchInitialData());
+    }
+  }, [refetchInitialData, dispatch]);
+
   useInterval(() => {
     if (!isWaitingForNewVersion) {
       dispatch(fetchAppInfo());
@@ -58,8 +66,9 @@ function App() {
 
         if (eventType === 'widget-update') {
           dispatch(updateWidgetContent(data));
-        } else if (eventType === 'notification-config-save') {
+        } else if (eventType === 'config-saved') {
           dispatch(saveDataSuccess());
+          dispatch(refetchInitData());
         } else if (eventType === 'new-version') {
           dispatch(pushNewVersionNotification(data));
         }
diff --git a/cogboard-webapp/src/actions/actionCreators.js b/cogboard-webapp/src/actions/actionCreators.js
index 5fb7e45e3..eeb14828d 100644
--- a/cogboard-webapp/src/actions/actionCreators.js
+++ b/cogboard-webapp/src/actions/actionCreators.js
@@ -15,7 +15,7 @@ import {
   SORT_WIDGETS,
   REORDER_BOARDS,
   DATA_CHANGED,
-  SAVE_DATA_START,
+  REFETCH_DATA,
   SAVE_DATA_SUCCESS,
   LOGIN_SUCCESS,
   GUEST_LOGIN_SUCCESS,
@@ -65,6 +65,10 @@ export const receiveData = state => ({
   payload: state
 });
 
+export const refetchInitData = () => ({
+  type: REFETCH_DATA
+});
+
 export const requestUpdate = id => ({
   type: REQUEST_UPDATE,
   payload: id
@@ -129,10 +133,6 @@ export const dataChanged = () => ({
   type: DATA_CHANGED
 });
 
-export const saveDataStart = () => ({
-  type: SAVE_DATA_START
-});
-
 export const saveDataSuccess = () => ({
   type: SAVE_DATA_SUCCESS
 });
diff --git a/cogboard-webapp/src/actions/thunks.js b/cogboard-webapp/src/actions/thunks.js
index e19027f96..7224d78d0 100644
--- a/cogboard-webapp/src/actions/thunks.js
+++ b/cogboard-webapp/src/actions/thunks.js
@@ -56,6 +56,7 @@ export const fetchInitialData = () => dispatch => {
   return fetchData(URL.LOAD_DATA).then(data => {
     dispatch(receiveData(data));
     dispatch(initBoardProps());
+    dispatch(pushNotification(NOTIFICATIONS.CONFIG_LOADED()));
   }, console.error);
 };
 
diff --git a/cogboard-webapp/src/actions/types.js b/cogboard-webapp/src/actions/types.js
index 37175e867..93823f81d 100644
--- a/cogboard-webapp/src/actions/types.js
+++ b/cogboard-webapp/src/actions/types.js
@@ -1,6 +1,7 @@
 export const INIT_BOARD_PROPS = 'INIT_BOARD_PROPS';
 export const REQUEST_DATA = 'REQUEST_DATA';
 export const RECEIVE_DATA = 'RECEIVE_DATA';
+export const REFETCH_DATA = 'REFETCH_DATA';
 export const REQUEST_UPDATE = 'REQUEST_UPDATE';
 export const UPDATE_WIDGET = 'UPDATE_WIDGET';
 export const ADD_BOARD = 'ADD_BOARD';
diff --git a/cogboard-webapp/src/constants/index.js b/cogboard-webapp/src/constants/index.js
index b20cc9aeb..277842657 100644
--- a/cogboard-webapp/src/constants/index.js
+++ b/cogboard-webapp/src/constants/index.js
@@ -331,5 +331,10 @@ export const NOTIFICATIONS = {
     type: 'error',
     message: message,
     duration: 3000
+  }),
+  CONFIG_LOADED: () => ({
+    type: 'info',
+    message: 'Config Loaded',
+    duration: 3000
   })
 };
diff --git a/cogboard-webapp/src/reducers/app/index.js b/cogboard-webapp/src/reducers/app/index.js
index 69956f244..afe616c1e 100644
--- a/cogboard-webapp/src/reducers/app/index.js
+++ b/cogboard-webapp/src/reducers/app/index.js
@@ -8,10 +8,12 @@ import loginErrorMessage from './loginErrorMessage';
 import isAuthenticated from './isAuthenticated';
 import guestLogin from './guestLogin';
 import logoutReasonMessage from './logoutReasonMessage';
+import requiresRefetching from './requiresRefetching';
 import settings from './settings';
 
 const app = combineReducers({
   initialized,
+  requiresRefetching,
   dataFetching,
   isDataChanged,
   isDataSaving,
diff --git a/cogboard-webapp/src/reducers/app/requiresRefetching.js b/cogboard-webapp/src/reducers/app/requiresRefetching.js
new file mode 100644
index 000000000..7c2912152
--- /dev/null
+++ b/cogboard-webapp/src/reducers/app/requiresRefetching.js
@@ -0,0 +1,7 @@
+import { REFETCH_DATA } from '../../actions/types';
+
+const requiresRefetching = (state = false, { type }) => {
+  return type === REFETCH_DATA;
+};
+
+export default requiresRefetching;
diff --git a/cogboard-webapp/src/reducers/boards/allBoards.js b/cogboard-webapp/src/reducers/boards/allBoards.js
index aae6ebdbd..887e930a9 100644
--- a/cogboard-webapp/src/reducers/boards/allBoards.js
+++ b/cogboard-webapp/src/reducers/boards/allBoards.js
@@ -11,7 +11,7 @@ const receiveData = (state, { payload }) => {
     boards: { allBoards }
   } = payload;
 
-  return [...state, ...allBoards];
+  return [...allBoards];
 };
 
 const addBoard = (state, { payload }) => {
diff --git a/detekt.yml b/detekt.yml
index ca171e8e5..6dec38a35 100644
--- a/detekt.yml
+++ b/detekt.yml
@@ -504,7 +504,7 @@ style:
     active: false
   ReturnCount:
     active: true
-    max: 2
+    max: 3
     excludedFunctions: "equals"
     excludeLabeled: false
     excludeReturnFromLambda: true