diff --git a/src/errors.h b/src/errors.h
index 7192514..b6abf4a 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -3402,11 +3402,12 @@
 	INIT(= N_("E1327: Object required, found %s"));
 EXTERN char e_constructor_default_value_must_be_vnone_str[]
 	INIT(= N_("E1328: Constructor default value must be v:none: %s"));
-// E1329 unused
+EXTERN char e_invalid_class_variable_declaration_str[]
+	INIT(= N_("E1329: Invalid class variable declaration: %s"));
 EXTERN char e_invalid_type_for_object_variable_str[]
 	INIT(= N_("E1330: Invalid type for object variable: %s"));
-EXTERN char e_public_must_be_followed_by_this_or_static[]
-	INIT(= N_("E1331: Public must be followed by \"this\" or \"static\""));
+EXTERN char e_public_must_be_followed_by_var_or_static[]
+	INIT(= N_("E1331: Public must be followed by \"var\" or \"static\""));
 EXTERN char e_public_variable_name_cannot_start_with_underscore_str[]
 	INIT(= N_("E1332: Public variable name cannot start with underscore: %s"));
 EXTERN char e_cannot_access_protected_variable_str[]
@@ -3487,8 +3488,8 @@
 	INIT(= N_("E1366: Cannot access protected method: %s"));
 EXTERN char e_variable_str_of_interface_str_has_different_access[]
 	INIT(= N_("E1367: Access level of variable \"%s\" of interface \"%s\" is different"));
-EXTERN char e_static_cannot_be_followed_by_this[]
-	INIT(= N_("E1368: Static cannot be followed by \"this\" in a variable name"));
+EXTERN char e_static_must_be_followed_by_var_or_def[]
+	INIT(= N_("E1368: Static must be followed by \"var\" or \"def\""));
 EXTERN char e_duplicate_variable_str[]
 	INIT(= N_("E1369: Duplicate variable: %s"));
 EXTERN char e_cannot_define_new_method_as_static[]
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim
index 216118e..1267936 100644
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -4845,7 +4845,7 @@
       vim9script
 
       class Foo
-        this.val: number
+        var val: number
         def Add()
           echo this.val
         enddef
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index 6f9723d..bb806cc 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -67,6 +67,33 @@
   END
   v9.CheckSourceFailure(lines, "E488: Trailing characters: | echo 'done'", 3)
 
+  # Use old "this." prefixed member variable declaration syntax (without intialization)
+  lines =<< trim END
+    vim9script
+    class Something
+      this.count: number
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1318: Not a valid command in a class: this.count: number', 3)
+
+  # Use old "this." prefixed member variable declaration syntax (with intialization)
+  lines =<< trim END
+    vim9script
+    class Something
+      this.count: number = 42
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1318: Not a valid command in a class: this.count: number = 42', 3)
+
+  # Use old "this." prefixed member variable declaration syntax (type inferred)
+  lines =<< trim END
+    vim9script
+    class Something
+      this.count = 42
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1318: Not a valid command in a class: this.count = 42', 3)
+
   # Use "this" without any member variable name
   lines =<< trim END
     vim9script
@@ -74,7 +101,7 @@
       this
     endclass
   END
-  v9.CheckSourceFailure(lines, 'E1317: Invalid object variable declaration: this', 3)
+  v9.CheckSourceFailure(lines, 'E1318: Not a valid command in a class: this', 3)
 
   # Use "this." without any member variable name
   lines =<< trim END
@@ -83,7 +110,7 @@
       this.
     endclass
   END
-  v9.CheckSourceFailure(lines, 'E1317: Invalid object variable declaration: this.', 3)
+  v9.CheckSourceFailure(lines, 'E1318: Not a valid command in a class: this.', 3)
 
   # Space between "this" and ".<variable>"
   lines =<< trim END
@@ -92,7 +119,7 @@
       this .count
     endclass
   END
-  v9.CheckSourceFailure(lines, 'E1317: Invalid object variable declaration: this .count', 3)
+  v9.CheckSourceFailure(lines, 'E1318: Not a valid command in a class: this .count', 3)
 
   # Space between "this." and the member variable name
   lines =<< trim END
@@ -101,26 +128,44 @@
       this. count
     endclass
   END
-  v9.CheckSourceFailure(lines, 'E1317: Invalid object variable declaration: this. count', 3)
+  v9.CheckSourceFailure(lines, 'E1318: Not a valid command in a class: this. count', 3)
 
   # Use "that" instead of "this"
   lines =<< trim END
     vim9script
     class Something
-      this.count: number
+      var count: number
       that.count
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1318: Not a valid command in a class: that.count', 4)
 
-  # Member variable without a type or initialization
+  # Use "variable" instead of "var" for member variable declaration (without initialization)
   lines =<< trim END
     vim9script
     class Something
-      this.count
+      variable count: number
     endclass
   END
-  v9.CheckSourceFailure(lines, 'E1022: Type or initialization required', 3)
+  v9.CheckSourceFailure(lines, 'E1318: Not a valid command in a class: variable count: number', 3)
+
+  # Use "variable" instead of "var" for member variable declaration (with initialization)
+  lines =<< trim END
+    vim9script
+    class Something
+      variable count: number = 42
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1318: Not a valid command in a class: variable count: number = 42', 3)
+
+  # Use "variable" instead of "var" for member variable declaration (type inferred)
+  lines =<< trim END
+    vim9script
+    class Something
+      variable count = 42
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1318: Not a valid command in a class: variable count = 42', 3)
 
   # Use a non-existing member variable in new()
   lines =<< trim END
@@ -138,7 +183,7 @@
   lines =<< trim END
     vim9script
     class Something
-      this.count : number
+      var count : number
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1059: No white space allowed before colon: count : number', 3)
@@ -147,11 +192,38 @@
   lines =<< trim END
     vim9script
     class Something
-      this.count:number
+      var count:number
     endclass
   END
   v9.CheckSourceFailure(lines, "E1069: White space required after ':'", 3)
 
+  # Missing ":var" in a "var" member variable declaration (without initialization)
+  lines =<< trim END
+    vim9script
+    class Something
+      var: number
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1317: Invalid object variable declaration: var: number', 3)
+
+  # Missing ":var" in a "var" member variable declaration (with initialization)
+  lines =<< trim END
+    vim9script
+    class Something
+      var: number = 42
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1317: Invalid object variable declaration: var: number = 42', 3)
+
+  # Missing ":var" in a "var" member variable declaration (type inferred)
+  lines =<< trim END
+    vim9script
+    class Something
+      var = 42
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1317: Invalid object variable declaration: var = 42', 3)
+
   # Test for unsupported comment specifier
   lines =<< trim END
     vim9script
@@ -227,8 +299,8 @@
     vim9script
 
     class TextPosition
-      this.lnum: number
-      this.col: number
+      var lnum: number
+      var col: number
 
       # make a nicely formatted string
       def ToString(): string
@@ -293,7 +365,7 @@
   lines =<< trim END
     vim9script
     class A
