diff --git a/tests/cases/fourslash/codeFixChangeExtendsToImplements.ts b/tests/cases/fourslash/codeFixChangeExtendsToImplements.ts
new file mode 100644
index 00000000000..9d913c83f2d
--- /dev/null
+++ b/tests/cases/fourslash/codeFixChangeExtendsToImplements.ts
@@ -0,0 +1,6 @@
+///
+
+//// interface I {}
+//// [|class C extends I|]{}
+
+verify.rangeAfterCodeFix("class C implements I");
\ No newline at end of file
diff --git a/tests/cases/fourslash/codeFixChangeExtendsToImplementsFS1.ts b/tests/cases/fourslash/codeFixChangeExtendsToImplementsFS1.ts
deleted file mode 100644
index 6721eda7367..00000000000
--- a/tests/cases/fourslash/codeFixChangeExtendsToImplementsFS1.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-///
-
-//// interface I1 {}
-//// [|class c1 extends I1|]{}
-
-verify.rangeAfterCodeFix("class c1 implements I1");
\ No newline at end of file
diff --git a/tests/cases/fourslash/codeFixChangeExtendsToImplementsFS2.ts b/tests/cases/fourslash/codeFixChangeExtendsToImplementsFS2.ts
deleted file mode 100644
index 973795732ad..00000000000
--- a/tests/cases/fourslash/codeFixChangeExtendsToImplementsFS2.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-///
-
-////interface I1 {}
-////[|class c1 extends I1|]{}
-
-verify.rangeAfterCodeFix("class c1 implements I1");
\ No newline at end of file
diff --git a/tests/cases/fourslash/codeFixChangeExtendsToImplementsTypeParams.ts b/tests/cases/fourslash/codeFixChangeExtendsToImplementsTypeParams.ts
new file mode 100644
index 00000000000..869bd1a5dc0
--- /dev/null
+++ b/tests/cases/fourslash/codeFixChangeExtendsToImplementsTypeParams.ts
@@ -0,0 +1,6 @@
+///
+
+////interface I { x: X}
+////[|class C extends I|]{}
+
+verify.rangeAfterCodeFix("class C implements I");
\ No newline at end of file
diff --git a/tests/cases/fourslash/codeFixClassExtendsAbstractFunction.ts b/tests/cases/fourslash/codeFixClassExtendsAbstractMethod.ts
similarity index 100%
rename from tests/cases/fourslash/codeFixClassExtendsAbstractFunction.ts
rename to tests/cases/fourslash/codeFixClassExtendsAbstractMethod.ts
diff --git a/tests/cases/fourslash/codeFixClassExtendsAbstractPrivateNumber.ts b/tests/cases/fourslash/codeFixClassExtendsAbstractPrivateProperty.ts
similarity index 100%
rename from tests/cases/fourslash/codeFixClassExtendsAbstractPrivateNumber.ts
rename to tests/cases/fourslash/codeFixClassExtendsAbstractPrivateProperty.ts
diff --git a/tests/cases/fourslash/codeFixClassExtendsAbstractNumber.ts b/tests/cases/fourslash/codeFixClassExtendsAbstractProperty.ts
similarity index 100%
rename from tests/cases/fourslash/codeFixClassExtendsAbstractNumber.ts
rename to tests/cases/fourslash/codeFixClassExtendsAbstractProperty.ts
diff --git a/tests/cases/fourslash/codeFixClassExtendsAbstractProtectedNumber.ts b/tests/cases/fourslash/codeFixClassExtendsAbstractProtectedProperty.ts
similarity index 100%
rename from tests/cases/fourslash/codeFixClassExtendsAbstractProtectedNumber.ts
rename to tests/cases/fourslash/codeFixClassExtendsAbstractProtectedProperty.ts
diff --git a/tests/cases/fourslash/codeFixClassExtendsAbstractPublicNumber.ts b/tests/cases/fourslash/codeFixClassExtendsAbstractPublicProperty.ts
similarity index 100%
rename from tests/cases/fourslash/codeFixClassExtendsAbstractPublicNumber.ts
rename to tests/cases/fourslash/codeFixClassExtendsAbstractPublicProperty.ts
diff --git a/tests/cases/fourslash/codeFixInterfaceInExtendsClause.ts b/tests/cases/fourslash/codeFixInterfaceInExtendsClause.ts
deleted file mode 100644
index 15b6833d899..00000000000
--- a/tests/cases/fourslash/codeFixInterfaceInExtendsClause.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-///
-
-//// interface I { }
-//// class C extends I { }
-
-verify.fileAfterCodeFix(`
-interface I { }
-class C implements I { }
-`);
\ No newline at end of file
diff --git a/tests/cases/fourslash/codeFixReOrderSuper.ts b/tests/cases/fourslash/codeFixSuperAfterThis.ts
similarity index 100%
rename from tests/cases/fourslash/codeFixReOrderSuper.ts
rename to tests/cases/fourslash/codeFixSuperAfterThis.ts
diff --git a/tests/cases/fourslash/codeFixAddSuperCall.ts b/tests/cases/fourslash/codeFixSuperCallMissing.ts
similarity index 100%
rename from tests/cases/fourslash/codeFixAddSuperCall.ts
rename to tests/cases/fourslash/codeFixSuperCallMissing.ts
diff --git a/tests/cases/fourslash/codeFixThisUsedInSuperCall.ts b/tests/cases/fourslash/codeFixSuperCallWithThisInside.ts
similarity index 100%
rename from tests/cases/fourslash/codeFixThisUsedInSuperCall.ts
rename to tests/cases/fourslash/codeFixSuperCallWithThisInside.ts
diff --git a/tests/cases/fourslash/codeFixUnImplementedClassMissingAbstractProperty.ts b/tests/cases/fourslash/codeFixUnImplementedClassMissingAbstractProperty.ts
new file mode 100644
index 00000000000..89060b0dfb7
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnImplementedClassMissingAbstractProperty.ts
@@ -0,0 +1,11 @@
+///
+
+//// abstract class C1 {
+//// abstract x: number;
+//// }
+////
+//// class C3 implements C2 {[| |]}
+
+verify.rangeAfterCodeFix(`
+x: number;
+`);
\ No newline at end of file
diff --git a/tests/cases/fourslash/codeFixUnImplementedClassMissingFunction.ts b/tests/cases/fourslash/codeFixUnImplementedClassMissingFunction.ts
new file mode 100644
index 00000000000..529db61fc71
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnImplementedClassMissingFunction.ts
@@ -0,0 +1,13 @@
+///
+
+//// class A {
+//// f() {}
+//// }
+////
+//// class B implements A {[| |]}
+
+verify.rangeAfterCodeFix(`
+f(){
+ throw new Error('Method not Implemented');
+}
+`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromAbstractClassViaHeritageClause.ts b/tests/cases/fourslash/codeFixUnImplementedClassMissingPropertyViaHeritage.ts
similarity index 68%
rename from tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromAbstractClassViaHeritageClause.ts
rename to tests/cases/fourslash/codeFixUnImplementedClassMissingPropertyViaHeritage.ts
index 7cbc606539b..d794c7a60d6 100644
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromAbstractClassViaHeritageClause.ts
+++ b/tests/cases/fourslash/codeFixUnImplementedClassMissingPropertyViaHeritage.ts
@@ -1,10 +1,10 @@
///
-//// abstract class C1 {
-//// f1(){}
+//// class C1 {
+//// f1();
//// }
////
-//// abstract class C2 extends C1 {
+//// class C2 extends C1 {
////
//// }
////
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceDuplicateMember.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceDuplicateMember.ts
new file mode 100644
index 00000000000..caf4d15df7e
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnImplementedInterfaceDuplicateMember.ts
@@ -0,0 +1,15 @@
+///
+
+//// interface I1 {
+//// x: number;
+//// }
+//// interface I2 {
+//// x: number;
+//// }
+////
+//// class C1 implements I1,I2 {[|
+//// |]}
+
+verify.rangeAfterCodeFix(`
+x: number;
+`);
\ No newline at end of file
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionGenericParamExtendsNumberViaHeritageClause.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionGenericParamExtendsNumberViaHeritageClause.ts
deleted file mode 100644
index 083f4301a11..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionGenericParamExtendsNumberViaHeritageClause.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-///
-
-//// abstract class C1 {
-//// abstract f1();
-//// }
-////
-//// abstract class C2 extends C1 {
-////
-//// }
-////
-//// class C3 implements C2 {[|
-//// |]f2(){}
-//// }
-
-verify.rangeAfterCodeFix(`f1(){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionGenericParamExtendsNumberViaHeritageClause2.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionGenericParamExtendsNumberViaHeritageClause2.ts
deleted file mode 100644
index aaa00cc791a..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionGenericParamExtendsNumberViaHeritageClause2.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-///
-
-//// abstract class C1 {
-//// abstract f1();
-//// }
-////
-//// interface I1 extends C1 {}
-////
-//// class C2 implements I1 {[|
-////
-//// |]}
-
-verify.rangeAfterCodeFix(`f1(){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionGenericParamViaHeritageClause.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionGenericParamViaHeritageClause.ts
deleted file mode 100644
index 24c9048015e..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionGenericParamViaHeritageClause.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-///
-
-//// abstract class C1 {
-//// abstract f1();
-//// }
-////
-//// abstract class C2 extends C1 {
-////
-//// }
-////
-//// class C3 implements C2 {[|
-//// |]f2(){}
-//// }
-
-verify.rangeAfterCodeFix(`f1(){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionViaHeritageClause.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionViaHeritageClause.ts
deleted file mode 100644
index b7b7271badd..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionViaHeritageClause.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-///
-
-//// abstract class C1 {
-//// abstract f1();
-//// }
-////
-//// abstract class C2 extends C1 {
-////
-//// }
-////
-//// class C3 implements C2 {[|
-//// |]f2(){}
-//// }
-
-verify.rangeAfterCodeFix(`f1(){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunction.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunction.ts
deleted file mode 100644
index 0459b90c99c..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunction.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-///
-
-//// namespace N1 {
-//// export interface I1 {
-//// f1();
-//// }
-//// }
-//// interface I1 {
-//// f1();
-//// }
-////
-//// class C1 implements N1.I1 {[|
-//// |]}
-
-verify.rangeAfterCodeFix(`f1(){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromAbstract.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromAbstract.ts
deleted file mode 100644
index 4b17f315534..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromAbstract.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-///
-
-//// abstract class C1 {
-//// f1(){}
-//// }
-////
-//// class C2 implements C1 {[|
-//// |]f2(){}
-//// }
-
-verify.rangeAfterCodeFix(`f1(){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromHeritageClause1.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromHeritageClause1.ts
deleted file mode 100644
index a6f7c5cdba7..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromHeritageClause1.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-///
-
-//// interface I1 {
-//// f1()
-//// }
-////
-//// interface I2 extends I1 {
-////
-//// }
-////
-//// class C1 implements I2 {[|
-//// |]}
-
-verify.rangeAfterCodeFix(`f1(){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromHeritageClause2.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromHeritageClause2.ts
deleted file mode 100644
index 01da0838679..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromHeritageClause2.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-///
-
-//// interface I1 {
-////
-//// }
-////
-//// interface I2 extends I1 {
-//// f1();
-//// }
-////
-//// interface I3 extends I2 {}
-////
-//// class C1 implements I3 {[|
-//// |]}
-
-verify.rangeAfterCodeFix(`f1(){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromHeritageClause3.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromHeritageClause3.ts
deleted file mode 100644
index ff91223f63a..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromHeritageClause3.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-///
-
-//// interface I1 {
-////
-//// }
-////
-//// interface I2 {
-//// f1();
-//// }
-////
-//// interface I3 extends I2, I1 {}
-////
-//// class C1 implements I3 {[|
-//// |]}
-
-verify.rangeAfterCodeFix(`f1(){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromHeritageClause4.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromHeritageClause4.ts
deleted file mode 100644
index 390a249f7c8..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionFromHeritageClause4.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-///
-
-//// interface I1 {
-//// f1();
-//// }
-////
-//// interface I2 {
-//// f1();
-//// }
-////
-//// interface I3 extends I2, I1 {}
-////
-//// class C1 implements I3 {[|
-//// |]}
-
-verify.rangeAfterCodeFix(`f1(){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionGenericParamExtendsString.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionGenericParamExtendsString.ts
deleted file mode 100644
index abf5848668e..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionGenericParamExtendsString.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-///
-
-//// interface I1 {
-//// f1(x: number, y: C2);
-//// }
-////
-//// class C2 {}
-////
-//// class C1 implements I1 {[|
-//// |]}
-
-verify.rangeAfterCodeFix(`f1(x: number,y: C2){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionGenericParams.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionGenericParams.ts
deleted file mode 100644
index 51becc8c99c..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionGenericParams.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-///
-
-//// interface I1 {
-//// f1(x: number, y: C2);
-//// }
-////
-//// class C2 {}
-////
-//// class C1 implements I1 {[|
-//// |]}
-
-verify.rangeAfterCodeFix(`f1(x: number,y: C2){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionNoSemicolon.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionNoSemicolon.ts
deleted file mode 100644
index 5b5f177741c..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionNoSemicolon.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-///
-
-//// namespace N1 {
-//// export interface I1 {
-//// f1()
-//// }
-//// }
-//// interface I1 {
-//// f1();
-//// }
-////
-//// class C1 implements N1.I1 {[|
-//// |]}
-
-verify.rangeAfterCodeFix(`f1(){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionWithParams.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionWithParams.ts
deleted file mode 100644
index 5a4537ff2d5..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionWithParams.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-///
-
-//// namespace N1 {
-//// export interface I1 {
-//// f1(x: number, y: string)
-//// }
-//// }
-//// interface I1 {
-//// f1();
-//// }
-////
-//// class C1 implements N1.I1 {[|
-//// |]}
-
-verify.rangeAfterCodeFix(`f1(x: number,y: string){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionWithParamsClass.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionWithParamsClass.ts
deleted file mode 100644
index 157c9bec04e..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionWithParamsClass.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-///
-
-//// interface I1 {
-//// f1(x: number, y: T);
-//// }
-////
-//// class T {}
-////
-//// class C1 implements I1 {[|
-//// |]}
-
-verify.rangeAfterCodeFix(`f1(x: number,y: T){
- throw new Error('Method not Implemented');
-}
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionAndExtends.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingMethod.ts
similarity index 57%
rename from tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionAndExtends.ts
rename to tests/cases/fourslash/codeFixUnImplementedInterfaceMissingMethod.ts
index 36f1c11dc82..976c0dba56d 100644
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingFunctionAndExtends.ts
+++ b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingMethod.ts
@@ -1,14 +1,10 @@
///
-//// interface I1 {
-////
-//// }
-////
-//// interface I2 extends I1 {
+//// interface I {
//// f1();
//// }
////
-//// class C1 implements I2 {[|
+//// class C implements I {[|
//// |]}
verify.rangeAfterCodeFix(`f1(){
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingMethodWithParams.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingMethodWithParams.ts
new file mode 100644
index 00000000000..a21c7074b50
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingMethodWithParams.ts
@@ -0,0 +1,14 @@
+///
+
+//// interface I {
+//// f(x: number, y: string)
+//// }
+////
+//// class C implements I {[|
+//// |]}
+
+verify.rangeAfterCodeFix(`
+f(x: number,y: string){
+ throw new Error('Method not Implemented');
+}
+`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingNumberNoSemicolon.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingNumberNoSemicolon.ts
deleted file mode 100644
index f9aeb194fd7..00000000000
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingNumberNoSemicolon.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-///
-
-//// namespace N1 {
-//// export interface I1 {
-//// x: number
-//// }
-//// }
-//// interface I1 {
-//// f1();
-//// }
-////
-//// class C1 implements N1.I1 {[|
-//// |]}
-
-verify.rangeAfterCodeFix(`x: number;
-`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingProperty.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingProperty.ts
new file mode 100644
index 00000000000..4e08a30cde4
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingProperty.ts
@@ -0,0 +1,11 @@
+///
+
+//// interface I1 {
+//// x: number;
+//// }
+////
+//// class C1 implements I1 {[|
+//// |]}
+
+verify.rangeAfterCodeFix(`x: number;
+`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingPropertyIntersection.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingPropertyIntersection.ts
new file mode 100644
index 00000000000..9b10cf5d316
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingPropertyIntersection.ts
@@ -0,0 +1,12 @@
+///
+
+//// interface I1 {
+//// x: number & { __iBrand: any };
+//// }
+////
+//// class C1 implements I1 {[|
+//// |]}
+
+verify.rangeAfterCodeFix(`
+x: number & { __iBrand: any }
+`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingNumber.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceNamespaceConflict.ts
similarity index 80%
rename from tests/cases/fourslash/codeFixUnImplementedInterfaceMissingNumber.ts
rename to tests/cases/fourslash/codeFixUnImplementedInterfaceNamespaceConflict.ts
index e8a30703638..8e0a35c7fe7 100644
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingNumber.ts
+++ b/tests/cases/fourslash/codeFixUnImplementedInterfaceNamespaceConflict.ts
@@ -12,5 +12,6 @@
//// class C1 implements N1.I1 {[|
//// |]}
-verify.rangeAfterCodeFix(`x: number;
+verify.rangeAfterCodeFix(`
+x: number;
`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceSomePropertiesPresent.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceSomePropertiesPresent.ts
new file mode 100644
index 00000000000..03c9e535d8d
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnImplementedInterfaceSomePropertiesPresent.ts
@@ -0,0 +1,14 @@
+///
+
+//// interface I {
+//// x: number;
+//// y: number;
+//// }
+////
+//// class C2 implements C {[| |]
+//// x: number
+//// }
+
+verify.rangeAfterCodeFix(`
+y: number;
+`);
diff --git a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionGenericParamExtendsNumber.ts b/tests/cases/fourslash/codeFixUnImplementedInterfaceTypeParamOnProperty.ts
similarity index 54%
rename from tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionGenericParamExtendsNumber.ts
rename to tests/cases/fourslash/codeFixUnImplementedInterfaceTypeParamOnProperty.ts
index 5a644dfb993..8c32be6b7f4 100644
--- a/tests/cases/fourslash/codeFixUnImplementedInterfaceMissingAbstractFunctionGenericParamExtendsNumber.ts
+++ b/tests/cases/fourslash/codeFixUnImplementedInterfaceTypeParamOnProperty.ts
@@ -1,14 +1,12 @@
///
-//// abstract class C1 {
-//// abstract f1();
+//// interface I {
+//// f1();
//// }
////
-//// class C2 extends C1 {[|
-////
-//// |]}
+//// class C implements I {[| |]}
verify.rangeAfterCodeFix(`f1(){
throw new Error('Method not Implemented');
}
-`);
+`);
\ No newline at end of file
diff --git a/tests/cases/fourslash/codeFixUnimplementedInterfaceMissingMultipleFunctionsDeepInheritance.ts b/tests/cases/fourslash/codeFixUnimplementedDeepInheritance.ts
similarity index 100%
rename from tests/cases/fourslash/codeFixUnimplementedInterfaceMissingMultipleFunctionsDeepInheritance.ts
rename to tests/cases/fourslash/codeFixUnimplementedDeepInheritance.ts
diff --git a/tests/cases/fourslash/codeFixUnimplementedInterfaceMissingMultipleFunctions.ts b/tests/cases/fourslash/codeFixUnimplementedInterfaceMissingMultipleFunctions.ts
deleted file mode 100644
index 165edc92584..00000000000
--- a/tests/cases/fourslash/codeFixUnimplementedInterfaceMissingMultipleFunctions.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-///
-
-//// class C1 {
-//// f1();
-//// }
-////
-//// class C2 {
-//// f2();
-//// }
-////
-//// interface I1 extends C1, C2 {}
-////
-//// class C3 implements I1 {[|
-//// |]}
-
-verify.rangeAfterCodeFix(`f1(){
- throw new Error('Method not Implemented');
-}
-f2(){
- throw new Error('Method not Implemented');
-}
-`);
\ No newline at end of file
diff --git a/tests/cases/fourslash/codeFixUnimplementedInterfaceMissingMultipleImplements.ts b/tests/cases/fourslash/codeFixUnimplementedInterfaceMissingMultipleImplements.ts
new file mode 100644
index 00000000000..5470258323e
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnimplementedInterfaceMissingMultipleImplements.ts
@@ -0,0 +1,16 @@
+///
+
+//// interface I1 {
+//// x: number;
+//// }
+//// interface I2 {
+//// y: number;
+//// }
+////
+//// class C1 implements I1,I2 {[|
+//// |]}
+
+verify.rangeAfterCodeFix(`
+x: number;
+y: number;
+`);
\ No newline at end of file
diff --git a/tests/cases/fourslash/codeFixUnimplementedInterfaceMissingMultipleMembersAndPunctuation.ts b/tests/cases/fourslash/codeFixUnimplementedInterfaceMissingMultipleMembersAndPunctuation.ts
new file mode 100644
index 00000000000..01f7789620a
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnimplementedInterfaceMissingMultipleMembersAndPunctuation.ts
@@ -0,0 +1,28 @@
+///
+
+//// interface I1 {
+//// x: number,
+//// y: number
+//// z: number;
+//// f(),
+//// g()
+//// h();
+//// }
+////
+//// class C1 implements I1 {[|
+//// |]}
+
+verify.rangeAfterCodeFix(`
+x: number;
+y: number;
+z: number;
+f() {
+ throw new Error('Method not Implemented');
+}
+g() {
+ throw new Error('Method not Implemented');
+}
+h() {
+ throw new Error('Method not Implemented');
+}
+`);
\ No newline at end of file
diff --git a/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateDeeply.ts b/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateDeeply.ts
new file mode 100644
index 00000000000..a5bd006ec06
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateDeeply.ts
@@ -0,0 +1,17 @@
+///
+
+//// interface I {
+//// x: { y: T, z: T[] };
+//// }
+////
+//// class C implements I { }
+
+verify.fileAfterCodeFix(`
+interface I {
+ x: { y: T, z: T[] };
+}
+
+class C implements I {
+ x: { y: number, z: number[] };
+}
+`);
diff --git a/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateError.ts b/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateError.ts
new file mode 100644
index 00000000000..bc1c60d6dbe
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateError.ts
@@ -0,0 +1,11 @@
+///
+
+//// interface I {
+//// x: T;
+//// }
+////
+//// class C implements I { }
+
+// Don't know how to instantiate in codeFix
+// if instantiation is invalid.
+verify.not.codeFixAvailable();
\ No newline at end of file
diff --git a/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateNumber.ts b/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateNumber.ts
new file mode 100644
index 00000000000..932368a363c
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateNumber.ts
@@ -0,0 +1,17 @@
+///
+
+//// interface I {
+//// x: T;
+//// }
+////
+//// class C implements I { }
+
+verify.fileAfterCodeFix(`
+interface I {
+ x: T;
+}
+
+class C implements I {
+ x: number;
+}
+`);
diff --git a/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateT.ts b/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateT.ts
new file mode 100644
index 00000000000..0ec1c067445
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateT.ts
@@ -0,0 +1,17 @@
+///
+
+//// interface I {
+//// x: T;
+//// }
+////
+//// class C implements I { }
+
+verify.fileAfterCodeFix(`
+interface I {
+ x: T;
+}
+
+class C implements I {
+ x: T;
+}
+`);
diff --git a/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateU.ts b/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateU.ts
new file mode 100644
index 00000000000..9608ac14cf4
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiateU.ts
@@ -0,0 +1,17 @@
+///
+
+//// interface I {
+//// x: T;
+//// }
+////
+//// class C implements I { }
+
+verify.fileAfterCodeFix(`
+interface I {
+ x: T;
+}
+
+class C implements I {
+ x: U;
+}
+`);
diff --git a/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiationMissing.ts b/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiationMissing.ts
new file mode 100644
index 00000000000..226aee47833
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnimplementedInterfaceTypeParamInstantiationMissing.ts
@@ -0,0 +1,9 @@
+///
+
+//// interface I {
+//// x: T;
+//// }
+////
+//// class C implements I { }
+
+verify.not.codeFixAvailable();
\ No newline at end of file
diff --git a/tests/cases/fourslash/codeFixUnimplementedInterfaceUndeclaredSymbol.ts b/tests/cases/fourslash/codeFixUnimplementedInterfaceUndeclaredSymbol.ts
new file mode 100644
index 00000000000..448986163f7
--- /dev/null
+++ b/tests/cases/fourslash/codeFixUnimplementedInterfaceUndeclaredSymbol.ts
@@ -0,0 +1,16 @@
+///
+
+//// interface I {
+//// x: T;
+//// }
+////
+//// class C implements I { }
+
+// T is not a declared symbol. There are a couple fixes:
+// 1) Declare T.
+// 2) Rename T to an existing symbol.
+// 3) Make T a type parameter to I.
+//
+// In the latter two cases, it is premature to copy `x:T` into C.
+// Since we can't guess the programmer's intent here, we do nothing.
+verify.not.codeFixAvailable();
\ No newline at end of file