diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t01.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t01.dart
index 37e6c5d..fe2983c 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t01.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t01.dart
@@ -18,11 +18,9 @@
 import "../../Utils/expect.dart";
 
 class C {
-  C() {}
   C.constr() {}
 }
 
 main() {
   Expect.isTrue(C.constr is C Function());
-  Expect.isTrue(C.new is C Function());
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart b/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart
index e5226b9..fa83630 100644
--- a/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart
+++ b/LanguageFeatures/Constructor-tear-offs/named_constructor_A02_t02.dart
@@ -18,17 +18,11 @@
 import "../../Utils/expect.dart";
 
 class C<T> {
-  C() {}
   C.constr(T t) {}
 }
 
 main() {
   Expect.isTrue(C.constr is C Function<X extends dynamic>(X));
-  Expect.isTrue(C.new is C Function<X extends dynamic>());
-
   Expect.isTrue(C<int>.constr is C Function<X extends int>(X));
-  Expect.isTrue(C<int>.new is C Function<X extends int>());
-
   Expect.isTrue(C.constr<int> is C Function<T extends int>(T));
-  Expect.isTrue(C.new<int> is C Function<T extends int>());
 }
diff --git a/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A04_t01.dart b/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A04_t01.dart
new file mode 100644
index 0000000..8a44c5d
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A04_t01.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// @assertion The tear-off cannot be performed without the [.new] because that
+/// expression already means something else.
+///
+/// @description Check that the tear-off cannot be performed without the [.new]:
+/// tests default constructor call
+/// @author iarkh@unipro.ru
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+class C {
+  C() {}
+}
+
+main() {
+  var v = C;
+  C c = v();
+//      ^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A04_t02.dart b/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A04_t02.dart
new file mode 100644
index 0000000..f38b79d
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A04_t02.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// @assertion The tear-off cannot be performed without the [.new] because that
+/// expression already means something else.
+///
+/// @description Check that the tear-off cannot be performed without the [.new]:
+/// tests default constructor call
+/// @author iarkh@unipro.ru
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+class C<X> {
+  C(int a, String b, c) {}
+}
+
+main() {
+  var v = C;
+  C c = v(1, "", null);
+//      ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  var v1 = C.C;
+//           ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t01.dart b/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t01.dart
new file mode 100644
index 0000000..66d8541
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t01.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// @assertion With regard to tear-offs, [C.new] works exactly as if it had been
+/// a named constructor, with a corresponding constructor function named
+/// [C.new$tearoff].
+///
+/// @description Check that [C.new] tearing off works exactly as a corresponding
+/// construction function named [C.new$tearoff].
+/// @author iarkh@unipro.ru
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+
+class C {
+  C() {}
+}
+
+main() {
+  Expect.isTrue(C.new is C Function());
+}
\ No newline at end of file
diff --git a/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t02.dart b/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t02.dart
new file mode 100644
index 0000000..65e3d9c
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A05_t02.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// @assertion A named constructor tear-off expression of one of the forms above
+/// evaluates to a function value which could be created by tearing off a
+/// corresponding constructor function, which would be a static function defined
+/// on the class denoted by [C], with a fresh name here represented by adding
+/// [$tearoff]:
+///
+///   static C name$tearoff<typeParams>(params) => C<typeArgs>.name(args);
+///
+/// @description Checks constructor tear-off expression for generic class.
+/// @author iarkh@unipro.ru
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+
+class C<T> {
+  C(int i, T t) {}
+}
+
+main() {
+  Expect.isTrue(C.new is C Function<X>(int i, X d));
+  Expect.isTrue(C<int>.new is C Function<X extends int>(int i, X d));
+  Expect.isTrue(C.new<int> is C Function<T extends int>(int i, X d));
+}
diff --git a/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A06_t01.dart b/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A06_t01.dart
new file mode 100644
index 0000000..6382a00
--- /dev/null
+++ b/LanguageFeatures/Constructor-tear-offs/unnamed_constructor_A06_t01.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// @assertion In [dart:mirrors], the name of the constructor is still just [C],
+/// not [C.new] (that's not a valid symbol, and we don't want to break existing
+/// reflection using code).
+///
+/// @description Checks that the name of the constructor in [dart::mirrors] is
+/// [C].
+/// @author iarkh@unipro.ru
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import "../../Utils/expect.dart";
+import 'dart:mirrors';
+
+class C {
+  int x;
+  C(this.x);
+
+  checkName() {
+    bool found = false;
+    ClassMirror classMirror = reflect(C(1)).type;
+    for (var v in classMirror.declarations.values) {
+      String name = MirrorSystem.getName(v.simpleName);
+      found = name == "C";
+      if(name == "new") {
+        Expect.fail("Constructor name is new");
+      }
+    }
+    Expect.isTrue(found);
+  }
+}
+
+void main() {
+  C(1).checkName();
+
+  C.new(1).checkName();
+
+  var v = C.new;
+  v(1).checkName();
+}