-      this.y = {
+      var y = {
         X: 1
       }
     endclass
@@ -312,7 +384,7 @@
       enddef
     endclass
   END
-  v9.CheckSourceFailure(lines, 'E1331: Public must be followed by "this" or "static"', 3)
+  v9.CheckSourceFailure(lines, 'E1331: Public must be followed by "var" or "static"', 3)
 
   # Using the "public" keyword when defining a class method
   lines =<< trim END
@@ -332,7 +404,7 @@
       enddef
     endclass
   END
-  v9.CheckSourceFailure(lines, 'E1331: Public must be followed by "this" or "static"', 3)
+  v9.CheckSourceFailure(lines, 'E1331: Public must be followed by "var" or "static"', 3)
 
   # Using the "public" keyword when defining a class protected method
   lines =<< trim END
@@ -415,7 +487,7 @@
   var lines =<< trim END
     vim9script
     abstract class SomeName
-      this.member = 'text'
+      var member = 'text'
     endinterface
   END
   v9.CheckSourceFailure(lines, 'E476: Invalid command: endinterface, expected endclass', 4)
@@ -423,7 +495,7 @@
   lines =<< trim END
     vim9script
     export interface AnotherName
-      this.member: string
+      var member: string
     endclass
   END
   v9.CheckSourceFailure(lines, 'E476: Invalid command: endclass, expected endinterface', 4)
@@ -435,7 +507,7 @@
     vim9script
 
     class State
-      this.value = 'xyz'
+      var value = 'xyz'
     endclass
 
     var state: State
@@ -449,7 +521,7 @@
     vim9script
 
     class Class
-      this.id: string
+      var id: string
       def Method1()
         echo 'Method1' .. this.id
       enddef
@@ -469,11 +541,11 @@
     vim9script
 
     class Background
-      this.background = 'dark'
+      var background = 'dark'
     endclass
 
     class Colorscheme
-      this._bg: Background
+      var _bg: Background
 
       def GetBackground(): string
         return this._bg.background
@@ -490,7 +562,7 @@
     vim9script
 
     class Class
-      this.id: string
+      var id: string
       def Method1()
         echo 'Method1' .. this.id
       enddef
@@ -552,8 +624,8 @@
     vim9script
 
     class TextPosition
-      this.lnum: number = 1
-      this.col: number = 1
+      var lnum: number = 1
+      var col: number = 1
 
       # constructor with only the line number
       def new(lnum: number)
@@ -588,11 +660,11 @@
     vim9script
 
     class Inner
-      this.value: number = 0
+      var value: number = 0
     endclass
 
     class Outer
-      this.inner: any
+      var inner: any
     endclass
 
     def F(outer: Outer)
@@ -611,11 +683,11 @@
     vim9script
 
     class Inner
-      this._value: string = ''
+      var _value: string = ''
     endclass
 
     class Outer
-      this.inner: any
+      var inner: any
     endclass
 
     def F(outer: Outer)
@@ -633,11 +705,11 @@
     vim9script
 
     class Inner
-      this.value: string = ''
+      var value: string = ''
     endclass
 
     class Outer
-      this.inner: any
+      var inner: any
     endclass
 
     def F(outer: Outer)
@@ -657,11 +729,11 @@
     vim9script
 
     class Inner
-      public this.value: number = 0
+      public var value: number = 0
     endclass
 
     class Outer
-      this.inner: Inner
+      var inner: Inner
     endclass
 
     def F(outer: Outer)
@@ -689,11 +761,11 @@
     vim9script
 
     class Inner
-      this.value: number = 0
+      var value: number = 0
     endclass
 
     class Outer
-      this.inner: Inner
+      var inner: Inner
     endclass
 
     def F(outer: Outer)
@@ -716,11 +788,11 @@
     vim9script
 
     class Inner
-      this.value: number = 0
+      var value: number = 0
     endclass
 
     class Outer
-      this.inner: Inner
+      var inner: Inner
     endclass
 
     def F(outer: Outer)
@@ -741,7 +813,7 @@
     vim9script
 
     class Foo
-      public this.x: number
+      public var x: number
 
       def Add(n: number)
         this.x += n
@@ -788,7 +860,7 @@
     vim9script
 
     class Something
-      this.label: string = ''
+      var label: string = ''
     endclass
 
     def Foo(): Something
@@ -807,8 +879,8 @@
     vim9script
 
     class TextPosition
-      this.lnum: number = 1
-      this.col: number = 1
+      var lnum: number = 1
+      var col: number = 1
     endclass
 
     var pos = TextPosition.new()
@@ -832,9 +904,9 @@
   lines =<< trim END
     vim9script
     class Person
-      this.name: string
-      this.age: number = 42
-      this.education: string = "unknown"
+      var name: string
+      var age: number = 42
+      var education: string = "unknown"
 
       def new(this.name, this.age = v:none, this.education = v:none)
       enddef
@@ -855,9 +927,9 @@
   lines =<< trim END
     vim9script
     class Person
-      this.name: string
-      this.age: number = 42
-      this.education: string = "unknown"
+      var name: string
+      var age: number = 42
+      var education: string = "unknown"
 
       def new(this.name, this.age = v:none, this.education = v:none)
       enddef
@@ -872,7 +944,7 @@
   lines =<< trim END
     vim9script
     class A
-      this.val: string
+      var val: string
       def new(this.val = 'a')
       enddef
     endclass
@@ -885,8 +957,8 @@
     vim9script
 
     class C
-      this.str: string
-      this.num: number
+      var str: string
+      var num: number
       def new(this.str, this.num)
       enddef
       def newVals(this.str, this.num)
@@ -915,8 +987,8 @@
     vim9script
 
     class C
-      this.str: string
-      this.num: number
+      var str: string
+      var num: number
       def new(this.str, this.num)
       enddef
     endclass
@@ -937,8 +1009,8 @@
     vim9script
 
     class C
-      this.str: string
-      this.num: number
+      var str: string
+      var num: number
       def newVals(this.str, this.num)
       enddef
     endclass
@@ -959,7 +1031,7 @@
     vim9script
 
     class C
-      this.str: string
+      var str: string
       def new(str: any)
       enddef
     endclass
@@ -980,7 +1052,7 @@
   lines =<< trim END
     vim9script
     class A
-      this.val = 10
+      var val = 10
       static def Foo(this.val: number)
       enddef
     endclass
@@ -991,7 +1063,7 @@
   lines =<< trim END
     vim9script
     class A
-      this.val = 10
+      var val = 10
       def Foo(this.val: number)
       enddef
     endclass
@@ -1003,9 +1075,9 @@
   var lines =<< trim END
     vim9script
     class TextPosition
-      this.lnum: number
-      this.col = 1
-      this.addcol: number = 2
+      var lnum: number
+      var col = 1
+      var addcol: number = 2
     endclass
 
     var pos = TextPosition.new()
@@ -1018,8 +1090,8 @@
   lines =<< trim END
     vim9script
     class TextPosition
-      this.lnum
-      this.col = 1
+      var lnum
+      var col = 1
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1022: Type or initialization required', 3)
@@ -1036,9 +1108,9 @@
     enddef
 
     class A
-      this.str1 = Init()
-      this.str2: string = Init()
-      this.col = 1
+      var str1 = Init()
+      var str2: string = Init()
+      var col = 1
     endclass
 
     assert_equal(init_count, 0)
@@ -1051,7 +1123,7 @@
   lines =<< trim END
     vim9script
     class A
-       this.value = init_val
+       var value = init_val
     endclass
     var a = A.new()
   END
@@ -1061,7 +1133,7 @@
   lines =<< trim END
     vim9script
     class A
-       this.value: void
+       var value: void
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1330: Invalid type for object variable: void', 3)
@@ -1072,9 +1144,9 @@
   var lines =<< trim END
     vim9script
     class Triple
-       this._one = 1
-       this.two = 2
-       public this.three = 3
+       var _one = 1
+       var two = 2
+       public var three = 3
 
        def GetOne(): number
          return this._one
@@ -1100,17 +1172,17 @@
   lines =<< trim END
     vim9script
     class A
-      public this._val = 10
+      public var _val = 10
     endclass
   END
-  v9.CheckSourceFailure(lines, 'E1332: Public variable name cannot start with underscore: public this._val = 10', 3)
+  v9.CheckSourceFailure(lines, 'E1332: Public variable name cannot start with underscore: public var _val = 10', 3)
 
   lines =<< trim END
     vim9script
 
     class MyCar
-      this.make: string
-      this.age = 5
+      var make: string
+      var age = 5
 
       def new(make_arg: string)
         this.make = make_arg
@@ -1145,7 +1217,7 @@
     vim9script
 
     class MyCar
-      this.make: string
+      var make: string
 
       def new(make_arg: string)
         this.make = make_arg
@@ -1161,7 +1233,7 @@
     vim9script
 
     class Foo
-      this.x: list<number> = []
+      var x: list<number> = []
 
       def Add(n: number): any
         this.x->add(n)
@@ -1187,25 +1259,25 @@
   lines =<< trim END
     vim9script
     class Something
-      pub this.val = 1
+      pub var val = 1
     endclass
   END
-  v9.CheckSourceFailure(lines, 'E1065: Command cannot be shortened: pub this.val = 1', 3)
+  v9.CheckSourceFailure(lines, 'E1065: Command cannot be shortened: pub var val = 1', 3)
 
-  # Test for "public" keyword must be followed by "this" or "static".
+  # Test for "public" keyword must be followed by "var" or "static".
   lines =<< trim END
     vim9script
     class Something
       public val = 1
     endclass
   END
-  v9.CheckSourceFailure(lines, 'E1331: Public must be followed by "this" or "static"', 3)
+  v9.CheckSourceFailure(lines, 'E1331: Public must be followed by "var" or "static"', 3)
 
   # Modify a instance variable using the class name in the script context
   lines =<< trim END
     vim9script
     class A
-      public this.val = 1
+      public var val = 1
     endclass
     A.val = 1
   END
@@ -1215,7 +1287,7 @@
   lines =<< trim END
     vim9script
     class A
-      public this.val = 1
+      public var val = 1
     endclass
     var i = A.val
   END
@@ -1225,7 +1297,7 @@
   lines =<< trim END
     vim9script
     class A
-      public this.val = 1
+      public var val = 1
     endclass
     def T()
       A.val = 1
@@ -1238,7 +1310,7 @@
   lines =<< trim END
     vim9script
     class A
-      public this.val = 1
+      public var val = 1
     endclass
     def T()
       var i = A.val
@@ -1251,9 +1323,9 @@
   lines =<< trim END
     vim9script
     class A
-      this.ro_obj_var = 10
-      public this.rw_obj_var = 20
-      this._priv_obj_var = 30
+      var ro_obj_var = 10
+      public var rw_obj_var = 20
+      var _priv_obj_var = 30
     endclass
 
     class B extends A
@@ -1280,34 +1352,25 @@
   var lines =<< trim END
     vim9script
     class Something
-      stat this.val = 1
+      stat var val = 1
     endclass
   END
-  v9.CheckSourceFailure(lines, 'E1065: Command cannot be shortened: stat this.val = 1', 3)
-
-  # Test for "static" cannot be followed by "this".
-  lines =<< trim END
-    vim9script
-    class Something
-      static this.val = 1
-    endclass
-  END
-  v9.CheckSourceFailure(lines, 'E1368: Static cannot be followed by "this" in a variable name', 3)
+  v9.CheckSourceFailure(lines, 'E1065: Command cannot be shortened: stat var val = 1', 3)
 
   # Test for "static" cannot be followed by "public".
   lines =<< trim END
     vim9script
     class Something
-      static public val = 1
+      static public var val = 1
     endclass
   END
-  v9.CheckSourceFailure(lines, 'E1022: Type or initialization required', 3)
+  v9.CheckSourceFailure(lines, 'E1368: Static must be followed by "var" or "def"', 3)
 
   # A readonly class variable cannot be modified from a child class
   lines =<< trim END
     vim9script
     class A
-      static ro_class_var = 40
+      static var ro_class_var = 40
     endclass
 
     class B extends A
@@ -1325,7 +1388,7 @@
   lines =<< trim END
     vim9script
     class A
-      static _priv_class_var = 60
+      static var _priv_class_var = 60
     endclass
 
     class B extends A
@@ -1343,7 +1406,7 @@
   lines =<< trim END
     vim9script
     class A
-      static _priv_class_var = 60
+      static var _priv_class_var = 60
     endclass
 
     class B extends A
@@ -1361,9 +1424,9 @@
   lines =<< trim END
     vim9script
     class A
-      static ro_class_var = 10
-      public static rw_class_var = 20
-      static _priv_class_var = 30
+      static var ro_class_var = 10
+      public static var rw_class_var = 20
+      static var _priv_class_var = 30
     endclass
 
     class B extends A
@@ -1392,8 +1455,8 @@
   var class_lines =<< trim END
     vim9script
     class Item
-      this.nr = 0
-      this.name = 'xx'
+      var nr = 0
+      var name = 'xx'
     endclass
   END
 
@@ -1435,13 +1498,13 @@
     vim9script
 
     class One
-      this.one = 1
+      var one = 1
     endclass
     class Two
-      this.two = 2
+      var two = 2
     endclass
     class TwoMore extends Two
-      this.more = 9
+      var more = 9
     endclass
 
     var o: One = One.new()
@@ -1457,10 +1520,10 @@
     vim9script
 
     class One
-      this.one = 1
+      var one = 1
     endclass
     class Two
-      this.two = 2
+      var two = 2
     endclass
 
     var o: One = Two.new()
@@ -1474,7 +1537,7 @@
       def GetMember(): number
     endinterface
     class Two implements One
-      this.one = 1
+      var one = 1
       def GetMember(): number
         return this.one
       enddef
@@ -1489,7 +1552,7 @@
     vim9script
 
     class Num
-      this.n: number = 0
+      var n: number = 0
     endclass
 
     def Ref(name: string): func(Num): Num
@@ -1511,11 +1574,11 @@
   var lines =<< trim END
     vim9script
     class TextPos
-       this.lnum = 1
-       this.col = 1
-       static counter = 0
-       static _secret = 7
-       public static  anybody = 42
+       var lnum = 1
+       var col = 1
+       static var counter = 0
+       static var _secret = 7
+       public static var anybody = 42
 
        static def AddToCounter(nr: number)
          counter += nr
@@ -1551,8 +1614,8 @@
   lines =<< trim END
     vim9script
     class OtherThing
-      this.size: number
-      static totalSize: number
+      var size: number
+      static var totalSize: number
 
       def new(this.size)
         totalSize += this.size
@@ -1571,7 +1634,7 @@
     vim9script
 
     class HTML
-      static author: string = 'John Doe'
+      static var author: string = 'John Doe'
 
       static def MacroSubstitute(s: string): string
         return substitute(s, '{{author}}', author, 'gi')
@@ -1588,7 +1651,7 @@
     vim9script
 
     class Foo
-      this._x: number = 0
+      var _x: number = 0
 
       def Add(n: number): number
         const F = (): number => this._x + n
@@ -1606,7 +1669,7 @@
     vim9script
 
     class Foo
-      this._x: number = 6
+      var _x: number = 6
 
       def Add(n: number): number
         var Lam = () => {
@@ -1627,7 +1690,7 @@
     vim9script
 
     class Some
-      static count = 0
+      static var count = 0
       def Method(count: number)
         echo count
       enddef
@@ -1643,7 +1706,7 @@
     vim9script
 
     class Some
-      static count = 0
+      static var count = 0
       def Method(arg: number)
         var count = 3
         echo arg count
@@ -1659,7 +1722,7 @@
   lines =<< trim END
     vim9script
     class A
-      this.val: xxx
+      var val: xxx
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1010: Type not recognized: xxx', 3)
@@ -1668,7 +1731,7 @@
   lines =<< trim END
     vim9script
     class A
-      public this.val: string
+      public var val: string
     endclass
 
     def F()
@@ -1683,7 +1746,7 @@
   lines =<< trim END
     vim9script
     class A
-      this.val: string
+      var val: string
     endclass
 
     def F()
@@ -1698,7 +1761,7 @@
   lines =<< trim END
     vim9script
     class A
-      public this.val: string
+      public var val: string
     endclass
 
     var obj: A
@@ -1710,7 +1773,7 @@
   lines =<< trim END
     vim9script
     class A
-      this.val: string
+      var val: string
     endclass
 
     var obj: A
@@ -1723,14 +1786,14 @@
   lines =<< trim END
     vim9script
     class A
-      this.val: number= 10
+      var val: number= 10
     endclass
   END
   v9.CheckSourceFailure(lines, "E1004: White space required before and after '='", 3)
   lines =<< trim END
     vim9script
     class A
-      this.val: number =10
+      var val: number =10
     endclass
   END
   v9.CheckSourceFailure(lines, "E1004: White space required before and after '='", 3)
@@ -1753,7 +1816,7 @@
     vim9script
 
     class Base
-      this._v1: list<list<number>>
+      var _v1: list<list<number>>
     endclass
 
     class Child extends Base
@@ -1767,7 +1830,7 @@
     vim9script
 
     class Base
-      this._v1: list<list<number>>
+      var _v1: list<list<number>>
     endclass
 
     class Child extends Base
@@ -1784,7 +1847,7 @@
     vim9script
 
     class Base
-      this.v1: list<list<number>>
+      var v1: list<list<number>>
     endclass
 
     class Child extends Base
@@ -1798,7 +1861,7 @@
     vim9script
 
     class Base
-      this.v1: list<list<number>>
+      var v1: list<list<number>>
     endclass
 
     class Child extends Base
@@ -1821,7 +1884,7 @@
     endclass
 
     class Base extends Base0
-      this._v1: list<list<number>>
+      var _v1: list<list<number>>
     endclass
 
     class Child extends Base
@@ -1847,7 +1910,7 @@
     endclass
 
     class Child extends Base
-      this._v1: list<list<number>>
+      var _v1: list<list<number>>
     endclass
 
     def F()
@@ -1864,9 +1927,9 @@
     vim9script
 
     class Point
-      this.p = [2, 3]
-      static pl = ['a', 'b']
-      static pd = {a: 'a', b: 'b'}
+      var p = [2, 3]
+      static var pl = ['a', 'b']
+      static var pd = {a: 'a', b: 'b'}
     endclass
 
     echo Point.pl Point.pd
@@ -1882,15 +1945,15 @@
     endinterface
 
     class Widget
-      this.view: View
+      var view: View
     endclass
 
     class MyView implements View
-      this.widget: Widget
+      var widget: Widget
 
       def new()
         # this will result in a circular reference to this object
-        this.widget = Widget.new(this)
+        var widget = Widget.new(this)
       enddef
     endclass
 
@@ -1909,17 +1972,17 @@
     vim9script
 
     interface I
-      this.ro_obj_var: number
+      var ro_obj_var: number
 
       def ObjFoo(): number
     endinterface
 
     class A implements I
-      static ro_class_var: number = 10
-      public static rw_class_var: number = 20
-      static _priv_class_var: number = 30
-      this.ro_obj_var: number = 40
-      this._priv_obj_var: number = 60
+      static var ro_class_var: number = 10
+      public static var rw_class_var: number = 20
+      static var _priv_class_var: number = 30
+      var ro_obj_var: number = 40
+      var _priv_obj_var: number = 60
 
       static def _ClassBar(): number
         return _priv_class_var
@@ -1952,8 +2015,8 @@
   var lines =<< trim END
     vim9script
     class Value
-      this.value = 0
-      static objects = 0
+      var value = 0
+      static var objects = 0
 
       def new(v: number)
         this.value = v
@@ -1990,7 +2053,7 @@
   lines =<< trim END
     vim9script
     class A
-      static myList: list<number> = [1]
+      static var myList: list<number> = [1]
       static def Foo(n: number)
         myList->add(n)
       enddef
@@ -2087,8 +2150,8 @@
   var lines =<< trim END
     vim9script
     class TextPosition
-      this.lnum = 1
-      this.col = 22
+      var lnum = 1
+      var col = 22
     endclass
 
     assert_equal("class TextPosition", string(TextPosition))
@@ -2103,7 +2166,7 @@
   var lines =<< trim END
     vim9script
     interface Something
-      this.ro_var: list<number>
+      var ro_var: list<number>
       def GetCount(): number
     endinterface
   END
@@ -2111,7 +2174,7 @@
 
   lines =<< trim END
     interface SomethingWrong
-      static count = 7
+      static var count = 7
     endinterface
   END
   v9.CheckSourceFailure(lines, 'E1342: Interface can only be defined in Vim9 script', 1)
@@ -2120,7 +2183,7 @@
     vim9script
 
     interface Some
-      this.value: number
+      var value: number
       def Method(value: number)
     endinterface
   END
@@ -2131,7 +2194,7 @@
   lines =<< trim END
     vim9script
     interface somethingWrong
-      static count = 7
+      static var count = 7
     endinterface
   END
   v9.CheckSourceFailure(lines, 'E1343: Interface name must start with an uppercase letter: somethingWrong', 2)
@@ -2139,8 +2202,8 @@
   lines =<< trim END
     vim9script
     interface SomethingWrong
-      this.value: string
-      this.count = 7
+      var value: string
+      var count = 7
       def GetCount(): number
     endinterface
   END
@@ -2149,8 +2212,8 @@
   lines =<< trim END
     vim9script
     interface SomethingWrong
-      this.value: string
-      this.count: number
+      var value: string
+      var count: number
       def GetCount(): number
         return 5
       enddef
@@ -2201,24 +2264,24 @@
     vim9script
 
     interface Some
-      this.count: number
+      var count: number
       def Method(nr: number)
     endinterface
 
     class SomeImpl implements Some
-      this.count: number
+      var count: number
       def Method(nr: number)
         echo nr
       enddef
     endclass
 
     interface Another
-      this.member: string
+      var member: string
     endinterface
 
     class AnotherImpl implements Some, Another
-      this.member = 'abc'
-      this.count = 20
+      var member = 'abc'
+      var count = 20
       def Method(nr: number)
         echo nr
       enddef
@@ -2230,11 +2293,11 @@
     vim9script
 
     interface Some
-      this.count: number
+      var count: number
     endinterface
 
     class SomeImpl implements Some implements Some
-      this.count: number
+      var count: number
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1350: Duplicate "implements"', 7)
@@ -2243,11 +2306,11 @@
     vim9script
 
     interface Some
-      this.count: number
+      var count: number
     endinterface
 
     class SomeImpl implements Some, Some
-      this.count: number
+      var count: number
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1351: Duplicate interface after "implements": Some', 7)
@@ -2256,12 +2319,12 @@
     vim9script
 
     interface Some
-      this.counter: number
+      var counter: number
       def Method(nr: number)
     endinterface
 
     class SomeImpl implements Some
-      this.count: number
+      var count: number
       def Method(nr: number)
         echo nr
       enddef
@@ -2273,12 +2336,12 @@
     vim9script
 
     interface Some
-      this.count: number
+      var count: number
       def Methods(nr: number)
     endinterface
 
     class SomeImpl implements Some
-      this.count: number
+      var count: number
       def Method(nr: number)
         echo nr
       enddef
@@ -2291,15 +2354,15 @@
     vim9script
 
       interface Result
-        this.label: string
-        this.errpos: number
+        var label: string
+        var errpos: number
       endinterface
 
       # order of members is opposite of interface
       class Failure implements Result
-        public this.lnum: number = 5
-        this.errpos: number = 42
-        this.label: string = 'label'
+        public var lnum: number = 5
+        var errpos: number = 42
+        var label: string = 'label'
       endclass
 
     def Test()
@@ -2412,16 +2475,16 @@
     vim9script
 
     interface I1
-      this.mvar1: number
-      this.mvar2: number
+      var mvar1: number
+      var mvar2: number
     endinterface
 
     # NOTE: the order is swapped
     class A implements I1
-      this.mvar2: number
-      this.mvar1: number
-      public static svar2: number
-      public static svar1: number
+      var mvar2: number
+      var mvar1: number
+      public static var svar2: number
+      public static var svar1: number
       def new()
         svar1 = 11
         svar2 = 12
@@ -2464,20 +2527,20 @@
     vim9script
 
     interface I1
-      this.mvar1: number
-      this.mvar2: number
+      var mvar1: number
+      var mvar2: number
     endinterface
 
     interface I2
-      this.mvar3: number
-      this.mvar4: number
+      var mvar3: number
+      var mvar4: number
     endinterface
 
     class A implements I1
-      public static svar1: number
-      public static svar2: number
-      this.mvar1: number
-      this.mvar2: number
+      public static var svar1: number
+      public static var svar2: number
+      var mvar1: number
+      var mvar2: number
       def new()
         svar1 = 11
         svar2 = 12
@@ -2487,10 +2550,10 @@
     endclass
 
     class B extends A implements I2
-      static svar3: number
-      static svar4: number
-      this.mvar3: number
-      this.mvar4: number
+      static var svar3: number
+      static var svar4: number
+      var mvar3: number
+      var mvar4: number
       def new()
         svar3 = 23
         svar4 = 24
@@ -2502,7 +2565,7 @@
     endclass
 
     class C extends B
-      public static svar5: number
+      public static var svar5: number
       def new()
         svar5 = 1001
         this.mvar1 = 131
@@ -2686,8 +2749,8 @@
     vim9script
 
     class Point
-      this.x = 0
-      this.y = 0
+      var x = 0
+      var y = 0
     endclass
 
     var p: Point
@@ -2701,12 +2764,12 @@
     vim9script
 
     interface HasX
-      this.x: number
+      var x: number
     endinterface
 
     class Point implements HasX
-      this.x = 0
-      this.y = 0
+      var x = 0
+      var y = 0
     endclass
 
     var p: Point
@@ -2720,8 +2783,8 @@
     vim9script
 
     class Point
-      this.x = 0
-      this.y = 0
+      var x = 0
+      var y = 0
     endclass
 
     var p: Point
@@ -2734,13 +2797,13 @@
   var lines =<< trim END
     vim9script
     class Base
-      this.one = 1
+      var one = 1
       def GetOne(): number
         return this.one
       enddef
     endclass
     class Child extends Base
-      this.two = 2
+      var two = 2
       def GetTotal(): number
         return this.one + this.two
       enddef
@@ -2756,10 +2819,10 @@
   lines =<< trim END
     vim9script
     class Base
-      this.one = 1
+      var one = 1
     endclass
     class Child extends Base
-      this.two = 2
+      var two = 2
     endclass
     var o = Child.new(3, 44)
     assert_equal(3, o.one)
@@ -2770,10 +2833,10 @@
   lines =<< trim END
     vim9script
     class Base
-      this.one = 1
+      var one = 1
     endclass
     class Child extends Base extends Base
-      this.two = 2
+      var two = 2
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1352: Duplicate "extends"', 5)
@@ -2781,7 +2844,7 @@
   lines =<< trim END
     vim9script
     class Child extends BaseClass
-      this.two = 2
+      var two = 2
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1353: Class name not found: BaseClass', 4)
@@ -2790,7 +2853,7 @@
     vim9script
     var SomeVar = 99
     class Child extends SomeVar
-      this.two = 2
+      var two = 2
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1354: Cannot extend SomeVar', 5)
@@ -2798,14 +2861,14 @@
   lines =<< trim END
     vim9script
     class Base
-      this.name: string
+      var name: string
       def ToString(): string
         return this.name
       enddef
     endclass
 
     class Child extends Base
-      this.age: number
+      var age: number
       def ToString(): string
         return super.ToString() .. ': ' .. this.age
       enddef
@@ -2819,7 +2882,7 @@
   lines =<< trim END
     vim9script
     class Child
-      this.age: number
+      var age: number
       def ToString(): number
         return this.age
       enddef
@@ -2833,7 +2896,7 @@
   lines =<< trim END
     vim9script
     class Child
-      this.age: number
+      var age: number
       def ToString(): string
         return super .ToString() .. ': ' .. this.age
       enddef
@@ -2846,7 +2909,7 @@
   lines =<< trim END
     vim9script
     class Base
-      this.name: string
+      var name: string
       def ToString(): string
         return this.name
       enddef
@@ -2863,7 +2926,7 @@
   lines =<< trim END
     vim9script
     class Child
-      this.age: number
+      var age: number
       def ToString(): string
         return super.ToString() .. ': ' .. this.age
       enddef
@@ -2876,14 +2939,14 @@
   lines =<< trim END
     vim9script
     class Base
-      this.name: string
+      var name: string
       static def ToString(): string
         return 'Base class'
       enddef
     endclass
 
     class Child extends Base
-      this.age: number
+      var age: number
       def ToString(): string
         return Base.ToString() .. ': ' .. this.age
       enddef
@@ -2897,7 +2960,7 @@
   lines =<< trim END
     vim9script
     class Base
-      this.value = 1
+      var value = 1
       def new(init: number)
         this.value = number + 1
       enddef
@@ -2916,8 +2979,8 @@
     vim9script
 
     class Result
-      this.success: bool
-      this.value: any = null
+      var success: bool
+      var value: any = null
     endclass
 
     class Success extends Result
@@ -2986,7 +3049,7 @@
     vim9script
 
     class Base
-      this.success: bool = false
+      var success: bool = false
       def Method(arg = 0)
         this.success = true
       enddef
@@ -3008,8 +3071,8 @@
   var lines =<< trim END
     vim9script
     export class Animal
-      this.kind: string
-      this.name: string
+      var kind: string
+      var name: string
     endclass
   END
   writefile(lines, 'Xanimal.vim', 'D')
@@ -3090,10 +3153,10 @@
   var lines =<< trim END
     vim9script
     abstract class Base
-      this.name: string
+      var name: string
     endclass
     class Person extends Base
-      this.age: number
+      var age: number
     endclass
     var p: Base = Person.new('Peter', 42)
     assert_equal('Peter', p.name)
@@ -3104,10 +3167,10 @@
   lines =<< trim END
     vim9script
     abstract class Base
-      this.name: string
+      var name: string
     endclass
     class Person extends Base
-      this.age: number
+      var age: number
     endclass
     var p = Base.new('Peter')
   END
@@ -3115,7 +3178,7 @@
 
   lines =<< trim END
     abstract class Base
-      this.name: string
+      var name: string
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1316: Class can only be defined in Vim9 script', 1)
@@ -3136,7 +3199,7 @@
     vim9script
 
     class Foo
-      this.y: list<string> = ['B']
+      var y: list<string> = ['B']
 
       def new()
         g:result = filter(['A', 'B'], (_, v) => index(this.y, v) == -1)
@@ -3201,8 +3264,8 @@
     var createdObject: any
 
     class A
-      this.val1: number
-      this.val2: number
+      var val1: number
+      var val2: number
       static def CreateA(...args: list<any>): any
         createdObject = call(A.new, args)
         return createdObject
@@ -3300,7 +3363,7 @@
     endclass
 
     class Property
-      this.value: any
+      var value: any
 
       def Set(v: any)
         if v != this.value
@@ -3313,7 +3376,7 @@
     endclass
 
     class Bool extends Property
-      this.value2: bool
+      var value2: bool
     endclass
 
     def Observe(obj: Property, who: Observer)
@@ -3491,7 +3554,7 @@
     vim9script
 
     class Widget
-      this._lnum: number = 1
+      var _lnum: number = 1
 
       def SetY(lnum: number)
         this._lnum = lnum
@@ -3601,15 +3664,15 @@
     vim9script
 
     class A
-      public this.val1: number = 0
+      public var val1: number = 0
     endclass
 
     class B extends A
-      public this.val2: number = 0
+      public var val2: number = 0
     endclass
 
     class C extends B
-      public this.val3: number = 0
+      public var val3: number = 0
     endclass
 
     def A_members(a: A)
@@ -3669,7 +3732,7 @@
     vim9script
 
     class C
-      this._bufnr: number
+      var _bufnr: number
 
       def new(this._bufnr)
         if !bufexists(this._bufnr)
@@ -3699,7 +3762,7 @@
     vim9script
 
     class C
-      this._bufnr: number
+      var _bufnr: number
 
       def new(this._bufnr)
         if !bufexists(this._bufnr)
@@ -3730,7 +3793,7 @@
     vim9script
 
     class C
-      this._bufnr: number
+      var _bufnr: number
 
       def new(this._bufnr): any
         if !bufexists(this._bufnr)
@@ -3747,7 +3810,7 @@
     vim9script
 
     class C
-      this._state: dict<any>
+      var _state: dict<any>
 
       def new(): dict<any>
         this._state = {}
@@ -3778,7 +3841,7 @@
     enddef
 
     class C
-      this._foo: bool = F()
+      var _foo: bool = F()
     endclass
 
     var c1 = C.new()
@@ -3794,7 +3857,7 @@
     vim9script
 
     class C
-      this.val: number
+      var val: number
       def new(this.val)
       enddef
     endclass
@@ -3840,7 +3903,7 @@
     vim9script
 
     class C
-      this.val1: number
+      var val1: number
       def Lock()
         lockvar this.val1
       enddef
@@ -3855,7 +3918,7 @@
     vim9script
 
     class C
-      this.val2: number
+      var val2: number
     endclass
     var o = C.new(3)
     lockvar o.val2
@@ -3867,7 +3930,7 @@
     vim9script
 
     class C
-      this.val3: number
+      var val3: number
     endclass
     var o = C.new(3)
     def Lock()
@@ -3882,7 +3945,7 @@
     vim9script
 
     class C
-      this.val4: number
+      var val4: number
     endclass
     def Lock(o: C)
       lockvar o.val4
@@ -3899,7 +3962,7 @@
     vim9script
 
     class C
-      this.val5: number
+      var val5: number
       def Lock(o_any: any)
         lockvar o_any.val5
       enddef
@@ -3914,7 +3977,7 @@
     vim9script
 
     class C
-      this.val6: number
+      var val6: number
       static def Lock(o_any: any)
         lockvar o_any.val6
       enddef
@@ -3933,7 +3996,7 @@
     vim9script
 
     class C
-      public this.val1: number
+      public var val1: number
       def Lock()
         lockvar this.val1
       enddef
@@ -3948,7 +4011,7 @@
     vim9script
 
     class C
-      public this.val2: number
+      public var val2: number
     endclass
     var o = C.new(3)
     lockvar o.val2
@@ -3960,7 +4023,7 @@
     vim9script
 
     class C
-      public this.val3: number
+      public var val3: number
     endclass
     var o = C.new(3)
     def Lock()
@@ -3975,7 +4038,7 @@
     vim9script
 
     class C
-      public this.val4: number
+      public var val4: number
     endclass
     def Lock(o: C)
       lockvar o.val4
@@ -3989,7 +4052,7 @@
     vim9script
 
     class C
-      public this.val5: number
+      public var val5: number
       def Lock(o_any: any)
         lockvar o_any.val5
       enddef
@@ -4004,7 +4067,7 @@
     vim9script
 
     class C
-      public this.val6: number
+      public var val6: number
       static def Lock(o_any: any)
         lockvar o_any.val6
       enddef
@@ -4023,7 +4086,7 @@
     vim9script
 
     class C
-      public static sval1: number
+      public static var sval1: number
       def Lock()
         lockvar sval1
       enddef
@@ -4038,7 +4101,7 @@
     vim9script
 
     class C
-      public static sval2: number
+      public static var sval2: number
       def Lock()
         lockvar C.sval2
       enddef
@@ -4053,7 +4116,7 @@
     vim9script
 
     class C
-      public static sval3: number
+      public static var sval3: number
       static def Lock()
         lockvar sval3
       enddef
@@ -4067,7 +4130,7 @@
     vim9script
 
     class C
-      public static sval4: number
+      public static var sval4: number
       static def Lock()
         lockvar C.sval4
       enddef
@@ -4081,7 +4144,7 @@
     vim9script
 
     class C
-      public static sval5: number
+      public static var sval5: number
     endclass
     lockvar C.sval5
   END
@@ -4092,7 +4155,7 @@
     vim9script
 
     class C
-      public static sval6: number
+      public static var sval6: number
     endclass
     var o = C.new()
     lockvar o.sval6
@@ -4123,7 +4186,7 @@
     vim9script
 
     class C
-      public static sval: list<number>
+      public static var sval: list<number>
     endclass
 
     def Lock2(sval: any)
@@ -4140,7 +4203,7 @@
     vim9script
 
     class C
-      public static sval: list<number>
+      public static var sval: list<number>
     endclass
 
     def Lock2(sval: any)
@@ -4156,7 +4219,7 @@
     vim9script
 
     class C
-      public static sval: list<number>
+      public static var sval: list<number>
     endclass
 
     def Lock2(sval: any)
@@ -4172,7 +4235,7 @@
     vim9script
 
     class C
-      public static sval: list<number>
+      public static var sval: list<number>
       def Lock2()
         lockvar sval
       enddef
@@ -4247,7 +4310,7 @@
     vim9script
 
     class C
-      public this.val: list<list<number>> = [ [1], [2], [3] ]
+      public var val: list<list<number>> = [ [1], [2], [3] ]
     endclass
     def Lock2(obj: any)
       lockvar obj.val[1]
@@ -4273,7 +4336,7 @@
     vim9script
 
     class C
-      public this.val: list<list<number>> = [ [1], [2], [3] ]
+      public var val: list<list<number>> = [ [1], [2], [3] ]
     endclass
 
     var o = C.new()
@@ -4313,7 +4376,7 @@
     vim9script
 
     class C
-      this._v1: list<list<number>>
+      var _v1: list<list<number>>
       def Lock()
         lockvar lc[0]._v1[1]
       enddef
@@ -4337,14 +4400,14 @@
     vim9script
 
     class C2
-      this._v1: list<list<number>>
+      var _v1: list<list<number>>
       def Lock(obj: any)
         lockvar lc[0]._v1[1]
       enddef
     endclass
 
     class C
-      this._v1: list<list<number>>
+      var _v1: list<list<number>>
     endclass
 
     var l = [[1], [2], [3]]
@@ -4367,10 +4430,10 @@
     vim9script
 
     class C
-      this.o0: list<list<number>> = [ [0],  [1],  [2]]
-      this.o1: list<list<number>> = [[10], [11], [12]]
-      static c0: list<list<number>> = [[20], [21], [22]]
-      static c1: list<list<number>> = [[30], [31], [32]]
+      var o0: list<list<number>> = [ [0],  [1],  [2]]
+      var o1: list<list<number>> = [[10], [11], [12]]
+      static var c0: list<list<number>> = [[20], [21], [22]]
+      static var c1: list<list<number>> = [[30], [31], [32]]
     endclass
 
     def LockIt(arg: any)
@@ -4445,10 +4508,10 @@
     var l0c1 = [[130], [131], [132]]
 
     class C0
-      this.o0: list<list<number>> =   l0o0
-      this.o1: list<list<number>> =   l0o1
-      static c0: list<list<number>> = l0c0
-      static c1: list<list<number>> = l0c1
+      var o0: list<list<number>> =   l0o0
+      var o1: list<list<number>> =   l0o1
+      static var c0: list<list<number>> = l0c0
+      static var c1: list<list<number>> = l0c1
       def Islocked(arg: string): number
           return islocked(arg)
       enddef
@@ -4463,10 +4526,10 @@
     var l2c1 = [[20130], [20131], [20132]]
 
     class C2
-      this.o0: list<list<number>> =   l2o0
-      this.o1: list<list<number>> =   l2o1
-      static c0: list<list<number>> = l2c0
-      static c1: list<list<number>> = l2c1
+      var o0: list<list<number>> =   l2o0
+      var o1: list<list<number>> =   l2o1
+      static var c0: list<list<number>> = l2c0
+      static var c1: list<list<number>> = l2c1
       def Islocked(arg: string): number
           return islocked(arg)
       enddef
@@ -4632,7 +4695,7 @@
     vim9script
 
     class C
-      this.val = { key: "value" }
+      var val = { key: "value" }
       def Islocked(arg: string): number
           return islocked(arg)
       enddef
@@ -5169,8 +5232,8 @@
     vim9script
 
     class A
-      static _svar: number
-      this._mvar: number
+      static var _svar: number
+      var _mvar: number
       def new()
         _svar = 1
         this._mvar = 101
@@ -5223,8 +5286,8 @@
   var lines =<< trim END
     vim9script
     class C
-      this.val = 10
-      this.val = 20
+      var val = 10
+      var val = 20
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 4)
@@ -5233,8 +5296,8 @@
   lines =<< trim END
     vim9script
     class C
-      this._val = 10
-      this._val = 20
+      var _val = 10
+      var _val = 20
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val', 4)
@@ -5243,8 +5306,8 @@
   lines =<< trim END
     vim9script
     class C
-      public this.val = 10
-      public this.val = 20
+      public var val = 10
+      public var val = 20
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 4)
@@ -5253,8 +5316,8 @@
   lines =<< trim END
     vim9script
     class C
