	/**
	 * Called as soon as .fxml has been initialized [[SuppressWarningsSpartan]]
	 */
	@FXML
	private void initialize() {

		// ------------------------------TableViewer---------------------------

		// Set Items
		tableView.setItems(observableList);

		// --Allow Multiple Selection
		tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

		tableView.getSelectionModel().getSelectedIndices().addListener((ListChangeListener<? super Integer>) l -> {

			// Hold the Current Selected Count
			int currentSelectedCount = getSelectedCount();

			// Update the Label only if the current selected count != previousSelectedCount
			if (previousSelectedCount != currentSelectedCount) {
				previousSelectedCount = currentSelectedCount;
				updateLabel();
			}

			// Show/hide the action button
			if (currentSelectedCount > 1)
				tableView.getItems().forEach(item -> item.getActionColumnButton().setVisible(false));
			else
				tableView.getItems().forEach(item -> item.getActionColumnButton().setVisible(true));

		});

		// Update the Media Information when Selected Item changes
		tableView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
			if (newValue != null)
				Main.dropBoxViewer.getOpenFolder().setDisable(!newValue.isDirectory());
			else
				Main.dropBoxViewer.getOpenFolder().setDisable(true);
		});

		// PauseTransition
		pauseTransition.setOnFinished(f -> searchWord.set(""));

		// QuickSearchTextField
		quickSearchTextField.visibleProperty().bind(searchWord.isEmpty().not());
		quickSearchTextField.textProperty().bind(Bindings.concat("Search :> ").concat(searchWord));

		// --------------------------Other-----------------------------------
		String center = "-fx-alignment:CENTER-LEFT;";

		// title
		title.setStyle(center);
		title.setCellValueFactory(new PropertyValueFactory<>("title"));

		// fileType
		fileThumbnail.setCellValueFactory(new PropertyValueFactory<>("extension"));
		fileThumbnail.setCellFactory(cell -> new TableCell<>() {
			// Icon FontIcon
			FontIcon icon = new FontIcon();

			{
				icon.setIconSize(24);
			}

			@Override
			protected void updateItem(String item, boolean empty) {
				super.updateItem(item, empty);

				if (empty) {
					setText(null);
					setGraphic(null);
				} else {
					// set the image according to the play status
					if (item != null && super.getTableRow().getItem() != null) {

						setText(null);
						setGraphic(icon);

						// It is directory?
						if (((DropboxDownloadedFile) super.getTableRow().getItem()).isDirectory()) { // DIRECTORY
							JavaFXTool.setFontIcon(this, icon, "fas-folder", FileTreeItem.folderColor);
						} else {
							// Is it a music file?
							if (ExtensionTool.isAudioCheckExtension(item)) { // AUDIO
								JavaFXTool.setFontIcon(this, icon, "fas-file-audio", FileTreeItem.audioColor);
							} else if (ExtensionTool.isVideoCheckExtension(item)) { // VIDEO
								JavaFXTool.setFontIcon(this, icon, "fas-file-video", Color.WHITE);
							} else if (ExtensionTool.isImageCheckExtension(item)) { // PICTURE
								JavaFXTool.setFontIcon(this, icon, "fas-file-image", Color.WHITE);
							} else if (ExtensionTool.isPdfCheckExtension(item)) { // PDF
								JavaFXTool.setFontIcon(this, icon, "fas-file-pdf", FileTreeItem.pdfColor);
							} else if (ExtensionTool.isZipCheckExtension(item)) { // ZIP
								JavaFXTool.setFontIcon(this, icon, "fas-file-archive", Color.WHITE);
							} else { // FILE
								JavaFXTool.setFontIcon(this, icon, "fas-file", Color.WHITE);
							}
						}
					}
				}
			}

		});

		// download
		progressBox.setCellValueFactory(new PropertyValueFactory<>("progressBox"));

		// ------------------------------------------------------------

		// --KeyListener
		tableView.setOnKeyReleased(key -> {

			// Find it
			if (key.getCode() == KeyCode.BACK_SPACE)
				searchWord.set("");

			// Local Search
			if (!key.isControlDown() && (key.getCode().isDigitKey() || key.getCode().isKeypadKey()
					|| key.getCode().isLetterKey() || key.getCode() == KeyCode.SPACE)) {
				String keySmall = key.getText().toLowerCase();
				searchWord.set(searchWord.get() + keySmall);
				pauseTransition.playFromStart();

				// Check if searchWord is empty
				if (!searchWord.get().isEmpty()) {
					boolean[] found = { false };
					// Find the first matching item
					tableView.getItems().forEach(media -> {
						if (media.getTitle().toLowerCase().contains(searchWord.get()) && !found[0]) {
							getSelectionModel().clearSelection();
							getSelectionModel().select(media);
							getTableView().scrollTo(media);
							found[0] = true;
						}
					});
				}
			}

		});

		// --Drag Detected
		tableView.setOnDragDetected(event -> {
			if (getSelectedCount() != 0
					&& event.getScreenY() > tableView.localToScreen(tableView.getBoundsInLocal()).getMinY() + 30) {

				/* allow copy transfer mode */
				Dragboard db = tableView.startDragAndDrop(TransferMode.COPY, TransferMode.LINK);

				/* put a string on drag board */
				ClipboardContent content = new ClipboardContent();

				// PutFiles
				content.putFiles(tableView.getSelectionModel().getSelectedItems().stream()
						.map(s -> new File(s.getDownloadService().getLocalFileAbsolutePath()))
						.collect(Collectors.toList()));

				// Set Drag View
				DragViewTool.setPlainTextDragView(db,
						content.getFiles().size() == 1 ? tableView.getSelectionModel().getSelectedItem().getTitle()
								: "(" + content.getFiles().size() + ")Items");

				db.setContent(content);
			}
			event.consume();
		});

	}

	/**
	 * Called as soon as .fxml has been initialized [[SuppressWarningsSpartan]]
	 */
	@FXML
	private void initialize() {

		// ------------------------------TableViewer---------------------------

		// Set Items
		tableView.setItems(observableList);

		// --Allow Multiple Selection
		tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

		tableView.getSelectionModel().getSelectedIndices().addListener((ListChangeListener<? super Integer>) l -> {

			// Hold the Current Selected Count
			int currentSelectedCount = getSelectedCount();

			// Update the Label only if the current selected count != previousSelectedCount
			if (previousSelectedCount != currentSelectedCount) {
				previousSelectedCount = currentSelectedCount;
				updateLabel();
			}

			// Show/hide the action button
			if (currentSelectedCount > 1)
				tableView.getItems().forEach(item -> item.getActionColumnButton().setVisible(false));
			else
				tableView.getItems().forEach(item -> item.getActionColumnButton().setVisible(true));

		});

		// Update the Media Information when Selected Item changes
		tableView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
			if (newValue != null)
				Main.dropBoxViewer.getOpenFolder().setDisable(!newValue.isDirectory());
			else
				Main.dropBoxViewer.getOpenFolder().setDisable(true);
		});

		// PauseTransition
		pauseTransition.setOnFinished(f -> searchWord.set(""));

		// QuickSearchTextField
		quickSearchTextField.visibleProperty().bind(searchWord.isEmpty().not());
		quickSearchTextField.textProperty().bind(Bindings.concat("Search :> ").concat(searchWord));

		// --------------------------Other-----------------------------------
		String center = "-fx-alignment:CENTER-LEFT;";

		// title
		title.setStyle(center);
		title.setCellValueFactory(new PropertyValueFactory<>("title"));

		// fileType
		fileThumbnail.setCellValueFactory(new PropertyValueFactory<>("extension"));
		fileThumbnail.setCellFactory(cell -> new TableCell<DropboxDownloadedFile, String>() {
			// Icon FontIcon
			FontIcon icon = new FontIcon();

			{
				icon.setIconSize(24);
			}

			@Override
			protected void updateItem(String item, boolean empty) {
				super.updateItem(item, empty);

				if (empty) {
					setText(null);
					setGraphic(null);
				} else {
					// set the image according to the play status
					if (item != null && super.getTableRow().getItem() != null) {

						setText(null);
						setGraphic(icon);

						// It is directory?
						if (((DropboxDownloadedFile) super.getTableRow().getItem()).isDirectory()) { // DIRECTORY
							JavaFXTool.setFontIcon(this, icon, "fas-folder", FileTreeItem.folderColor);
						} else {
							// Is it a music file?
							if (ExtensionTool.isAudioCheckExtension(item)) { // AUDIO
								JavaFXTool.setFontIcon(this, icon, "fas-file-audio", FileTreeItem.audioColor);
							} else if (ExtensionTool.isVideoCheckExtension(item)) { // VIDEO
								JavaFXTool.setFontIcon(this, icon, "fas-file-video", Color.WHITE);
							} else if (ExtensionTool.isImageCheckExtension(item)) { // PICTURE
								JavaFXTool.setFontIcon(this, icon, "fas-file-image", Color.WHITE);
							} else if (ExtensionTool.isPdfCheckExtension(item)) { // PDF
								JavaFXTool.setFontIcon(this, icon, "fas-file-pdf", FileTreeItem.pdfColor);
							} else if (ExtensionTool.isZipCheckExtension(item)) { // ZIP
								JavaFXTool.setFontIcon(this, icon, "fas-file-archive", Color.WHITE);
							} else { // FILE
								JavaFXTool.setFontIcon(this, icon, "fas-file", Color.WHITE);
							}
						}
					}
				}
			}

		});

		// download
		progressBox.setCellValueFactory(new PropertyValueFactory<>("progressBox"));

		// ------------------------------------------------------------

		// --KeyListener
		tableView.setOnKeyReleased(key -> {

			// Find it
			if (key.getCode() == KeyCode.BACK_SPACE)
				searchWord.set("");

			// Local Search
			if (!key.isControlDown() && (key.getCode().isDigitKey() || key.getCode().isKeypadKey()
					|| key.getCode().isLetterKey() || key.getCode() == KeyCode.SPACE)) {
				String keySmall = key.getText().toLowerCase();
				searchWord.set(searchWord.get() + keySmall);
				pauseTransition.playFromStart();

				// Check if searchWord is empty
				if (!searchWord.get().isEmpty()) {
					boolean[] found = { false };
					// Find the first matching item
					tableView.getItems().forEach(media -> {
						if (media.getTitle().toLowerCase().contains(searchWord.get()) && !found[0]) {
							getSelectionModel().clearSelection();
							getSelectionModel().select(media);
							getTableView().scrollTo(media);
							found[0] = true;
						}
					});
				}
			}

		});

		// --Drag Detected
		tableView.setOnDragDetected(event -> {
			if (getSelectedCount() != 0
					&& event.getScreenY() > tableView.localToScreen(tableView.getBoundsInLocal()).getMinY() + 30) {

				/* allow copy transfer mode */
				Dragboard db = tableView.startDragAndDrop(TransferMode.COPY, TransferMode.LINK);

				/* put a string on drag board */
				ClipboardContent content = new ClipboardContent();

				// PutFiles
				content.putFiles(tableView.getSelectionModel().getSelectedItems().stream()
						.map(s -> new File(s.getDownloadService().getLocalFileAbsolutePath()))
						.collect(Collectors.toList()));

				// Set Drag View
				DragViewTool.setPlainTextDragView(db,
						content.getFiles().size() == 1 ? tableView.getSelectionModel().getSelectedItem().getTitle()
								: "(" + content.getFiles().size() + ")Items");

				db.setContent(content);
			}
			event.consume();
		});

	}

