diff --git a/core/compiler.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/JvmClassName.java b/core/compiler.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/JvmClassName.java
index f5bdb7c..359e7f4 100644
--- a/core/compiler.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/JvmClassName.java
+++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/resolve/jvm/JvmClassName.java
@@ -19,7 +19,6 @@
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.kotlin.name.ClassId;
 import org.jetbrains.kotlin.name.FqName;
-import org.jetbrains.kotlin.utils.StringInterner;
 
 public class JvmClassName {
     @NotNull
@@ -58,7 +57,7 @@
     private FqName fqName;
 
     private JvmClassName(@NotNull String internalName) {
-        this.internalName = StringInterner.interned(internalName);
+        this.internalName = internalName;
     }
 
     /**
@@ -111,7 +110,7 @@
     public boolean equals(Object o) {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
-        return internalName == ((JvmClassName) o).internalName; // strings are interned
+        return internalName.equals(((JvmClassName) o).internalName);
     }
 
     @Override
diff --git a/core/compiler.common/src/org/jetbrains/kotlin/name/FqNameUnsafe.java b/core/compiler.common/src/org/jetbrains/kotlin/name/FqNameUnsafe.java
index 35c1311..4833d70 100644
--- a/core/compiler.common/src/org/jetbrains/kotlin/name/FqNameUnsafe.java
+++ b/core/compiler.common/src/org/jetbrains/kotlin/name/FqNameUnsafe.java
@@ -20,7 +20,6 @@
 import kotlin.jvm.functions.Function1;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.kotlin.utils.StringInterner;
 
 import java.util.Collections;
 import java.util.List;
@@ -49,16 +48,16 @@
     private transient Name shortName;
 
     FqNameUnsafe(@NotNull String fqName, @NotNull FqName safe) {
-        this.fqName = StringInterner.interned(fqName);
+        this.fqName = fqName;
         this.safe = safe;
     }
 
     public FqNameUnsafe(@NotNull String fqName) {
-        this.fqName = StringInterner.interned(fqName);
+        this.fqName = fqName;
     }
 
     private FqNameUnsafe(@NotNull String fqName, FqNameUnsafe parent, Name shortName) {
-        this.fqName = StringInterner.interned(fqName);
+        this.fqName = fqName;
         this.parent = parent;
         this.shortName = shortName;
     }
@@ -197,7 +196,7 @@
 
         FqNameUnsafe that = (FqNameUnsafe) o;
 
-        if (fqName != that.fqName) return false; // strings are interned
+        if (!fqName.equals(that.fqName)) return false;
 
         return true;
     }
diff --git a/core/compiler.common/src/org/jetbrains/kotlin/name/Name.java b/core/compiler.common/src/org/jetbrains/kotlin/name/Name.java
index 859627b..1423ec2 100644
--- a/core/compiler.common/src/org/jetbrains/kotlin/name/Name.java
+++ b/core/compiler.common/src/org/jetbrains/kotlin/name/Name.java
@@ -18,7 +18,6 @@
 
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.kotlin.utils.StringInterner;
 
 public final class Name implements Comparable<Name> {
     @NotNull
@@ -26,7 +25,7 @@
     private final boolean special;
 
     private Name(@NotNull String name, boolean special) {
-        this.name = StringInterner.interned(name);
+        this.name = name;
         this.special = special;
     }
 
@@ -117,7 +116,7 @@
         Name name1 = (Name) o;
 
         if (special != name1.special) return false;
-        if (name != name1.name) return false; // strings are interned
+        if (!name.equals(name1.name)) return false;
 
         return true;
     }
diff --git a/core/deserialization.common.jvm/src/org/jetbrains/kotlin/load/kotlin/MemberSignature.kt b/core/deserialization.common.jvm/src/org/jetbrains/kotlin/load/kotlin/MemberSignature.kt
index 056f2a7..2db9630 100644
--- a/core/deserialization.common.jvm/src/org/jetbrains/kotlin/load/kotlin/MemberSignature.kt
+++ b/core/deserialization.common.jvm/src/org/jetbrains/kotlin/load/kotlin/MemberSignature.kt
@@ -8,11 +8,14 @@
 import org.jetbrains.kotlin.metadata.deserialization.NameResolver
 import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
 import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMemberSignature
+import org.jetbrains.kotlin.utils.UniqueString
+import org.jetbrains.kotlin.utils.UniqueString.Companion.uniqueString
 
 // The purpose of this class is to hold a unique signature of either a method or a field, so that annotations on a member can be put
 // into a map indexed by these signatures
 @Suppress("DataClassPrivateConstructor")
-data class MemberSignature private constructor(val signature: String) {
+data class MemberSignature private constructor(private val signatureImpl: UniqueString) {
+    val signature get() = signatureImpl.value
     companion object {
         @JvmStatic
         fun fromMethod(nameResolver: NameResolver, signature: JvmProtoBuf.JvmMethodSignature): MemberSignature {
@@ -21,12 +24,12 @@
 
         @JvmStatic
         fun fromMethodNameAndDesc(name: String, desc: String): MemberSignature {
-            return MemberSignature(name + desc)
+            return MemberSignature(uniqueString(name + desc))
         }
 
         @JvmStatic
         fun fromFieldNameAndDesc(name: String, desc: String): MemberSignature {
-            return MemberSignature("$name#$desc")
+            return MemberSignature(uniqueString("$name#$desc"))
         }
 
         @JvmStatic
@@ -37,7 +40,7 @@
 
         @JvmStatic
         fun fromMethodSignatureAndParameterIndex(signature: MemberSignature, index: Int): MemberSignature {
-            return MemberSignature("${signature.signature}@$index")
+            return MemberSignature(uniqueString("${signature.signature}@$index"))
         }
     }
 }
diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/StringInterner.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/StringInterner.kt
index bf9e9fb..2db3f26 100644
--- a/core/util.runtime/src/org/jetbrains/kotlin/utils/StringInterner.kt
+++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/StringInterner.kt
@@ -7,9 +7,13 @@
  * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
  */
 
-object StringInterner {
-    private val cache = ConcurrentHashMap<String, String>()
+class UniqueString private constructor(val value: String) {
+    override fun toString(): String = value
 
-    @JvmStatic
-    fun interned(string: String): String = cache.getOrPut(string) { string }
-}
\ No newline at end of file
+    companion object {
+        private val cache = ConcurrentHashMap<String, UniqueString>()
+        fun uniqueString(value: String): UniqueString {
+            return cache.getOrPut(value) { UniqueString(value) }
+        }
+    }
+}