-      this.val = 10
-      this._val = 20
+      var val = 10
+      var _val = 20
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val', 4)
@@ -5263,8 +5326,8 @@
   lines =<< trim END
     vim9script
     class C
-      this._val = 20
-      public this.val = 10
+      var _val = 20
+      public var val = 10
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 4)
@@ -5273,8 +5336,8 @@
   lines =<< trim END
     vim9script
     class C
-      static s: string = "abc"
-      static _s: string = "def"
+      static var s: string = "abc"
+      static var _s: string = "def"
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _s', 4)
@@ -5283,8 +5346,8 @@
   lines =<< trim END
     vim9script
     class C
-      public static s: string = "abc"
-      static _s: string = "def"
+      public static var s: string = "abc"
+      static var _s: string = "def"
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _s', 4)
@@ -5293,8 +5356,8 @@
   lines =<< trim END
     vim9script
     class C
-      static val = 10
-      this.val = 20
+      static var val = 10
+      var val = 20
       def new()
       enddef
     endclass
@@ -5308,12 +5371,12 @@
   lines =<< trim END
     vim9script
     class A
-      this.val = 10
+      var val = 10
     endclass
     class B extends A
     endclass
     class C extends B
-      this.val = 20
+      var val = 20
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 9)
@@ -5322,12 +5385,12 @@
   lines =<< trim END
     vim9script
     class A