Replace Generic With Diamond TableCell<DropboxDownloadedFile,String> with TableCell<> in method private initialize() : void from class com.goxr3plus.xr3player.controllers.dropbox.DropboxDownloadsTableViewer


	/**
	 * Called as soon as .fxml has been initialized [[SuppressWarningsSpartan]]
	 */
	@FXML
	private void initialize() {

		// ------------------------------TableViewer---------------------------

		// --Allow Multiple Selection
		tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

		tableView.getSelectionModel().getSelectedIndices().addListener((ListChangeListener<? super Integer>) l -> {

			// Hold the Current Selected Count
			int currentSelectedCount = getSelectedCount();

			// Update the Label only if the current selected count != previousSelectedCount
			if (previousSelectedCount != currentSelectedCount) {
				previousSelectedCount = currentSelectedCount;
				updateLabel();
			}

			// Show/hide the action button
			if (currentSelectedCount > 1)
				tableView.getItems().forEach(item -> item.getActionColumnButton().setVisible(false));
			else
				tableView.getItems().forEach(item -> item.getActionColumnButton().setVisible(true));

		});

		// Update the Media Information when Selected Item changes
		tableView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
			if (newValue != null)
				Main.dropBoxViewer.getOpenFolder().setDisable(!newValue.isDirectory());
			else
				Main.dropBoxViewer.getOpenFolder().setDisable(true);
		});

		// PauseTransition
		pauseTransition.setOnFinished(f -> searchWord.set(""));

		// QuickSearchTextField
		quickSearchTextField.visibleProperty().bind(searchWord.isEmpty().not());
		quickSearchTextField.textProperty().bind(Bindings.concat("Search :> ").concat(searchWord));

		// --------------------------Other-----------------------------------
		String center = "-fx-alignment:CENTER-LEFT;";

		// title
		title.setStyle(center);
		title.setCellValueFactory(new PropertyValueFactory<>("title"));

		// fileType
		fileThumbnail.setCellValueFactory(new PropertyValueFactory<>("extension"));
		fileThumbnail.setCellFactory(cell -> new TableCell<>() {
			// Icon FontIcon
			FontIcon icon = new FontIcon();

			{
				icon.setIconSize(24);
			}

			@Override
			protected void updateItem(String item, boolean empty) {
				super.updateItem(item, empty);

				if (empty) {
					setText(null);
					setGraphic(null);
				} else {
					// set the image according to the play status
					if (item != null && super.getTableRow().getItem() != null) {

						setText(null);
						setGraphic(icon);

						// It is directory?
						if (((DropboxFile) super.getTableRow().getItem()).isDirectory()) { // DIRECTORY
							JavaFXTool.setFontIcon(this, icon, "fas-folder", FileTreeItem.folderColor);
						} else {
							// Is it a music file?
							if (ExtensionTool.isAudioCheckExtension(item)) { // AUDIO
								JavaFXTool.setFontIcon(this, icon, "fas-file-audio", FileTreeItem.audioColor);
							} else if (ExtensionTool.isVideoCheckExtension(item)) { // VIDEO
								JavaFXTool.setFontIcon(this, icon, "fas-file-video", Color.WHITE);
							} else if (ExtensionTool.isImageCheckExtension(item)) { // PICTURE
								JavaFXTool.setFontIcon(this, icon, "fas-file-image", Color.WHITE);
							} else if (ExtensionTool.isPdfCheckExtension(item)) { // PDF
								JavaFXTool.setFontIcon(this, icon, "fas-file-pdf", FileTreeItem.pdfColor);
							} else if (ExtensionTool.isZipCheckExtension(item)) { // ZIP
								JavaFXTool.setFontIcon(this, icon, "fas-file-archive", Color.WHITE);
							} else { // FILE
								JavaFXTool.setFontIcon(this, icon, "fas-file", Color.WHITE);
							}
						}
					}
				}
			}

		});

		// actionColumn
		actionColumn.setCellValueFactory(new PropertyValueFactory<>("actionColumn"));

		// download
		download.setCellValueFactory(new PropertyValueFactory<>("download"));

		// ------------------------------------------------------------

		// --Row Factory
		tableView.setRowFactory(rf -> {
			TableRow<DropboxFile> row = new TableRow<>();

			// Mouse Listener
			row.setFocusTraversable(true);
			row.setOnMouseReleased(m -> {
				// We don't need null rows (rows without items)
				if (row.itemProperty().getValue() != null) {

					if (m.getButton() == MouseButton.SECONDARY && !row.isDisable())
						tableView.getSelectionModel().select(row.getIndex());

					// Primary
					if (m.getButton() == MouseButton.PRIMARY) {
						if (m.getClickCount() == 2 && row.itemProperty().get().isDirectory())
							Main.dropBoxViewer.recreateTableView(row.itemProperty().get().getMetadata().getPathLower());
						if (m.getClickCount() == 2 && !row.itemProperty().get().isDirectory())
							Main.dropBoxViewer.renameFile(row.itemProperty().get(), row);

						// Secondary
					} else if (m.getButton() == MouseButton.SECONDARY
							&& !tableView.getSelectionModel().getSelectedItems().isEmpty()) {

						// Show the contextMenu
						Main.dropBoxViewer.getFileContextMenu().show(row.itemProperty().get(), m.getScreenX(),
								m.getScreenY(), row);
					}
				}
			});

			return row;
		});

		// --KeyListener
		tableView.setOnKeyReleased(key -> {

			// Find it
			if (key.getCode() == KeyCode.BACK_SPACE)
				searchWord.set("");
			else if (key.getCode() == KeyCode.DELETE)
				Main.dropBoxViewer.deleteSelectedFiles(false);

			// Local Search
			if (!key.isControlDown() && (key.getCode().isDigitKey() || key.getCode().isKeypadKey()
					|| key.getCode().isLetterKey() || key.getCode() == KeyCode.SPACE)) {
				String keySmall = key.getText().toLowerCase();
				searchWord.set(searchWord.get() + keySmall);
				pauseTransition.playFromStart();

				// Check if searchWord is empty
				if (!searchWord.get().isEmpty()) {
					boolean[] found = { false };
					// Find the first matching item
					tableView.getItems().forEach(media -> {
						if (media.getTitle().toLowerCase().contains(searchWord.get()) && !found[0]) {
							getSelectionModel().clearSelection();
							getSelectionModel().select(media);
							getTableView().scrollTo(media);
							found[0] = true;
						}
					});
				}
			}

		});

		// --Drag Detected
		tableView.setOnDragDetected(event -> {
			if (getSelectedCount() != 0
					&& event.getScreenY() > tableView.localToScreen(tableView.getBoundsInLocal()).getMinY() + 30) {

				/* allow copy transfer mode */
				Dragboard db = tableView.startDragAndDrop(TransferMode.COPY, TransferMode.LINK);

				/* put a string on drag board */
				ClipboardContent content = new ClipboardContent();

				// PutFiles
				content.putString("#dropbox_item#");

				// DragView
				DragViewTool.setPlainTextDragView(db, tableView.getSelectionModel().getSelectedItem().getTitle());

				db.setContent(content);
			}
			event.consume();
		});

	}

	/**
	 * Called as soon as .fxml has been initialized [[SuppressWarningsSpartan]]
	 */
	@FXML
	private void initialize() {

		// ------------------------------TableViewer---------------------------

		// --Allow Multiple Selection
		tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

		tableView.getSelectionModel().getSelectedIndices().addListener((ListChangeListener<? super Integer>) l -> {

			// Hold the Current Selected Count
			int currentSelectedCount = getSelectedCount();

			// Update the Label only if the current selected count != previousSelectedCount
			if (previousSelectedCount != currentSelectedCount) {
				previousSelectedCount = currentSelectedCount;
				updateLabel();
			}

			// Show/hide the action button
			if (currentSelectedCount > 1)
				tableView.getItems().forEach(item -> item.getActionColumnButton().setVisible(false));
			else
				tableView.getItems().forEach(item -> item.getActionColumnButton().setVisible(true));

		});

		// Update the Media Information when Selected Item changes
		tableView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
			if (newValue != null)
				Main.dropBoxViewer.getOpenFolder().setDisable(!newValue.isDirectory());
			else
				Main.dropBoxViewer.getOpenFolder().setDisable(true);
		});

		// PauseTransition
		pauseTransition.setOnFinished(f -> searchWord.set(""));

		// QuickSearchTextField
		quickSearchTextField.visibleProperty().bind(searchWord.isEmpty().not());
		quickSearchTextField.textProperty().bind(Bindings.concat("Search :> ").concat(searchWord));

		// --------------------------Other-----------------------------------
		String center = "-fx-alignment:CENTER-LEFT;";

		// title
		title.setStyle(center);
		title.setCellValueFactory(new PropertyValueFactory<>("title"));

		// fileType
		fileThumbnail.setCellValueFactory(new PropertyValueFactory<>("extension"));
		fileThumbnail.setCellFactory(cell -> new TableCell<DropboxFile, String>() {
			// Icon FontIcon
			FontIcon icon = new FontIcon();

			{
				icon.setIconSize(24);
			}

			@Override
			protected void updateItem(String item, boolean empty) {
				super.updateItem(item, empty);

				if (empty) {
					setText(null);
					setGraphic(null);
				} else {
					// set the image according to the play status
					if (item != null && super.getTableRow().getItem() != null) {

						setText(null);
						setGraphic(icon);

						// It is directory?
						if (((DropboxFile) super.getTableRow().getItem()).isDirectory()) { // DIRECTORY
							JavaFXTool.setFontIcon(this, icon, "fas-folder", FileTreeItem.folderColor);
						} else {
							// Is it a music file?
							if (ExtensionTool.isAudioCheckExtension(item)) { // AUDIO
								JavaFXTool.setFontIcon(this, icon, "fas-file-audio", FileTreeItem.audioColor);
							} else if (ExtensionTool.isVideoCheckExtension(item)) { // VIDEO
								JavaFXTool.setFontIcon(this, icon, "fas-file-video", Color.WHITE);
							} else if (ExtensionTool.isImageCheckExtension(item)) { // PICTURE
								JavaFXTool.setFontIcon(this, icon, "fas-file-image", Color.WHITE);
							} else if (ExtensionTool.isPdfCheckExtension(item)) { // PDF
								JavaFXTool.setFontIcon(this, icon, "fas-file-pdf", FileTreeItem.pdfColor);
							} else if (ExtensionTool.isZipCheckExtension(item)) { // ZIP
								JavaFXTool.setFontIcon(this, icon, "fas-file-archive", Color.WHITE);
							} else { // FILE
								JavaFXTool.setFontIcon(this, icon, "fas-file", Color.WHITE);
							}
						}
					}
				}
			}

		});

		// actionColumn
		actionColumn.setCellValueFactory(new PropertyValueFactory<>("actionColumn"));

		// download
		download.setCellValueFactory(new PropertyValueFactory<>("download"));

		// ------------------------------------------------------------

		// --Row Factory
		tableView.setRowFactory(rf -> {
			TableRow<DropboxFile> row = new TableRow<>();

			// Mouse Listener
			row.setFocusTraversable(true);
			row.setOnMouseReleased(m -> {
				// We don't need null rows (rows without items)
				if (row.itemProperty().getValue() != null) {

					if (m.getButton() == MouseButton.SECONDARY && !row.isDisable())
						tableView.getSelectionModel().select(row.getIndex());

					// Primary
					if (m.getButton() == MouseButton.PRIMARY) {
						if (m.getClickCount() == 2 && row.itemProperty().get().isDirectory())
							Main.dropBoxViewer.recreateTableView(row.itemProperty().get().getMetadata().getPathLower());
						if (m.getClickCount() == 2 && !row.itemProperty().get().isDirectory())
							Main.dropBoxViewer.renameFile(row.itemProperty().get(), row);

						// Secondary
					} else if (m.getButton() == MouseButton.SECONDARY
							&& !tableView.getSelectionModel().getSelectedItems().isEmpty()) {

						// Show the contextMenu
						Main.dropBoxViewer.getFileContextMenu().show(row.itemProperty().get(), m.getScreenX(),
								m.getScreenY(), row);
					}
				}
			});

			return row;
		});

		// --KeyListener
		tableView.setOnKeyReleased(key -> {

			// Find it
			if (key.getCode() == KeyCode.BACK_SPACE)
				searchWord.set("");
			else if (key.getCode() == KeyCode.DELETE)
				Main.dropBoxViewer.deleteSelectedFiles(false);

			// Local Search
			if (!key.isControlDown() && (key.getCode().isDigitKey() || key.getCode().isKeypadKey()
					|| key.getCode().isLetterKey() || key.getCode() == KeyCode.SPACE)) {
				String keySmall = key.getText().toLowerCase();
				searchWord.set(searchWord.get() + keySmall);
				pauseTransition.playFromStart();

				// Check if searchWord is empty
				if (!searchWord.get().isEmpty()) {
					boolean[] found = { false };
					// Find the first matching item
					tableView.getItems().forEach(media -> {
						if (media.getTitle().toLowerCase().contains(searchWord.get()) && !found[0]) {
							getSelectionModel().clearSelection();
							getSelectionModel().select(media);
							getTableView().scrollTo(media);
							found[0] = true;
						}
					});
				}
			}

		});

		// --Drag Detected
		tableView.setOnDragDetected(event -> {
			if (getSelectedCount() != 0
					&& event.getScreenY() > tableView.localToScreen(tableView.getBoundsInLocal()).getMinY() + 30) {

				/* allow copy transfer mode */
				Dragboard db = tableView.startDragAndDrop(TransferMode.COPY, TransferMode.LINK);

				/* put a string on drag board */
				ClipboardContent content = new ClipboardContent();

				// PutFiles
				content.putString("#dropbox_item#");

				// DragView
				DragViewTool.setPlainTextDragView(db, tableView.getSelectionModel().getSelectedItem().getTitle());

				db.setContent(content);
			}
			event.consume();
		});

	}

