diff --git a/src/testdir/test_plugin_comment.vim b/src/testdir/test_plugin_comment.vim
index 8e877ac..a0425d5 100644
--- a/src/testdir/test_plugin_comment.vim
+++ b/src/testdir/test_plugin_comment.vim
@@ -29,7 +29,6 @@
   call assert_equal(["# vim9script", "", "# def Hello()", '#   echo "Hello"', "# enddef"], result)
 endfunc
 
-
 func Test_basic_uncomment()
   CheckScreendump
   let lines =<< trim END
@@ -55,7 +54,7 @@
 
   let result = readfile(output_file)
 
- call assert_equal(["# vim9script", "", "def Hello()", '  echo "Hello"', "enddef"], result)
+  call assert_equal(["# vim9script", "", "def Hello()", '  echo "Hello"', "enddef"], result)
 endfunc
 
 func Test_bothends_comment()
@@ -177,3 +176,341 @@
 
   call assert_equal(["/* int main() { */", "\t/* if 1 { */", "\t  /* return 0; */",  "\t/* } */", "    /* return 1; */", "/* } */"], result)
 endfunc
+
+func Test_textobj_icomment()
+  CheckScreendump
+  let lines =<< trim END
+    for x in range(10):
+      print(x) # printing stuff
+      # print(x*x)
+      #print(x*x*x)
+      print(x*x*x*x) # printing stuff
+      print(x*x*x*x*x) # printing stuff
+      # print(x*x)
+      #print(x*x*x)
+
+      print(x*x*x*x*x)
+  END
+
+  let input_file = "test_textobj_icomment_input.py"
+  call writefile(lines, input_file, "D")
+
+  let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
+
+  call term_sendkeys(buf, "dic..")
+  let output_file = "comment_textobj_icomment.py"
+  call term_sendkeys(buf, $":w {output_file}\<CR>")
+  defer delete(output_file)
+
+  call StopVimInTerminal(buf)
+
+  let result = readfile(output_file)
+
+  call assert_equal(["for x in range(10):", "  print(x) ", "  print(x*x*x*x) ", "  print(x*x*x*x*x) ", "", "  print(x*x*x*x*x)"], result)
+endfunc
+
+func Test_textobj_icomment2()
+  CheckScreendump
+  let lines =<< trim END
+    #include <stdio.h>
+
+    int main() {
+        printf("hello"); /* hello world */ printf(" world\n");
+        /* if 1 {
+            return 1;
+        }*/
+
+        return 0;
+    }
+  END
+
+  let input_file = "test_textobj_icomment2_input.c"
+  call writefile(lines, input_file, "D")
+
+  let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
+
+  call term_sendkeys(buf, "dic..")
+  let output_file = "comment_textobj_icomment2.c"
+  call term_sendkeys(buf, $":w {output_file}\<CR>")
+  defer delete(output_file)
+
+  call StopVimInTerminal(buf)
+
+  let result = readfile(output_file)
+
+  call assert_equal(["#include <stdio.h>", "", "int main() {", "    printf(\"hello\");  printf(\" world\\n\");", "    ", "", "    return 0;", "}"], result)
+endfunc
+
+func Test_textobj_icomment3()
+  CheckScreendump
+  let lines =<< trim END
+    #include <stdio.h>
+
+    int main() {
+        printf("hello");/*hello world*/printf(" world\n");
+        return 0;
+    }
+  END
+
+  let input_file = "test_textobj_icomment3_input.c"
+  call writefile(lines, input_file, "D")
+
+  let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
+
+  call term_sendkeys(buf, "jjjdic")
+  let output_file = "comment_textobj_icomment3.c"
+  call term_sendkeys(buf, $":w {output_file}\<CR>")
+  defer delete(output_file)
+
+  call StopVimInTerminal(buf)
+
+  let result = readfile(output_file)
+
+  call assert_equal(["#include <stdio.h>", "", "int main() {", "    printf(\"hello\");printf(\" world\\n\");",  "    return 0;", "}"], result)
+endfunc
+
+func Test_textobj_acomment()
+  CheckScreendump
+  let lines =<< trim END
+    for x in range(10):
+      print(x) # printing stuff
+      # print(x*x)
+      #print(x*x*x)
+      print(x*x*x*x) # printing stuff
+      print(x*x*x*x*x) # printing stuff
+      # print(x*x)
+      #print(x*x*x)
+
+      print(x*x*x*x*x)
+  END
+
+  let input_file = "test_textobj_acomment_input.py"
+  call writefile(lines, input_file, "D")
+
+  let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
+
+  call term_sendkeys(buf, "dac..")
+  let output_file = "comment_textobj_acomment.py"
+  call term_sendkeys(buf, $":w {output_file}\<CR>")
+  defer delete(output_file)
+
+  call StopVimInTerminal(buf)
+
+  let result = readfile(output_file)
+
+  call assert_equal(["for x in range(10):", "  print(x)", "  print(x*x*x*x)", "  print(x*x*x*x*x)", "", "  print(x*x*x*x*x)"], result)
+endfunc
+
+func Test_textobj_acomment2()
+  CheckScreendump
+  let lines =<< trim END
+    #include <stdio.h>
+
+    int main() {
+        printf("hello"); /* hello world */ printf(" world\n");
+        /* if 1 {
+            return 1;
+        }*/
+
+        return 0;
+    }
+  END
+
+  let input_file = "test_textobj_acomment2_input.c"
+  call writefile(lines, input_file, "D")
+
+  let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
+
+  call term_sendkeys(buf, "dac.")
+  let output_file = "comment_textobj_acomment2.c"
+  call term_sendkeys(buf, $":w {output_file}\<CR>")
+  defer delete(output_file)
+
+  call StopVimInTerminal(buf)
+
+  let result = readfile(output_file)
+
+  call assert_equal(["#include <stdio.h>", "", "int main() {", "    printf(\"hello\");printf(\" world\\n\");", "    return 0;", "}"], result)
+endfunc
+
+func Test_textobj_acomment3()
+  CheckScreendump
+  let lines =<< trim END
+    #include <stdio.h>
+
+    int main() {
+        printf("hello");/*hello world*/printf(" world\n");
+        return 0;
+    }
+  END
+
+  let input_file = "test_textobj_acomment3_input.c"
+  call writefile(lines, input_file, "D")
+
+  let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
+
+  call term_sendkeys(buf, "jjjdac")
+  let output_file = "comment_textobj_acomment3.c"
+  call term_sendkeys(buf, $":w {output_file}\<CR>")
+  defer delete(output_file)
+
+  call StopVimInTerminal(buf)
+
+  let result = readfile(output_file)
+
+  call assert_equal(["#include <stdio.h>", "", "int main() {", "    printf(\"hello\");printf(\" world\\n\");",  "    return 0;", "}"], result)
+endfunc
+
+func Test_textobj_firstline_comment()
+  CheckScreendump
+  let lines =<< trim END
+    /*#include <stdio.h>*/
+
+    int main() {}
+  END
+
+  let input_file = "test_textobj_firstlinecomment_input.c"
+  call writefile(lines, input_file, "D")
+
+  let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
+
+  call term_sendkeys(buf, "dac")
+  let output_file = "comment_textobj_firstline_comment.c"
+  call term_sendkeys(buf, $":w {output_file}\<CR>")
+  defer delete(output_file)
+
+  call StopVimInTerminal(buf)
+
+  let result = readfile(output_file)
+
+  call assert_equal(["int main() {}"], result)
+endfunc
+
+func Test_textobj_noleading_space_comment()
+  CheckScreendump
+  let lines =<< trim END
+    int main() {// main start
+    }/* main end */
+  END
+
+  let input_file = "test_textobj_noleading_space_input.c"
+  call writefile(lines, input_file, "D")
+
+  let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
+
+  call term_sendkeys(buf, "dacdic")
+  let output_file = "comment_textobj_noleading_space_comment.c"
+  call term_sendkeys(buf, $":w {output_file}\<CR>")
+  defer delete(output_file)
+
+  call StopVimInTerminal(buf)
+
+  let result = readfile(output_file)
+
+  call assert_equal(["int main() {", "}"], result)
+endfunc
+
+func Test_textobj_noleading_space_comment2()
+  CheckScreendump
+  let lines =<< trim END
+    int main() {// main start
+    }    /* main end */
+  END
+
+  let input_file = "test_textobj_noleading_space_input2.c"
+  call writefile(lines, input_file, "D")
+
+  let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
+
+  call term_sendkeys(buf, "dac.")
+  let output_file = "comment_textobj_noleading_space_comment2.c"
+  call term_sendkeys(buf, $":w {output_file}\<CR>")
+  defer delete(output_file)
+
+  call StopVimInTerminal(buf)
+
+  let result = readfile(output_file)
+
+  call assert_equal(["int main() {", "}"], result)
+endfunc
+
+func Test_textobj_cursor_on_leading_space_comment()
+  CheckScreendump
+  let lines =<< trim END
+    int main() {
+        // multilple comments
+        // cursor is between them
+    }
+  END
+
+  let input_file = "test_textobj_cursor_on_leading_space_comment_input.c"
+  call writefile(lines, input_file, "D")
+
+  let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
+
+  call term_sendkeys(buf, "jjdac")
+  let output_file = "comment_textobj_cursor_on_leading_space_comment.c"
+  call term_sendkeys(buf, $":w {output_file}\<CR>")
+  defer delete(output_file)
+
+  call StopVimInTerminal(buf)
+
+  let result = readfile(output_file)
+
+  call assert_equal(["int main() {", "", "}"], result)
+endfunc
+
+func Test_textobj_conseq_comment()
+  CheckScreendump
+  let lines =<< trim END
+    int main() {
+        printf("hello"); // hello
+        // world
+        printf("world");
+    }
+  END
+
+  let input_file = "test_textobj_conseq_comment_input.c"
+  call writefile(lines, input_file, "D")
+
+  let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
+
+  call term_sendkeys(buf, "dac")
+  let output_file = "comment_textobj_conseq_comment.c"
+  call term_sendkeys(buf, $":w {output_file}\<CR>")
+  defer delete(output_file)
+
+  call StopVimInTerminal(buf)
+
+  let result = readfile(output_file)
+
+  call assert_equal(["int main() {", "    printf(\"hello\");", "    printf(\"world\");", "}"], result)
+endfunc
+
+func Test_textobj_conseq_comment2()
+  CheckScreendump
+  let lines =<< trim END
+    int main() {
+        printf("hello"); // hello
+
+        // world
+        printf("world");
+    }
+  END
+
+  let input_file = "test_textobj_conseq_comment_input2.c"
+  call writefile(lines, input_file, "D")
+
+  let buf = RunVimInTerminal('-c "packadd comment" ' .. input_file, {})
+
+  call term_sendkeys(buf, "dac")
+  let output_file = "comment_textobj_conseq_comment2.c"
+  call term_sendkeys(buf, $":w {output_file}\<CR>")
+  defer delete(output_file)
+
+  call StopVimInTerminal(buf)
+
+  let result = readfile(output_file)
+
+  call assert_equal(["int main() {", "    printf(\"hello\");", "", "    // world", "    printf(\"world\");", "}"], result)
+endfunc
diff --git a/src/version.c b/src/version.c
index 18bf939..7debc1a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1229,
+/**/
     1228,
 /**/
     1227,