-      this._val = 10
+      var _val = 10
     endclass
     class B extends A
     endclass
     class C extends B
-      this._val = 20
+      var _val = 20
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val', 9)
@@ -5336,12 +5399,12 @@
   lines =<< trim END
     vim9script
     class A
-      this.val = 10
+      var val = 10
     endclass
     class B extends A
     endclass
     class C extends B
-      this._val = 20
+      var _val = 20
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val', 9)
@@ -5350,12 +5413,12 @@
   lines =<< trim END
     vim9script
     class A
-      this._val = 10
+      var _val = 10
     endclass
     class B extends A
     endclass
     class C extends B
-      this.val = 20
+      var val = 20
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 9)
@@ -5364,8 +5427,8 @@
   lines =<< trim END
     vim9script
     class A
-      public static svar2: number
-      public static svar: number
+      public static var svar2: number
+      public static var svar: number
     endclass
   END
   v9.CheckSourceSuccess(lines)
@@ -5377,7 +5440,7 @@
   var lines =<< trim END
     vim9script
     class A
-      this._val = 10
+      var _val = 10
       def GetVal(): number
         return this._val
       enddef
@@ -5394,7 +5457,7 @@
   lines =<< trim END
     vim9script
     class A
-      this._val = 10
+      var _val = 10
     endclass
     def T()
       var a = A.new()