Replace Generic With Diamond TableCell<DropboxFile,String> with TableCell<> in method private initialize() : void from class com.goxr3plus.xr3player.controllers.dropbox.DropboxFilesTableViewer


		@Override
		protected Task<Void> createTask() {
			return new Task<>() {
				@Override
				protected Void call() throws Exception {
					// Variables
					found = 0;
					word = word.toLowerCase();

					// matcher
					if (searchBoxType == SearchBoxType.USERSSEARCHBOX)
						Main.loginMode.viewer.getItemsObservableList().stream()
								.filter(user -> ((User) user).getName().toLowerCase().contains(word)).forEach(user -> {
							Platform.runLater(() -> getSearchBoxWindow().addItem(((User) user).getName(),
									ac -> Main.loginMode.viewer.setCenterItem(user)));
							++found;
						});
					else if (searchBoxType == SearchBoxType.LIBRARYSEARCHBOX)
						Main.libraryMode.viewer.getItemsObservableList().stream()
								.filter(library -> ((Library) library).getLibraryName().toLowerCase().contains(word))
								.forEach(library -> {
									Platform.runLater(
											() -> searchBoxWindow.addItem(((Library) library).getLibraryName(),
													ac -> Main.libraryMode.viewer.setCenterItem(library)));
									++found;
								});
					return null;
				}

			};
		}

		@Override
		protected Task<Void> createTask() {
			return new Task<Void>() {
				@Override
				protected Void call() throws Exception {
					// Variables
					found = 0;
					word = word.toLowerCase();

					// matcher
					if (searchBoxType == SearchBoxType.USERSSEARCHBOX)
						Main.loginMode.viewer.getItemsObservableList().stream()
								.filter(user -> ((User) user).getName().toLowerCase().contains(word)).forEach(user -> {
									Platform.runLater(() -> getSearchBoxWindow().addItem(((User) user).getName(),
											ac -> Main.loginMode.viewer.setCenterItem(user)));
									++found;
								});
					else if (searchBoxType == SearchBoxType.LIBRARYSEARCHBOX)
						Main.libraryMode.viewer.getItemsObservableList().stream()
								.filter(library -> ((Library) library).getLibraryName().toLowerCase().contains(word))
								.forEach(library -> {
									Platform.runLater(
											() -> searchBoxWindow.addItem(((Library) library).getLibraryName(),
													ac -> Main.libraryMode.viewer.setCenterItem(library)));
									++found;
								});
					return null;
				}

			};
		}

Replace Generic With Diamond Task<Void> with Task<> in method protected createTask() : Task<Void> from class com.goxr3plus.xr3player.controllers.general.SearchBox.SearchService


		@Override
		protected Task<Void> createTask() {
			return new Task<>() {

				@Override
				protected Void call() throws Exception {

					// == image
					image = null;
					try {
						image = media.getAlbumImage();
					} catch (Exception ex) {
						// ex.printStackTrace()
					}

					Platform.runLater(() -> {
						imageView.setImage(image);

						// == title
						title.textProperty().bind(media.titleProperty());

						// == duration
						duration.setText(media.durationEditedProperty().get());

						// == stars
						stars.textProperty().bind(media.starsProperty().asString());

						// == drive
						drive.setText(media.getDrive());

						// == type
						type.setText(media.getFileType());

						// == size
						size.setText(media.fileSizeProperty().get());

					});

					// Try to get other information
					try {
						File file = new File(media.getFilePath());

						// ---------------------MP3--------------------------------------
						if ("mp3".equals(media.fileTypeProperty().get()) && file.exists() && file.length() != 0) {
							MP3AudioHeader mp3Header = new MP3File(file).getMP3AudioHeader();

							_sampleRate = mp3Header.getSampleRate();
							_bitRate = Long.toString(mp3Header.getBitRateAsNumber());
							_encoder = mp3Header.getEncoder();
							_Channel = mp3Header.getChannels();
							_format = mp3Header.getFormat();

							_mpegVersion = mp3Header.getMpegVersion();
							_mpegLayer = mp3Header.getMpegLayer();
							_totalFrames = Long.toString(mp3Header.getNumberOfFrames());
							_noOfSamples = Long.toString(mp3Header.getNoOfSamples());
							_mp3StartByte = Long.toString(mp3Header.getMp3StartByte());
							_empasis = mp3Header.isVariableBitRate() ? "yes" : "no";
							_isVariableBitRate = mp3Header.getEmphasis();
							_isOriginal = mp3Header.isOriginal() ? "yes" : "no";
							_isCopyrighted = mp3Header.isCopyrighted() ? "yes" : "no";
							_isPadding = mp3Header.isPadding() ? "yes" : "no";
							_isProtected = mp3Header.isProtected() ? "yes" : "no";
							_isPrivate = mp3Header.isPrivate() ? "yes" : "no";

							// Run it on JavaFX Thread
							Platform.runLater(() -> {
								sampleRate.setText(_sampleRate);
								bitRate.setText(_bitRate);
								encoder.setText(_encoder);
								channel.setText(_Channel);
								format.setText(_format);

								mpegVersion.setText(_mpegVersion);
								mpegLayer.setText(_mpegLayer);
								totalFrames.setText(_totalFrames);
								noOfSamples.setText(_noOfSamples);
								mp3StartByte.setText(_mp3StartByte);
								empasis.setText(_empasis);
								isVariableBitRate.setText(_isVariableBitRate);
								isOriginal.setText(_isOriginal);
								isCopyrighted.setText(_isCopyrighted);
								isPadding.setText(_isPadding);
								isProtected.setText(_isProtected);
								isPrivate.setText(_isPrivate);
							});

							// ------------------------OTHER FORMAT-------------------------
						} else {

							// Run it on JavaFX Thread
							Platform.runLater(() -> {
								sampleRate.setText("-");
								bitRate.setText("-");
								encoder.setText("-");
								channel.setText("-");
								format.setText("-");

								mpegVersion.setText("-");
								mpegLayer.setText("-");
								totalFrames.setText("-");
								noOfSamples.setText("-");
								mp3StartByte.setText("-");
								empasis.setText("-");
								isVariableBitRate.setText("-");
								isOriginal.setText("-");
								isCopyrighted.setText("-");
								isPadding.setText("-");
								isProtected.setText("-");
								isPrivate.setText("-");
							});
						}
					} catch (IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException
							| CannotReadException ex) {
						// ex.printStackTrace();
					}

					return null;
				}
			};
		}

		@Override
		protected Task<Void> createTask() {
			return new Task<Void>() {

				@Override
				protected Void call() throws Exception {

					// == image
					image = null;
					try {
						image = media.getAlbumImage();
					} catch (Exception ex) {
						// ex.printStackTrace()
					}

					Platform.runLater(() -> {
						imageView.setImage(image);

						// == title
						title.textProperty().bind(media.titleProperty());

						// == duration
						duration.setText(media.durationEditedProperty().get());

						// == stars
						stars.textProperty().bind(media.starsProperty().asString());

						// == drive
						drive.setText(media.getDrive());

						// == type
						type.setText(media.getFileType());

						// == size
						size.setText(media.fileSizeProperty().get());

					});

					// Try to get other information
					try {
						File file = new File(media.getFilePath());

						// ---------------------MP3--------------------------------------
						if ("mp3".equals(media.fileTypeProperty().get()) && file.exists() && file.length() != 0) {
							MP3AudioHeader mp3Header = new MP3File(file).getMP3AudioHeader();

							_sampleRate = mp3Header.getSampleRate();
							_bitRate = Long.toString(mp3Header.getBitRateAsNumber());
							_encoder = mp3Header.getEncoder();
							_Channel = mp3Header.getChannels();
							_format = mp3Header.getFormat();

							_mpegVersion = mp3Header.getMpegVersion();
							_mpegLayer = mp3Header.getMpegLayer();
							_totalFrames = Long.toString(mp3Header.getNumberOfFrames());
							_noOfSamples = Long.toString(mp3Header.getNoOfSamples());
							_mp3StartByte = Long.toString(mp3Header.getMp3StartByte());
							_empasis = mp3Header.isVariableBitRate() ? "yes" : "no";
							_isVariableBitRate = mp3Header.getEmphasis();
							_isOriginal = mp3Header.isOriginal() ? "yes" : "no";
							_isCopyrighted = mp3Header.isCopyrighted() ? "yes" : "no";
							_isPadding = mp3Header.isPadding() ? "yes" : "no";
							_isProtected = mp3Header.isProtected() ? "yes" : "no";
							_isPrivate = mp3Header.isPrivate() ? "yes" : "no";

							// Run it on JavaFX Thread
							Platform.runLater(() -> {
								sampleRate.setText(_sampleRate);
								bitRate.setText(_bitRate);
								encoder.setText(_encoder);
								channel.setText(_Channel);
								format.setText(_format);

								mpegVersion.setText(_mpegVersion);
								mpegLayer.setText(_mpegLayer);
								totalFrames.setText(_totalFrames);
								noOfSamples.setText(_noOfSamples);
								mp3StartByte.setText(_mp3StartByte);
								empasis.setText(_empasis);
								isVariableBitRate.setText(_isVariableBitRate);
								isOriginal.setText(_isOriginal);
								isCopyrighted.setText(_isCopyrighted);
								isPadding.setText(_isPadding);
								isProtected.setText(_isProtected);
								isPrivate.setText(_isPrivate);
							});

							// ------------------------OTHER FORMAT-------------------------
						} else {

							// Run it on JavaFX Thread
							Platform.runLater(() -> {
								sampleRate.setText("-");
								bitRate.setText("-");
								encoder.setText("-");
								channel.setText("-");
								format.setText("-");

								mpegVersion.setText("-");
								mpegLayer.setText("-");
								totalFrames.setText("-");
								noOfSamples.setText("-");
								mp3StartByte.setText("-");
								empasis.setText("-");
								isVariableBitRate.setText("-");
								isOriginal.setText("-");
								isCopyrighted.setText("-");
								isPadding.setText("-");
								isProtected.setText("-");
								isPrivate.setText("-");
							});
						}
					} catch (IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException
							| CannotReadException ex) {
						// ex.printStackTrace();
					}

					return null;
				}
			};
		}

