diff --git a/src/com/mirantis/mk/Gerrit.groovy b/src/com/mirantis/mk/Gerrit.groovy
index 410fd69..ad8ed52 100644
--- a/src/com/mirantis/mk/Gerrit.groovy
+++ b/src/com/mirantis/mk/Gerrit.groovy
@@ -148,6 +148,28 @@
     return common.parseJSON(ssh.agentSh(String.format("ssh -p 29418 %s@%s gerrit query --format=JSON change:%s", gerritName, gerritHost, gerritChangeNumber)))
 }
 
+/**
+ * Returns list of Gerrit trigger requested builds
+ * @param allBuilds list of all builds of some job
+ * @param gerritChange gerrit change number
+ * @param excludePatchset gerrit patchset number which will be excluded from builds, optional null
+ */
+@NonCPS
+def getGerritTriggeredBuilds(allBuilds, gerritChange, excludePatchset = null){
+    return allBuilds.findAll{job ->
+        def cause = job.causes[0]
+        if(cause instanceof com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritCause &&
+           cause.getEvent() instanceof com.sonymobile.tools.gerrit.gerritevents.dto.events.PatchsetCreated){
+            if(excludePatchset == null || excludePatchset == 0){
+                return cause.event.change.number.equals(String.valueOf(gerritChange))
+            }else{
+                return cause.event.change.number.equals(String.valueOf(gerritChange)) && !cause.event.patchSet.number.equals(String.valueOf(excludePatchset))
+            }
+        }
+        return false
+    }
+}
+
 @NonCPS
 def _getGerritParamsFromUrl(gitUrl){
     def gitUrlPattern = Pattern.compile("(.+):\\/\\/(.+)@(.+):(.+)\\/(.+)")
diff --git a/src/com/mirantis/mk/Jenkins.groovy b/src/com/mirantis/mk/Jenkins.groovy
new file mode 100644
index 0000000..f86b423
--- /dev/null
+++ b/src/com/mirantis/mk/Jenkins.groovy
@@ -0,0 +1,16 @@
+package com.mirantis.mk
+
+/**
+ *
+ * Jenkins common functions
+ *
+ */
+
+/**
+ * Get Jenkins job running builds
+ * @param jobName job name
+ * @return list of running builds
+ */
+def getJobRunningBuilds(jobName){
+  return Jenkins.instance.items.find{it -> it.name.equals(jobName)}.builds.findAll{build -> build.isBuilding()}
+}
\ No newline at end of file
