public ConflationToggleDialog(ConflationPlugin conflationPlugin) {
    // TODO: create shortcut?
    super(TITLE_PREFIX, "conflation.png", tr("Activates the conflation plugin"), null, 150);

    matches = new SimpleMatchList();

    settingsDialog = new SettingsDialog();
    settingsDialog.setModalityType(Dialog.ModalityType.MODELESS);
    settingsDialog.addWindowListener(
        new WindowAdapter() {

          @Override
          public void windowClosed(WindowEvent e) {
            // "Generate matches" was clicked
            if (settingsDialog.getValue() == 1) {
              settings = settingsDialog.getSettings();
              performMatching();
            }
          }
        });

    // create table to show matches and allow multiple selections
    matchTableModel = new SimpleMatchesTableModel();
    matchTable = new JTable(matchTableModel);

    // add selection handler, to center/zoom view
    matchTable.getSelectionModel().addListSelectionListener(new MatchListSelectionHandler());
    matchTable
        .getColumnModel()
        .getSelectionModel()
        .addListSelectionListener(new MatchListSelectionHandler());

    // FIXME: doesn't work right now
    matchTable.getColumnModel().getColumn(0).setCellRenderer(new OsmPrimitivRenderer());
    matchTable.getColumnModel().getColumn(1).setCellRenderer(new OsmPrimitivRenderer());
    matchTable.getColumnModel().getColumn(4).setCellRenderer(new ColorTableCellRenderer("Tags"));

    matchTable.setRowSelectionAllowed(true);
    matchTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

    referenceOnlyListModel = new UnmatchedObjectListModel();
    referenceOnlyList = new JList<>(referenceOnlyListModel);
    referenceOnlyList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    referenceOnlyList.setCellRenderer(new OsmPrimitivRenderer());
    referenceOnlyList.setTransferHandler(null); // no drag & drop

    subjectOnlyListModel = new UnmatchedObjectListModel();
    subjectOnlyList = new JList<>(subjectOnlyListModel);
    subjectOnlyList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    subjectOnlyList.setCellRenderer(new OsmPrimitivRenderer());
    subjectOnlyList.setTransferHandler(null); // no drag & drop

    // add popup menu for zoom on selection
    zoomToListSelectionAction = new ZoomToListSelectionAction();
    selectionPopup = new SelectionPopup();
    SelectionPopupMenuLauncher launcher = new SelectionPopupMenuLauncher();
    matchTable.addMouseListener(launcher);
    subjectOnlyList.addMouseListener(launcher);
    referenceOnlyList.addMouseListener(launcher);

    // on enter key zoom to selection
    InputMapUtils.addEnterAction(matchTable, zoomToListSelectionAction);
    InputMapUtils.addEnterAction(subjectOnlyList, zoomToListSelectionAction);
    InputMapUtils.addEnterAction(referenceOnlyList, zoomToListSelectionAction);

    DoubleClickHandler dblClickHandler = new DoubleClickHandler();
    matchTable.addMouseListener(dblClickHandler);
    referenceOnlyList.addMouseListener(dblClickHandler);
    subjectOnlyList.addMouseListener(dblClickHandler);

    tabbedPane = new JTabbedPane();
    tabbedPane.addTab(tr("Matches"), matchTable);
    tabbedPane.addTab(tr("Reference only"), referenceOnlyList);
    tabbedPane.addTab(tr("Subject only"), subjectOnlyList);

    conflateAction = new ConflateAction();
    final SideButton conflateButton = new SideButton(conflateAction);
    // TODO: don't need this arrow box now, but likely will shortly
    //        conflateButton.createArrow(new ActionListener() {
    //            @Override
    //            public void actionPerformed(ActionEvent e) {
    //                ConflatePopupMenu.launch(conflateButton);
    //            }
    //        });

    removeAction = new RemoveAction();

    // add listeners to update enable state of buttons
    tabbedPane.addChangeListener(conflateAction);
    tabbedPane.addChangeListener(removeAction);
    referenceOnlyList.addListSelectionListener(conflateAction);
    referenceOnlyList.addListSelectionListener(removeAction);
    subjectOnlyList.addListSelectionListener(conflateAction);
    subjectOnlyList.addListSelectionListener(removeAction);

    UnmatchedListDataListener unmatchedListener = new UnmatchedListDataListener();
    subjectOnlyListModel.addListDataListener(unmatchedListener);
    referenceOnlyListModel.addListDataListener(unmatchedListener);

    createLayout(
        tabbedPane,
        true,
        Arrays.asList(
            new SideButton[] {
              new SideButton(new ConfigureAction()), conflateButton, new SideButton(removeAction)
              //                    new SideButton("Replace Geometry", false),
              //                    new SideButton("Merge Tags", false),
              //                    new SideButton("Remove", false)
            }));
  }