diff --git a/projects/common/element-components/checkbox.component.ts b/projects/common/element-components/checkbox.component.ts
index 39b425f34b560ef82208ab8450352268489cc74f..839276244bb4a904aa7268198d5221e899578b44 100644
--- a/projects/common/element-components/checkbox.component.ts
+++ b/projects/common/element-components/checkbox.component.ts
@@ -11,6 +11,7 @@ import { CheckboxElement } from '../models/checkbox-element';
          [style.height.%]="100"
          [style.background-color]="elementModel.backgroundColor">
       <mat-checkbox #checkbox class="example-margin"
+                    (click)="elementModel.readOnly ? $event.preventDefault() : null"
                     [formControl]="elementFormControl"
                     [style.color]="elementModel.fontColor"
                     [style.font-family]="elementModel.font"
diff --git a/projects/common/element-components/compound-elements/likert-radio-button-group.component.ts b/projects/common/element-components/compound-elements/likert-radio-button-group.component.ts
index 6db2fb66e8275e05f0c4befe13bc9d7f492df721..85004279352c637d84d46b93747bd7b20eeff92c 100644
--- a/projects/common/element-components/compound-elements/likert-radio-button-group.component.ts
+++ b/projects/common/element-components/compound-elements/likert-radio-button-group.component.ts
@@ -17,6 +17,7 @@ import { LikertElementRow } from '../../models/compound-elements/likert-element-
       </div>
 
       <mat-radio-button *ngFor="let answer of [].constructor(elementModel.columnCount); let j = index"
+                        [style.pointer-events]="elementModel.readOnly ? 'none' : 'unset'"
                         [value]="j"
                         [style.grid-column-start]="2 + j"
                         [style.grid-column-end]="3 + j"
diff --git a/projects/common/element-components/dropdown.component.ts b/projects/common/element-components/dropdown.component.ts
index 0b50d054d2275c5c3de4b10a3d5adb5d10f1a2b3..202d4f9df382053a96740cdb22bd18912d36e18b 100644
--- a/projects/common/element-components/dropdown.component.ts
+++ b/projects/common/element-components/dropdown.component.ts
@@ -18,8 +18,11 @@ import { DropdownElement } from '../models/dropdown-element';
         {{$any(elementModel).label}}
       </mat-label>
       <mat-select [formControl]="elementFormControl">
-        <mat-option *ngIf="elementModel.allowUnset" value=""></mat-option>
-        <mat-option *ngFor="let option of elementModel.options; let i = index" [value]="i">
+        <mat-option *ngIf="elementModel.allowUnset" value="" (click)="$event.preventDefault()"
+                    [style.pointer-events]="elementModel.readOnly ? 'none' : 'unset'">
+        </mat-option>
+        <mat-option *ngFor="let option of elementModel.options; let i = index" [value]="i"
+                    [style.pointer-events]="elementModel.readOnly ? 'none' : 'unset'">
           {{option}}
         </mat-option>
       </mat-select>
diff --git a/projects/common/element-components/radio-button-group.component.ts b/projects/common/element-components/radio-button-group.component.ts
index 3841bd9ce257d5c19d10ac4d64aad16054c1e73a..0e524fb658ea98f1ac9298483f76ee14590e3c98 100644
--- a/projects/common/element-components/radio-button-group.component.ts
+++ b/projects/common/element-components/radio-button-group.component.ts
@@ -26,6 +26,7 @@ import { RadioButtonGroupElement } from '../models/radio-button-group-element';
                        [formControl]="elementFormControl">
         <mat-radio-button *ngFor="let option of elementModel.options; let i = index"
                           [value]="i"
+                          [style.pointer-events]="elementModel.readOnly ? 'none' : 'unset'"
                           [style.line-height.%]="elementModel.lineHeight">
           {{option}}
         </mat-radio-button>
diff --git a/projects/common/element-components/text-area.component.ts b/projects/common/element-components/text-area.component.ts
index 2ebd1eaa0124cf2db3f6568920f4a127652df722..d7d39ca4ed5ac46d3164bc6909362c42361f9d7a 100644
--- a/projects/common/element-components/text-area.component.ts
+++ b/projects/common/element-components/text-area.component.ts
@@ -17,6 +17,7 @@ import { TextAreaElement } from '../models/text-area-element';
                     [appearance]="$any(elementModel.appearance)">
       <textarea matInput [formControl]="elementFormControl" #input
                 rows="{{elementModel.rows}}"