Replace Generic With Diamond Task<Void> with Task<> in method protected createTask() : Task<Void> from class com.goxr3plus.xr3player.controllers.smartcontroller.MediaInformation.UpdateInformationService


	/**
	 * Called as soon as .fxml has been initialized [[SuppressWarningsSpartan]]
	 */
	@FXML
	private void initialize() {

		// ArtWork FontIcon
		FontIcon openFolderIcon = new FontIcon("far-folder-open");
		openFolderIcon.setIconSize(30);
		openFolderIcon.setIconColor(Color.web("#ddaa33"));

		// ------------------------------TableViewer---------------------------
		if (mode == SmartControllerMode.MEDIA) {
			tableView.setItems(smartController.getItemsObservableList());

			// Add the place holder for the tableView
			Label placeHolderLabel = new Label();

			if (smartController.getGenre() == Genre.LIBRARYMEDIA) {
				placeHolderLabel.setText("Import Media ...");
				placeHolderLabel.setStyle("-fx-text-fill:white; -fx-font-weight:bold; -fx-cursor:hand;");
				placeHolderLabel.setOnMouseReleased(m -> smartController.getToolsContextMenu().show(placeHolderLabel,
						m.getScreenX(), m.getScreenY()));
				placeHolderLabel.setGraphic(openFolderIcon);
			} else if (smartController.getGenre() == Genre.SEARCHWINDOW) {
				placeHolderLabel.setText("Search Media from all the playlists...");
				placeHolderLabel.setStyle("-fx-text-fill:white; -fx-font-weight:bold; ");
			} else if (smartController.getGenre() == Genre.EMOTIONSMEDIA) {
				placeHolderLabel.setText("No Media in this emotions list ...");
				placeHolderLabel.setStyle("-fx-text-fill:white; -fx-font-weight:bold; ");
			}
			tableView.setPlaceholder(placeHolderLabel);
		}

		// --Allow Multiple Selection
		tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

		tableView.getSelectionModel().getSelectedIndices().addListener((ListChangeListener<? super Integer>) l -> {

			// Hold the Current Selected Count
			int currentSelectedCount = getSelectedCount();

			// Update the Label only if the current selected count != previousSelectedCount
			if (previousSelectedCount != currentSelectedCount) {
				previousSelectedCount = currentSelectedCount;
				smartController.updateLabel();
			}

		});

		// Update the Media Information when Selected Item changes
		tableView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
			if (newValue != null && oldValue != newValue) {

				// Synchronize with Media Information
				Main.mediaInformation.updateInformation(newValue);

				// Check if selection is allowed
				if (Main.settingsWindow.getPlayListsSettingsController().getSelectMatchingMediaViewItem()
						.isSelected()) {
					String path = newValue.getFilePath();

					// Select
					smartController.getMediaViewer().getItemsObservableList().stream()
							.filter(media -> ((MediaViewer) media).getMedia().getFilePath().equals(path)).findFirst()
							.ifPresent(mediaViewer -> smartController.getMediaViewer().setCenterIndex(
									smartController.getMediaViewer().getItemsObservableList().indexOf(mediaViewer)));
				}

			}
		});

		// --Row Factory
		tableView.setRowFactory(rf -> {
			TableRow<Media> row = new TableRow<>();

			// // use EasyBind to access the valueProperty of the itemProperty
			// // of the cell:
			// row.disableProperty().bind(
			// // start at itemProperty of row
			// EasyBind.select(row.itemProperty())
			// // map to fileExistsProperty[a boolean] of item,
			// // if item non-null
			// .selectObject(Media::fileExistsProperty)
			// // map to BooleanBinding checking if false
			// .map(x -> !x.booleanValue())
			// // value to use if item was null
			// .orElse(false));

			// Mouse Listener
			row.setFocusTraversable(true);
			row.setOnMouseReleased(m -> {
				// We don't need null rows (rows without items)
				if (row.itemProperty().getValue() != null) {

					if (m.getButton() == MouseButton.SECONDARY && !row.isDisable())
						tableView.getSelectionModel().select(row.getIndex());

					// Primary
					if (m.getButton() == MouseButton.PRIMARY) {
						if (m.getClickCount() == 2)
							row.itemProperty().get().rename(row);

					} // Secondary
					else if (m.getButton() == MouseButton.SECONDARY
							&& !tableView.getSelectionModel().getSelectedItems().isEmpty())
						Main.songsContextMenu.showContextMenu(row.itemProperty().get(), smartController.getGenre(),
								m.getScreenX(), m.getScreenY(), smartController, row);
				}
			});

			return row;
		});

		// --Drag Detected
		tableView.setOnDragDetected(event -> {
			if (getSelectedCount() != 0
					&& event.getScreenY() > tableView.localToScreen(tableView.getBoundsInLocal()).getMinY() + 30) {

				/* allow copy transfer mode */
				Dragboard db = tableView.startDragAndDrop(TransferMode.COPY, TransferMode.LINK);

				/* put a string on drag board */
				ClipboardContent content = new ClipboardContent();

				// PutFiles
				content.putFiles(tableView.getSelectionModel().getSelectedItems().stream()
						.map(s -> new File(s.getFilePath())).collect(Collectors.toList()));

				// Single Drag and Drop ?
				if (content.getFiles().size() == 1)
					DragViewTool.setDragView(db, tableView.getSelectionModel().getSelectedItem());
				// Multiple Drag and Drop ?
				else {
					DragViewTool.setPlainTextDragView(db, "(" + content.getFiles().size() + ")Items");
				}

				db.setContent(content);
			}
			event.consume();
		});

		// dragAndDropLabel
		dragAndDropLabel.setVisible(false);

		// System.out.println(smartController.getGenre() + " , " +
		// SmartControllerMode.MEDIA);
		if (smartController.getGenre() == Genre.LIBRARYMEDIA && mode == SmartControllerMode.MEDIA) {

			// --Drag Over
			tableView.setOnDragOver(dragOver -> {

				// The drag must come from source other than the owner
				if (dragOver.getDragboard().hasFiles() && dragOver.getGestureSource() != tableView)
					dragAndDropLabel.setVisible(true);

			});

			dragAndDropLabel.setOnDragOver(dragOver -> {

				// The drag must come from source other than the owner
				// System.out.println(dragOver.getGestureSource());
				// if(dragOver.getGestureSource().toString().contains("MediaViewer") &&
				// dragOver.getGestureSource().)

				if (dragOver.getDragboard().hasFiles() && dragOver.getGestureSource() != tableView)
					dragOver.acceptTransferModes(TransferMode.LINK);

			});

			// --Drag Dropped
			dragAndDropLabel.setOnDragDropped(drop -> {
				// Has Files? + isFree()?
				if (drop.getDragboard().hasFiles() && smartController.isFree(true))
					smartController.getInputService().start(drop.getDragboard().getFiles());

				drop.setDropCompleted(true);
			});

			// Drag Exited
			dragAndDropLabel.setOnDragExited(drop -> dragAndDropLabel.setVisible(false));

		}

		// --------------------------Other-----------------------------------
		String center = "-fx-alignment:CENTER-LEFT;";

		// getInfoBuy
		getInfoBuy.setCellValueFactory(new PropertyValueFactory<>("getInfoBuy"));

		// emotion
		emotions.setCellValueFactory(new PropertyValueFactory<>("emotion"));
		emotions.setCellFactory(col -> new TableCell<>() {

			// Emotion Button
			Button emotionButton = new Button("");

			{

				emotionButton.getStyleClass().add("jfx-button2");
				emotionButton.setPrefSize(24, 24);
				emotionButton.setMinSize(24, 24);
				emotionButton.setMaxSize(24, 24);
				emotionButton.setStyle("-fx-cursor:hand");
				emotionButton.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);

			}

			/**
			 * Update the emotion the user is feeling for this Media
			 */
			public void updateEmotion(Media media, Node node) {
				// Show the Window
				Main.emotionsWindow.show(media.getFileName(), node);// getFileName()

				// Listener
				Main.emotionsWindow.getWindow().showingProperty().addListener(new InvalidationListener() {
					/**
					 * [[SuppressWarningsSpartan]]
					 */
					@Override
					public void invalidated(Observable o) {

						// Remove the listener
						Main.emotionsWindow.getWindow().showingProperty().removeListener(this);

						// !showing?
						if (!Main.emotionsWindow.getWindow().isShowing() && Main.emotionsWindow.wasAccepted()) {

							// Add it the one of the emotions list
							new Thread(() -> Main.emotionListsController.makeEmotionDecisition(media.getFilePath(),
									Main.emotionsWindow.getEmotion())).start();

						}
					}
				});

			}

			@Override
			protected void updateItem(Integer item, boolean empty) {
				super.updateItem(item, empty);
				if (empty) {
					setText(null);
					setGraphic(null);
				} else {
					int size = 24;
					Emotion emotion = Emotion.NEUTRAL;

					// Emotion Button
					emotionButton.setOnAction(a -> updateEmotion(getTableRow().getItem(), emotionButton));
					setGraphic(emotionButton);

					// set the image according to the play status
					if (item != null) {
						if (item == 1) {
							emotion = Emotion.HATE;
							size = 24;
						} else if (item == 2) {
							emotion = Emotion.DISLIKE;
							size = 20;
						} else if (item == 0) {
							emotion = Emotion.NEUTRAL;
							size = 28;
						} else if (item == 3) {
							emotion = Emotion.LIKE;
							size = 20;
						} else if (item == 4) {
							emotion = Emotion.LOVE;
							size = 20;
						}

						// Now set the graphic
						emotionButton.setGraphic(Main.emotionsWindow.getEmotionFontIcon(emotion, size));

					}

				}
			}

		});

		// stars
		stars.setCellValueFactory(new PropertyValueFactory<>("stars"));
		stars.setCellFactory(col -> new TableCell<>() {

			// Star Badge
			StarBadge starBadge = new StarBadge(0.0);

			@Override
			protected void updateItem(Double item, boolean empty) {
				super.updateItem(item, empty);
				if (empty) {
					setText(null);
					setGraphic(null);
				} else {

					// Check if item is null
					if (getTableRow().getItem() != null) {

						// Star Badge
						starBadge.setOnAction(a -> getTableRow().getItem().updateStars(starBadge));
						starBadge.setStars(getTableRow().getItem().getStars());

						setGraphic(starBadge);
					}
				}
			}

		});

		// number
		number.setCellValueFactory(new PropertyValueFactory<>("number"));

		// hasBeenPlayed
		playStatus.setCellValueFactory(new PropertyValueFactory<>("playStatus"));
		playStatus.setCellFactory(col -> new TableCell<>() {

			// Icon FontIcon
			// HBox flowPane = new HBox();

			@Override
			protected void updateItem(Integer item, boolean empty) {
				super.updateItem(item, empty);
				if (empty) {
					setText(null);
					setGraphic(null);
				} else {
					// Clear the flowPane
					// flowPane.getChildren().clear();

					// set the image according to the play status
					if (item != null) {
						if (item == -2) // UNKNOWN
							setGraphic(null);
						else if (item == -1) { // Already played
							setGraphic(JavaFXTool.getFontIcon("fas-play-circle", lightGreen, 24));
						} else { // BEING PLAYED BY SOME PLAYERS
							//
							// TO BE FIXES - PROBLEM IF IS PLAYING IN MANY PLAYERS IT MUST SHOW MANY PLAYERS
							// NOT JUST ONE!!!
							setGraphic(JavaFXTool.getFontIcon("gmi-filter-" + (item + 1), Color.WHITE, 24));

							// String mediaPath = getTableRow().getItem().getFilePath();
							// Main.xPlayersList.getList().stream().sorted((o1 , o2) ->
							// Integer.valueOf(o1.getKey()).compareTo(o2.getKey())).forEach(controller -> {
							// String path = controller.getxPlayerModel().songPathProperty().get();
							// //Check if it matches
							// if (path != null && path.equals(mediaPath))
							// flowPane.getChildren().addAll(JavaFXTools.getFontIcon("gmi-filter-" + (
							// controller.getKey() + 1 ), Color.WHITE, 24));
							//
							// });
							// setGraphic(flowPane);
						}
					}
				}
			}

		});

		// mediaType
		mediaType.setCellValueFactory(new PropertyValueFactory<>("mediaType"));
		mediaType.setCellFactory(col -> new TableCell<>() {

			// Icon FontIcon
			FontIcon icon = new FontIcon();

			{
				icon.setIconSize(24);
			}

			@Override
			protected void updateItem(Integer item, boolean empty) {
				super.updateItem(item, empty);
				if (empty) {
					setText(null);
					setGraphic(null);
				} else {
					setGraphic(icon);

					// set the image according to the play status
					if (item != null)
						if (item == -1) { // Missing
							JavaFXTool.setFontIcon(this, icon, "fa-deaf", Color.WHITE);
						} else if (item == 0) { // Corrupted
							JavaFXTool.setFontIcon(this, icon, "fas-bug", Color.WHITE);
						} else if (item == 1) { // Okay
							JavaFXTool.setFontIcon(this, icon, "gmi-audiotrack", Color.WHITE);
						}
				}
			}

		});

		// artwork
		artwork.setCellValueFactory(new PropertyValueFactory<>("artwork"));
		artwork.setComparator((stackedFontIcon1, stackedFontIcon2) -> {
			ImageView imageView1 = (ImageView) stackedFontIcon1.getChildren().get(1);
			ImageView imageView2 = (ImageView) stackedFontIcon2.getChildren().get(1);
			if (imageView1.getImage() == null && imageView2.getImage() != null)
				return 1;
			else if (imageView1.getImage() != null && imageView2.getImage() == null)
				return 0;
			else
				return -1;
		});
		artwork.visibleProperty().addListener(l -> {
			if (artwork.isVisible())
				this.allDetailsService.updateOnlyArtWorkColumn(this);
		});

		// title
		title.setStyle(center);
		title.setCellValueFactory(new PropertyValueFactory<>("title"));

		// hourImported
		hourImported.setCellValueFactory(new PropertyValueFactory<>("hourImported"));

		// dateImported
		dateImported.setCellValueFactory(new PropertyValueFactory<>("dateImported"));

		// dateFileCreated
		dateFileCreated.setCellValueFactory(new PropertyValueFactory<>("dateFileCreated"));

		// dateFileCreated
		dateFileModified.setCellValueFactory(new PropertyValueFactory<>("dateFileModified"));

		// timesHeard
		timesPlayed.setCellValueFactory(new PropertyValueFactory<>("timesPlayed"));

		// duration
		duration.setCellValueFactory(new PropertyValueFactory<>("durationEdited"));

		// drive
		drive.setCellValueFactory(new PropertyValueFactory<>("drive"));

		// filePath
		filePath.setStyle(center);
		filePath.setCellValueFactory(new PropertyValueFactory<>("filePath"));

		// fileName
		fileName.setStyle(center);
		fileName.setCellValueFactory(new PropertyValueFactory<>("fileName"));

		// fileType
		fileType.setCellValueFactory(new PropertyValueFactory<>("fileType"));

		// fileType
		fileSize.setCellValueFactory(new PropertyValueFactory<>("fileSize"));

		// artist
		artist.setCellValueFactory(new PropertyValueFactory<>("artist"));

		// mood
		mood.setCellValueFactory(new PropertyValueFactory<>("mood"));

		// album
		album.setCellValueFactory(new PropertyValueFactory<>("album"));

		// composer
		composer.setCellValueFactory(new PropertyValueFactory<>("composer"));

		// comment
		comment.setCellValueFactory(new PropertyValueFactory<>("comment"));

		// genre
		genre.setCellValueFactory(new PropertyValueFactory<>("genre"));

		// bitRate
		bitRate.setCellValueFactory(new PropertyValueFactory<>("bitRate"));

		// bpm
		bpm.setCellValueFactory(new PropertyValueFactory<>("bpm"));

		// tempo
		tempo.setCellValueFactory(new PropertyValueFactory<>("tempo"));

		// key
		key.setCellValueFactory(new PropertyValueFactory<>("key"));

		// year
		year.setCellValueFactory(new PropertyValueFactory<>("year"));

		// .

		// copyright
		copyright.setCellValueFactory(new PropertyValueFactory<>("copyright"));

		// track
		track.setCellValueFactory(new PropertyValueFactory<>("track"));

		// track_total
		track_total.setCellValueFactory(new PropertyValueFactory<>("track_total"));

		// remixer
		remixer.setCellValueFactory(new PropertyValueFactory<>("remixer"));

		// djMixer
		djMixer.setCellValueFactory(new PropertyValueFactory<>("djMixer"));

		// rating
		rating.setCellValueFactory(new PropertyValueFactory<>("rating"));

		// producer
		producer.setCellValueFactory(new PropertyValueFactory<>("producer"));

		// performer
		performer.setCellValueFactory(new PropertyValueFactory<>("performer"));

		// orchestra
		orchestra.setCellValueFactory(new PropertyValueFactory<>("orchestra"));

		// country
		country.setCellValueFactory(new PropertyValueFactory<>("country"));

		// lyricist
		lyricist.setCellValueFactory(new PropertyValueFactory<>("lyricist"));

		// conductor
		conductor.setCellValueFactory(new PropertyValueFactory<>("conductor"));

		// amazonID
		amazonID.setCellValueFactory(new PropertyValueFactory<>("amazonID"));

		// encoder
		encoder.setCellValueFactory(new PropertyValueFactory<>("encoder"));

		// PauseTransition
		pauseTransition.setOnFinished(f -> searchWord.set(""));

		// QuickSearchTextField
		quickSearchTextField.visibleProperty().bind(searchWord.isEmpty().not());
		quickSearchTextField.textProperty().bind(Bindings.concat("Search :> ").concat(searchWord));

		// ------ centerStackPane
		setOnKeyReleased(key -> {
			KeyCode code = key.getCode();

			// Check this firstly
			if ((key.isControlDown() || key.getCode() == KeyCode.COMMAND) && key.getCode() == KeyCode.C) {

				copySelectedMediaToClipBoard();

				return;

			} else if (smartController.getGenre() == Genre.LIBRARYMEDIA
					&& ((key.isControlDown() || key.getCode() == KeyCode.COMMAND) && key.getCode() == KeyCode.V)) {

				pasteMediaFromClipBoard();

				return;
			}

			// Then this
			if (key.isControlDown() && code == KeyCode.LEFT && mode != SmartControllerMode.FILTERS_MODE)
				smartController.goPrevious();
			else if (key.isControlDown() && code == KeyCode.RIGHT && mode != SmartControllerMode.FILTERS_MODE)
				smartController.goNext();
			else if (key.getCode() == KeyCode.BACK_SPACE)
				searchWord.set("");
			else if (getSelectedCount() > 0) { // TableViewer

				if (code == KeyCode.DELETE && smartController.getGenre() != Genre.SEARCHWINDOW)
					smartController.prepareDelete(key.isShiftDown());
				else if (key.isControlDown()) { // Short Cuts
					if (code == KeyCode.F)
						IOAction.openFileInExplorer(getSelectionModel().getSelectedItem().getFilePath());
					else if (code == KeyCode.Q)
						getSelectionModel().getSelectedItem().updateStars(smartController.getSearchFieldStackPane());
					else if (code == KeyCode.R)
						getSelectionModel().getSelectedItem().rename(smartController.getSearchFieldStackPane());
					else if (code == KeyCode.U) {
						Media media = getSelectionModel().getSelectedItem();
						if (!Main.playedSongs.containsFile(media.getFilePath())) {
							Main.playedSongs.add(media.getFilePath(), true);
							Main.playedSongs.appendToTimesPlayed(media.getFilePath(), true);
						} else {
							if (Main.playedSongs.remove(media.getFilePath(), true))
								media.timesPlayedProperty().set(0);

						}
					} else if (code == KeyCode.ENTER)
						Main.xPlayersList.getXPlayerController(0)
								.playSong(getSelectionModel().getSelectedItem().getFilePath());
					else if (key.isControlDown() && code == KeyCode.I)
						// More than 1 selected?
						if (getSelectedCount() > 1)
							Main.tagWindow
									.openMultipleAudioFiles(
											getSelectionModel().getSelectedItems().stream().map(Media::getFilePath)
													.collect(Collectors
															.toCollection(FXCollections::observableArrayList)),
											getSelectionModel().getSelectedItem().getFilePath());
						// Only one file selected
						else
							Main.tagWindow.openAudio(getSelectionModel().getSelectedItem().getFilePath(),
									TagTabCategory.BASICINFO, true);
				}

			}

			// Local Search
			if (!key.isControlDown() && (key.getCode().isDigitKey() || key.getCode().isKeypadKey()
					|| key.getCode().isLetterKey() || key.getCode() == KeyCode.SPACE)) {
				String keySmall = key.getText().toLowerCase();
				searchWord.set(searchWord.get() + keySmall);
				pauseTransition.playFromStart();

				// Check if searchWord is empty
				if (!searchWord.get().isEmpty()) {
					boolean[] found = { false };
					// Find the first matching item
					tableView.getItems().forEach(media -> {
						if (media.getTitle().toLowerCase().contains(searchWord.get()) && !found[0]) {
							getSelectionModel().clearSelection();
							getSelectionModel().select(media);
							getTableView().scrollTo(media);
							found[0] = true;
						}
					});
				}
			}

		});
	}

	/**
	 * Called as soon as .fxml has been initialized [[SuppressWarningsSpartan]]
	 */
	@FXML
	private void initialize() {

		// ArtWork FontIcon
		FontIcon openFolderIcon = new FontIcon("far-folder-open");
		openFolderIcon.setIconSize(30);
		openFolderIcon.setIconColor(Color.web("#ddaa33"));

		// ------------------------------TableViewer---------------------------
		if (mode == SmartControllerMode.MEDIA) {
			tableView.setItems(smartController.getItemsObservableList());

			// Add the place holder for the tableView
			Label placeHolderLabel = new Label();

			if (smartController.getGenre() == Genre.LIBRARYMEDIA) {
				placeHolderLabel.setText("Import Media ...");
				placeHolderLabel.setStyle("-fx-text-fill:white; -fx-font-weight:bold; -fx-cursor:hand;");
				placeHolderLabel.setOnMouseReleased(m -> smartController.getToolsContextMenu().show(placeHolderLabel,
						m.getScreenX(), m.getScreenY()));
				placeHolderLabel.setGraphic(openFolderIcon);
			} else if (smartController.getGenre() == Genre.SEARCHWINDOW) {
				placeHolderLabel.setText("Search Media from all the playlists...");
				placeHolderLabel.setStyle("-fx-text-fill:white; -fx-font-weight:bold; ");
			} else if (smartController.getGenre() == Genre.EMOTIONSMEDIA) {
				placeHolderLabel.setText("No Media in this emotions list ...");
				placeHolderLabel.setStyle("-fx-text-fill:white; -fx-font-weight:bold; ");
			}
			tableView.setPlaceholder(placeHolderLabel);
		}

		// --Allow Multiple Selection
		tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

		tableView.getSelectionModel().getSelectedIndices().addListener((ListChangeListener<? super Integer>) l -> {

			// Hold the Current Selected Count
			int currentSelectedCount = getSelectedCount();

			// Update the Label only if the current selected count != previousSelectedCount
			if (previousSelectedCount != currentSelectedCount) {
				previousSelectedCount = currentSelectedCount;
				smartController.updateLabel();
			}

		});

		// Update the Media Information when Selected Item changes
		tableView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
			if (newValue != null && oldValue != newValue) {

				// Synchronize with Media Information
				Main.mediaInformation.updateInformation(newValue);

				// Check if selection is allowed
				if (Main.settingsWindow.getPlayListsSettingsController().getSelectMatchingMediaViewItem()
						.isSelected()) {
					String path = newValue.getFilePath();

					// Select
					smartController.getMediaViewer().getItemsObservableList().stream()
							.filter(media -> ((MediaViewer) media).getMedia().getFilePath().equals(path)).findFirst()
							.ifPresent(mediaViewer -> smartController.getMediaViewer().setCenterIndex(
									smartController.getMediaViewer().getItemsObservableList().indexOf(mediaViewer)));
				}

			}
		});

		// --Row Factory
		tableView.setRowFactory(rf -> {
			TableRow<Media> row = new TableRow<>();

			// // use EasyBind to access the valueProperty of the itemProperty
			// // of the cell:
			// row.disableProperty().bind(
			// // start at itemProperty of row
			// EasyBind.select(row.itemProperty())
			// // map to fileExistsProperty[a boolean] of item,
			// // if item non-null
			// .selectObject(Media::fileExistsProperty)
			// // map to BooleanBinding checking if false
			// .map(x -> !x.booleanValue())
			// // value to use if item was null
			// .orElse(false));

			// Mouse Listener
			row.setFocusTraversable(true);
			row.setOnMouseReleased(m -> {
				// We don't need null rows (rows without items)
				if (row.itemProperty().getValue() != null) {

					if (m.getButton() == MouseButton.SECONDARY && !row.isDisable())
						tableView.getSelectionModel().select(row.getIndex());

					// Primary
					if (m.getButton() == MouseButton.PRIMARY) {
						if (m.getClickCount() == 2)
							row.itemProperty().get().rename(row);

					} // Secondary
					else if (m.getButton() == MouseButton.SECONDARY
							&& !tableView.getSelectionModel().getSelectedItems().isEmpty())
						Main.songsContextMenu.showContextMenu(row.itemProperty().get(), smartController.getGenre(),
								m.getScreenX(), m.getScreenY(), smartController, row);
				}
			});

			return row;
		});

		// --Drag Detected
		tableView.setOnDragDetected(event -> {
			if (getSelectedCount() != 0
					&& event.getScreenY() > tableView.localToScreen(tableView.getBoundsInLocal()).getMinY() + 30) {

				/* allow copy transfer mode */
				Dragboard db = tableView.startDragAndDrop(TransferMode.COPY, TransferMode.LINK);

				/* put a string on drag board */
				ClipboardContent content = new ClipboardContent();

				// PutFiles
				content.putFiles(tableView.getSelectionModel().getSelectedItems().stream()
						.map(s -> new File(s.getFilePath())).collect(Collectors.toList()));

				// Single Drag and Drop ?
				if (content.getFiles().size() == 1)
					DragViewTool.setDragView(db, tableView.getSelectionModel().getSelectedItem());
				// Multiple Drag and Drop ?
				else {
					DragViewTool.setPlainTextDragView(db, "(" + content.getFiles().size() + ")Items");
				}

				db.setContent(content);
			}
			event.consume();
		});

		// dragAndDropLabel
		dragAndDropLabel.setVisible(false);

		// System.out.println(smartController.getGenre() + " , " +
		// SmartControllerMode.MEDIA);
		if (smartController.getGenre() == Genre.LIBRARYMEDIA && mode == SmartControllerMode.MEDIA) {

			// --Drag Over
			tableView.setOnDragOver(dragOver -> {

				// The drag must come from source other than the owner
				if (dragOver.getDragboard().hasFiles() && dragOver.getGestureSource() != tableView)
					dragAndDropLabel.setVisible(true);

			});

			dragAndDropLabel.setOnDragOver(dragOver -> {

				// The drag must come from source other than the owner
				// System.out.println(dragOver.getGestureSource());
				// if(dragOver.getGestureSource().toString().contains("MediaViewer") &&
				// dragOver.getGestureSource().)

				if (dragOver.getDragboard().hasFiles() && dragOver.getGestureSource() != tableView)
					dragOver.acceptTransferModes(TransferMode.LINK);

			});

			// --Drag Dropped
			dragAndDropLabel.setOnDragDropped(drop -> {
				// Has Files? + isFree()?
				if (drop.getDragboard().hasFiles() && smartController.isFree(true))
					smartController.getInputService().start(drop.getDragboard().getFiles());

				drop.setDropCompleted(true);
			});

			// Drag Exited
			dragAndDropLabel.setOnDragExited(drop -> dragAndDropLabel.setVisible(false));

		}

		// --------------------------Other-----------------------------------
		String center = "-fx-alignment:CENTER-LEFT;";

		// getInfoBuy
		getInfoBuy.setCellValueFactory(new PropertyValueFactory<>("getInfoBuy"));

		// emotion
		emotions.setCellValueFactory(new PropertyValueFactory<>("emotion"));
		emotions.setCellFactory(col -> new TableCell<Media, Integer>() {

			// Emotion Button
			Button emotionButton = new Button("");

			{

				emotionButton.getStyleClass().add("jfx-button2");
				emotionButton.setPrefSize(24, 24);
				emotionButton.setMinSize(24, 24);
				emotionButton.setMaxSize(24, 24);
				emotionButton.setStyle("-fx-cursor:hand");
				emotionButton.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);

			}

			/**
			 * Update the emotion the user is feeling for this Media
			 */
			public void updateEmotion(Media media, Node node) {
				// Show the Window
				Main.emotionsWindow.show(media.getFileName(), node);// getFileName()

				// Listener
				Main.emotionsWindow.getWindow().showingProperty().addListener(new InvalidationListener() {
					/**
					 * [[SuppressWarningsSpartan]]
					 */
					@Override
					public void invalidated(Observable o) {

						// Remove the listener
						Main.emotionsWindow.getWindow().showingProperty().removeListener(this);

						// !showing?
						if (!Main.emotionsWindow.getWindow().isShowing() && Main.emotionsWindow.wasAccepted()) {

							// Add it the one of the emotions list
							new Thread(() -> Main.emotionListsController.makeEmotionDecisition(media.getFilePath(),
									Main.emotionsWindow.getEmotion())).start();

						}
					}
				});

			}

			@Override
			protected void updateItem(Integer item, boolean empty) {
				super.updateItem(item, empty);
				if (empty) {
					setText(null);
					setGraphic(null);
				} else {
					int size = 24;
					Emotion emotion = Emotion.NEUTRAL;

					// Emotion Button
					emotionButton.setOnAction(a -> updateEmotion(getTableRow().getItem(), emotionButton));
					setGraphic(emotionButton);

					// set the image according to the play status
					if (item != null) {
						if (item == 1) {
							emotion = Emotion.HATE;
							size = 24;
						} else if (item == 2) {
							emotion = Emotion.DISLIKE;
							size = 20;
						} else if (item == 0) {
							emotion = Emotion.NEUTRAL;
							size = 28;
						} else if (item == 3) {
							emotion = Emotion.LIKE;
							size = 20;
						} else if (item == 4) {
							emotion = Emotion.LOVE;
							size = 20;
						}

						// Now set the graphic
						emotionButton.setGraphic(Main.emotionsWindow.getEmotionFontIcon(emotion, size));

					}

				}
			}

		});

		// stars
		stars.setCellValueFactory(new PropertyValueFactory<>("stars"));
		stars.setCellFactory(col -> new TableCell<Media, Double>() {

			// Star Badge
			StarBadge starBadge = new StarBadge(0.0);

			@Override
			protected void updateItem(Double item, boolean empty) {
				super.updateItem(item, empty);
				if (empty) {
					setText(null);
					setGraphic(null);
				} else {

					// Check if item is null
					if (getTableRow().getItem() != null) {

						// Star Badge
						starBadge.setOnAction(a -> getTableRow().getItem().updateStars(starBadge));
						starBadge.setStars(getTableRow().getItem().getStars());

						setGraphic(starBadge);
					}
				}
			}

		});

		// number
		number.setCellValueFactory(new PropertyValueFactory<>("number"));

		// hasBeenPlayed
		playStatus.setCellValueFactory(new PropertyValueFactory<>("playStatus"));
		playStatus.setCellFactory(col -> new TableCell<Media, Integer>() {

			// Icon FontIcon
			// HBox flowPane = new HBox();

			@Override
			protected void updateItem(Integer item, boolean empty) {
				super.updateItem(item, empty);
				if (empty) {
					setText(null);
					setGraphic(null);
				} else {
					// Clear the flowPane
					// flowPane.getChildren().clear();

					// set the image according to the play status
					if (item != null) {
						if (item == -2) // UNKNOWN
							setGraphic(null);
						else if (item == -1) { // Already played
							setGraphic(JavaFXTool.getFontIcon("fas-play-circle", lightGreen, 24));
						} else { // BEING PLAYED BY SOME PLAYERS
							//
							// TO BE FIXES - PROBLEM IF IS PLAYING IN MANY PLAYERS IT MUST SHOW MANY PLAYERS
							// NOT JUST ONE!!!
							setGraphic(JavaFXTool.getFontIcon("gmi-filter-" + (item + 1), Color.WHITE, 24));

							// String mediaPath = getTableRow().getItem().getFilePath();
							// Main.xPlayersList.getList().stream().sorted((o1 , o2) ->
							// Integer.valueOf(o1.getKey()).compareTo(o2.getKey())).forEach(controller -> {
							// String path = controller.getxPlayerModel().songPathProperty().get();
							// //Check if it matches
							// if (path != null && path.equals(mediaPath))
							// flowPane.getChildren().addAll(JavaFXTools.getFontIcon("gmi-filter-" + (
							// controller.getKey() + 1 ), Color.WHITE, 24));
							//
							// });
							// setGraphic(flowPane);
						}
					}
				}
			}

		});

		// mediaType
		mediaType.setCellValueFactory(new PropertyValueFactory<>("mediaType"));
		mediaType.setCellFactory(col -> new TableCell<Media, Integer>() {

			// Icon FontIcon
			FontIcon icon = new FontIcon();

			{
				icon.setIconSize(24);
			}

			@Override
			protected void updateItem(Integer item, boolean empty) {
				super.updateItem(item, empty);
				if (empty) {
					setText(null);
					setGraphic(null);
				} else {
					setGraphic(icon);

					// set the image according to the play status
					if (item != null)
						if (item == -1) { // Missing
							JavaFXTool.setFontIcon(this, icon, "fa-deaf", Color.WHITE);
						} else if (item == 0) { // Corrupted
							JavaFXTool.setFontIcon(this, icon, "fas-bug", Color.WHITE);
						} else if (item == 1) { // Okay
							JavaFXTool.setFontIcon(this, icon, "gmi-audiotrack", Color.WHITE);
						}
				}
			}

		});

		// artwork
		artwork.setCellValueFactory(new PropertyValueFactory<>("artwork"));
		artwork.setComparator((stackedFontIcon1, stackedFontIcon2) -> {
			ImageView imageView1 = (ImageView) stackedFontIcon1.getChildren().get(1);
			ImageView imageView2 = (ImageView) stackedFontIcon2.getChildren().get(1);
			if (imageView1.getImage() == null && imageView2.getImage() != null)
				return 1;
			else if (imageView1.getImage() != null && imageView2.getImage() == null)
				return 0;
			else
				return -1;
		});
		artwork.visibleProperty().addListener(l -> {
			if (artwork.isVisible())
				this.allDetailsService.updateOnlyArtWorkColumn(this);
		});

		// title
		title.setStyle(center);
		title.setCellValueFactory(new PropertyValueFactory<>("title"));

		// hourImported
		hourImported.setCellValueFactory(new PropertyValueFactory<>("hourImported"));

		// dateImported
		dateImported.setCellValueFactory(new PropertyValueFactory<>("dateImported"));

		// dateFileCreated
		dateFileCreated.setCellValueFactory(new PropertyValueFactory<>("dateFileCreated"));

		// dateFileCreated
		dateFileModified.setCellValueFactory(new PropertyValueFactory<>("dateFileModified"));

		// timesHeard
		timesPlayed.setCellValueFactory(new PropertyValueFactory<>("timesPlayed"));

		// duration
		duration.setCellValueFactory(new PropertyValueFactory<>("durationEdited"));

		// drive
		drive.setCellValueFactory(new PropertyValueFactory<>("drive"));

		// filePath
		filePath.setStyle(center);
		filePath.setCellValueFactory(new PropertyValueFactory<>("filePath"));

		// fileName
		fileName.setStyle(center);
		fileName.setCellValueFactory(new PropertyValueFactory<>("fileName"));

		// fileType
		fileType.setCellValueFactory(new PropertyValueFactory<>("fileType"));

		// fileType
		fileSize.setCellValueFactory(new PropertyValueFactory<>("fileSize"));

		// artist
		artist.setCellValueFactory(new PropertyValueFactory<>("artist"));

		// mood
		mood.setCellValueFactory(new PropertyValueFactory<>("mood"));

		// album
		album.setCellValueFactory(new PropertyValueFactory<>("album"));

		// composer
		composer.setCellValueFactory(new PropertyValueFactory<>("composer"));

		// comment
		comment.setCellValueFactory(new PropertyValueFactory<>("comment"));

		// genre
		genre.setCellValueFactory(new PropertyValueFactory<>("genre"));

		// bitRate
		bitRate.setCellValueFactory(new PropertyValueFactory<>("bitRate"));

		// bpm
		bpm.setCellValueFactory(new PropertyValueFactory<>("bpm"));

		// tempo
		tempo.setCellValueFactory(new PropertyValueFactory<>("tempo"));

		// key
		key.setCellValueFactory(new PropertyValueFactory<>("key"));

		// year
		year.setCellValueFactory(new PropertyValueFactory<>("year"));

		// .

		// copyright
		copyright.setCellValueFactory(new PropertyValueFactory<>("copyright"));

		// track
		track.setCellValueFactory(new PropertyValueFactory<>("track"));

		// track_total
		track_total.setCellValueFactory(new PropertyValueFactory<>("track_total"));

		// remixer
		remixer.setCellValueFactory(new PropertyValueFactory<>("remixer"));

		// djMixer
		djMixer.setCellValueFactory(new PropertyValueFactory<>("djMixer"));

		// rating
		rating.setCellValueFactory(new PropertyValueFactory<>("rating"));

		// producer
		producer.setCellValueFactory(new PropertyValueFactory<>("producer"));

		// performer
		performer.setCellValueFactory(new PropertyValueFactory<>("performer"));

		// orchestra
		orchestra.setCellValueFactory(new PropertyValueFactory<>("orchestra"));

		// country
		country.setCellValueFactory(new PropertyValueFactory<>("country"));

		// lyricist
		lyricist.setCellValueFactory(new PropertyValueFactory<>("lyricist"));

		// conductor
		conductor.setCellValueFactory(new PropertyValueFactory<>("conductor"));

		// amazonID
		amazonID.setCellValueFactory(new PropertyValueFactory<>("amazonID"));

		// encoder
		encoder.setCellValueFactory(new PropertyValueFactory<>("encoder"));

		// PauseTransition
		pauseTransition.setOnFinished(f -> searchWord.set(""));

		// QuickSearchTextField
		quickSearchTextField.visibleProperty().bind(searchWord.isEmpty().not());
		quickSearchTextField.textProperty().bind(Bindings.concat("Search :> ").concat(searchWord));

		// ------ centerStackPane
		setOnKeyReleased(key -> {
			KeyCode code = key.getCode();

			// Check this firstly
			if ((key.isControlDown() || key.getCode() == KeyCode.COMMAND) && key.getCode() == KeyCode.C) {

				copySelectedMediaToClipBoard();

				return;

			} else if (smartController.getGenre() == Genre.LIBRARYMEDIA
					&& ((key.isControlDown() || key.getCode() == KeyCode.COMMAND) && key.getCode() == KeyCode.V)) {

				pasteMediaFromClipBoard();

				return;
			}

			// Then this
			if (key.isControlDown() && code == KeyCode.LEFT && mode != SmartControllerMode.FILTERS_MODE)
				smartController.goPrevious();
			else if (key.isControlDown() && code == KeyCode.RIGHT && mode != SmartControllerMode.FILTERS_MODE)
				smartController.goNext();
			else if (key.getCode() == KeyCode.BACK_SPACE)
				searchWord.set("");
			else if (getSelectedCount() > 0) { // TableViewer

				if (code == KeyCode.DELETE && smartController.getGenre() != Genre.SEARCHWINDOW)
					smartController.prepareDelete(key.isShiftDown());
				else if (key.isControlDown()) { // Short Cuts
					if (code == KeyCode.F)
						IOAction.openFileInExplorer(getSelectionModel().getSelectedItem().getFilePath());
					else if (code == KeyCode.Q)
						getSelectionModel().getSelectedItem().updateStars(smartController.getSearchFieldStackPane());
					else if (code == KeyCode.R)
						getSelectionModel().getSelectedItem().rename(smartController.getSearchFieldStackPane());
					else if (code == KeyCode.U) {
						Media media = getSelectionModel().getSelectedItem();
						if (!Main.playedSongs.containsFile(media.getFilePath())) {
							Main.playedSongs.add(media.getFilePath(), true);
							Main.playedSongs.appendToTimesPlayed(media.getFilePath(), true);
						} else {
							if (Main.playedSongs.remove(media.getFilePath(), true))
								media.timesPlayedProperty().set(0);

						}
					} else if (code == KeyCode.ENTER)
						Main.xPlayersList.getXPlayerController(0)
								.playSong(getSelectionModel().getSelectedItem().getFilePath());
					else if (key.isControlDown() && code == KeyCode.I)
						// More than 1 selected?
						if (getSelectedCount() > 1)
							Main.tagWindow
									.openMultipleAudioFiles(
											getSelectionModel().getSelectedItems().stream().map(Media::getFilePath)
													.collect(Collectors
															.toCollection(FXCollections::observableArrayList)),
											getSelectionModel().getSelectedItem().getFilePath());
						// Only one file selected
						else
							Main.tagWindow.openAudio(getSelectionModel().getSelectedItem().getFilePath(),
									TagTabCategory.BASICINFO, true);
				}

			}

			// Local Search
			if (!key.isControlDown() && (key.getCode().isDigitKey() || key.getCode().isKeypadKey()
					|| key.getCode().isLetterKey() || key.getCode() == KeyCode.SPACE)) {
				String keySmall = key.getText().toLowerCase();
				searchWord.set(searchWord.get() + keySmall);
				pauseTransition.playFromStart();

				// Check if searchWord is empty
				if (!searchWord.get().isEmpty()) {
					boolean[] found = { false };
					// Find the first matching item
					tableView.getItems().forEach(media -> {
						if (media.getTitle().toLowerCase().contains(searchWord.get()) && !found[0]) {
							getSelectionModel().clearSelection();
							getSelectionModel().select(media);
							getTableView().scrollTo(media);
							found[0] = true;
						}
					});
				}
			}

		});
	}

