private BorderPane getTop() {
        
        BorderPane mainPane = new BorderPane();
        mainPane.setStyle(TOP_STYLE);
        
        // HBox to hold buttons on top-right side
        HBox rightButtonHBox = new HBox();
        rightButtonHBox.setPadding(new Insets(10, 10, 10, 5));
        rightButtonHBox.setSpacing(7);
        rightButtonHBox.setStyle(TOP_STYLE);
        
        ActionButton actionButton = new ActionButton();
        
        // Setup a VBox for the stacked buttons
        VBox rightButtonVBox = new VBox();
        rightButtonVBox.setPadding(new Insets(0));
        rightButtonVBox.setSpacing(7);
        rightButtonVBox.setStyle(TOP_STYLE);
        
        final Button buttonBrowse = new Button("Browse");
        buttonBrowse.setEffect(shadow);
        buttonBrowse.setPrefSize(100, 30);
        
        buttonBrowse.setOnAction(new EventHandler<ActionEvent>() {
            
            @Override
            public void handle(ActionEvent event) {
                
                DirectoryChooser directoryChooser = new DirectoryChooser();
                directoryChooser.setTitle("Choose Directory To Deduplicate");

                Stage dialog = new Stage();
                BorderPane bp = new BorderPane();
                bp.setMinSize(400, 400);
                Scene scene = new Scene(bp);
                dialog.setScene(scene);
                File file = directoryChooser.showDialog(dialog);
                
                cfg.setConfig("ROOT", file.getAbsolutePath(), false);
                
                targetTextField.setText(file.getAbsolutePath());
                
            }
            
        });
        
        final Button buttonAddBrowse = new Button("Add");
        buttonAddBrowse.setEffect(shadow);
        buttonAddBrowse.setPrefSize(100, 30);
        
        buttonAddBrowse.setOnAction(new EventHandler<ActionEvent>() {
            
            @Override
            public void handle(ActionEvent event) {
                
                DirectoryChooser directoryChooser = new DirectoryChooser();
                directoryChooser.setTitle("Choose Another Directory To Deduplicate");

                Stage dialog = new Stage();
                BorderPane bp = new BorderPane();
                bp.setMinSize(400, 400);
                Scene scene = new Scene(bp);
                dialog.setScene(scene);
                File file = directoryChooser.showDialog(dialog);
                
                if (!(targetTextField.getText().equalsIgnoreCase(""))) {
                    targetTextField.appendText(getDelimiterTextField() + file.getAbsolutePath());
                } else {
                    targetTextField.setText(file.getAbsolutePath());
                }
            }
            
        });
        
        rightButtonVBox.getChildren().addAll(buttonBrowse, buttonAddBrowse);
        
        rightButtonHBox.getChildren().addAll(rightButtonVBox, actionButton.getActionButton());
        
        // Create centered Text Field
        HBox centerTextHBox = new HBox();
        centerTextHBox.setPadding(new Insets(10, 5, 10, 5));
        centerTextHBox.setSpacing(7);
        centerTextHBox.setStyle(TOP_STYLE);
        
        VBox centerTextVBox = new VBox();
        centerTextVBox.setPadding(new Insets(0));
        centerTextVBox.setSpacing(7);
        centerTextVBox.setStyle(TOP_STYLE);
        
        HBox delimiterHBox = new HBox();
        delimiterHBox.setPadding(new Insets(0));
        delimiterHBox.setSpacing(7);
        delimiterHBox.setStyle(TOP_STYLE);
        
        targetTextField = new TextField();
        targetTextField.setEffect(shadow);
        targetTextField.setMinHeight(30);
        targetTextField.setPrefSize(0,30);
        
        delimiterTextField = new TextField();
        delimiterTextField.setEffect(shadow);
        delimiterTextField.setMinHeight(30);
        delimiterTextField.setMinWidth(25);
        delimiterTextField.setMaxWidth(25);
        try {
            String d = cfg.getConfig("ROOT_DEL");
            if (d.equalsIgnoreCase("") || d.equalsIgnoreCase(null)) {
                delimiterTextField.setText(";;");
            } else {
                delimiterTextField.setText(d);
            }
        } catch (ConfigException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        final Button buttonDelimiter = new Button("Set Delimiter");
        buttonDelimiter.setEffect(shadow);
        buttonDelimiter.setPrefSize(100, 30);
        buttonDelimiter.setOnAction(new EventHandler<ActionEvent>() {
            
            @Override
            public void handle(ActionEvent event) {

                try {
                    setTargetTextField(getTargetTextField().replace(cfg.getConfig("ROOT_DEL"), getDelimiterTextField()));
                    cfg.setConfig("ROOT_DEL", delimiterTextField.getText(), false);
                } catch (ConfigException e) {
                    // who cares
                }
                
            }
            
        });
        
        final VBox hashAlgoVBox = new VBox();
        hashAlgoVBox.setPadding(new Insets(0));
        hashAlgoVBox.setSpacing(7);
        hashAlgoVBox.setStyle(TOP_STYLE);
        
        final BorderPane hashAlgoBorder = new BorderPane();
        hashAlgoBorder.setPadding(new Insets(0));
        
        final BorderPane hashAlgoBorderCur = new BorderPane();
        hashAlgoBorderCur.setPadding(new Insets(0));
        
        final Label labelHashAlgo = new Label(" Hash Algorithm ");
        labelHashAlgo.setStyle(LABEL_STYLE);
        
        final VBox centerHashAlgoVBox = new VBox();
        centerHashAlgoVBox.setPadding(new Insets(0));
        centerHashAlgoVBox.setSpacing(0);
        centerHashAlgoVBox.setStyle(TOP_STYLE);
        
        hashAlgoLabel = new Label(" " + this.getRecAlgo() + " ");
        hashAlgoLabel.setEffect(shadow);
        hashAlgoLabel.setMinHeight(30);
        hashAlgoLabel.setStyle(LABEL_STYLE);
        
        hashAlgoBorder.setCenter(labelHashAlgo);
        hashAlgoBorderCur.setCenter(hashAlgoLabel);
        
       // centerHashAlgoVBox.getChildren().addAll(hashAlgoBorder, hashAlgoBorderCur);
        
        /**
         * File Hashes used:
         * MD2     - Fastest, but least secure/reliable. Has well known methods of forcibly  
         *                  causing hash collisions and is generally not good for highly secure 
         *                  or important data.
         * MD5     - Still quite fast, and more secure/reliable than MD2, but has 
         *                  well known methods of forcibly causing hash collisions 
         *                  and is generally not good for highly secure or important data.
         * SHA-1   - Quite fast while still decently secure/reliable. 
         * SHA-256 - Decently fast while still being quite secure/reliable. Recommended for 32 bit Hardware/OS.
         * SHA-384 - Compromise between SHA-256 and SHA-512, medium performance 
         *                  while being very secure/reliable.
         * SHA-512 - Slowest, but most secure/reliable. 
         *                  Found to run faster on 64 bit Hardware/OS than SHA-256. 
         *                  Recommended for 64 bit Hardware/OS.
         */
        final Slider sliderHashAlgo = new Slider();
        sliderHashAlgo.setMin(10);
        sliderHashAlgo.setMax(60);
        sliderHashAlgo.setValue(50);
        sliderHashAlgo.setMinorTickCount(0);
        sliderHashAlgo.setMajorTickUnit(10);
        sliderHashAlgo.setBlockIncrement(10);
        sliderHashAlgo.setShowTickMarks(true);
        sliderHashAlgo.setSnapToTicks(true);
        
        sliderHashAlgo.valueProperty().addListener(new ChangeListener<Number>() {
           public void changed (ObservableValue<? extends Number> ov,
                   Number old_val, Number new_val) {
               
           }
        });
        
        centerHashAlgoVBox.getChildren().addAll(sliderHashAlgo, hashAlgoBorder);
        
        HBox sliderHBox = new HBox();
        sliderHBox.setPadding(new Insets(0));
        sliderHBox.setSpacing(7);
        sliderHBox.setStyle(TOP_STYLE);
        
        sliderHBox.getChildren().addAll(hashAlgoBorderCur, centerHashAlgoVBox); //sliderHashAlgo);
        
        //hashAlgoVBox.getChildren().addAll(centerHashAlgoVBox, sliderHashAlgo);
        
        delimiterHBox.getChildren().addAll(delimiterTextField, buttonDelimiter, sliderHBox);//hashAlgoVBox);
        
        centerTextVBox.getChildren().addAll(targetTextField, delimiterHBox);
        
        centerTextHBox.getChildren().addAll(centerTextVBox);
        
        HBox.setHgrow(centerTextVBox, Priority.ALWAYS);
        
        // Create left label
        HBox leftLabelHBox = new HBox();
        leftLabelHBox.setPadding(new Insets(10, 10, 10, 10));
        leftLabelHBox.setSpacing(7);
        leftLabelHBox.setStyle(TOP_STYLE);
        
        VBox leftLabelVBox = new VBox();
        leftLabelVBox.setPadding(new Insets(0, 0, 0, 0));
        leftLabelVBox.setSpacing(5);
        leftLabelVBox.setStyle(TOP_STYLE);
        
        Label labelBrowse = new Label(" Target : ");
        labelBrowse.setMinHeight(30);
        labelBrowse.setStyle(LABEL_STYLE);
        labelBrowse.setEffect(shadow);
        
        Label labelDelimiter = new Label(" Delimiter : ");
        labelDelimiter.setMinHeight(30);
        labelDelimiter.setStyle(LABEL_STYLE);
        labelDelimiter.setEffect(shadow);
        
        leftLabelVBox.getChildren().addAll(labelBrowse, labelDelimiter);
        
        leftLabelHBox.getChildren().addAll(leftLabelVBox);
        
        // set positions in Border Pane
        mainPane.setRight(rightButtonHBox);
        mainPane.setCenter(centerTextHBox);
        mainPane.setLeft(leftLabelHBox);
   
        return mainPane;
        
    }