diff --git a/generate-cookiecutter-products.groovy b/generate-cookiecutter-products.groovy
index 97f8829..fe85d37 100644
--- a/generate-cookiecutter-products.groovy
+++ b/generate-cookiecutter-products.groovy
@@ -93,7 +93,6 @@
         def context = globalVariatorsUpdate()
         def RequesterEmail = context.get('email_address', '')
         def templateEnv = "${env.WORKSPACE}/template"
-        // modelEnv - this is reclass root, aka /srv/salt/reclass
         def modelEnv = "${env.WORKSPACE}/model"
         def testEnv = "${env.WORKSPACE}/test"
         def pipelineEnv = "${env.WORKSPACE}/pipelines"
@@ -120,7 +119,7 @@
             }
             stage('Create empty reclass model') {
                 dir(path: modelEnv) {
-                    sh 'rm -rfv .git; git init'
+                    sh "rm -rfv .git; git init"
                     sshagent(credentials: [gerritCredentials]) {
                         sh "git submodule add ${context['shared_reclass_url']} 'classes/system'"
                     }
@@ -131,7 +130,7 @@
                     extensions       : [[$class: 'RelativeTargetDirectory', relativeTargetDir: systemEnv]],
                     userRemoteConfigs: [[url: context['shared_reclass_url'], refspec: context['shared_reclass_branch'], credentialsId: gerritCredentials],],
                 ])
-                git.commitGitChanges(modelEnv, 'Added new shared reclass submodule', "${user}@localhost", "${user}")
+                git.commitGitChanges(modelEnv, "Added new shared reclass submodule", "${user}@localhost", "${user}")
             }
 
             stage('Generate model') {
@@ -162,20 +161,9 @@
                     if (context.get('cfg_failsafe_ssh_public_key')) {
                         writeFile file: 'failsafe-ssh-key.pub', text: context['cfg_failsafe_ssh_public_key']
                     }
-                    if (!fileExists(new File(templateEnv, 'tox.ini').toString())) {
-                        python.setupCookiecutterVirtualenv(cutterEnv)
-                        python.generateModel(common2.dumpYAML(['default_context': context]), 'default_context', context['salt_master_hostname'], cutterEnv, modelEnv, templateEnv, false)
-                    } else {
-                        // tox-based CC generated structure of reclass,from the root. Otherwise for bw compat, modelEnv
-                        // still expect only lower lvl of project, aka model/classes/cluster/XXX/. So,lets dump result into
-                        // temp dir, and then copy it over initial structure.
-                        reclassTempRootDir = sh(script: "mktemp -d -p ${env.WORKSPACE}", returnStdout: true).trim()
-                        python.generateModel(common2.dumpYAML(['default_context': context]), 'default_context', context['salt_master_hostname'], cutterEnv, reclassTempRootDir, templateEnv, false)
-                        dir(modelEnv) {
-                            common.warningMsg('Forming reclass-root structure...')
-                            sh("cp -ra ${reclassTempRootDir}/reclass/* .")
-                        }
-                    }
+                    python.setupCookiecutterVirtualenv(cutterEnv)
+                    // FIXME refactor generateModel
+                    python.generateModel(common2.dumpYAML(['default_context': context]), 'default_context', context['salt_master_hostname'], cutterEnv, modelEnv, templateEnv, false)
                     git.commitGitChanges(modelEnv, "Create model ${context['cluster_name']}", "${user}@localhost", "${user}")
                 }
             }
@@ -197,7 +185,7 @@
                             'distribRevision'    : distribRevision,
                             'dockerContainerName': DockerCName,
                             'testContext'        : 'salt-model-node',
-                            'dockerExtraOpts'    : ['--memory=3g']
+                            'dockerExtraOpts'    : [ '--memory=3g' ]
                         ]
                         testResult = saltModelTesting.testNode(config)
                         common.infoMsg("Test finished: SUCCESS")
diff --git a/test-cookiecutter-reclass.groovy b/test-cookiecutter-reclass.groovy
index 2090abb..8076041 100644
--- a/test-cookiecutter-reclass.groovy
+++ b/test-cookiecutter-reclass.groovy
@@ -116,7 +116,7 @@
         common.infoMsg("StepPrepareGit: ${gerrit_data}")
         // fetch needed sources
         dir(templateEnvFolder) {
-            if (!gerrit_data['gerritRefSpec']) {
+            if (! gerrit_data['gerritRefSpec']) {
                 // Get clean HEAD
                 gerrit_data['useGerritTriggerBuildChooser'] = false
             }
@@ -133,27 +133,7 @@
         for (contextFile in _contextFileList) {
             def basename = common.GetBaseName(contextFile, '.yml')
             def context = readFile(file: "${_templateEnvDir}/contexts/${contextFile}")
-            if (!fileExists(new File(_templateEnvDir, 'tox.ini').toString())) {
-                common.warningMsg('Forming NEW reclass-root structure...')
-                python.generateModel(context, basename, 'cfg01', _virtualenv, "${_templateEnvDir}/model", _templateEnvDir)
-            } else {
-                // tox-based CC generated structure of reclass,from the root. Otherwise for bw compat, modelEnv
-                // still expect only lower lvl of project, aka model/classes/cluster/XXX/. So,lets dump result into
-                // temp dir, and then copy it over initial structure.
-                def reclassTempRootDir = sh(script: "mktemp -d -p ${env.WORKSPACE}", returnStdout: true).trim()
-                python.generateModel(context, basename, 'cfg01', _virtualenv, reclassTempRootDir, _templateEnvDir)
-                dir("${_templateEnvDir}/model/${basename}/") {
-                    if (fileExists(new File(reclassTempRootDir, 'reclass').toString())) {
-                        common.warningMsg('Forming NEW reclass-root structure...')
-                        sh("cp -ra ${reclassTempRootDir}/reclass/* .")
-                    } else {
-                        // those hack needed only for period release/2019.2.0 => current patch.
-                        common.warningMsg('Forming OLD reclass-root structure...')
-                        sh("mkdir -p classes/cluster/ ; cd classes/cluster/; cp -ra ${reclassTempRootDir}/* .")
-                    }
-                }
-            }
-            ///
+            python.generateModel(context, basename, 'cfg01', _virtualenv, "${_templateEnvDir}/model", _templateEnvDir)
         }
     }
 }
