diff --git a/qt/disabled/fib-input-dialog.cpp b/qt/disabled/fib-input-dialog.cpp
new file mode 100644
index 0000000..69700db
--- /dev/null
+++ b/qt/disabled/fib-input-dialog.cpp
@@ -0,0 +1,87 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * @copyright See LICENCE for copyright and license information.
+ *
+ * @author Ilya Moiseenko <iliamo@ucla.edu>
+ */
+
+#include "fib-input-dialog.hpp"
+
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+
+FibInputDialog::FibInputDialog(QWidget *parent)
+  : QDialog(parent)
+{
+  prefixLabel = new QLabel(tr("NDN name (prefix): "));
+  prefixTextField = new QLineEdit;
+  prefixLabel->setBuddy(prefixTextField);
+
+  tunnelLabel = new QLabel(tr("Tunnel type: "));
+  tunnelComboBox = new QComboBox;
+  tunnelComboBox->addItem(tr("TCP"));
+  tunnelComboBox->addItem(tr("UDP"));
+  tunnelComboBox->setEditable(false);
+  tunnelComboBox->setCurrentIndex(0);
+
+  endpointLabel = new QLabel(tr("Endpoint (IP address): "));
+  endpointTextField = new QLineEdit;
+  endpointLabel->setBuddy(endpointTextField);
+
+  okButton = new QPushButton(tr("&Ok"));
+  cancelButton = new QPushButton(tr("&Cancel"));
+
+  connect(okButton,SIGNAL(pressed()), parent, SLOT(addFibEntry()));
+  connect(cancelButton,SIGNAL(pressed()), this, SLOT(hide()));
+
+  buttonBox = new QDialogButtonBox(Qt::Horizontal);
+  buttonBox->addButton(cancelButton, QDialogButtonBox::ActionRole);
+  buttonBox->addButton(okButton, QDialogButtonBox::ActionRole);
+
+  QHBoxLayout *hlayout = new QHBoxLayout;
+  hlayout->addWidget(tunnelLabel);
+  hlayout->addWidget(tunnelComboBox);
+
+  QVBoxLayout *layout = new QVBoxLayout;
+  layout->addWidget(prefixLabel);
+  layout->addWidget(prefixTextField);
+  layout->addLayout(hlayout);
+  layout->addWidget(endpointLabel);
+  layout->addWidget(endpointTextField);
+  layout->addWidget(buttonBox);
+
+  setLayout(layout);
+
+  setWindowTitle(tr("NDNx Control Center"));
+}
+
+QString
+FibInputDialog::getPrefixName()
+{
+  return prefixTextField->text();
+}
+
+QString
+FibInputDialog::getEndpoint()
+{
+  return endpointTextField->text();
+}
+
+QString
+FibInputDialog::getTunnelType()
+{
+  return tunnelComboBox->currentText();
+}
+
+void
+FibInputDialog::clear()
+{
+  prefixTextField->setText("");
+  tunnelComboBox->setCurrentIndex(0);
+  endpointTextField->setText("");
+}
+
+#if WAF
+#include "fib-input-dialog.moc"
+#include "fib-input-dialog.cpp.moc"
+#endif
