 				result?.setKeepCallbackAs(true);
 				self.emit(command.callbackId, result: result!)
 			},
-			eventListenerForAddStream: self.addMediaStream,
-			eventListenerForRemoveStream: self.deleteMediaStream
+			eventListenerForAddStream: self.saveMediaStream,
+			eventListenerForRemoveStream: self.deleteMediaStream,
+			eventListenerForAddTrack: self.saveMediaStreamTrack,
+			eventListenerForRemoveTrack: self.deleteMediaStreamTrack
 		)
 
 		// Store the pluginRTCPeerConnection into the dictionary.

		}
	}

	fileprivate func deleteMediaStreamTrack(_ id: String) {
		self.pluginMediaStreamTracks[id] = nil
	}

	fileprivate func cleanup() {

		self.pluginMediaStreams[id] = nil
	}

	@objc(MediaStreamTrack_clone:) func MediaStreamTrack_clone(_ command: CDVInvokedUrlCommand) {
		NSLog("iosrtcPlugin#MediaStreamTrack_clone()")

		let existingTrackId = command.argument(at: 0) as! String
		let newTrackId = command.argument(at: 1) as! String
		let pluginMediaStreamTrack = self.pluginMediaStreamTracks[existingTrackId]

		if pluginMediaStreamTrack == nil {
			NSLog("iosrtcPlugin#MediaStreamTrack_clone() | ERROR: pluginMediaStreamTrack with id=%@ does not exist", String(existingTrackId))
			return;
		}

		if self.pluginMediaStreams[newTrackId] == nil {
			let rtcMediaStreamTrack = self.pluginMediaStreamTracks[existingTrackId]!.rtcMediaStreamTrack;
			let newPluginMediaStreamTrack = PluginMediaStreamTrack(rtcMediaStreamTrack: rtcMediaStreamTrack, trackId: newTrackId)

			self.saveMediaStreamTrack(newPluginMediaStreamTrack)
		} else {
			NSLog("iosrtcPlugin#MediaStreamTrack_clone() | ERROR: pluginMediaStreamTrack with id=%@ already exist", String(newTrackId))
		}
	}

	@objc(MediaStreamTrack_setListener:) func MediaStreamTrack_setListener(_ command: CDVInvokedUrlCommand) {
		NSLog("iosrtcPlugin#MediaStreamTrack_setListener()")