@@ -5408,7 +5471,7 @@
   lines =<< trim END
     vim9script
     class A
-      static _val = 10
+      static var _val = 10
     endclass
     def T()
       var a = A.new()
@@ -5422,7 +5485,7 @@
   lines =<< trim END
     vim9script
     class A
-      static _val = 10
+      static var _val = 10
     endclass
     def T()
       var a = A.new()
@@ -5436,7 +5499,7 @@
   lines =<< trim END
     vim9script
     class A
-      static _val = 10
+      static var _val = 10
     endclass
     def T()
       var x = A._val
@@ -5449,7 +5512,7 @@
   lines =<< trim END
     vim9script
     class A
-      static _val = 10
+      static var _val = 10
     endclass
     def T()
       A._val = 3
@@ -5464,10 +5527,10 @@
   var lines =<< trim END
     vim9script
     interface A
-      this.val: number
+      var val: number
     endinterface
     class B implements A
-      public this.val = 10
+      public var val = 10
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1367: Access level of variable "val" of interface "A" is different', 7)
@@ -5475,10 +5538,10 @@
   lines =<< trim END
     vim9script
     interface A
-      this.val: number
+      var val: number
     endinterface
     class B implements A
-      public this.val = 10
+      public var val = 10
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1367: Access level of variable "val" of interface "A" is different', 7)
@@ -5489,7 +5552,7 @@
   var lines =<< trim END
     vim9script
     class A
-      this.val: number
+      var val: number
     endclass
     def T()
       var a = A.new()
@@ -5505,10 +5568,10 @@
   var lines =<< trim END
     vim9script
     class A
-      this.var1: number = 10
-      public static var2: list<number> = [1, 2]
-      public static var3: dict<number> = {a: 1, b: 2}
-      static _priv_var4: number = 40
+      var var1: number = 10
+      public static var var2: list<number> = [1, 2]
+      public static var var3: dict<number> = {a: 1, b: 2}
+      static var _priv_var4: number = 40
     endclass
     def T()
       assert_equal([1, 2], A.var2)
@@ -5529,8 +5592,8 @@
   var lines =<< trim END
     vim9script
     class A
-      public static svar1: list<number> = [1]
-      public static svar2: list<number> = [2]
+      public static var svar1: list<number> = [1]
+      public static var svar2: list<number> = [2]
     endclass
 
     A.svar1->add(3)
@@ -5552,8 +5615,8 @@
   lines =<< trim END
     vim9script
     class A
-      public this.var1: number
-      public static svar2: list<number> = [1]
+      public var var1: number
+      public static var svar2: list<number> = [1]
     endclass
 
     var a = A.new()
@@ -5565,8 +5628,8 @@
   lines =<< trim END
     vim9script
     class A
-      public this.var1: number
-      public static svar2: list<number> = [1]
+      public var var1: number
+      public static var svar2: list<number> = [1]
     endclass
 
     var a = A.new()
@@ -5578,8 +5641,8 @@
   lines =<< trim END
     vim9script
     class A
-      public this.var1: number
-      public static svar2: list<number> = [1]
+      public var var1: number
+      public static var svar2: list<number> = [1]
     endclass
 
     def T()
@@ -5594,8 +5657,8 @@
   lines =<< trim END
     vim9script
     class A
-      public this.var1: number
-      public static svar2: list<number> = [1]
+      public var var1: number
+      public static var svar2: list<number> = [1]
     endclass
 
     def T()