Replace Generic With Diamond TableCell<Media,Integer> with TableCell<> in method private initialize() : void from class com.goxr3plus.xr3player.controllers.smartcontroller.MediaTableViewer


	/**
	 * Called as soon as .FXML is loaded from FXML Loader
	 */
	@FXML
	private void initialize() {

		// indicatorVBox
		loadingVBox.visibleProperty().bind(service.runningProperty());

		// progressIndicator
		loadingProgressBar.progressProperty().bind(service.progressProperty());

		// backToMedia
		backToMedia.setOnAction(a -> smartController.getModesTabPane().getSelectionModel().select(0));

		// listView
		listView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
			if (newValue != null)
				refreshTableView();
		});

		// listView - cellFactory
		listView.setCellFactory(lv -> new ListCell<>() {
			@Override
			public void updateItem(String item, boolean empty) {
				super.updateItem(item, empty);
				if (empty) {
					setText(null);
					setGraphic(null);
					setTooltip(null);
				} else {
					// String text = InfoTool.getFileName(item); // get text from item
					// setGraphic(new ImageView(artistImage))
					setText(item);
					setTooltip(new Tooltip(item));
				}
			}
		});

		// detailsLabel
		detailsLabel.setVisible(false);

		// borderPane
		borderPane.setCenter(mediaTableViewer);

		// selectedFilter
		selectedFilter.selectedToggleProperty().addListener((observable, oldValue, newValue) -> {
			if (newValue != null) {
				// Regenerate
				regenerate();
				String text = ((MenuItem) newValue).getText();

				// FilterMenuButton
				filterMenuButton.setText("Filter : " + text);

				// Change Tab Label
				smartController.getFiltersModeTab().setText("Filter : " + text);

				// System.out.println("Selected Filter entered...")
			}
		});

		// cancelButton
		cancelButton.setOnAction(backToMedia.getOnAction());

	}

	/**
	 * Called as soon as .FXML is loaded from FXML Loader
	 */
	@FXML
	private void initialize() {

		// indicatorVBox
		loadingVBox.visibleProperty().bind(service.runningProperty());

		// progressIndicator
		loadingProgressBar.progressProperty().bind(service.progressProperty());

		// backToMedia
		backToMedia.setOnAction(a -> smartController.getModesTabPane().getSelectionModel().select(0));

		// listView
		listView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
			if (newValue != null)
				refreshTableView();
		});

		// listView - cellFactory
		listView.setCellFactory(lv -> new ListCell<String>() {
			@Override
			public void updateItem(String item, boolean empty) {
				super.updateItem(item, empty);
				if (empty) {
					setText(null);
					setGraphic(null);
					setTooltip(null);
				} else {
					// String text = InfoTool.getFileName(item); // get text from item
					// setGraphic(new ImageView(artistImage))
					setText(item);
					setTooltip(new Tooltip(item));
				}
			}
		});

		// detailsLabel
		detailsLabel.setVisible(false);

		// borderPane
		borderPane.setCenter(mediaTableViewer);

		// selectedFilter
		selectedFilter.selectedToggleProperty().addListener((observable, oldValue, newValue) -> {
			if (newValue != null) {
				// Regenerate
				regenerate();
				String text = ((MenuItem) newValue).getText();

				// FilterMenuButton
				filterMenuButton.setText("Filter : " + text);

				// Change Tab Label
				smartController.getFiltersModeTab().setText("Filter : " + text);

				// System.out.println("Selected Filter entered...")
			}
		});

		// cancelButton
		cancelButton.setOnAction(backToMedia.getOnAction());

	}

