diff --git a/src/com/mirantis/mk/DockerImageScanner.groovy b/src/com/mirantis/mk/DockerImageScanner.groovy
index 14acc3c..c17bb15 100644
--- a/src/com/mirantis/mk/DockerImageScanner.groovy
+++ b/src/com/mirantis/mk/DockerImageScanner.groovy
@@ -5,23 +5,23 @@
 import groovy.json.JsonSlurper
 
 def callREST (String uri, String auth,
-			  String method = 'GET', String message = null) {
-	String authEnc = auth.bytes.encodeBase64()
-	def req = new URL(uri).openConnection()
-	req.setRequestMethod(method)
-	req.setRequestProperty('Content-Type', 'application/json')
-	req.setRequestProperty('Authorization', "Basic ${authEnc}")
-	if (message) {
-		req.setDoOutput(true)
-		req.getOutputStream().write(message.getBytes('UTF-8'))
-	}
-	Integer responseCode = req.getResponseCode()
-	String responseText = ''
-	if (responseCode == 200 || responseCode == 201) {
-		responseText = req.getInputStream().getText()
-	}
-	req = null
-	return [ 'responseCode': responseCode, 'responseText': responseText ]
+              String method = 'GET', String message = null) {
+    String authEnc = auth.bytes.encodeBase64()
+    def req = new URL(uri).openConnection()
+    req.setRequestMethod(method)
+    req.setRequestProperty('Content-Type', 'application/json')
+    req.setRequestProperty('Authorization', "Basic ${authEnc}")
+    if (message) {
+        req.setDoOutput(true)
+        req.getOutputStream().write(message.getBytes('UTF-8'))
+    }
+    Integer responseCode = req.getResponseCode()
+    String responseText = ''
+    if (responseCode == 200 || responseCode == 201) {
+        responseText = req.getInputStream().getText()
+    }
+    req = null
+    return [ 'responseCode': responseCode, 'responseText': responseText ]
 }
 
 def getTeam (String image = '') {
@@ -260,3 +260,23 @@
             }
     }
 }
+
+def find_cves_by_severity(String reportJsonContent, String Severity) {
+    def cves = []
+    def reportJSON = new JsonSlurper().parseText(reportJsonContent)
+    reportJSON.each{
+        image ->
+            image.value.each{
+                pkg ->
+                    pkg.value.each{
+                        cve ->
+                            if (cve[2]) {
+                                if (cve[1].contains(Severity)) {
+                                    cves.add("${pkg.key} ${cve[0]} (${cve[2]})")
+                                }
+                            }
+                    }
+            }
+    }
+    return cves
+}