@@ -5926,7 +5989,7 @@
     vim9script
 
     class A
-      public static val: number = 10
+      public static var val: number = 10
       static def ClassFunc()
         assert_equal(10, val)
       enddef
@@ -5961,7 +6024,7 @@
     vim9script
 
     class A
-      static val: number = 10
+      static var val: number = 10
     endclass
 
     class B extends A
@@ -5978,7 +6041,7 @@
     vim9script
 
     class A
-      static val: number = 10
+      static var val: number = 10
     endclass
 
     class B extends A
@@ -5995,7 +6058,7 @@
     vim9script
 
     class A
-      static val: number = 10
+      static var val: number = 10
     endclass
 
     class B extends A
@@ -6013,7 +6076,7 @@
     vim9script
 
     class A
-      static val: number = 10
+      static var val: number = 10
     endclass
 
     class B extends A
@@ -6031,7 +6094,7 @@
     vim9script
 
     class A
-      static val: number = 10
+      static var val: number = 10
     endclass
     var a = A.new()
     a.val = 20
@@ -6043,7 +6106,7 @@
     vim9script
 
     class A
-      static val: number = 10
+      static var val: number = 10
     endclass
     var a = A.new()
     var i = a.val
@@ -6055,7 +6118,7 @@
     vim9script
 
     class A
-      static val: number = 10
+      static var val: number = 10
     endclass
 
     def T()
@@ -6071,7 +6134,7 @@
     vim9script
 
     class A
-      static val: number = 10
+      static var val: number = 10
     endclass
     def T()
       var a = A.new()
@@ -6080,6 +6143,67 @@
     T()
   END
   v9.CheckSourceFailure(lines, 'E1375: Class variable "val" accessible only using class "A"', 2)
+
+  # Use old implicit var declaration syntax (without initialization)
+  lines =<< trim END
+    vim9script
+
+    class A
+      static val: number
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1368: Static must be followed by "var" or "def"', 4)
+
+  # Use old implicit var declaration syntax (with initialization)
+  lines =<< trim END
+    vim9script
+
+    class A
+      static val: number = 10
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1368: Static must be followed by "var" or "def"', 4)
+
+  # Use old implicit var declaration syntax (type inferred)
+  lines =<< trim END
+    vim9script
+
+    class A
+      static val = 10
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1368: Static must be followed by "var" or "def"', 4)
+
+  # Missing ":var" in "var" class variable declaration (without initialization)
+  lines =<< trim END
+    vim9script
+
+    class A
+      static var: number
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1329: Invalid class variable declaration: static var: number', 4)
+
+  # Missing ":var" in "var" class variable declaration (with initialization)
+  lines =<< trim END
+    vim9script
+
+    class A
+      static var: number = 10
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1329: Invalid class variable declaration: static var: number = 10', 4)
+
+  # Missing ":var" in "var" class variable declaration (type inferred)
+  lines =<< trim END
+    vim9script
+
+    class A
+      static var = 10
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1329: Invalid class variable declaration: static var = 10', 4)
+
 enddef
 
 " Test for using a duplicate class method and class variable in a child class
@@ -6088,7 +6212,7 @@
   var lines =<< trim END
     vim9script
     class A
-      static sval = 100
+      static var sval = 100
       static def Check()
         assert_equal(100, sval)
       enddef
@@ -6098,7 +6222,7 @@
     endclass
 
     class B extends A
-      static sval = 200
+      static var sval = 200
       static def Check()
         assert_equal(200, sval)
       enddef
@@ -6130,7 +6254,7 @@
   lines =<< trim END
     vim9script
     class A
-      static sval = 100
+      static var sval = 100
       static def Check()
         assert_equal(100, sval)
       enddef
@@ -6140,7 +6264,7 @@
     endclass
 
     class B extends A
-      static sval = 200
+      static var sval = 200
       static def Check()
         assert_equal(200, sval)
       enddef
@@ -6303,8 +6427,8 @@
     class B extends A
     endclass
     class C extends B
-      public static rw_class_var = 1
-      public this.rw_obj_var = 2
+      public static var rw_class_var = 1
+      public var rw_obj_var = 2
       static def ClassMethod(): number
         return 3
       enddef
@@ -6327,7 +6451,7 @@
   var lines =<< trim END
     vim9script
     interface A
-      static num: number
+      static var num: number
     endinterface
   END
   v9.CheckSourceFailure(lines, 'E1378: Static member not supported in an interface', 3)
@@ -6335,7 +6459,7 @@
   lines =<< trim END
     vim9script
     interface A
-      static _num: number
+      static var _num: number
     endinterface
   END
   v9.CheckSourceFailure(lines, 'E1378: Static member not supported in an interface', 3)
@@ -6343,7 +6467,7 @@
   lines =<< trim END
     vim9script
     interface A
-      public static num: number
+      public static var num: number
     endinterface
   END
   v9.CheckSourceFailure(lines, 'E1387: Public variable not supported in an interface', 3)
@@ -6351,7 +6475,7 @@
   lines =<< trim END
     vim9script
     interface A
-      public static num: number
+      public static var num: number
     endinterface
   END
   v9.CheckSourceFailure(lines, 'E1387: Public variable not supported in an interface', 3)
@@ -6359,7 +6483,7 @@
   lines =<< trim END
     vim9script
     interface A
-      static _num: number
+      static var _num: number
     endinterface
   END
   v9.CheckSourceFailure(lines, 'E1378: Static member not supported in an interface', 3)
@@ -6383,7 +6507,7 @@
   lines =<< trim END
     vim9script
     interface A
-      this._Foo: list<string>
+      var _Foo: list<string>
     endinterface
   END
   v9.CheckSourceFailure(lines, 'E1379: Protected variable not supported in an interface', 3)
@@ -6402,18 +6526,18 @@
   var lines =<< trim END
     vim9script
     interface A
-      this.var1: list<string>
+      var var1: list<string>
       def Foo()
     endinterface
     interface B extends A
-      this.var2: dict<string>
+      var var2: dict<string>
       def Bar()
     endinterface
     class C implements A, B
-      this.var1 = [1, 2]
+      var var1 = [1, 2]
       def Foo()
       enddef
-      this.var2 = {a: '1'}
+      var var2 = {a: '1'}
       def Bar()
       enddef
     endclass
@@ -6438,10 +6562,10 @@
       def Foo()
     endinterface
     interface B extends A
-      this.var2: dict<string>
+      var var2: dict<string>
     endinterface
     class C implements A, B
-      this.var2 = {a: '1'}
+      var var2 = {a: '1'}
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1349: Method "Foo" of interface "A" is not implemented', 10)
@@ -6452,7 +6576,7 @@
       def Foo()
     endinterface
     interface B extends A
-      this.var2: dict<string>
+      var var2: dict<string>
     endinterface
     class C implements A, B
       def Foo()
@@ -6507,14 +6631,14 @@
   lines =<< trim END
     vim9script
     interface A
-      this.val1: number
+      var val1: number
     endinterface
     interface B extends A
-      this.val2: string
+      var val2: string
     endinterface
     interface C extends B
-      this.val1: string
-      this.val2: number
+      var val1: string
+      var val2: number
     endinterface
   END
   v9.CheckSourceFailure(lines, 'E1382: Variable "val1": type mismatch, expected number but got string', 11)
@@ -6530,9 +6654,9 @@
       def F1(): list<list<number>>
       def F2(): list<list<number>>
       def F3(): list<list<number>>
-      this.var1: list<dict<number>>
-      this.var2: list<dict<number>>
-      this.var3: list<dict<number>>
+      var var1: list<dict<number>>
+      var var2: list<dict<number>>
+      var var3: list<dict<number>>
     endinterface
 
     class A
@@ -6541,8 +6665,8 @@
       def F3(): list<list<number>>
         return [[3]]
       enddef
-      this.v1: list<list<number>> = [[0]]
-      this.var3 = [{c: 30}]
+      var v1: list<list<number>> = [[0]]
+      var var3 = [{c: 30}]
     endclass
 
     class B extends A
@@ -6551,8 +6675,8 @@
       def F2(): list<list<number>>
         return [[2]]
       enddef
-      this.v2: list<list<number>> = [[0]]
-      this.var2 = [{b: 20}]
+      var v2: list<list<number>> = [[0]]
+      var var2 = [{b: 20}]
     endclass
 
     class C extends B implements Intf
@@ -6561,8 +6685,8 @@
       def F1(): list<list<number>>
         return [[1]]
       enddef
-      this.v3: list<list<number>> = [[0]]
-      this.var1 = [{a: 10}]
+      var v3: list<list<number>> = [[0]]
+      var var1 = [{a: 10}]
     endclass
 
     def T(if: Intf)
@@ -6655,23 +6779,23 @@
     vim9script
 
     interface Intf
-      this.var1: list<dict<number>>
-      this.var2: list<dict<number>>
-      this.var3: list<dict<number>>
+      var var1: list<dict<number>>
+      var var2: list<dict<number>>
+      var var3: list<dict<number>>
     endinterface
 
     class A
-      this.v1: list<list<number>> = [[0]]
+      var v1: list<list<number>> = [[0]]
     endclass
 
     class B extends A
-      this.v2: list<list<number>> = [[0]]
-      this.var2 = [{b: 20}]
+      var v2: list<list<number>> = [[0]]
+      var var2 = [{b: 20}]
     endclass
 
     class C extends B implements Intf
-      this.v3: list<list<number>> = [[0]]
-      this.var1 = [{a: 10}]
+      var v3: list<list<number>> = [[0]]
+      var var1 = [{a: 10}]
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1348: Variable "var3" of interface "Intf" is not implemented', 21)
@@ -6681,24 +6805,24 @@
     vim9script
 
     interface Intf
-      this.var1: list<dict<number>>
-      this.var2: list<dict<number>>
-      this.var3: list<dict<number>>
+      var var1: list<dict<number>>
+      var var2: list<dict<number>>
+      var var3: list<dict<number>>
     endinterface
 
     class A
-      this.v1: list<list<number>> = [[0]]
-      this.var3: list<dict<string>>
+      var v1: list<list<number>> = [[0]]
+      var var3: list<dict<string>>
     endclass
 
     class B extends A
-      this.v2: list<list<number>> = [[0]]
-      this.var2 = [{b: 20}]
+      var v2: list<list<number>> = [[0]]
+      var var2 = [{b: 20}]
     endclass
 
     class C extends B implements Intf
-      this.v3: list<list<number>> = [[0]]
-      this.var1 = [{a: 10}]
+      var v3: list<list<number>> = [[0]]
+      var var1 = [{a: 10}]
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1382: Variable "var3": type mismatch, expected list<dict<number>> but got list<dict<string>>', 22)
@@ -6709,18 +6833,18 @@
   var lines =<< trim END
     vim9script
     interface A