Replace Generic With Diamond ListCell<String> with ListCell<> in method private initialize() : void from class com.goxr3plus.xr3player.controllers.smartcontroller.SmartControllerFiltersMode


	/**
	 * Called as soon as .FXML is loaded from FXML Loader
	 */
	@FXML
	private void initialize() {

		// TreeView
		treeView.setRoot(root);
		treeView.setShowRoot(false);
		treeView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

		// Mouse Released Event
		treeView.setOnMouseClicked(this::treeViewMouseClicked);

		// Drag Implementation
		treeView.setOnDragDetected(event -> {
			// FileTreeItem source = (FileTreeItem)
			// treeView.getSelectionModel().getSelectedItem();

			// The host is not allowed
			// if (source != null && source != root) {
			ObservableList<TreeItem<String>> selectedItems = treeView.getSelectionModel().getSelectedItems();
			if (!selectedItems.isEmpty()) {

				// Allow this transfer Mode
				Dragboard board = startDragAndDrop(TransferMode.LINK);

				// Put a String on DragBoard
				ClipboardContent content = new ClipboardContent();
				content.putFiles(selectedItems.stream()
						.map(treeItem -> new File(((FileTreeItem) treeItem).getAbsoluteFilePath()))
						.collect(Collectors.toList()));

				board.setContent(content);
				event.consume();
			}
		});

		// Custom Cell Factory
		treeView.setCellFactory(tv -> new TreeCell<>() {

			/**
			 * FontIcon
			 */
			private FontIcon icon = new FontIcon();

			{
				icon.setIconSize(24);
			}

			@Override
			public void updateItem(String item, boolean empty) {
				super.updateItem(item, empty);
				getStyleClass().remove("tree-cell-2");
				if (empty) {
					setGraphic(null);
					setText("");
				} else {
					setText(item);
					String absoluteFilePath = ((FileTreeItem) getTreeItem()).getAbsoluteFilePath();

					// We don't care about directories
					if (!((FileTreeItem) getTreeItem()).isDirectory()) {
						boolean existsInPlayList = smartController.containsFile(absoluteFilePath);

						// Check if the file exists inside the SmartController Playlist
						if (!existsInPlayList)
							getStyleClass().add("tree-cell-2");

						setGraphic(getTreeItem().getGraphic());
					} else {
						if (getTreeItem().isExpanded())
							setFontIcon("fas-folder-open", Color.web("#ddaa33"));
						else
							setFontIcon("fas-folder", Color.web("#ddaa33"));
					}

				}
			}

			/**
			 * Set Graphic Font Icon
			 *
			 * @param iconLiteral
			 * @param color
			 */
			private void setFontIcon(String iconLiteral, Color color) {
				icon.setIconLiteral(iconLiteral);
				icon.setIconColor(color);
				setGraphic(icon);
			}
		});

		// indicatorVBox
		indicatorVBox.visibleProperty().bind(service.runningProperty());

		// Progress Indicator
		progressIndicator.progressProperty().bind(service.progressProperty());

		// collapseTree
		collapseTree.setOnAction(a ->

		{
			// Trick for CPU based on this question ->
			// https://stackoverflow.com/questions/15490268/manually-expand-collapse-all-treeitems-memory-cost-javafx-2-2
			root.setExpanded(false);

			// Set not expanded all the children
			collapseTreeView(root, false);

			// Trick for CPU
			root.setExpanded(true);
		});

		// refresh
		refresh.setOnAction(a -> recreateTree());

		// settings
		settings.setOnAction(a -> {
			Main.settingsWindow.getPlayListsSettingsController().getInnerTabPane().getSelectionModel().select(1);
			Main.settingsWindow.showWindow(SettingsTab.PLAYLISTS);
		});

		// backToMedia
		backToMedia.setOnAction(a -> smartController.getModesTabPane().getSelectionModel().select(0));

	}

	/**
	 * Called as soon as .FXML is loaded from FXML Loader
	 */
	@FXML
	private void initialize() {

		// TreeView
		treeView.setRoot(root);
		treeView.setShowRoot(false);
		treeView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

		// Mouse Released Event
		treeView.setOnMouseClicked(this::treeViewMouseClicked);

		// Drag Implementation
		treeView.setOnDragDetected(event -> {
			// FileTreeItem source = (FileTreeItem)
			// treeView.getSelectionModel().getSelectedItem();

			// The host is not allowed
			// if (source != null && source != root) {
			ObservableList<TreeItem<String>> selectedItems = treeView.getSelectionModel().getSelectedItems();
			if (!selectedItems.isEmpty()) {

				// Allow this transfer Mode
				Dragboard board = startDragAndDrop(TransferMode.LINK);

				// Put a String on DragBoard
				ClipboardContent content = new ClipboardContent();
				content.putFiles(selectedItems.stream()
						.map(treeItem -> new File(((FileTreeItem) treeItem).getAbsoluteFilePath()))
						.collect(Collectors.toList()));

				board.setContent(content);
				event.consume();
			}
		});

		// Custom Cell Factory
		treeView.setCellFactory(tv -> new TreeCell<String>() {

			/** FontIcon */
			private FontIcon icon = new FontIcon();

			{
				icon.setIconSize(24);
			}

			@Override
			public void updateItem(String item, boolean empty) {
				super.updateItem(item, empty);
				getStyleClass().remove("tree-cell-2");
				if (empty) {
					setGraphic(null);
					setText("");
				} else {
					setText(item);
					String absoluteFilePath = ((FileTreeItem) getTreeItem()).getAbsoluteFilePath();

					// We don't care about directories
					if (!((FileTreeItem) getTreeItem()).isDirectory()) {
						boolean existsInPlayList = smartController.containsFile(absoluteFilePath);

						// Check if the file exists inside the SmartController Playlist
						if (!existsInPlayList)
							getStyleClass().add("tree-cell-2");

						setGraphic(getTreeItem().getGraphic());
					} else {
						if (getTreeItem().isExpanded())
							setFontIcon("fas-folder-open", Color.web("#ddaa33"));
						else
							setFontIcon("fas-folder", Color.web("#ddaa33"));
					}

				}
			}

			/**
			 * Set Graphic Font Icon
			 *
			 * @param iconLiteral
			 * @param color
			 */
			private void setFontIcon(String iconLiteral, Color color) {
				icon.setIconLiteral(iconLiteral);
				icon.setIconColor(color);
				setGraphic(icon);
			}
		});

		// indicatorVBox
		indicatorVBox.visibleProperty().bind(service.runningProperty());

		// Progress Indicator
		progressIndicator.progressProperty().bind(service.progressProperty());

		// collapseTree
		collapseTree.setOnAction(a ->

		{
			// Trick for CPU based on this question ->
			// https://stackoverflow.com/questions/15490268/manually-expand-collapse-all-treeitems-memory-cost-javafx-2-2
			root.setExpanded(false);

			// Set not expanded all the children
			collapseTreeView(root, false);

			// Trick for CPU
			root.setExpanded(true);
		});

		// refresh
		refresh.setOnAction(a -> recreateTree());

		// settings
		settings.setOnAction(a -> {
			Main.settingsWindow.getPlayListsSettingsController().getInnerTabPane().getSelectionModel().select(1);
			Main.settingsWindow.showWindow(SettingsTab.PLAYLISTS);
		});

		// backToMedia
		backToMedia.setOnAction(a -> smartController.getModesTabPane().getSelectionModel().select(0));

	}

