diff --git a/src/com/mirantis/mk/Common.groovy b/src/com/mirantis/mk/Common.groovy
index 8c0b56e..dbff286 100644
--- a/src/com/mirantis/mk/Common.groovy
+++ b/src/com/mirantis/mk/Common.groovy
@@ -311,3 +311,23 @@
         }
     }
 }
+
+/**
+ * Execute linux command and catch nth element
+ * @param cmd command to execute
+ * @param index index to retrieve
+ * @return index-th element
+ */
+
+def cutOrDie(cmd, index)
+{
+    def common = new com.mirantis.mk.Common()
+    def output
+    try {
+      output = sh(script: cmd, returnStdout: true)
+      def result = output.tokenize(" ")[index]
+      return result;
+    } catch (Exception e) {
+      common.errorMsg("Failed to execute cmd: ${cmd}\n output: ${output}")
+    }
+}
\ No newline at end of file
diff --git a/src/com/mirantis/mk/Debian.groovy b/src/com/mirantis/mk/Debian.groovy
index acd225a..80bfea9 100644
--- a/src/com/mirantis/mk/Debian.groovy
+++ b/src/com/mirantis/mk/Debian.groovy
@@ -152,3 +152,59 @@
             apt-get update && apt-get install -y lintian &&
             lintian -Ii -E --pedantic --profile=${profile} ${changes}'""")
 }
+
+/*
+ * Import gpg key
+ *
+ * @param privateKeyCredId   Public key jenkins credential id
+ */
+def importGpgKey(privateKeyCredId)
+{
+    def common = new com.mirantis.mk.Common()
+    def workspace = common.getWorkspace()
+    def privKey = common.getCredentials(privateKeyCredId, "key")
+    def private_key = privKey.privateKeySource.privateKey
+    writeFile("${workspace}/private.key", private_key)
+    sh(script: "gpg --no-tty --allow-secret-key-import --homedir ${workspace} --import ./private.key")
+}
+
+/*
+ * upload source package to launchpad
+ *
+ * @param ppaRepo   ppa repository on launchpad
+ * @param dirPath repository containing the source packages
+ */
+
+def uploadPpa(ppaRepo, dirPath, privateKeyCredId) {
+
+   def common = new com.mirantis.mk.Common()
+   def workspace = common.getWorkspace()
+   def gpg_key_id = common.getCredentials(privateKeyCredId, "key").username
+
+   dir(dirPath)
+   {
+       def images = findFiles(glob: "*.orig*.tar.gz")
+       for (int i = 0; i < images.size(); ++i) {
+          def name = images[i].getName()
+          def orig_sha1 = common.cutOrDie("sha1sum ${name}", 0)
+          def orig_sha256 = common.cutOrDie("sha256sum ${name}", 0)
+          def orig_md5 = common.cutOrDie("md5sum ${name}", 0)
+          def orig_size = common.cutOrDie("ls -l ${name}", 4)
+
+          def retval = sh(script: "wget --quiet -O orig-tmp https://launchpad.net/ubuntu/", returnStatus: true)
+          if (retval == 0) {
+             sh("mv orig-tmp ${name}")
+             def new_sha1 = common.cutOrDie("sha1sum ${name}", 0)
+             def new_sha256 = common.cutOrDie("sha256sum ${name}", 0)
+             def new_md5 = common.cutOrDie("md5sum ${name}", 0)
+             def new_size = common.cutOrDie("ls -l ${name}", 4)
+
+             sh("sed -i -e s,$orig_sha1,$new_sha1,g -e s,$orig_sha256,$new_sha256,g -e s,$orig_size,$new_size,g -e s,$orig_md5,$new_md5,g *.dsc")
+             sh("sed -i -e s,$orig_sha1,$new_sha1,g -e s,$orig_sha256,$new_sha256,g -e s,$orig_size,$new_size,g -e s,$orig_md5,$new_md5,g *.changes")
+          }
+
+          sh("debsign --re-sign -k ${gpg_key_id} *.changes")
+          sh("dput -f \"ppa:${ppaRepo}\" *.changes")
+        }
+    }
+}
\ No newline at end of file