-      this.n1: number
+      var n1: number
       def Foo1(): number
     endinterface
     interface B extends A
-      this.n2: number
-      this.n1: number
+      var n2: number
+      var n1: number
       def Foo2(): number
       def Foo1(): number
     endinterface
     class C implements B
-      this.n1 = 10
-      this.n2 = 20
+      var n1 = 10
+      var n2 = 20
       def Foo1(): number
         return 30
       enddef
@@ -6751,10 +6875,10 @@
   var lines =<< trim END
     vim9script
     interface A
-      this.val: list<dict<string>>
+      var val: list<dict<string>>
     endinterface
     class B implements A
-      this.val = [{a: '1'}, {b: '2'}]
+      var val = [{a: '1'}, {b: '2'}]
     endclass
     var b = B.new()
     assert_equal([{a: '1'}, {b: '2'}], b.val)
@@ -6765,10 +6889,10 @@
   lines =<< trim END
     vim9script
     interface A
-      this.val: list<dict<string>>
+      var val: list<dict<string>>
     endinterface
     class B implements A
-      this.val = {a: 1, b: 2}
+      var val = {a: 1, b: 2}
     endclass
     var b = B.new()
   END
@@ -6781,19 +6905,19 @@
     vim9script
 
     class A
-      this.value: number
+      var value: number
     endclass
 
     class B
-      this.a: A = A.new()
+      var a: A = A.new()
     endclass
 
     class C
-      this.b: B = B.new()
+      var b: B = B.new()
     endclass
 
     class D
-      this.c: C = C.new()
+      var c: C = C.new()
     endclass
 
     def T(da: D)
@@ -6893,7 +7017,7 @@
     vim9script
 
     class Context
-      public this.state: dict<number> = {}
+      public var state: dict<number> = {}
       def GetState(): dict<number>
         return this.state
       enddef
@@ -6952,8 +7076,8 @@
   var lines =<< trim END
     vim9script
     class A
-      public static sval: number
-      public this.sval: number
+      public static var sval: number
+      public var sval: number
     endclass
     var a = A.new()
   END
@@ -6963,8 +7087,8 @@
   lines =<< trim END
     vim9script
     class A
-      public static sval: number
-      public this.sval: number
+      public static var sval: number
+      public var sval: number
       def F1()
         echo this.sval
       enddef
@@ -6980,8 +7104,8 @@
   lines =<< trim END
     vim9script
     class A
-      public static sval: number
-      public this.sval: number
+      public static var sval: number
+      public var sval: number
       def new()
       enddef
     endclass
@@ -6999,7 +7123,7 @@
     var lines =<< trim eval END
       vim9script
       class C
-        public this.{kword}: list<number> = [1, 2, 3]
+        public var {kword}: list<number> = [1, 2, 3]
       endclass
       var o = C.new()
     END
@@ -7008,7 +7132,7 @@
     lines =<< trim eval END
       vim9script
       class C
-        public this.{kword}: list<number> = [1, 2, 3]
+        public var {kword}: list<number> = [1, 2, 3]
         def new()
         enddef
       endclass
@@ -7019,7 +7143,7 @@
     lines =<< trim eval END
       vim9script
       class C
-        public this.{kword}: list<number> = [1, 2, 3]
+        public var {kword}: list<number> = [1, 2, 3]
         def new()
         enddef
         def F()
@@ -7036,7 +7160,7 @@
       lines =<< trim eval END
         vim9script
         class C
-          public static {kword}: list<number> = [1, 2, 3]
+          public static var {kword}: list<number> = [1, 2, 3]
         endclass
       END
       v9.CheckSourceFailure(lines, $'E1034: Cannot use reserved name {kword}', 3)
@@ -7169,7 +7293,7 @@
       return {}
     enddef
     class A
-      public static Fn: func(list<dict<blob>>): dict<list<blob>> = Foo
+      public static var Fn: func(list<dict<blob>>): dict<list<blob>> = Foo
     endclass
     test_garbagecollect_now()
     A.Fn = "abc"
@@ -7184,7 +7308,7 @@
       return {}
     enddef
     class A
-      public static Fn: func(list<dict<blob>>): dict<list<blob>> = Foo
+      public static var Fn: func(list<dict<blob>>): dict<list<blob>> = Foo
       def Bar()
         Fn = "abc"
       enddef
@@ -7203,7 +7327,7 @@
       return {}
     enddef
     class A
-      public static Fn: func(list<dict<blob>>): dict<list<blob>> = Foo
+      public static var Fn: func(list<dict<blob>>): dict<list<blob>> = Foo
     endclass
     def Bar()
       A.Fn = "abc"
@@ -7221,7 +7345,7 @@
       return {}
     enddef
     class A
-      public static Fn = Foo
+      public static var Fn = Foo
     endclass
     test_garbagecollect_now()
     A.Fn = "abc"
@@ -7236,7 +7360,7 @@
       return {}
     enddef
     class A
-      public static Fn = Foo
+      public static var Fn = Foo
       def Bar()
         Fn = "abc"
       enddef
@@ -7255,7 +7379,7 @@
       return {}
     enddef
     class A
-      public static Fn = Foo
+      public static var Fn = Foo
     endclass
     def Bar()
       A.Fn = "abc"
@@ -7272,8 +7396,8 @@
       return {}
     enddef
     class A
-      public static Fn: any = Foo
-      public static Fn2: any
+      public static var Fn: any = Foo
+      public static var Fn2: any
     endclass
     test_garbagecollect_now()
     assert_equal('func(list<dict<blob>>): dict<list<blob>>', typename(A.Fn))
@@ -7296,8 +7420,8 @@
       return {}
     enddef
     class A
-      public static Fn: any = Foo
-      public static Fn2: any
+      public static var Fn: any = Foo
+      public static var Fn2: any
 
       def Bar()
         assert_equal('func(list<dict<blob>>): dict<list<blob>>', typename(Fn))
@@ -7325,8 +7449,8 @@
       return {}
     enddef
     class A
-      public static Fn: any = Foo
-      public static Fn2: any
+      public static var Fn: any = Foo
+      public static var Fn2: any
     endclass
 
     def Bar()
@@ -7348,7 +7472,7 @@
   let lines =<< trim END
     vim9script
     class A
-      public static foo = [0z10, 0z20]
+      public static var foo = [0z10, 0z20]
     endclass
     assert_equal([0z10, 0z20], A.foo)
     A.foo = [0z30]
@@ -7369,7 +7493,7 @@
       return {}
     enddef
     class A
-      public this.Fn: func(list<dict<blob>>): dict<list<blob>> = Foo
+      public var Fn: func(list<dict<blob>>): dict<list<blob>> = Foo
     endclass
     var a = A.new()
     test_garbagecollect_now()
@@ -7385,7 +7509,7 @@
       return {}
     enddef
     class A
-      public this.Fn: func(list<dict<blob>>): dict<list<blob>> = Foo
+      public var Fn: func(list<dict<blob>>): dict<list<blob>> = Foo
       def Bar()
         this.Fn = "abc"
         this.Fn = Foo
@@ -7405,7 +7529,7 @@
       return {}
     enddef
     class A
-      public this.Fn: func(list<dict<blob>>): dict<list<blob>> = Foo
+      public var Fn: func(list<dict<blob>>): dict<list<blob>> = Foo
     endclass
     def Bar()
       var a = A.new()
@@ -7425,7 +7549,7 @@
       return {}
     enddef
     class A
-      public this.Fn = Foo
+      public var Fn = Foo
     endclass
     var a = A.new()
     test_garbagecollect_now()
@@ -7441,7 +7565,7 @@
       return {}
     enddef
     class A
-      public this.Fn = Foo
+      public var Fn = Foo
       def Bar()
         this.Fn = "abc"
         this.Fn = Foo
@@ -7461,7 +7585,7 @@
       return {}
     enddef
     class A
-      public this.Fn = Foo
+      public var Fn = Foo
     endclass
     def Bar()
       var a = A.new()
@@ -7480,8 +7604,8 @@
       return {}
     enddef
     class A
-      public this.Fn: any = Foo
-      public this.Fn2: any
+      public var Fn: any = Foo
+      public var Fn2: any
     endclass
 
     var a = A.new()
@@ -7506,8 +7630,8 @@
       return {}
     enddef
     class A
-      public this.Fn: any = Foo
-      public this.Fn2: any
+      public var Fn: any = Foo
+      public var Fn2: any
 
       def Bar()
         assert_equal('func(list<dict<blob>>): dict<list<blob>>', typename(this.Fn))
@@ -7536,8 +7660,8 @@
       return {}
     enddef
     class A
-      public this.Fn: any = Foo
-      public this.Fn2: any
+      public var Fn: any = Foo
+      public var Fn2: any
     endclass
 
     def Bar()
@@ -7564,7 +7688,7 @@
   var lines =<< trim END
     vim9script
     class A
-      this.val: number = 0
+      var val: number = 0
       def Foo(): number
         if this.val >= 90
           return this.val
@@ -7584,7 +7708,7 @@
   var lines =<< trim END
     vim9script
     class A
-      static val: number = 0
+      static var val: number = 0
       static def Foo(): number
         if val >= 90
           return val
@@ -7689,7 +7813,7 @@
   var lines =<< trim END
     vim9script
     class A
-      public static val: list<number> = []
+      public static var val: list<number> = []
       static def Foo(): list<number>
         val += [1]
         return val
@@ -7710,7 +7834,7 @@
   lines =<< trim END
     vim9script
     class A
-      public this.val: list<number> = []
+      public var val: list<number> = []
       def Foo(): list<number>
         this.val += [1]
         return this.val
@@ -7766,7 +7890,7 @@
   lines =<< trim END
     vim9script
     class A
-      this.val: number
+      var val: number
       def Foo(): number
         return this.val
       enddef
@@ -7876,7 +8000,7 @@
   lines =<< trim END
     vim9script
     class A
-      this.val: number
+      var val: number
       def Foo(): number
         return this.val
       enddef
@@ -7928,7 +8052,7 @@
   lines =<< trim END
     vim9script
     class A
-      public static val: number
+      public static var val: number
       static def Foo(): number
         return val
       enddef
@@ -8032,7 +8156,7 @@
   lines =<< trim END
     vim9script
     class A
-      public static val: number
+      public static var val: number
       static def Foo(): number
         return val
       enddef
@@ -8058,7 +8182,7 @@
     enddef
 
     class A
-      this.Cb: func(number): number = Foo
+      var Cb: func(number): number = Foo
       def Bar()
         assert_equal(200, this.Cb(20))
       enddef
@@ -8077,7 +8201,7 @@
     enddef
 
     class A
-      this.Cb: func(number): number = Foo
+      var Cb: func(number): number = Foo
     endclass
 
     def Bar()
@@ -8096,7 +8220,7 @@
     enddef
 
     class A
-      this.Cb: func(number): number = Foo
+      var Cb: func(number): number = Foo
     endclass
 
     var a = A.new()