Replace Generic With Diamond TreeCell<String> with TreeCell<> in method private initialize() : void from class com.goxr3plus.xr3player.controllers.smartcontroller.SmartControllerFoldersMode


		@Override
		protected Task<Void> createTask() {
			return new Task<>() {

				@Override
				protected Void call() throws Exception {

					// FileName
					// String fileName = InfoTool.getFileName(fileAbsolutePath)

					// Try to find the album image for the given Audio File
					image = AudioImageTool.getAudioAlbumImage(fileAbsolutePath, -1, -1);

					// Run on JavaFX Thread
					Platform.runLater(() -> {

						// Save Button
						save.setDisable(image == null);

						// Show the File Name
						// fileNameLabel.setText(fileName)

						// Set the Image
						if (image != null)
							getImageView().setImage(image);

						// Show the Notification Label
						notificationLabel.setVisible(image == null);

					});

					return null;
				}
			};
		}

		@Override
		protected Task<Void> createTask() {
			return new Task<Void>() {

				@Override
				protected Void call() throws Exception {

					// FileName
					// String fileName = InfoTool.getFileName(fileAbsolutePath)

					// Try to find the album image for the given Audio File
					image = AudioImageTool.getAudioAlbumImage(fileAbsolutePath, -1, -1);

					// Run on JavaFX Thread
					Platform.runLater(() -> {

						// Save Button
						save.setDisable(image == null);

						// Show the File Name
						// fileNameLabel.setText(fileName)

						// Set the Image
						if (image != null)
							getImageView().setImage(image);

						// Show the Notification Label
						notificationLabel.setVisible(image == null);

					});

					return null;
				}
			};
		}

