diff --git a/runtime/indent/testdir/rapid.ok b/runtime/indent/testdir/rapid.ok
new file mode 100644
index 0000000..ce33682
--- /dev/null
+++ b/runtime/indent/testdir/rapid.ok
@@ -0,0 +1,266 @@
+! vim: set ft=rapid :
+
+! START_INDENT
+
+%%%
+VERSION:1
+LANGUAGE:ENGLISH
+%%%
+
+module LowerCaseModule
+
+  task pers num n1 := 0;
+  local pers num n2 := 1;
+  var bool b1 := false;
+  var intnum i1;
+
+! put some stuff in those strings that may confuse indentation
+  const string st1 := "endmodule ("; 
+  pers string st_Appl_Info{3,3}:=[
+          [
+                  "["
+                  ,
+                  "default"
+                  ,
+                  "case"
+                  ],
+          [
+                  "else"
+                  ,
+                  "then"
+                  ,
+                  "endif"
+                  ],
+          [
+                  "do"
+                  ,
+                  "}"
+                  ,
+                  ")"
+                  ],
+          ];
+
+  pers tooldata tTool1:=[TRUE, 
+          [
+                  [97.4, 0, 223.1], 
+                  [0.924, 0, 0.383 ,0]
+                  ], 
+          [5, 
+                  [23, 0, 75], 
+                  [1, 0, 0, 0], 0, 0, 0
+                  ]
+          ];
+  const robtarget p1:=[ 
+          [600, 500, 225.3], 
+          [1, 0, 0, 0], 
+          [1, 1, 0, 0], 
+          [ 11, 12.3, 9E9, 9E9, 9E9, 9E9]
+          ];
+
+  record myRec
+    num nRecNum1
+    bool bRecBool1
+  endrecord
+
+  proc proc1(num n1,
+            num n2)
+    var string st1;
+    n1 := n1+1;
+    MoveJSync p1, vmax, z30, tool1, "proc2";
+  backward
+    MoveJSync p1, v100, fine, tool1, "proc2";
+  undo
+    n1 := n1-1;
+  error
+    trynext;
+  endproc
+
+  func num nFunc1(
+            switch s1
+            |switch s2
+            ,num n1
+            ,bool b1)
+    var num nVar;
+    if not Present(s1) return;
+    if Present(s1) then
+      Incr n1;'
+    elseif Present(s2) then
+      b1:=false;
+    else
+      while n1>0 do
+        Decr n1;
+        test n1
+
+        case 1:
+          test1;
+        case 2:
+          test2;
+        default:
+          WaitUntil false;
+        endtest
+      endwhile
+    endif
+    for i from 1 to 10 step 2 do
+      for j from 1 to 10 do
+        st_Appl_Info{i,j} := "";
+      endfor
+    endfor
+!     return 1;
+    return 0;
+  error
+    return -1;
+  endfunc
+
+  trap Trap1
+    Reset do1;
+  endtrap
+
+endmodule
+
+MODULE UpperCaseModule(SYSMODULE,NOSTEPIN)
+  TASK pers num n1 := 0;
+  LOCAL pers num n2 := 1;
+  VAR bool b1 := false;
+  VAR intnum i1;
+
+  LOCAL FUNC num nFunc1(
+            switch s1
+            |switch s2
+            ,num n1
+            ,bool b1)
+    VAR num nVar;
+    IF NOT PRESENT(s1) RETURN;
+    IF PRESENT(s1) THEN
+      INCR n1;'
+    ELSEIF PRESENT(s2) THEN
+      b1:=FALSE;
+    ELSE
+      WHILE n1>0 DO
+        DECR n1;
+        TEST n1
+
+        CASE 1:
+          test1;
+        CASE 2:
+          test2;
+        DEFAULT:
+          WAITUNTIL FALSE;
+        ENDTEST
+      ENDWHILE
+    ENDIF
+    FOR i FROM 1 TO 10 STEP 2 DO
+      FOR j FROM 1 TO 10 DO
+        st_Appl_Info{i,j} := "";
+      ENDFOR
+    ENDFOR
+!     RETURN 1;
+    RETURN 0;
+  ERROR
+    RETURN -1;
+  ENDFUNC
+
+  TRAP Trap1
+    Reset do1;
+  ENDTRAP
+
+ENDMODULE
+
+Module MixedCaseModule(SysModule)
+  Task pers num n1 := 0;
+  Local pers num n2 := 1;
+  Var bool b1 := false;
+  Var intnum i1;
+
+  Task Func num nFunc1(
+            switch s1
+            |switch s2
+            ,num n1
+            ,bool b1)
+    Var num nVar;
+    If Not Present(s1) Return;
+    If Present(s1) Then
+      Incr n1;'
+    ElseIf Present(s2) Then
+      b1:=false;
+    Else
+      While n1>0 Do
+        Decr n1;
+        Test n1
+
+        Case 1:
+          test1;
+        Case 2:
+          test2;
+        Default:
+          WaitUntil false;
+        EndTest
+      EndWhile
+    EndIf
+    For i From 1 To 10 Step 2 Do
+      For j From 1 To 10 Do
+        st_Appl_Info{i,j} := "";
+      EndFor
+    EndFor
+!     Return 1;
+    Return 0;
+  Error
+    Return -1;
+  EndFunc
+
+  Trap Trap1
+    Reset do1;
+  EndTrap
+
+EndModule
+
+! END_INDENT
+
+! START_INDENT
+! INDENT_EXE let g:rapidSpaceIndent = 0
+! INDENT_EXE set shiftwidth=4
+
+proc bla()
+    var num i;
+    Incr i;
+endproc
+
+! END_INDENT
+
+! START_INDENT
+! INDENT_EXE let g:rapidCommentIndent = 1
+!
+proc bla()
+    ! indent this first column comment because of g:rapidCommentIndent=1
+endproc
+! END_INDENT
+
+! START_INDENT
+! INDENT_EXE let g:rapidNewStyleIndent = 1
+pers string st_Appl_Info{3,3}:=
+[
+                [
+                                "["
+                                ,
+                                "default"
+                                ,
+                                "case"
+                ]
+                ,
+                [
+                                "else"
+                                ,
+                                "then"
+                                ,
+                                "endif"
+                ]
+                ,
+                [
+                                "do"
+                                ,
+                                "}"
+                                ,
+                                ")"
+                ]
+                ,
+];
+! END_INDENT