+                [readonly]="elementModel.readOnly"
                 (focus)="onFocus.emit(input)"
                 (blur)="onBlur.emit(input)"
                 autocomplete="off"
diff --git a/projects/common/element-components/text-field.component.ts b/projects/common/element-components/text-field.component.ts
index 90aa805e0363924af8dde2a5c587e579520cd9a7..01fff83ee236981f3e5cd5be1cd2a1b3cb6d1f34 100644
--- a/projects/common/element-components/text-field.component.ts
+++ b/projects/common/element-components/text-field.component.ts
@@ -19,6 +19,7 @@ import { TextFieldElement } from '../models/text-field-element';
                     [appearance]="$any(elementModel.appearance)">
       <mat-label>{{elementModel.label}}</mat-label>
       <input matInput type="text" [pattern]="elementModel.pattern" #input
+             [readonly]="elementModel.readOnly"
              (focus)="onFocus.emit(input)"
              (blur)="onBlur.emit(input)"
              autocomplete="off"
@@ -43,6 +44,7 @@ import { TextFieldElement } from '../models/text-field-element';
                     appInputBackgroundColor [backgroundColor]="elementModel.backgroundColor"
                     [appearance]="$any(elementModel.appearance)">
       <input matInput type="text" #input
+             [readonly]="elementModel.readOnly"
              [pattern]="elementModel.pattern"
              (focus)="onFocus.emit(input)"
              (blur)="onBlur.emit(input)"
diff --git a/projects/common/models/compound-elements/likert-element.ts b/projects/common/models/compound-elements/likert-element.ts
index 8c191f64c22768f9073b6f0701de77c399a10e72..e7585e4b1aa8e287551bb7e9c5a0f4adeacd2359 100644
--- a/projects/common/models/compound-elements/likert-element.ts
+++ b/projects/common/models/compound-elements/likert-element.ts
@@ -7,6 +7,7 @@ export class LikertElement extends UIElement implements FontElement, SurfaceUIEl
   questions: LikertElementRow[] = [];
   answers: AnswerOption[] = [];
   lineColoring: boolean = true;
+  readOnly: boolean = false;
 
   fontColor: string = 'black';
   font: string = 'Roboto';
@@ -36,5 +37,10 @@ export class LikertElement extends UIElement implements FontElement, SurfaceUIEl
         question.columnCount = this.answers.length;
       });
     }
+    if (property === 'readOnly') {
+      this.questions.forEach(question => {
+        question.readOnly = this.readOnly;
+      });
+    }
   }
 }
diff --git a/projects/common/models/uI-element.ts b/projects/common/models/uI-element.ts
index e3456d20a50c049d794d2d55d66da2d983c3592f..7a5fb30dd24b73d557c486d14fc472a47de16785 100644
--- a/projects/common/models/uI-element.ts
+++ b/projects/common/models/uI-element.ts
@@ -50,6 +50,7 @@ export abstract class InputElement extends UIElement {
   value: InputElementValue;
   required: boolean;
   requiredWarnMessage: string;
+  readOnly: boolean = false;
 
   protected constructor(serializedElement: UIElement) {
     super(serializedElement);
@@ -57,5 +58,6 @@ export abstract class InputElement extends UIElement {
     this.value = serializedElement.value as string | number | boolean | null || null;
     this.required = serializedElement.required as boolean || false;
     this.requiredWarnMessage = serializedElement.requiredWarnMessage as string || 'Eingabe erforderlich';
+    this.readOnly = serializedElement.readOnly as boolean || false;
   }
 }
diff --git a/projects/editor/src/app/unit-view/page-view/properties-panel/element-properties.component.html b/projects/editor/src/app/unit-view/page-view/properties-panel/element-properties.component.html
index 297ac1bb6f5062315daf2e0999ac828de9481158..cf6c121501d82f1820f25e28ed07991f2bbac1fd 100644
--- a/projects/editor/src/app/unit-view/page-view/properties-panel/element-properties.component.html
+++ b/projects/editor/src/app/unit-view/page-view/properties-panel/element-properties.component.html
@@ -49,6 +49,11 @@
           Deselektion erlauben
         </mat-checkbox>
 
+        <mat-checkbox *ngIf="combinedProperties.readOnly !== undefined"
+                      [checked]="$any(combinedProperties.readOnly)"
+                      (change)="updateModel('readOnly', $event.checked)">
+          Schreibgeschützt
+        </mat-checkbox>
         <mat-checkbox *ngIf="combinedProperties.required !== undefined"
                       [checked]="$any(combinedProperties.required)"
                       (change)="updateModel('required', $event.checked)">