diff --git a/Jenkinsfile b/Jenkinsfile
index e777517..e3b1599 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -99,19 +99,19 @@
         stage('Generate doc') {
             when {
                 expression {
-                    env.BRANCH_NAME ==~ /(1.4.x|1.5.x|master)/
+                    env.BRANCH_NAME ==~ /(unomi-1.4.x|unomi-1.5.x|master)/
                 }
             }
             steps {
                 echo 'Generate documentation'
-                sh 'mvn javadoc:aggregate source:aggregate -Pdocs'
+                sh 'mvn javadoc:aggregate source:aggregate'
             }
         }
 
         stage('Deploy') {
             when {
                 expression {
-                    env.BRANCH_NAME ==~ /(1.4.x|1.5.x|master)/
+                    env.BRANCH_NAME ==~ /(unomi-1.4.x|unomi-1.5.x|master)/
                 }
             }
             steps {
@@ -126,7 +126,7 @@
         // If this build failed, send an email to the list.
         failure {
             script {
-                if(env.BRANCH_NAME == "1.4.x" || env.BRANCH_NAME == "1.5.x" || env.BRANCH_NAME == "master") {
+                if(env.BRANCH_NAME == "unomi-1.4.x" || env.BRANCH_NAME == "unomi-1.5.x" || env.BRANCH_NAME == "master") {
                     emailext(
                             subject: "[BUILD-FAILURE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
                             body: """
@@ -143,7 +143,7 @@
         // If this build didn't fail, but there were failing tests, send an email to the list.
         unstable {
             script {
-                if(env.BRANCH_NAME == "1.4.x" || env.BRANCH_NAME == "1.5.x" || env.BRANCH_NAME == "master") {
+                if(env.BRANCH_NAME == "unomi-1.4.x" || env.BRANCH_NAME == "unomi-1.5.x" || env.BRANCH_NAME == "master") {
                     emailext(
                             subject: "[BUILD-UNSTABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
                             body: """
@@ -163,7 +163,7 @@
             // (in this cae we probably don't have to do any post-build analysis)
             deleteDir()
             script {
-                if ((env.BRANCH_NAME == "1.4.x" || env.BRANCH_NAME == "1.5.x" || env.BRANCH_NAME == "master") && (currentBuild.previousBuild != null) && (currentBuild.previousBuild.result != 'SUCCESS')) {
+                if ((env.BRANCH_NAME == "unomi-1.4.x" || env.BRANCH_NAME == "unomi-1.5.x" || env.BRANCH_NAME == "master") && (currentBuild.previousBuild != null) && (currentBuild.previousBuild.result != 'SUCCESS')) {
                     emailext (
                             subject: "[BUILD-STABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
                             body: """
diff --git a/Jenkinsfile-jdk11 b/Jenkinsfile-jdk11
index dd3f5d2..e9685ae 100644
--- a/Jenkinsfile-jdk11
+++ b/Jenkinsfile-jdk11
@@ -95,30 +95,6 @@
                 sh 'mvn -pl itests clean install -Pintegration-tests'
             }
         }
-
-        stage('Generate doc') {
-            when {
-                expression {
-                    env.BRANCH_NAME ==~ /(1.4.x|1.5.x|master)/
-                }
-            }
-            steps {
-                echo 'Generate documentation'
-                sh 'mvn javadoc:aggregate source:aggregate -Pdocs'
-            }
-        }
-
-        stage('Deploy') {
-            when {
-                expression {
-                    env.BRANCH_NAME ==~ /(1.4.x|1.5.x|master)/
-                }
-            }
-            steps {
-                echo 'Deploying'
-                sh 'mvn deploy -DskipTests'
-            }
-        }
     }
 
     // Do any post build stuff ... such as sending emails depending on the overall build result.
@@ -126,7 +102,7 @@
         // If this build failed, send an email to the list.
         failure {
             script {
-                if(env.BRANCH_NAME == "1.4.x" || env.BRANCH_NAME == "1.5.x" || env.BRANCH_NAME == "master") {
+                if(env.BRANCH_NAME == "unomi-1.4.x" || env.BRANCH_NAME == "unomi-1.5.x" || env.BRANCH_NAME == "master") {
                     emailext(
                             subject: "[BUILD-FAILURE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
                             body: """
@@ -143,7 +119,7 @@
         // If this build didn't fail, but there were failing tests, send an email to the list.
         unstable {
             script {
-                if(env.BRANCH_NAME == "1.4.x" || env.BRANCH_NAME == "1.5.x" || env.BRANCH_NAME == "master") {
+                if(env.BRANCH_NAME == "unomi-1.4.x" || env.BRANCH_NAME == "unomi-1.5.x" || env.BRANCH_NAME == "master") {
                     emailext(
                             subject: "[BUILD-UNSTABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
                             body: """
@@ -163,7 +139,7 @@
             // (in this cae we probably don't have to do any post-build analysis)
             deleteDir()
             script {
-                if ((env.BRANCH_NAME == "1.4.x" || env.BRANCH_NAME == "1.5.x" || env.BRANCH_NAME == "master") && (currentBuild.previousBuild != null) && (currentBuild.previousBuild.result != 'SUCCESS')) {
+                if ((env.BRANCH_NAME == "unomi-1.4.x" || env.BRANCH_NAME == "unomi-1.5.x" || env.BRANCH_NAME == "master") && (currentBuild.previousBuild != null) && (currentBuild.previousBuild.result != 'SUCCESS')) {
                     emailext (
                             subject: "[BUILD-STABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
                             body: """
