diff --git a/tests/baselines/reference/emitClassDeclarationWithPropertyAccessInHeritageClause1.js b/tests/baselines/reference/emitClassDeclarationWithPropertyAccessInHeritageClause1.js
new file mode 100644
index 0000000000..0c2f79bec0
--- /dev/null
+++ b/tests/baselines/reference/emitClassDeclarationWithPropertyAccessInHeritageClause1.js
@@ -0,0 +1,41 @@
+//// [emitClassDeclarationWithPropertyAccessInHeritageClause1.ts]
+interface I {}
+interface CTor {
+ new (hour: number, minute: number): I
+}
+var x: {
+ B : CTor
+};
+class B {}
+function foo() {
+ return {B: B};
+}
+class C extends (foo()).B {}
+
+//// [emitClassDeclarationWithPropertyAccessInHeritageClause1.js]
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+var x;
+var B = (function () {
+ function B() {
+ }
+ return B;
+}());
+function foo() {
+ return { B: B };
+}
+var C = (function (_super) {
+ __extends(C, _super);
+ function C() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ return C;
+}((foo()).B));
diff --git a/tests/baselines/reference/emitClassDeclarationWithPropertyAccessInHeritageClause1.symbols b/tests/baselines/reference/emitClassDeclarationWithPropertyAccessInHeritageClause1.symbols
new file mode 100644
index 0000000000..f5f4f6ff87
--- /dev/null
+++ b/tests/baselines/reference/emitClassDeclarationWithPropertyAccessInHeritageClause1.symbols
@@ -0,0 +1,36 @@
+=== tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithPropertyAccessInHeritageClause1.ts ===
+interface I {}
+>I : Symbol(I, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 0, 0))
+
+interface CTor {
+>CTor : Symbol(CTor, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 0, 14))
+
+ new (hour: number, minute: number): I
+>hour : Symbol(hour, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 2, 9))
+>minute : Symbol(minute, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 2, 22))
+>I : Symbol(I, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 0, 0))
+}
+var x: {
+>x : Symbol(x, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 4, 3))
+
+ B : CTor
+>B : Symbol(B, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 4, 8))
+>CTor : Symbol(CTor, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 0, 14))
+
+};
+class B {}
+>B : Symbol(B, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 6, 2))
+
+function foo() {
+>foo : Symbol(foo, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 7, 10))
+
+ return {B: B};
+>B : Symbol(B, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 9, 12))
+>B : Symbol(B, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 6, 2))
+}
+class C extends (foo()).B {}
+>C : Symbol(C, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 10, 1))
+>(foo()).B : Symbol(B, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 9, 12))
+>foo : Symbol(foo, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 7, 10))
+>B : Symbol(B, Decl(emitClassDeclarationWithPropertyAccessInHeritageClause1.ts, 9, 12))
+
diff --git a/tests/baselines/reference/emitClassDeclarationWithPropertyAccessInHeritageClause1.types b/tests/baselines/reference/emitClassDeclarationWithPropertyAccessInHeritageClause1.types
new file mode 100644
index 0000000000..0747772ef6
--- /dev/null
+++ b/tests/baselines/reference/emitClassDeclarationWithPropertyAccessInHeritageClause1.types
@@ -0,0 +1,39 @@
+=== tests/cases/conformance/es6/classDeclaration/emitClassDeclarationWithPropertyAccessInHeritageClause1.ts ===
+interface I {}
+>I : I
+
+interface CTor {
+>CTor : CTor
+
+ new (hour: number, minute: number): I
+>hour : number
+>minute : number
+>I : I
+}
+var x: {
+>x : { B: CTor; }
+
+ B : CTor
+>B : CTor
+>CTor : CTor
+
+};
+class B {}
+>B : B
+
+function foo() {
+>foo : () => { B: typeof B; }
+
+ return {B: B};
+>{B: B} : { B: typeof B; }
+>B : typeof B
+>B : typeof B
+}
+class C extends (foo()).B {}
+>C : C
+>(foo()).B : B
+>(foo()) : { B: typeof B; }
+>foo() : { B: typeof B; }
+>foo : () => { B: typeof B; }
+>B : typeof B
+
diff --git a/tests/baselines/reference/reexportClassDefinition.symbols b/tests/baselines/reference/reexportClassDefinition.symbols
index 5213365798..ba1ead2fbc 100644
--- a/tests/baselines/reference/reexportClassDefinition.symbols
+++ b/tests/baselines/reference/reexportClassDefinition.symbols
@@ -4,7 +4,9 @@ import foo2 = require('./foo2')
class x extends foo2.x {}
>x : Symbol(x, Decl(foo3.ts, 0, 31))
+>foo2.x : Symbol(x, Decl(foo2.ts, 2, 10))
>foo2 : Symbol(foo2, Decl(foo3.ts, 0, 0))
+>x : Symbol(x, Decl(foo2.ts, 2, 10))
=== tests/cases/conformance/externalModules/foo1.ts ===
diff --git a/tests/cases/fourslash/findAllReferPropertyAccessExpressionHeritageClause.ts b/tests/cases/fourslash/findAllReferPropertyAccessExpressionHeritageClause.ts
new file mode 100644
index 0000000000..57fa235479
--- /dev/null
+++ b/tests/cases/fourslash/findAllReferPropertyAccessExpressionHeritageClause.ts
@@ -0,0 +1,20 @@
+///
+
+//// interface I {}
+//// interface CTor {
+//// new (hour: number, minute: number): I
+//// }
+//// var x: {
+//// B : CTor
+//// };
+//// class B {}
+//// function foo() {
+//// return {[|B|]: B};
+//// }
+//// class C extends (foo()).[|B|] {}
+//// class C1 extends foo().[|B|] {}
+
+const [def, ref1, ref2] = test.ranges();
+verify.referencesOf(ref1, [def, ref1, ref2]);
+verify.referencesOf(ref2, [def, ref1, ref2]);
+verify.referencesOf(def, [def, ref1, ref2]);
\ No newline at end of file
diff --git a/tests/cases/fourslash/gotoDefinitionPropertyAccessExpressionHeritageClause.ts b/tests/cases/fourslash/gotoDefinitionPropertyAccessExpressionHeritageClause.ts
new file mode 100644
index 0000000000..d998c545fb
--- /dev/null
+++ b/tests/cases/fourslash/gotoDefinitionPropertyAccessExpressionHeritageClause.ts
@@ -0,0 +1,17 @@
+///
+
+//// interface I {}
+//// interface CTor {
+//// new (hour: number, minute: number): I
+//// }
+//// var x: {
+//// B : CTor
+//// };
+//// class B {}
+//// function foo() {
+//// return {/*refB*/B: B};
+//// }
+//// class C extends (foo())./*B*/B {}
+//// class C1 extends foo()./*B1*/B {}
+
+verify.goToDefinition([["B", "refB"], ["B1", "refB"]]);
\ No newline at end of file
diff --git a/tests/cases/fourslash/renamePropertyAccessExpressionHeritageClause.ts b/tests/cases/fourslash/renamePropertyAccessExpressionHeritageClause.ts
new file mode 100644
index 0000000000..477008e7a3
--- /dev/null
+++ b/tests/cases/fourslash/renamePropertyAccessExpressionHeritageClause.ts
@@ -0,0 +1,17 @@
+///
+
+//// interface I {}
+//// interface CTor {
+//// new (hour: number, minute: number): I
+//// }
+//// var x: {
+//// B : CTor
+//// };
+//// class B {}
+//// function foo() {
+//// return {[|B|]: B};
+//// }
+//// class C extends (foo()).[|B|] {}
+//// class C1 extends foo().[|B|] {}
+
+verify.rangesAreRenameLocations();
\ No newline at end of file