diff --git a/compiler/decompiler/src/org/jetbrains/kotlin/decompiler/DecompileIrTree.kt b/compiler/decompiler/src/org/jetbrains/kotlin/decompiler/DecompileIrTree.kt
index 325c7a1..15f3395 100644
--- a/compiler/decompiler/src/org/jetbrains/kotlin/decompiler/DecompileIrTree.kt
+++ b/compiler/decompiler/src/org/jetbrains/kotlin/decompiler/DecompileIrTree.kt
@@ -5,6 +5,7 @@
 
 package org.jetbrains.kotlin.decompiler
 
+import org.jetbrains.kotlin.builtins.isFunctionTypeOrSubtype
 import org.jetbrains.kotlin.decompiler.util.*
 import org.jetbrains.kotlin.decompiler.util.name
 import org.jetbrains.kotlin.descriptors.ClassKind
@@ -38,6 +39,33 @@
 
     companion object {
         val irFileNamesToImportedDeclarationsMap = mutableMapOf<String, Set<String>>()
+        //TODO резолвить конфликты имен типов возвращаемых значений.
+        // Конфликт - если более 2 записей, заканчивающихся на этот тип
+        internal fun IrType.obtainTypeDescription(): String {
+            if ((this as? IrSimpleType)?.abbreviation != null) {
+                with(abbreviation!!.typeAlias.owner) {
+                    return name() + this@obtainTypeDescription.arguments.joinToString(", ", "<", ">") { it.obtain() }
+                }
+            }
+            return if (toKotlinType().isFunctionTypeOrSubtype) {
+                val arguments = toKotlinType().arguments
+                val returnType = arguments.last().type
+                val inputTypes = arguments.dropLast(1)
+                "${inputTypes.joinToString(", ", prefix = "(", postfix = ")") {
+                    it.type.toString() + ("?".takeIf { isNullable() } ?: EMPTY_TOKEN)
+                }} -> $returnType"
+            } else {
+                if (getClass()?.isLocalClass() ?: false) {
+                    //Если локальный класс, то оставляем только его имя
+                    getClass()!!.name()
+//                    toKotlinType().toString().substring(startIndex = toKotlinType().toString().indexOfLast { it == '.' })
+                } else {
+                    //Пока так, но нужно резолвить через importStr и сравнение постфиксов
+                    toKotlinType().toString()
+                }
+            }
+        }
+
     }
 
     override fun visitGetObjectValue(expression: IrGetObjectValue, data: String) {
@@ -78,29 +106,20 @@
             ClassKind.CLASS, ClassKind.OBJECT -> {
                 declaration.obtainPrimaryCtorWithInheritance()
                 withBracesLn {
-                    declaration.declarations
-                        .filterIsInstance<IrProperty>()
-                        .filterNot {
-                            it.origin in setOf(
-                                IrDeclarationOrigin.FAKE_OVERRIDE,
-                                IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER
-                            )
-                        }
-                        .decompileElements(data)
-
                     val secondaryCtors = declaration.constructors.filterNot { it.isPrimary }
                     secondaryCtors.forEach {
                         it.obtainSecondaryCtor()
                     }
+
                     declaration.declarations
-                        .filterNot { it is IrConstructor || it is IrProperty || it is IrField }
+                        .filterNot { it is IrConstructor || it is IrField }
                         .filterNot {
                             it.origin in setOf(
                                 IrDeclarationOrigin.FAKE_OVERRIDE,
                                 IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER
                             )
                         }
-                        .decompileElements(data)
+                        .forEach { it.accept(this, data) }
                 }
             }
             ClassKind.ANNOTATION_CLASS -> {
@@ -150,6 +169,8 @@
             }
             with(primaryConstructor!!) {
                 val delegatingCtorCall = body!!.statements.filterIsInstance<IrDelegatingConstructorCall>().firstOrNull()
+                //TODO чтобы не дублировался вызов ктора и перечисления через запятую (делегирование)
+                superTypes.remove(delegatingCtorCall?.symbol?.owner?.constructedClassType)
                 val implStr = parentAsClass.obtainInheritanceWithDelegation()
                 val delegatingCtorCallStr = delegatingCtorCall?.decompile("") ?: ""
                 if (delegatingCtorCallStr.isEmpty()) {
@@ -169,11 +190,14 @@
             delegatedMap[delegationFieldInitializer.type] = delegationFieldInitializer
         }
         // Для енамов в суперах лежит Enum<MyType>, который почему-то не isEnum(
-        return superTypes.filterNot { it.isAny() || it.toKotlinType().toString().startsWith("Enum") }.joinToString(", ") {
-            val result = it.obtainTypeDescription()
-            val key = delegatedMap.keys.filter { it.isSubtypeOfClass(it.getClass()!!.symbol) }.firstOrNull()
-            result + if (key != null) " by ${delegatedMap[key]?.decompile("")}" else EMPTY_TOKEN
-        }
+        return superTypes
+            .filterNot { it.isAny() || it.toKotlinType().toString().startsWith("Enum") }
+            .filterNot { primaryConstructor?.constructedClass?.symbol?.let { it1 -> it.isSubtypeOfClass(it1) } ?: false }
+            .joinToString(", ") {
+                val result = it.obtainTypeDescription()
+                val key = delegatedMap.keys.filter { it.isSubtypeOfClass(it.getClass()!!.symbol) }.firstOrNull()
+                result + if (key != null) " by ${delegatedMap[key]?.decompile("")}" else EMPTY_TOKEN
+            }
 
     }
 
@@ -349,14 +373,12 @@
     }
 
     override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: String) {
-        var result = ""
         if (!expression.symbol.owner.returnType.isAny()) {
-            result = concatenateNonEmptyWithSpace(":", expression.symbol.owner.returnType.obtainTypeDescription(),
-                                                  ((0 until expression.valueArgumentsCount)
-                                                      .mapNotNull { expression.getValueArgument(it)?.decompile(data) }
-                                                      .joinToString(", ", "(", ")")))
+            printer.println(listOf(" : ", expression.symbol.owner.returnType.obtainTypeDescription(),
+                                   ((0 until expression.valueArgumentsCount)
+                                       .mapNotNull { expression.getValueArgument(it)?.decompile(data) }
+                                       .joinToString(", ", "(", ")"))).joinToString(""))
         }
-        printer.println(result)
     }
 
     override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: String) {
@@ -620,26 +642,26 @@
 
     override fun visitModuleFragment(declaration: IrModuleFragment, data: String) {
         declaration.files.forEach {
-            printer.println("// FILE: ${it.path}")
+            printer.printlnWithNoIndent("// FILE: ${it.path}")
             // Чтобы соблюсти очередность package -> imports -> declarations вынуждено вытащил это из visitFile
             if (it.fqName != FqName.ROOT) {
                 printer.println("package ${it.fqName.asString()}\n")
             }
 
             val fileSources = it.decompile("")
-            printer.println(irFileNamesToImportedDeclarationsMap[it.path]?.joinToString("\n") { "import $it" })
+            printer.println(irFileNamesToImportedDeclarationsMap[it.path]?.joinToString(separator = "\n", postfix = "\n") { "import $it" })
             printer.println(fileSources)
+            printer.println()
         }
     }
 
     override fun visitFile(declaration: IrFile, data: String) {
         with(declaration) {
             val importResolveVisitor = ImportResolveVisitor()
-            accept(importResolveVisitor, fqName.asString().takeIf { declaration.fqName != FqName.ROOT } ?: EMPTY_TOKEN)
+            val filePackage = fqName.asString().takeIf { declaration.fqName != FqName.ROOT } ?: EMPTY_TOKEN
+            accept(importResolveVisitor, filePackage)
             irFileNamesToImportedDeclarationsMap[path] = importResolveVisitor.importDirectivesSet
-            declaration.declarations.forEach {
-                printer.printlnWithNoIndent("${it.decompile(data)}\n")
-            }
+            printer.println(declaration.declarations.joinToString(separator = "\n", postfix = "\n") { it.decompile(filePackage) })
         }
     }
 
diff --git a/compiler/decompiler/src/org/jetbrains/kotlin/decompiler/util/ImportResolveVisitor.kt b/compiler/decompiler/src/org/jetbrains/kotlin/decompiler/util/ImportResolveVisitor.kt
index 95af2876..28a7421 100644
--- a/compiler/decompiler/src/org/jetbrains/kotlin/decompiler/util/ImportResolveVisitor.kt
+++ b/compiler/decompiler/src/org/jetbrains/kotlin/decompiler/util/ImportResolveVisitor.kt
@@ -5,6 +5,7 @@
 
 package org.jetbrains.kotlin.decompiler.util
 
+import org.jetbrains.kotlin.decompiler.decompile
 import org.jetbrains.kotlin.decompiler.util.name
 import org.jetbrains.kotlin.ir.IrElement
 import org.jetbrains.kotlin.ir.declarations.*
@@ -60,7 +61,7 @@
      */
     override fun visitClass(declaration: IrClass, data: String) {
         with(declaration) {
-            val declarationNameWithPrefix = "${("$data.").takeIf { data.isNotEmpty() } ?: EMPTY_TOKEN}${this.name.identifier}"
+            val declarationNameWithPrefix = "${("$data.").takeIf { data.isNotEmpty() } ?: EMPTY_TOKEN}${this.name()}"
             declaredNamesSet.add(declarationNameWithPrefix)
             // Для енамов в суперах лежит Enum<MyType>, который почему-то не isEnum
             // Добавляем
@@ -89,7 +90,6 @@
 
     override fun visitConstructor(declaration: IrConstructor, data: String) {
         with(declaration) {
-            calledNamesSet.add(parentAsClass.asImportStr())
             typeParameters.forEach { it.accept(this@ImportResolveVisitor, data) }
             valueParameters.forEach { it.accept(this@ImportResolveVisitor, data) }
             body?.accept(this@ImportResolveVisitor, data)
@@ -97,14 +97,29 @@
         run { }
     }
 
-    override fun visitConstructorCall(expression: IrConstructorCall, data: String) {
+    override fun visitFunctionAccess(expression: IrFunctionAccessExpression, data: String) {
+        //TODO Здесь может быть больше всего проблем (extension и dispatcher receivers, superQualifier)
         with(expression) {
-            calledNamesSet.add(symbol.owner.parentAsClass.asImportStr())
+            when (origin) {
+                null -> {
+                    dispatchReceiver?.accept(this@ImportResolveVisitor, data)
+                    calledNamesSet.add(if (symbol.owner.parent is IrFile) symbol.owner.fqNameWhenAvailable?.asString() else symbol.owner.parentAsClass.asImportStr())
+                }
+                IrStatementOrigin.GET_PROPERTY -> {
+                    val fullName = symbol.owner.fqNameWhenAvailable?.asString() ?: EMPTY_TOKEN
+                    val ownerDataPrefix = fullName.substring(0, fullName.indexOfLast { it == '.' })
+                    val regex = """<get-(.+)>""".toRegex()
+                    val matchResult = regex.find(fullName)
+                    val propName = matchResult?.groups?.get(1)?.value
+                    calledNamesSet.add("$ownerDataPrefix.$propName")
+                }
+            }
             (0 until typeArgumentsCount).forEach { calledNamesSet.add(getTypeArgument(it)?.asImportStr()) }
             (0 until valueArgumentsCount).forEach { getValueArgument(it)?.accept(this@ImportResolveVisitor, data) }
         }
     }
 
+
     override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: String) {
         calledNamesSet.add(expression.symbol.owner.parentAsClass.asImportStr())
     }
@@ -142,6 +157,7 @@
 
     override fun visitFunction(declaration: IrFunction, data: String) {
         with(declaration) {
+            declaredNamesSet.add(if (parent is IrFile) fqNameWhenAvailable?.asString() else parentAsClass.asImportStr())
             typeParameters.forEach { it.accept(this@ImportResolveVisitor, data) }
             valueParameters.forEach { it.accept(this@ImportResolveVisitor, data) }
             body?.accept(this@ImportResolveVisitor, data)
@@ -163,16 +179,6 @@
         }
     }
 
-    override fun visitCall(expression: IrCall, data: String) {
-        //TODO Здесь может быть больше всего проблем (extension и dispatcher receivers, superQualifier)
-        with(expression) {
-            dispatchReceiver?.accept(this@ImportResolveVisitor, data)
-            (0 until typeArgumentsCount).forEach { calledNamesSet.add(getTypeArgument(it)?.asImportStr()) }
-            (0 until valueArgumentsCount).forEach { getValueArgument(it)?.accept(this@ImportResolveVisitor, data) }
-
-        }
-    }
-
     override fun visitVariable(declaration: IrVariable, data: String) {
         //Здесь обрабатываем тип (потому что мог быть введен явно, а мы выводим явно всегда) и initializer
         with(declaration) {
@@ -198,6 +204,18 @@
         declaredNamesSet.add("$data.${declaration.name()}")
     }
 
+    override fun visitClassReference(expression: IrClassReference, data: String) {
+        calledNamesSet.add(expression.classType.asImportStr())
+    }
+
+    override fun visitBlock(expression: IrBlock, data: String) {
+        expression.acceptChildren(this, data)
+    }
+
+    override fun visitBlockBody(body: IrBlockBody, data: String) {
+        body.acceptChildren(this, data)
+    }
+
     override fun visitElement(element: IrElement, data: String) {
         run { }
     }
diff --git a/compiler/decompiler/src/org/jetbrains/kotlin/decompiler/util/Utils.kt b/compiler/decompiler/src/org/jetbrains/kotlin/decompiler/util/Utils.kt
index 696b3cf..cc00047 100644
--- a/compiler/decompiler/src/org/jetbrains/kotlin/decompiler/util/Utils.kt
+++ b/compiler/decompiler/src/org/jetbrains/kotlin/decompiler/util/Utils.kt
@@ -7,6 +7,7 @@
 
 import org.jetbrains.kotlin.builtins.isFunctionTypeOrSubtype
 import org.jetbrains.kotlin.decompiler.DecompileIrTreeVisitor
+import org.jetbrains.kotlin.decompiler.DecompileIrTreeVisitor.Companion.obtainTypeDescription
 import org.jetbrains.kotlin.decompiler.decompile
 import org.jetbrains.kotlin.descriptors.Modality
 import org.jetbrains.kotlin.descriptors.Visibilities
@@ -387,25 +388,7 @@
         "lateinit".takeIf { isLateinit },
         if (isVar) "var" else "val"
     )
-
-internal fun IrType.obtainTypeDescription(): String {
-    //TODO разобраться с проблемой
-    if ((this as? IrSimpleType)?.abbreviation != null) {
-        with(abbreviation!!.typeAlias.owner) {
-            return name() + this@obtainTypeDescription.arguments.joinToString(", ", "<", ">") { it.obtain() }
-        }
-    }
-    return if (toKotlinType().isFunctionTypeOrSubtype) {
-        val arguments = toKotlinType().arguments
-        val returnType = arguments.last().type
-        val inputTypes = arguments.dropLast(1)
-        "${inputTypes.joinToString(", ", prefix = "(", postfix = ")") {
-            it.type.toString() + ("?".takeIf { isNullable() } ?: EMPTY_TOKEN)
-        }} -> $returnType"
-    } else {
-        toKotlinType().toString()
-    }
-}
+// По идее эта штука должна быть в companion object визитора и резолвить конфликты имен
 
 internal fun IrValueParameter.obtainValueParameterFlags(): String =
     concatenateNonEmptyWithSpace(
diff --git a/compiler/testData/decompiler/box/classes/innerNested/innerGeneric.kt.decompiled b/compiler/testData/decompiler/box/classes/innerNested/innerGeneric.kt.decompiled
index dd7cf10..e599cec 100644
--- a/compiler/testData/decompiler/box/classes/innerNested/innerGeneric.kt.decompiled
+++ b/compiler/testData/decompiler/box/classes/innerNested/innerGeneric.kt.decompiled
@@ -1,4 +1,4 @@
-// FILE: innerGeneric.kt
+// FILE: /innerGeneric.kt
 
 
 class Outer {
@@ -10,7 +10,7 @@
     }
 }
 fun box() : String  {
-    if (Outer().Inner<String>("OK").box() != "OK") {
+    if  (Outer().Inner<String>("OK").box() != "OK") {
             return "Fail"
         }
     val x = Outer().Inner<String>("OK")
diff --git a/compiler/testData/decompiler/box/classes/innerNested/innerSimple.kt.decompiled b/compiler/testData/decompiler/box/classes/innerNested/innerSimple.kt.decompiled
index c99e6b3..36b63cb 100644
--- a/compiler/testData/decompiler/box/classes/innerNested/innerSimple.kt.decompiled
+++ b/compiler/testData/decompiler/box/classes/innerNested/innerSimple.kt.decompiled
@@ -1,5 +1,6 @@
 // FILE: /innerSimple.kt
 
+
 class Outer {
     inner class Inner {
         fun box() : String  {
diff --git a/compiler/testData/decompiler/box/classes/innerNested/passingOuterRef.kt.decompiled b/compiler/testData/decompiler/box/classes/innerNested/passingOuterRef.kt.decompiled
new file mode 100644
index 0000000..e1f8770
--- /dev/null
+++ b/compiler/testData/decompiler/box/classes/innerNested/passingOuterRef.kt.decompiled
@@ -0,0 +1,49 @@
+// FILE: /passingOuterRef.kt
+
+
+open  class A1(y: String) {
+    val x = "A1.x,${y}"
+}
+open  class A2(y: String) {
+    val x = "A2.x,${y}"
+    open  inner class B1 : A1 {
+        constructor(p: String) : super("B1.param,${p}") {
+        }
+    }
+    open  inner class B2 : A2 {
+        constructor(p: String) : super("B2.param,${p}") {
+        }
+    }
+    inner class B3 : B1 {
+        constructor(p: String) : super("B3.param,${p}") {
+        }
+    }
+    fun foo() : String  {
+        return this.B1("q").x + ";" + this.B2("w").x + ";" + this.B3("e").x + ";" + this.x
+    }
+
+}
+open  class A3(y: String) {
+    val x = "A3.x,${y}"
+    open  inner class B1(p: String) : A1("B1.param,${p}") {
+    }
+    open  inner class B2(p: String) : A3("B2.param,${p}") {
+    }
+    inner class B3(p: String) : B1("B3.param,${p}") {
+    }
+    fun foo() : String  {
+        return this.B1("q").x + ";" + this.B2("w").x + ";" + this.B3("e").x + ";" + this.x
+    }
+
+}
+fun box() : String  {
+    val r1 = A2("c").foo()
+    if  (r1 != "A1.x,B1.param,q;A2.x,B2.param,w;A1.x,B1.param,B3.param,e;A2.x,c") {
+            return "fail1: ${r1}"
+        }
+    val r2 = A3("d").foo()
+    if  (r2 != "A1.x,B1.param,q;A3.x,B2.param,w;A1.x,B1.param,B3.param,e;A3.x,d") {
+            return "fail2: ${r2}"
+        }
+    return "OK"
+}
diff --git a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/deepLocalHierarchy.kt.decompiled b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/deepLocalHierarchy.kt.decompiled
index a3ba071..9d39a05 100644
--- a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/deepLocalHierarchy.kt.decompiled
+++ b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/deepLocalHierarchy.kt.decompiled
@@ -1,18 +1,21 @@
+// FILE: /deepLocalHierarchy.kt
+
+
 fun box() : String  {
     abstract  class L1 {
         abstract  fun foo() : String
     }
-    open  class L2(val s: String): L1 () {
+    open  class L2(val s: String) : L1() {
         override fun foo() : String  {
             return this.s
         }
 
     }
-    open  class L3(val unused: Double, val value: String  = "OK"): L2 (value) {
+    open  class L3(unused: Double, value: String  = "OK") : L2(value) {
     }
-    open  class L4(val i: Int, val j: Long, val z: Boolean, val l: L3): L3 (3.14) {
+    open  class L4(i: Int, j: Long, z: Boolean, l: L3) : L3(3.14) {
     }
-    class L5: L4 (0, 0, false, L3(2.71, "Fail")) {
+    class L5 : L4(0, 0, false, L3(2.71, "Fail")) {
     }
     return L5().foo()
 }
diff --git a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/kt11833_1.kt.decompiled b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/kt11833_1.kt.decompiled
index b2d7c3a..717ed43 100644
--- a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/kt11833_1.kt.decompiled
+++ b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/kt11833_1.kt.decompiled
@@ -1,16 +1,19 @@
+// FILE: /kt11833_1.kt
+
+
 abstract  class Father {
     abstract  inner class InClass {
-        abstract  fun work() : kotlin.String
+        abstract  fun work() : String
     }
 }
-class Child: Father () {
-    val ChildInClass : Father.InClass = object: Father.InClass () {
-    override fun work() : kotlin.String  {
+class Child : Father() {
+    val ChildInClass = object : InClass() {
+    override fun work() : String  {
         return "OK"
     }
 
 }
 }
-fun box() : kotlin.String  {
+fun box() : String  {
     return Child().ChildInClass.work()
 }
diff --git a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/kt11833_2.kt.decompiled b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/kt11833_2.kt.decompiled
index aeca5b9..bcb3064 100644
--- a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/kt11833_2.kt.decompiled
+++ b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/kt11833_2.kt.decompiled
@@ -1,12 +1,15 @@
+// FILE: /kt11833_2.kt
+
+
 abstract  class Father {
     abstract  inner class InClass {
-        abstract  fun work() : kotlin.String
+        abstract  fun work() : String
     }
 }
-class Child: Father () {
-    fun test() : Father.InClass  {
-        return object: Father.InClass () {
-    override fun work() : kotlin.String  {
+class Child : Father() {
+    fun test() : InClass  {
+        return object : InClass() {
+    override fun work() : String  {
         return "OK"
     }
 
@@ -14,6 +17,6 @@
     }
 
 }
-fun box() : kotlin.String  {
+fun box() : String  {
     return Child().test().work()
 }
diff --git a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/localExtendsLocalWithClosure.kt.decompiled b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/localExtendsLocalWithClosure.kt.decompiled
index 6247cde..2a0b9fa 100644
--- a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/localExtendsLocalWithClosure.kt.decompiled
+++ b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/localExtendsLocalWithClosure.kt.decompiled
@@ -1,17 +1,19 @@
+// FILE: /localExtendsLocalWithClosure.kt
+
+
 fun box() : String  {
-    val result : String = "OK"
+    val result = "OK"
     open  class Local(val ok: Boolean) {
         fun result() : String  {
-            return if (this.ok) {
-    result
-}
-else {
-    "Fail"
-}
+            return if  (this.ok) {
+        result
+    } else {
+        "Fail"
+    }
         }
 
     }
-    class Derived: Local (true) {
+    class Derived : Local(true) {
     }
     return Derived().result()
 }
diff --git a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsClassDefaultArgument.kt.decompiled b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsClassDefaultArgument.kt.decompiled
new file mode 100644
index 0000000..1d3a4fc
--- /dev/null
+++ b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsClassDefaultArgument.kt.decompiled
@@ -0,0 +1,10 @@
+// FILE: /objectExtendsClassDefaultArgument.kt
+
+
+open  class A(val result: String  = "OK") {
+}
+fun box() : String  {
+    val a = object : A() {
+}
+    return a.result
+}
diff --git a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsClassVararg.kt.decompiled b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsClassVararg.kt.decompiled
index 2dd8505..e8d2365 100644
--- a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsClassVararg.kt.decompiled
+++ b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsClassVararg.kt.decompiled
@@ -1,10 +1,13 @@
+// FILE: /objectExtendsClassVararg.kt
+
+
 open  class SomeClass(val some: Double, val other: Int, vararg val args: String) {
-    fun result() : kotlin.String  {
+    fun result() : String  {
         return this.args.get(1)
     }
 
 }
-fun box() : kotlin.String  {
-    return object: SomeClass (3.14, 42, "No", "OK", "Yes") {
+fun box() : String  {
+    return object : SomeClass(3.14, 42, "No", "OK", "Yes") {
 }.result()
 }
diff --git a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsInner.kt.decompiled b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsInner.kt.decompiled
new file mode 100644
index 0000000..b8741bf
--- /dev/null
+++ b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsInner.kt.decompiled
@@ -0,0 +1,20 @@
+// FILE: /objectExtendsInner.kt
+
+
+class A {
+    open  inner class Inner(val result: String) {
+    }
+    fun box() : String  {
+        val o = object : Inner("OK") {
+    fun ok() : String  {
+        return this.result
+    }
+
+}
+        return o.ok()
+    }
+
+}
+fun box() : String  {
+    return A().box()
+}
diff --git a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsInnerOfLocalWithCapture.kt.decompiled b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsInnerOfLocalWithCapture.kt.decompiled
new file mode 100644
index 0000000..988bd52
--- /dev/null
+++ b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsInnerOfLocalWithCapture.kt.decompiled
@@ -0,0 +1,21 @@
+// FILE: /objectExtendsInnerOfLocalWithCapture.kt
+
+
+fun box() : String  {
+    class Local {
+        open  inner class Inner(val s: String) {
+            open  fun result() : String  {
+                return "Fail"
+            }
+
+        }
+        val realResult = "OK"
+        val obj = object : Inner(this.realResult) {
+    override fun result() : String  {
+        return this.s
+    }
+
+}
+    }
+    return Local().obj.result()
+}
diff --git a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsLocalCaptureInSuperCall.kt.decompiled b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsLocalCaptureInSuperCall.kt.decompiled
index db67acb..7ad36b0 100644
--- a/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsLocalCaptureInSuperCall.kt.decompiled
+++ b/compiler/testData/decompiler/box/classes/innerNested/superConstructorCall/objectExtendsLocalCaptureInSuperCall.kt.decompiled
@@ -1,9 +1,12 @@
+// FILE: /objectExtendsLocalCaptureInSuperCall.kt
+
+
 open  class A(val s: String) {
 }
-fun box() : kotlin.String  {
+fun box() : String  {
     class B {
-        val result : kotlin.String = "OK"
-        val f : kotlin.String = object: A (this.result) {
+        val result = "OK"
+        val f = object : A(this.result) {
 }.s
     }
     return B().f
diff --git a/compiler/testData/decompiler/box/imports/anon_and_local.kt b/compiler/testData/decompiler/box/imports/anon_and_local.kt
new file mode 100644
index 0000000..9d20328
--- /dev/null
+++ b/compiler/testData/decompiler/box/imports/anon_and_local.kt
@@ -0,0 +1,29 @@
+// FILE: AnonAndLocalDeclarations.kt
+package ru.spbau.mit.declaration
+
+open class FailedOk {
+    open fun ok() = "Fail"
+}
+
+val fixedOk = object : FailedOk() {
+    override fun ok(): String = "OK"
+}
+
+// FILE: AnonAndLocalInvocations.kt
+package ru.spbau.mit.invocation
+
+
+import ru.spbau.mit.declaration.FailedOk
+import ru.spbau.mit.declaration.fixedOk
+
+fun box(): String {
+    val failedOk = FailedOk()
+    val localAnonym = object : FailedOk() {
+        override fun ok() = "OK"
+    }
+    return if (localAnonym.ok() == fixedOk.ok()) {
+        "OK"
+    } else {
+        failedOk.ok()
+    }
+}
\ No newline at end of file
diff --git a/compiler/testData/decompiler/box/imports/anon_and_local.kt.decompiled b/compiler/testData/decompiler/box/imports/anon_and_local.kt.decompiled
new file mode 100644
index 0000000..e5081bc
--- /dev/null
+++ b/compiler/testData/decompiler/box/imports/anon_and_local.kt.decompiled
@@ -0,0 +1,38 @@
+// FILE: /AnonAndLocalDeclarations.kt
+package ru.spbau.mit.declaration
+
+
+
+open  class FailedOk {
+    open  fun ok() : String  {
+        return "Fail"
+    }
+
+}
+val fixedOk = object : FailedOk() {
+    override fun ok() : String  {
+        return "OK"
+    }
+
+}
+
+// FILE: /AnonAndLocalInvocations.kt
+package ru.spbau.mit.invocation
+
+import ru.spbau.mit.declaration.FailedOk
+import ru.spbau.mit.declaration.fixedOk
+
+fun box() : String  {
+    val failedOk = FailedOk()
+    val localAnonym = object : FailedOk() {
+    override fun ok() : String  {
+        return "OK"
+    }
+
+}
+    return if  (localAnonym.ok() == fixedOk.ok()) {
+        "OK"
+    } else {
+        failedOk.ok()
+    }
+}
diff --git a/compiler/testData/decompiler/box/javaEnum.kt b/compiler/testData/decompiler/box/javaEnum.kt
index 93b6782..25f5d60 100644
--- a/compiler/testData/decompiler/box/javaEnum.kt
+++ b/compiler/testData/decompiler/box/javaEnum.kt
@@ -2,7 +2,7 @@
 
 package a
 
-fun foo() {}
+fun foo() = "OK"
 
 // FILE: B.kt
 
@@ -10,6 +10,5 @@
 
 import a.foo
 
-fun test() {
-    foo()
-}
+fun box() = foo()
+
diff --git a/compiler/testData/decompiler/box/javaEnum.kt.decompiled b/compiler/testData/decompiler/box/javaEnum.kt.decompiled
new file mode 100644
index 0000000..3c6cbe4
--- /dev/null
+++ b/compiler/testData/decompiler/box/javaEnum.kt.decompiled
@@ -0,0 +1,17 @@
+// FILE: /A.kt
+package a
+
+
+
+fun foo() : String  {
+    return "OK"
+}
+
+// FILE: /B.kt
+package b
+
+import a.foo
+
+fun box() : String  {
+    return foo()
+}
diff --git a/compiler/tests/org/jetbrains/kotlin/decompiler/IrDecompilerBlackBoxTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/decompiler/IrDecompilerBlackBoxTestGenerated.java
index 938c3e9..d54ac39 100644
--- a/compiler/tests/org/jetbrains/kotlin/decompiler/IrDecompilerBlackBoxTestGenerated.java
+++ b/compiler/tests/org/jetbrains/kotlin/decompiler/IrDecompilerBlackBoxTestGenerated.java
@@ -1109,6 +1109,11 @@
             KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/decompiler/box/imports"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
         }
 
+        @TestMetadata("anon_and_local.kt")
+        public void testAnon_and_local() throws Exception {
+            runTest("compiler/testData/decompiler/box/imports/anon_and_local.kt");
+        }
+
         @TestMetadata("deep_nesting.kt")
         public void testDeep_nesting() throws Exception {
             runTest("compiler/testData/decompiler/box/imports/deep_nesting.kt");