@@ -8109,7 +8233,7 @@
   lines =<< trim END
     vim9script
     class A
-      this.Cb: func(number): number = this.Foo
+      var Cb: func(number): number = this.Foo
       def Foo(n: number): number
         return n * 10
       enddef
@@ -8128,7 +8252,7 @@
   lines =<< trim END
     vim9script
     class A
-      this.Cb: func(number): number = this.Foo
+      var Cb: func(number): number = this.Foo
       def Foo(n: number): number
         return n * 10
       enddef
@@ -8147,7 +8271,7 @@
   lines =<< trim END
     vim9script
     class A
-      this.Cb = this.Foo
+      var Cb = this.Foo
       def Foo(n: number): number
         return n * 10
       enddef
@@ -8169,7 +8293,7 @@
     enddef
 
     class A
-      static Cb = Foo
+      static var Cb = Foo
       static def Bar()
         assert_equal(200, Cb(20))
       enddef
@@ -8187,7 +8311,7 @@
     enddef
 
     class A
-      public static Cb = Foo
+      public static var Cb = Foo
     endclass
 
     def Bar()
@@ -8205,7 +8329,7 @@
     enddef
 
     class A
-      public static Cb = Foo
+      public static var Cb = Foo
     endclass
 
     assert_equal(200, A.Cb(20))
@@ -8217,7 +8341,7 @@
   lines =<< trim END
     vim9script
     class A
-      static Cb: func(number): number
+      static var Cb: func(number): number
       static def Foo(n: number): number
         return n * 10
       enddef
@@ -8238,7 +8362,7 @@
   lines =<< trim END
     vim9script
     class A
-      static Cb: func(number): number
+      static var Cb: func(number): number
       static def Foo(n: number): number
         return n * 10
       enddef
@@ -8259,7 +8383,7 @@
   lines =<< trim END
     vim9script
     class A
-      static Cb: func(number): number
+      static var Cb: func(number): number
       static def Foo(n: number): number
         return n * 10
       enddef
@@ -8281,8 +8405,8 @@
     vim9script
 
     class A
-      this.selection: number = -1
-      this.filterkeys: list<string> = []
+      var selection: number = -1
+      var filterkeys: list<string> = []
 
       def PopupFilter(id: number, key: string): bool
         add(this.filterkeys, key)
@@ -8317,8 +8441,8 @@
     vim9script
 
     class A
-      this.selection: number = -1
-      this.filterkeys: list<string> = []
+      var selection: number = -1
+      var filterkeys: list<string> = []
 
       def PopupFilter(id: number, key: string): bool
         add(this.filterkeys, key)
@@ -8359,8 +8483,8 @@
     vim9script
 
     class A
-      static selection: number = -1
-      static filterkeys: list<string> = []
+      static var selection: number = -1
+      static var filterkeys: list<string> = []
 
       static def PopupFilter(id: number, key: string): bool
         add(filterkeys, key)
@@ -8394,8 +8518,8 @@
     vim9script
 
     class A
-      static selection: number = -1
-      static filterkeys: list<string> = []
+      static var selection: number = -1
+      static var filterkeys: list<string> = []
 
       static def PopupFilter(id: number, key: string): bool
         add(filterkeys, key)
@@ -8435,7 +8559,7 @@
     vim9script
 
     class A
-      this.timerTick: number = -1
+      var timerTick: number = -1
       def TimerCb(timerID: number)
         this.timerTick = 6
       enddef
@@ -8457,7 +8581,7 @@
     vim9script
 
     class A
-      this.timerTick: number = -1
+      var timerTick: number = -1
       def TimerCb(timerID: number)
         this.timerTick = 6
       enddef
@@ -8485,7 +8609,7 @@
     vim9script
 
     class A
-      static timerTick: number = -1
+      static var timerTick: number = -1
       static def TimerCb(timerID: number)
         timerTick = 6
       enddef
@@ -8506,7 +8630,7 @@
     vim9script
 
     class A
-      static timerTick: number = -1
+      static var timerTick: number = -1
       static def TimerCb(timerID: number)
         timerTick = 6
       enddef
@@ -8532,11 +8656,11 @@
   var lines =<< trim END
     vim9script
     class Tests
-      static truthy: bool = true
-      public static TruthyFn: func
-      static list: list<any> = []
-      static four: number = 4
-      static str: string = 'hello'
+      static var truthy: bool = true
+      public static var TruthyFn: func
+      static var list: list<any> = []
+      static var four: number = 4
+      static var str: string = 'hello'
 
       static def Str(): string
         return str
@@ -8637,7 +8761,7 @@
     vim9script
 
     abstract class State
-      this.numbers: dict<string> = {0: 'nil', 1: 'unity'}
+      var numbers: dict<string> = {0: 'nil', 1: 'unity'}
     endclass
 
     class Test extends State
@@ -8722,7 +8846,7 @@
     vim9script
 
     class A
-      this.numbers: dict<string> = {a: '1', b: '2'}
+      var numbers: dict<string> = {a: '1', b: '2'}
 
       def new()
       enddef
@@ -8742,7 +8866,7 @@
     vim9script
 
     class A
-      this.numbers: dict<number> = {a: 1, b: 2}
+      var numbers: dict<number> = {a: 1, b: 2}
 
       def new()
       enddef
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim
index 62da8c7..4e81122 100644
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -3062,15 +3062,15 @@
   var lines =<< trim END
     vim9script
     interface I
-      this.o_var: number
-      this.o_var2: number
+      var o_var: number
+      var o_var2: number
     endinterface
 
     class C implements I
-      public static s_var: number
-      this.o_var: number
-      public static s_var2: number
-      this.o_var2: number
+      public static var s_var: number
+      var o_var: number
+      public static var s_var2: number
+      var o_var2: number
     endclass
 
     def F1(i: I)
@@ -3124,7 +3124,7 @@
     vim9script
 
     class A
-      public static val = 10
+      public static var val = 10
       def Foo(): number
         val = 20
         return val
@@ -3173,7 +3173,7 @@
   var lines =<< trim END
     vim9script
     class A
-      this.val: number = 10
+      var val: number = 10
     endclass
     g:instr = execute('disassemble A.new')
   END
diff --git a/src/testdir/test_vim9_typealias.vim b/src/testdir/test_vim9_typealias.vim
index 8843cb5..e735e79 100644
--- a/src/testdir/test_vim9_typealias.vim
+++ b/src/testdir/test_vim9_typealias.vim
@@ -393,7 +393,7 @@
   lines =<< trim END
     vim9script
     export class MyClass
-      this.val = 10
+      var val = 10
     endclass
   END
   writefile(lines, 'Xtypeexport4.vim', 'D')
@@ -537,7 +537,7 @@
   var lines =<< trim END
     vim9script
     class C
-      this.color = 'green'
+      var color = 'green'
     endclass
     type MyClass = C
     var o: MyClass = MyClass.new()
diff --git a/src/version.c b/src/version.c
index a2623b8..a81665a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2167,
+/**/
     2166,
 /**/
     2165,
diff --git a/src/vim9class.c b/src/vim9class.c
index b19f8c9..9d17140 100644
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -1558,9 +1558,9 @@
 	    has_public = TRUE;
 	    p = skipwhite(line + 6);
 
-	    if (STRNCMP(p, "this", 4) != 0 && STRNCMP(p, "static", 6) != 0)
+	    if (STRNCMP(p, "var", 3) != 0 && STRNCMP(p, "static", 6) != 0)
 	    {
-		emsg(_(e_public_must_be_followed_by_this_or_static));
+		emsg(_(e_public_must_be_followed_by_var_or_static));
 		break;
 	    }
 	}
@@ -1615,30 +1615,39 @@
 	    }
 	    has_static = TRUE;
 	    p = skipwhite(ps + 6);
+
+	    if (STRNCMP(p, "var", 3) != 0 && STRNCMP(p, "def", 3) != 0)
+	    {
+		emsg(_(e_static_must_be_followed_by_var_or_def));
+		break;
+	    }
 	}
 
 	// object members (public, read access, private):
-	//	"this._varname"
-	//	"this.varname"
-	//	"public this.varname"
-	if (STRNCMP(p, "this", 4) == 0)
+	//	"var _varname"
+	//	"var varname"
+	//	"public var varname"
+	// class members (public, read access, private):
+	//	"static var _varname"
+	//	"static var varname"
+	//	"public static var varname"
+	if (checkforcmd(&p, "var", 3))
 	{
-	    if (p[4] != '.' || !eval_isnamec1(p[5]))
-	    {
-		semsg(_(e_invalid_object_variable_declaration_str), p);
-		break;
-	    }
-	    if (has_static)
-	    {
-		emsg(_(e_static_cannot_be_followed_by_this));
-		break;
-	    }
-	    char_u *varname = p + 5;
+	    char_u *varname = p;
 	    char_u *varname_end = NULL;
 	    type_T *type = NULL;
 	    char_u *init_expr = NULL;
 	    int	    has_type = FALSE;
 
+	    if (!eval_isnamec1(*p))
+	    {
+		if (has_static)
+		    semsg(_(e_invalid_class_variable_declaration_str), line);
+		else
+		    semsg(_(e_invalid_object_variable_declaration_str), line);
+		break;
+	    }
+
 	    if (!is_class && *varname == '_')
 	    {
 		// private variables are not supported in an interface
@@ -1662,7 +1671,7 @@
 		vim_free(init_expr);
 		break;
 	    }
-	    if (add_member(&objmembers, varname, varname_end,
+	    if (add_member(has_static ? &classmembers : &objmembers, varname, varname_end,
 				has_public, has_type, type, init_expr) == FAIL)
 	    {
 		vim_free(init_expr);
@@ -1764,42 +1773,6 @@
 	    }
 	}
 
-	// class members
-	else if (has_static)
-	{
-	    // class members (public, read access, private):
-	    //	"static _varname"
-	    //	"static varname"
-	    //	"public static varname"
-	    char_u  *varname = p;
-	    char_u  *varname_end = NULL;
-	    int	    has_type = FALSE;
-	    type_T  *type = NULL;
-	    char_u  *init_expr = NULL;
-
-	    if (parse_member(eap, line, varname, has_public,
-		      &varname_end, &has_type, &type_list, &type,
-		      &init_expr) == FAIL)
-		break;
-	    if (is_reserved_varname(varname, varname_end))
-	    {
-		vim_free(init_expr);
-		break;
-	    }
-	    if (is_duplicate_variable(&classmembers, &objmembers, varname,
-								varname_end))
-	    {
-		vim_free(init_expr);
-		break;
-	    }
-	    if (add_member(&classmembers, varname, varname_end,
-			      has_public, has_type, type, init_expr) == FAIL)
-	    {
-		vim_free(init_expr);
-		break;
-	    }
-	}
-
 	else
 	{
 	    if (is_class)
