diff --git a/docker-mirror-images.groovy b/docker-mirror-images.groovy
index db37364..dc88762 100644
--- a/docker-mirror-images.groovy
+++ b/docker-mirror-images.groovy
@@ -76,7 +76,6 @@
                             sh("docker push ${targetImageFull}")
                         }
                     }
-                    def buildTime = new Date().format("yyyyMMdd-HH:mm:ss.SSS", TimeZone.getTimeZone('UTC'))
                     if (targetImageFull.contains(externalMarker)) {
                         external = true
                     }
@@ -95,23 +94,22 @@
                         // exactly one, which we pushing now
                         guessImage = targetImageFull.replace(':', '/').replace(targetRegistry, '')
                         ArrayList img_data = new JsonSlurper().parseText(ret)['results']
-                        def imgUrl = img_data*.uri.find { it.contains(guessImage) } - '/manifest.json'
-                        artifactoryProperties = [
-                            'com.mirantis.targetTag'    : env.IMAGE_TAG,
-                            'com.mirantis.uniqueImageId': unique_image_id,
-                        ]
-                        if (external) {
-                            artifactoryProperties << ['com.mirantis.externalImage': external]
-                        }
-                        // Call pipeline-library routine to set properties
-                        def mcp_artifactory = new com.mirantis.mcp.MCPArtifactory()
-                        def historyProperties = mcp_artifactory.getPropertiesForArtifact(imgUrl).get('com.mirantis.versionHistory', [])
-                        historyProperties.add("${buildTime}%5C=${sourceImage}")
-                        // %5C - backslash symbol is needed
-                        artifactoryProperties << [ 'com.mirantis.versionHistory': historyProperties.join(',') ]
-                        common.infoMsg("artifactoryProperties=> ${artifactoryProperties}")
-                        common.retry(3, 5) {
-                            mcp_artifactory.setProperties(imgUrl, artifactoryProperties)
+                        img_data*.uri.each { imgUrl ->
+                            if (imgUrl.contains(guessImage)) {
+                                artifactoryProperties = [
+                                    'com.mirantis.targetTag'    : env.IMAGE_TAG,
+                                    'com.mirantis.uniqueImageId': unique_image_id,
+                                ]
+                                if (external) {
+                                    artifactoryProperties << ['com.mirantis.externalImage': external]
+                                }
+                                common.infoMsg("artifactoryProperties=> ${artifactoryProperties}")
+                                // Call pipeline-library routine to set properties
+                                def mcp_artifactory = new com.mirantis.mcp.MCPArtifactory()
+                                common.retry(3, 5) {
+                                    mcp_artifactory.setProperties(imgUrl - '/manifest.json', artifactoryProperties)
+                                }
+                            }
                         }
                     }
                 }
