diff --git a/projects/common/directives/media-player-element-component.directive.ts b/projects/common/directives/media-player-element-component.directive.ts
index ada517cc570ae366d3e2444c80c0988fed30ded2..051ed225ef347d5d3fdc9a225538c39bef07bd4e 100644
--- a/projects/common/directives/media-player-element-component.directive.ts
+++ b/projects/common/directives/media-player-element-component.directive.ts
@@ -1,24 +1,41 @@
 import {
-  Directive, EventEmitter, Input, Output
+  Directive, EventEmitter, Input, OnInit, Output
 } from '@angular/core';
+import { Subject } from 'rxjs';
 import { ElementComponent } from './element-component.directive';
-import { ValueChangeElement } from '../interfaces/elements';
+import { AudioElement, ValueChangeElement, VideoElement } from '../interfaces/elements';
 
 @Directive()
-export abstract class MediaPlayerElementComponent extends ElementComponent {
+export abstract class MediaPlayerElementComponent extends ElementComponent implements OnInit {
   @Input() savedPlaybackTime!: number;
+  @Input() actualPlayingId!: Subject<string | null>;
+  @Input() mediaStatusChanged!: Subject<string>;
   @Output() elementValueChanged = new EventEmitter<ValueChangeElement>();
   @Output() onMediaPlayStatusChanged = new EventEmitter<string | null>();
   @Output() onMediaValidStatusChanged = new EventEmitter<string>();
 
+  abstract elementModel: AudioElement | VideoElement;
   active: boolean = true;
   dependencyDissolved!: boolean;
 
-  setActualPlayingMediaId(id: string | null): void {
+  ngOnInit(): void {
+    if (this.actualPlayingId) {
+      this.actualPlayingId
+        .subscribe((actualID: string | null): void => this.setActualPlayingMediaId(actualID));
+    }
+    if (this.mediaStatusChanged) {
+      this.mediaStatusChanged
+        .subscribe((id: string): void => this.setActivatedAfterID(id));
+    }
+  }
+
+  private setActualPlayingMediaId(id: string | null): void {
     this.active = !id || id === this.elementModel.id;
   }
 
-  setActivatedAfterID(): void {
-    this.dependencyDissolved = true;
+  private setActivatedAfterID(id: string): void {
+    if (!this.dependencyDissolved) {
+      this.dependencyDissolved = id === (this.elementModel).playerProps.activeAfterID;
+    }
   }
 }
diff --git a/projects/player/src/app/components/element-media-player-group/element-media-player-group.component.html b/projects/player/src/app/components/element-media-player-group/element-media-player-group.component.html
index 7c5982780d31b357c8803d08401f38ec19abbc54..916f6f14d20700e987f65ddb5b890bb4a474345b 100644
--- a/projects/player/src/app/components/element-media-player-group/element-media-player-group.component.html
+++ b/projects/player/src/app/components/element-media-player-group/element-media-player-group.component.html
@@ -3,6 +3,8 @@
     #elementComponent
     [elementModel]="elementModel | cast: AudioElement"
     [savedPlaybackTime]="initialValue"
+    [actualPlayingId]="mediaPlayerService.actualPlayingId"
+    [mediaStatusChanged]="mediaPlayerService.mediaStatusChanged"
     (onMediaValidStatusChanged)="mediaPlayerService.setValidStatusChanged($event)"
     (onMediaPlayStatusChanged)="mediaPlayerService.setActualPlayingMediaId($event)"
     (elementValueChanged)="unitStateService.changeElementValue($event)">
@@ -12,6 +14,8 @@
     *ngIf="elementModel.type === 'video'"
     #elementComponent
     [elementModel]="elementModel | cast: VideoElement"
+    [actualPlayingId]="mediaPlayerService.actualPlayingId"
+    [mediaStatusChanged]="mediaPlayerService.mediaStatusChanged"
     [savedPlaybackTime]="initialValue"
     (onMediaValidStatusChanged)="mediaPlayerService.setValidStatusChanged($event)"
     (onMediaPlayStatusChanged)="mediaPlayerService.setActualPlayingMediaId($event)"
diff --git a/projects/player/src/app/components/element-media-player-group/element-media-player-group.component.ts b/projects/player/src/app/components/element-media-player-group/element-media-player-group.component.ts
index d4e2fadb4a86d8ca1438943080f74cc68bbdeb43..beb92a0dd627683f0c08d578745c7ed6c7bdecdf 100644
--- a/projects/player/src/app/components/element-media-player-group/element-media-player-group.component.ts
+++ b/projects/player/src/app/components/element-media-player-group/element-media-player-group.component.ts
@@ -38,8 +38,6 @@ export class ElementMediaPlayerGroupComponent extends ElementGroupDirective impl
 
     this.mediaPlayerService.registerMediaElement(
       this.elementModel.id,
-      this.elementComponent,
-      this.elementModel.playerProps?.activeAfterID as string,
       this.elementModel.playerProps?.minRuns as number === 0
     );
   }
diff --git a/projects/player/src/app/services/media-player.service.ts b/projects/player/src/app/services/media-player.service.ts
index 071dad7f2af3070e8ef20059dfff3a175c118cf8..08a7421872826c1668f7adbf6b3ee3455abab3d9 100644
--- a/projects/player/src/app/services/media-player.service.ts
+++ b/projects/player/src/app/services/media-player.service.ts
@@ -1,13 +1,13 @@
 import { Injectable } from '@angular/core';
-import { Observable, Subject } from 'rxjs';
-import { MediaPlayerElementComponent } from '../../../../common/directives/media-player-element-component.directive';
+import { Subject } from 'rxjs';
 
 @Injectable({
   providedIn: 'root'
 })
 export class MediaPlayerService {
-  mediaElements: { id: string; mediaComponent: MediaPlayerElementComponent; dependOn: string; valid: boolean }[] = [];
-  private _mediaStatusChanged = new Subject<string>();
+  mediaElements: { id: string; valid: boolean }[] = [];
+  mediaStatusChanged = new Subject<string>();
+  actualPlayingId: Subject<string | null> = new Subject();
 
   get mediaStatus(): string {
     const validMediaElements = this.mediaElements.filter(mediaElement => mediaElement.valid);
@@ -17,37 +17,27 @@ export class MediaPlayerService {
     return this.mediaElements.length ? 'none' : 'complete';
   }
 
-  get mediaStatusChanged(): Observable<string> {
-    return this._mediaStatusChanged.asObservable();
-  }
-
   registerMediaElement(
-    id: string, mediaComponent: MediaPlayerElementComponent, dependOn: string, valid: boolean
+    id: string, valid: boolean
   ): void {
     this.mediaElements.push({
-      id, mediaComponent, dependOn, valid
+      id, valid
     });
   }
 
   setActualPlayingMediaId(actualId: string | null): void {
-    this.mediaElements.forEach(mediaElement => mediaElement.mediaComponent.setActualPlayingMediaId(actualId));
+    this.actualPlayingId.next(actualId);
   }
 
   setValidStatusChanged(validId: string): void {
     const validMediaElement = this.mediaElements.find(mediaElement => mediaElement.id === validId);
     if (validMediaElement) {
       validMediaElement.valid = true;
+      this.mediaStatusChanged.next(validId);
     }
-    this._mediaStatusChanged.next(validId);
-    this.broadcastValidStatusChanged(validId);
   }
 
   reset(): void {
     this.mediaElements = [];
   }
-
-  private broadcastValidStatusChanged(validId: string): void {
-    const dependingMediaElements = this.mediaElements.filter(mediaElement => mediaElement.dependOn === validId);
-    dependingMediaElements.forEach(mediaElement => mediaElement.mediaComponent.setActivatedAfterID());
-  }
 }