diff --git a/projects/common/canvas-element-component.directive.ts b/projects/common/canvas-element-component.directive.ts
index 5ade5cd54ca6b1502b8103902c1d6e9e3a1a354e..20706039240ccf1dfdbc29cbf9a8b5598ed147bd 100644
--- a/projects/common/canvas-element-component.directive.ts
+++ b/projects/common/canvas-element-component.directive.ts
@@ -1,25 +1,32 @@
 import {
-  Directive, OnInit
+  Directive, OnInit, ViewChild, ViewContainerRef
 } from '@angular/core';
-import { FormControl } from '@angular/forms';
+import { FormControl, FormGroup } from '@angular/forms';
 import { UnitUIElement } from './unit';
 import { FormService } from './form.service';
 
 @Directive()
 export abstract class CanvasElementComponent implements OnInit {
+  @ViewChild('inputElement', { read: ViewContainerRef, static: true }) public inputElement!: ViewContainerRef;
   elementModel!: UnitUIElement;
   formControl!: FormControl;
   style!: Record<string, string>;
+  parentForm!: FormGroup;
 
-  constructor(public formService: FormService) { }
+  constructor(private formService: FormService) { }
 
   ngOnInit(): void {
     this.formService.controlAdded.next(this.elementModel.id);
-    this.formControl = this.formService.getFormControlPath(this.elementModel.id);
+    this.formControl = this.getFormControl(this.elementModel.id);
+    this.formControl.valueChanges.subscribe(v => this.onModelChange(v));
     this.updateStyle();
   }
 
-  onModelChange(value: any): void {
+  private getFormControl(id: string){
+    return (this.parentForm) ? this.parentForm.controls[id] as FormControl : new FormControl();
+  }
+
+  private onModelChange(value: any): void {
     const element = this.elementModel.id;
     this.formService.elementValueChanged.next({ element, value });
   }
diff --git a/projects/common/element-components/checkbox.component.ts b/projects/common/element-components/checkbox.component.ts
index 66c9879fdf6d43f6831c9e7d039bdff03d58122f..95220c2df298d6e642a1efd04f54512fa67271cf 100644
--- a/projects/common/element-components/checkbox.component.ts
+++ b/projects/common/element-components/checkbox.component.ts
@@ -5,7 +5,6 @@ import { CanvasElementComponent } from '../canvas-element-component.directive';
   selector: 'app-checkbox',
   template: `
       <mat-checkbox class="example-margin"
-                    (ngModelChange)="onModelChange($event)"
                     [formControl]="formControl"
                     [ngStyle]="style">
           {{$any(elementModel).label}}
diff --git a/projects/common/element-components/dropdown.component.ts b/projects/common/element-components/dropdown.component.ts
index d4fcfda6386aa6c4fd7197d6d3fc8258ca59619d..f76b15c77a8964862bc823d07c8ed9c67e1f9ca3 100644
--- a/projects/common/element-components/dropdown.component.ts
+++ b/projects/common/element-components/dropdown.component.ts
@@ -6,8 +6,7 @@ import { CanvasElementComponent } from '../canvas-element-component.directive';
   template: `
       <mat-form-field appearance="fill" [ngStyle]="style">
           <mat-label>{{$any(elementModel).label}}</mat-label>
-          <mat-select (ngModelChange)="onModelChange($event)"
-                      [formControl]="formControl">
+          <mat-select [formControl]="formControl">
               <mat-option *ngFor="let option of $any(elementModel).options" [value]="option">
                   {{option}}
               </mat-option>
diff --git a/projects/common/element-components/radio-button-group.component.ts b/projects/common/element-components/radio-button-group.component.ts
index 1000e0ede2f19969c735cdd33ff5918f3228f675..043258525f1a0f122aab375beb9697cade540959 100644
--- a/projects/common/element-components/radio-button-group.component.ts
+++ b/projects/common/element-components/radio-button-group.component.ts
@@ -7,7 +7,6 @@ import { CanvasElementComponent } from '../canvas-element-component.directive';
       <div [ngStyle]="style">
           <label id="radio-group-label">{{$any(elementModel).text}}</label>
           <mat-radio-group aria-labelledby="radio-group-label"
-                           (ngModelChange)="onModelChange($event)"
                            [formControl]="formControl"
                            fxLayout="{{elementModel.alignment}}">
               <mat-radio-button *ngFor="let option of $any(elementModel).options" [value]="option">
diff --git a/projects/common/element-components/text-field.component.ts b/projects/common/element-components/text-field.component.ts
index 2204c44c49efc68667b780473a626ab7afe5401a..f5173e79915f14b4dde7ad5a016a3a6072ed4329 100644
--- a/projects/common/element-components/text-field.component.ts
+++ b/projects/common/element-components/text-field.component.ts
@@ -5,12 +5,10 @@ import { CanvasElementComponent } from '../canvas-element-component.directive';
   selector: 'app-text-field',
   template: `
     <input *ngIf="$any(elementModel).multiline === false" matInput
-           (ngModelChange)="onModelChange($event)"
            [formControl]="formControl"
            [ngStyle]="style"
            placeholder="{{$any(elementModel).placeholder}}">
     <textarea *ngIf="$any(elementModel).multiline === true" matInput
-              (ngModelChange)="onModelChange($event)"
               [formControl]="formControl"
               [ngStyle]="style"
               placeholder="{{$any(elementModel).placeholder}}">
diff --git a/projects/common/form.service.ts b/projects/common/form.service.ts
index b822928b8c7a1b5c9274e68c86390e29351bb413..5bedaf23e18aa389b1318c43f6994bac472c4f1a 100644
--- a/projects/common/form.service.ts
+++ b/projects/common/form.service.ts
@@ -1,6 +1,5 @@
 import { Injectable } from '@angular/core';
 import { Observable, Subject } from 'rxjs';
-import { FormControl, FormGroup } from '@angular/forms';
 
 @Injectable({
   providedIn: 'root'
@@ -8,8 +7,6 @@ import { FormControl, FormGroup } from '@angular/forms';
 export class FormService {
   elementValueChanged = new Subject<any>();
   controlAdded = new Subject<string>();
-  isPlayer: boolean = false;
-  formRef!: FormGroup;
 
   get elementValueChanged$(): Observable<any[]> {
     return this.elementValueChanged.asObservable();
@@ -18,8 +15,4 @@ export class FormService {
   get controlAdded$(): Observable<string> {
     return this.controlAdded.asObservable();
   }
-
-  getFormControlPath(id: string): FormControl {
-    return (this.formRef) ? this.formRef.controls[id] as FormControl : new FormControl();
-  }
 }
diff --git a/projects/player/src/app/app.component.ts b/projects/player/src/app/app.component.ts
index 045c67608072e4b0c17bd61858db2d76ed5505aa..c3f1014092aa106b1cb784f1b417d28502f9f344 100644
--- a/projects/player/src/app/app.component.ts
+++ b/projects/player/src/app/app.component.ts
@@ -14,7 +14,7 @@ interface StartData {
       <form *ngIf="form" [formGroup]="form">
           <mat-tab-group mat-align-tabs="start">
               <mat-tab *ngFor="let page of unitJSON.pages; let i = index" label="Seite {{i+1}}">
-                  <app-page [page]="page"></app-page>
+                  <app-page [parentForm]="form" [page]="page"></app-page>
               </mat-tab>
           </mat-tab-group>
           <button class="form-item" mat-flat-button color="primary" (click)="submit()" [disabled]="!form.valid">Print
@@ -47,7 +47,6 @@ export class AppComponent {
 
   initForm(): void {
     this.form = new FormGroup({});
-    this.formService.formRef = this.form;
   }
 
   submit(): void {
diff --git a/projects/player/src/app/page.component.ts b/projects/player/src/app/page.component.ts
index 730e8852549579140310bdcab42003d8e71acf87..febe115e0f8cc9132b2af037ab80858c834dda96 100644
--- a/projects/player/src/app/page.component.ts
+++ b/projects/player/src/app/page.component.ts
@@ -1,22 +1,25 @@
 import { Component, Input } from '@angular/core';
 import { UnitPage } from '../../../common/unit';
+import { FormGroup } from "@angular/forms";
 
 @Component({
   selector: 'app-page',
   template: `
-    <app-section *ngFor="let section of page.sections; let i = index"
-         [section]="section"
-         [ngStyle]="{
+      <app-section *ngFor="let section of page.sections; let i = index"
+                   [parentForm]="parentForm"
+                   [section]="section"
+                   [ngStyle]="{
                 position: 'relative',
                 display: 'inline-block',
                 'background-color': section.backgroundColor,
                 'height.px': section.height,
                 'width.px': section.width }">
-      {{section.height}}
-    </app-section>
+          {{section.height}}
+      </app-section>
   `
 })
 
 export class PageComponent {
   @Input() page!: UnitPage;
+  @Input() parentForm!: FormGroup;
 }
diff --git a/projects/player/src/app/section.component.ts b/projects/player/src/app/section.component.ts
index 388ef202ec5a600b51d6ebba096a3885b0ab57b1..96f6d58650d918a8a9d63ec0fc59300edbb7bc07 100644
--- a/projects/player/src/app/section.component.ts
+++ b/projects/player/src/app/section.component.ts
@@ -3,6 +3,7 @@ import {
 } from '@angular/core';
 import { UnitPageSection, UnitUIElement } from '../../../common/unit';
 import * as ComponentUtils from '../../../common/component-utils';
+import { FormGroup } from "@angular/forms";
 
 @Component({
   selector: 'app-section',
@@ -11,6 +12,7 @@ import * as ComponentUtils from '../../../common/component-utils';
   `
 })
 export class SectionComponent implements OnInit {
+  @Input() parentForm!: FormGroup;
   @Input() section!: UnitPageSection;
   @ViewChild('elementContainer', { read: ViewContainerRef, static: true }) private elementContainer!: ViewContainerRef;
 
@@ -30,6 +32,7 @@ export class SectionComponent implements OnInit {
     const componentFactory = ComponentUtils.getComponentFactory(element.type, this.componentFactoryResolver);
     const componentRef = this.elementContainer.createComponent(componentFactory);
     componentRef.instance.elementModel = element;
+    componentRef.instance.parentForm = this.parentForm;
     componentRef.instance.updateStyle({
       position: 'absolute',
       top: `${element.yPosition}px`,