diff --git a/linux/fib-input-dialog.cpp b/linux/fib-input-dialog.cpp
index 5aef521..2b8fd0b 100644
--- a/linux/fib-input-dialog.cpp
+++ b/linux/fib-input-dialog.cpp
@@ -71,3 +71,8 @@
 {
     return tunnelComboBox->currentText();
 }
+
+#if WAF
+#include "fib-input-dialog.moc"
+#include "fib-input-dialog.cpp.moc"
+#endif
diff --git a/linux/network-manager.cpp b/linux/network-manager.cpp
index 9950c8c..f101f51 100644
--- a/linux/network-manager.cpp
+++ b/linux/network-manager.cpp
@@ -54,3 +54,8 @@
 {
     return isAutoconfigRunning;
 }
+
+#if WAF
+#include "network-manager.moc"
+#include "network-manager.cpp.moc"
+#endif
diff --git a/linux/quit-dialog.cpp b/linux/quit-dialog.cpp
index bd53f24..a99ce5c 100644
--- a/linux/quit-dialog.cpp
+++ b/linux/quit-dialog.cpp
@@ -38,3 +38,8 @@
 
     setWindowTitle(tr("NDNx Control Center"));
 }
+
+#if WAF
+#include "quit-dialog.moc"
+#include "quit-dialog.cpp.moc"
+#endif
diff --git a/linux/tray-menu.cpp b/linux/tray-menu.cpp
index f345828..cbcc857 100644
--- a/linux/tray-menu.cpp
+++ b/linux/tray-menu.cpp
@@ -573,3 +573,8 @@
     delete daemonStatusTimer;
     delete dialog;
 }
+
+#if WAF
+#include "tray-menu.moc"
+#include "tray-menu.cpp.moc"
+#endif
diff --git a/waf b/waf
index b2bf440..f916f71 100755
--- a/waf
+++ b/waf
Binary files differ
diff --git a/wscript b/wscript
index acd1a9f..1fe7a68 100644
--- a/wscript
+++ b/wscript
@@ -5,20 +5,21 @@
 from waflib import Logs, Utils, Task, TaskGen
 
 def options(opt):
-    opt.load('compiler_c compiler_cxx')
+    opt.load('compiler_c compiler_cxx qt4')
     opt.load('sparkle xcode', tooldir='waf-tools')
 
     grp = opt.add_option_group ('NDNx Control Center options')
     grp.add_option ('--ndnx', help='''Root path to NDNx installation (default: /usr/local/ndn)''',
                     dest='ndnx_root', type=str, default='/usr/local/ndn')
 
+    if Utils.unversioned_sys_platform () == "darwin":
+        grp.add_option ('--qt4', help='''Build QT4 app, instead of native one''',
+                        action='store_true', dest='build_qt', default=False)
+
+    
 def configure(conf):
     conf.load('compiler_c compiler_cxx')
 
-    if Utils.unversioned_sys_platform () != "darwin":
-        Logs.error ("Only OSX is supported so far")
-        return -1
-
     conf.start_msg('Checking for NDNx in %s' % conf.options.ndnx_root)
     if not conf.find_file('ndnd ndndstatus ndndstart ndndstop', path_list='%s/bin' % conf.options.ndnx_root, mandatory=False):
         conf.fatal ('not found', 'RED')
@@ -32,7 +33,9 @@
     conf.define('NDND_FIB_COMMAND',  '%s/bin/ndndc' % conf.options.ndnx_root)
     conf.define('NDND_AUTOCONFIG_COMMAND', '%s/bin/ndnd-autoconfig' % conf.options.ndnx_root)
     
-    if Utils.unversioned_sys_platform () == "darwin":
+    if Utils.unversioned_sys_platform () == "darwin" and not conf.options.build_qt:
+        conf.env.BUILD_OSX_NATIVE = 1
+        
         conf.find_program('ibtool', var='IBTOOL', mandatory=False)
 
         conf.check_cxx(framework_name='Foundation', uselib_store='FOUNDATION', compile_filename='test.mm')
@@ -41,20 +44,20 @@
 
         conf.env.ARCH_OSX = 'x86_64'
         conf.env.CXXFLAGS_OSX += ['-fobjc-arc', '-mmacosx-version-min=10.7']
-        conf.env.LINKFLAGS_OSX += ['-mmacosx-version-min=10.7']
-        
+        conf.env.LINKFLAGS_OSX += ['-mmacosx-version-min=10.7']        
         conf.env.MACOSX_DEPLOYMENT_TARGET = '10.7'
         
         conf.load('sparkle')
-
+    else:
+        conf.load('qt4')
+        
+        if Utils.unversioned_sys_platform () == "darwin":
+            conf.define('OSX_BUILD', 1)
+        
     conf.write_config_header('config.h')
 
 def build (bld):
-    if Utils.unversioned_sys_platform () != "darwin":
-        Logs.error ("Only OSX is supported so far")
-        return -1
-
-    if Utils.unversioned_sys_platform () == "darwin":
+    if bld.env.BUILD_OSX_NATIVE:
         bld (
             target = "NDNx Control Center",
             features=['cxxprogram', 'cxx'],
@@ -68,6 +71,17 @@
             mac_resources = [i.path_from(bld.path) for i in bld.path.ant_glob ('osx/Resources/**/*')],
             mac_frameworks = "osx/Frameworks/Sparkle.framework",
             )
+    else:
+        bld (
+            target = "NDNx Control Center",
+            features=['qt4', 'cxxprogram', 'cxx'],
+            includes = ". linux",
+
+            use = "QTCORE QTGUI QTXML QTXMLPATTERNS QTDBUS",
+            
+            defines = "WAF",
+            source = bld.path.ant_glob (['linux/**/*.cpp', 'linux/**/*.ui', 'linux/**/*.qrc']),
+            )
 
         
 from waflib import TaskGen
