diff --git a/Dockerfile b/Dockerfile
index 11b2251..1a9ecc4 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -36,4 +36,4 @@
 
 # Exposing process and default entry point
 # EXPOSE 8000
-CMD ["python", "voltha/voltha.py"]
+CMD ["python", "voltha/main.py"]
diff --git a/Makefile b/Makefile
index f3b50e4..fa2c0bd 100644
--- a/Makefile
+++ b/Makefile
@@ -25,6 +25,7 @@
 	@echo "where available targets are:"
 	@echo
 	@echo "build        : Build the Voltha docker image (default target)"
+	@echo "clean        : Remove files created by the build and tests"
 	@echo "fetch        : Pre-fetch artifacts for subsequent local builds"
 	@echo "help         : Print this help"
 	@echo "rebuild-venv : Rebuild local Python virtualenv from scratch"
@@ -35,8 +36,12 @@
 build: fetch utest
 	docker build -t cord/voltha -f Dockerfile .
 
+clean:
+	find voltha -name '*.pyc' | xargs rm -f
+
 fetch:
-	# noop
+	docker pull consul
+	docker pull fluent/fluentd
 
 purge-venv:
 	rm -fr ${VENVDIR}
diff --git a/build.gradle b/build.gradle
index 83c07b9..9fb6546 100644
--- a/build.gradle
+++ b/build.gradle
@@ -50,8 +50,8 @@
 // ~~~~~~~~~~~~~~~~~~~ Global tasks ~~~~~~~~~~~~~~~~~~~~~~~
 
 // To be used to fetch upstream binaries, clone repos, etc.
-task fetch {
-    // ...
+task fetch(type: Exec) {
+    commandLine "make", "fetch"
 }
 
 // To be used to generate all needed binaries that need to be present on the target
diff --git a/requirements.txt b/requirements.txt
index 06454ac..486202b 100755
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,6 +2,7 @@
 colorama>=0.2.5
 decorator>=3.4.0
 flake8>=2.5.1
+fluent-logger>=0.4.3
 nose>=1.3.7
 mock>=1.3.0
 netifaces>=0.10.4
@@ -14,9 +15,9 @@
 PyYAML>=3.10
 requests
 scapy>=2.3.2
+service-identity
 simplejson>=3.8.1
 six>=1.10.0
+structlog>=16.1.0
 Twisted>=13.2.0
 urllib3>=1.7.1
-
-
diff --git a/setup.py b/setup.py
index 626adc6..9284e21 100644
--- a/setup.py
+++ b/setup.py
@@ -34,4 +34,3 @@
         'all' : twisted_deps
     },
 )
-                                        
diff --git a/voltha/main.py b/voltha/main.py
new file mode 100755
index 0000000..b8fc26b
--- /dev/null
+++ b/voltha/main.py
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+#
+# Copyright 2016 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+""" virtual OLT Hardware Abstraction """
+
+import argparse
+import logging
+import sys
+import structlog
+
+
+def parse_args():
+
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-i', '--interface', dest='interface', action='store', default='eth0',
+                        help='ETH interface to send (default: eth0)')
+    parser.add_argument('--no-banner', dest='no_banner', action='store_true', default=False,
+                        help='omit startup banner log lines')
+    parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', default=False,
+                        help='verbose print out')
+
+    return parser.parse_args()
+
+
+def setup_logging(args):
+    """
+    Set up logging such that:
+    - The primary logging entry method is structlog (see http://structlog.readthedocs.io/en/stable/index.html)
+    - By default, the logging backend is Python standard lib logger
+    - In the future, fluentd or other backends will be supported too
+    """
+
+    # Configure standard logging
+    DATEFMT = '%Y-%m-%dT%H:%M:%S'
+    FORMAT = '%(asctime)-15s.%(msecs)03d %(levelname)-8s %(msg)s'
+    level = logging.DEBUG if args.verbose else logging.INFO
+    logging.basicConfig(stream=sys.stdout, level=level, format=FORMAT, datefmt=DATEFMT)
+
+    # Hook up structlog to standard logging
+    processors = [
+        structlog.processors.StackInfoRenderer(),
+        structlog.processors.format_exc_info,
+        structlog.processors.KeyValueRenderer(),  # structlog.processorsJSONRenderer(),
+
+    ]
+    structlog.configure(logger_factory=structlog.stdlib.LoggerFactory(), processors=processors)
+
+    # Mark first line of log
+    log = structlog.get_logger()
+    log.info("first-line")
+    return log
+
+
+def print_banner(args, log):
+    log.info(' _    ______  __  ________  _____ ')
+    log.info('| |  / / __ \/ / /_  __/ / / /   |')
+    log.info('| | / / / / / /   / / / /_/ / /| |')
+    log.info('| |/ / /_/ / /___/ / / __  / ___ |')
+    log.info('|___/\____/_____/_/ /_/ /_/_/  |_|')
+
+
+def cleanup(log):
+    """Execute before the reactor is shut down"""
+    log.info('exiting-on-keyboard-interrupt')
+
+
+def start_reactor(args, log):
+    from twisted.internet import reactor
+    reactor.callWhenRunning(lambda: log.info('twisted-reactor-started'))
+    reactor.addSystemEventTrigger('before', 'shutdown', lambda: cleanup(log))
+    reactor.run()
+
+
+def main():
+    args = parse_args()
+    log = setup_logging(args)
+    if not args.no_banner:
+        print_banner(args, log)
+    start_reactor(args, log)  # will not return except Keyboard interrupt
+
+
+if __name__ == '__main__':
+    main()
diff --git a/voltha/voltha.py b/voltha/voltha.py
deleted file mode 100755
index 1036efe..0000000
--- a/voltha/voltha.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2016 the original author or authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-""" virtual OLT Hardware Abstraction """
-
-import argparse
-
-
-def parse_args():
-
-    parser = argparse.ArgumentParser()
-    parser.add_argument('-i', '--interface', dest='interface', action='store', default='eth0',
-                        help='ETH interface to send (default: eth0)')
-    parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', default=False,
-                        help='verbose print out')
-
-    return parser.parse_args()
-
-
-def main():
-
-    args = parse_args()
-
-    if args.verbose:
-        vType = '*verbose*'
-        vHint = ''
-    else:
-        vType = '*regular*'
-        vHint = '(hint: try --verbose)'
-
-    print 'Hello, I am {} VOLTHA {}'.format(vType, vHint)
-    print ' _    ______  __  ________  _____ '
-    print '| |  / / __ \/ / /_  __/ / / /   |'
-    print '| | / / / / / /   / / / /_/ / /| |'
-    print '| |/ / /_/ / /___/ / / __  / ___ |'
-    print '|___/\____/_____/_/ /_/ /_/_/  |_|'
-    print ''
-
-
-if __name__ == '__main__':
-    main()
