public final function off( $eventName, $eventCallback = null ) {

			if ( is_string( $eventName ) ) {

				if ( strlen( $eventName ) > 0 ) {

					if ( isset( $this->events[ $eventName ] ) ) {

						if ( $eventCallback === null ) {

							unset( $this->events[ $eventName ] );
						
						} else {

							for ( $i = count( $this->events[ $eventName ] ) - 1; $i>=0; $i-- ) {

								if ( self::callbackEquals( $eventCallback, $this->events[ $eventName ][ $i ]['callback'] ) ) {

									// remove event
									array_splice( $this->events[ $eventName ], $i, 1 );

									if ( count( $this->events[ $eventName ] ) == 0 ) {
										unset( $this->events[ $eventName ] );
									}

									break;

								}

							}

						}

					}

				} else {

					throw new \browserfs\Exception('Invalid argument $eventName: non-empty string expected!');

				}

			} else {

				throw new \browserfs\Exception('Invalid argument $eventName: string expected!' );

			}

		}