Replace Generic With Diamond Task<Void> with Task<> in method protected createTask() : Task<Void> from class com.goxr3plus.xr3player.controllers.tagging.ArtWorkController.PictureUpdaterService


		@Override
		protected Task<Void> createTask() {
			return new Task<>() {

				@Override
				protected Void call() throws Exception {

					// Fields
					artist = "...";
					album = "...";
					comment = "...";
					genre = "...";
					year = "...";

					try {
						// MP3File
						MP3File mp3File = new MP3File(fileAbsolutePath);

						// Check if it has ID3v1Tag
						if (mp3File.hasID3v1Tag()) {

							ID3v1Tag tag = mp3File.getID3v1Tag();

							// -- Artist
							artist = tag.getFirst(ID3v1FieldKey.ARTIST.toString());

							// -- Album
							album = tag.getFirst(ID3v1FieldKey.ALBUM.toString());

							// -- Comment
							comment = tag.getFirst(ID3v1FieldKey.COMMENT.toString());

							// -- Genre
							genre = tag.getFirst(ID3v1FieldKey.GENRE.toString());

							// -- Year
							year = tag.getFirst(ID3v1FieldKey.YEAR.toString());
						}
					} catch (Exception ex) {
						ex.printStackTrace();
					}

					// Populate the fields
					Platform.runLater(() -> {
						artistField.setText(artist);

						albumField.setText(album);

						commentField.setText(comment);

						genreField.setText(genre);

						yearField.setText(year);
					});
					return null;
				}
			};
		}

		@Override
		protected Task<Void> createTask() {
			return new Task<Void>() {

				@Override
				protected Void call() throws Exception {

					// Fields
					artist = "...";
					album = "...";
					comment = "...";
					genre = "...";
					year = "...";

					try {
						// MP3File
						MP3File mp3File = new MP3File(fileAbsolutePath);

						// Check if it has ID3v1Tag
						if (mp3File.hasID3v1Tag()) {

							ID3v1Tag tag = mp3File.getID3v1Tag();

							// -- Artist
							artist = tag.getFirst(ID3v1FieldKey.ARTIST.toString());

							// -- Album
							album = tag.getFirst(ID3v1FieldKey.ALBUM.toString());

							// -- Comment
							comment = tag.getFirst(ID3v1FieldKey.COMMENT.toString());

							// -- Genre
							genre = tag.getFirst(ID3v1FieldKey.GENRE.toString());

							// -- Year
							year = tag.getFirst(ID3v1FieldKey.YEAR.toString());
						}
					} catch (Exception ex) {
						ex.printStackTrace();
					}

					// Populate the fields
					Platform.runLater(() -> {
						artistField.setText(artist);

						albumField.setText(album);

						commentField.setText(comment);

						genreField.setText(genre);

						yearField.setText(year);
					});
					return null;
				}
			};
		}

Replace Generic With Diamond Task<Void> with Task<> in method protected createTask() : Task<Void> from class com.goxr3plus.xr3player.controllers.tagging.ID3v1.ID3v1Service


		@Override
		protected Task<Void> createTask() {
			return new Task<>() {

				@Override
				protected Void call() throws Exception {

					// Fields
					artist = "...";
					album = "...";
					comment = "...";
					genre = "...";
					year = "...";

					try {
						// MP3File
						MP3File mp3File = new MP3File(fileAbsolutePath);

						// Check if it has ID3v1Tag
						if (mp3File.hasID3v2Tag()) {

							ID3v24Tag tag = mp3File.getID3v2TagAsv24();

							// -- Artist
							artist = tag.getFirst(ID3v24FieldKey.ARTIST);

							// -- Album
							album = tag.getFirst(ID3v24FieldKey.ALBUM);

							// -- Comment
							comment = tag.getFirst(ID3v24FieldKey.COMMENT);

							// -- Genre
							genre = tag.getFirst(ID3v24FieldKey.GENRE);

							// -- Year
							year = tag.getFirst(ID3v24FieldKey.YEAR);

						}
					} catch (Exception ex) {
						ex.printStackTrace();
					}

					// Populate the fields
					Platform.runLater(() -> {

						artistField.setText(artist);

						albumField.setText(album);

						commentField.setText(comment);

						genreField.setText(genre);

						yearField.setText(year);

					});
					return null;
				}
			};
		}

		@Override
		protected Task<Void> createTask() {
			return new Task<Void>() {

				@Override
				protected Void call() throws Exception {

					// Fields
					artist = "...";
					album = "...";
					comment = "...";
					genre = "...";
					year = "...";

					try {
						// MP3File
						MP3File mp3File = new MP3File(fileAbsolutePath);

						// Check if it has ID3v1Tag
						if (mp3File.hasID3v2Tag()) {

							ID3v24Tag tag = mp3File.getID3v2TagAsv24();

							// -- Artist
							artist = tag.getFirst(ID3v24FieldKey.ARTIST);

							// -- Album
							album = tag.getFirst(ID3v24FieldKey.ALBUM);

							// -- Comment
							comment = tag.getFirst(ID3v24FieldKey.COMMENT);

							// -- Genre
							genre = tag.getFirst(ID3v24FieldKey.GENRE);

							// -- Year
							year = tag.getFirst(ID3v24FieldKey.YEAR);

						}
					} catch (Exception ex) {
						ex.printStackTrace();
					}

					// Populate the fields
					Platform.runLater(() -> {

						artistField.setText(artist);

						albumField.setText(album);

						commentField.setText(comment);

						genreField.setText(genre);

						yearField.setText(year);

					});
					return null;
				}
			};
		}

Replace Generic With Diamond Task<Void> with Task<> in method protected createTask() : Task<Void> from class com.goxr3plus.xr3player.controllers.tagging.ID3v2.ID3v24Service