diff --git a/src/energenie/OnAir.py b/src/energenie/OnAir.py
index c7d7b6f..e95b8de 100644
--- a/src/energenie/OnAir.py
+++ b/src/energenie/OnAir.py
@@ -13,18 +13,11 @@
 # NOTE: This also might include intelligent power level selection based
 # on RSSI reports from different devices.
 
+from lifecycle import *
 import OpenThings
 import TwoBit
 import radio
 
-def log_method(m):
-    def inner(*args, **kwargs):
-        print("CALL %s with %s %s" % (m, args, kwargs))
-        r = m(*args, **kwargs)
-        print("RETURN %s with %s" % (m, r))
-        return r
-    return inner
-
 
 class OpenThingsAirInterface():
     def __init__(self):
diff --git a/src/energenie/Registry.py b/src/energenie/Registry.py
index 0c5638c..d62072e 100644
--- a/src/energenie/Registry.py
+++ b/src/energenie/Registry.py
@@ -4,6 +4,8 @@
 #
 # NOTE: This is an initial, non persisted implementation only
 
+from lifecycle import *
+
 import time
 try:
     import Devices # python 2
@@ -11,24 +13,6 @@
     from . import Devices # python 3
 
 
-def deprecated(m):
-    print("warning: deprecated method %s" % str(m))
-    return m
-
-
-def unimplemented(m):
-    print("warning: unimplemented method %s" % str(m))
-    def inner(*args, **kwargs):
-        print("warning: unimplemented method %s" % str(m))
-        return m()
-    return inner
-
-
-def untested(m):
-    print("warning: untested method %s" % str(m))
-    return m
-
-
 directory = {}
 
 @deprecated
@@ -86,14 +70,6 @@
 
 # TODO: serialisation format for the individual device meta record? json?
 
-def log_method(m):
-    def inner(*args, **kwargs):
-        print("CALL %s with: %s %s" % (m, args, kwargs))
-        r = m(*args, **kwargs)
-        print("RETURN %s with: %s" % (m, r))
-        return r
-    return inner
-
 
 class RegistryStore(): # This is data storage, so it it just the 'RegistRY'??
     """A mock in-memory only store, for testing and debugging"""
diff --git a/src/energenie/TwoBit_test.py b/src/energenie/TwoBit_test.py
index 34e8855..d01a163 100644
--- a/src/energenie/TwoBit_test.py
+++ b/src/energenie/TwoBit_test.py
@@ -18,17 +18,17 @@
 
 print("*" * 80)
 
-ALL_ON         = TwoBit.build_switch_msg(True)
-ALL_OFF        = TwoBit.build_switch_msg(False)
-ONE_ON         = TwoBit.build_switch_msg(True, device_address=1)
-ONE_OFF        = TwoBit.build_switch_msg(False, device_address=1)
-TWO_ON         = TwoBit.build_switch_msg(True, device_address=2)
-TWO_OFF        = TwoBit.build_switch_msg(False, device_address=2)
-THREE_ON       = TwoBit.build_switch_msg(True, device_address=3)
-THREE_OFF      = TwoBit.build_switch_msg(False, device_address=3)
-FOUR_ON        = TwoBit.build_switch_msg(True, device_address=4)
-FOUR_OFF       = TwoBit.build_switch_msg(False, device_address=4)
-MYHOUSE_ALL_ON = TwoBit.build_switch_msg(True, house_address=0x12345)
+ALL_ON         = TwoBit.encode_switch_message(True)
+ALL_OFF        = TwoBit.encode_switch_message(False)
+ONE_ON         = TwoBit.encode_switch_message(True, device_address=1)
+ONE_OFF        = TwoBit.encode_switch_message(False, device_address=1)
+TWO_ON         = TwoBit.encode_switch_message(True, device_address=2)
+TWO_OFF        = TwoBit.encode_switch_message(False, device_address=2)
+THREE_ON       = TwoBit.encode_switch_message(True, device_address=3)
+THREE_OFF      = TwoBit.encode_switch_message(False, device_address=3)
+FOUR_ON        = TwoBit.encode_switch_message(True, device_address=4)
+FOUR_OFF       = TwoBit.encode_switch_message(False, device_address=4)
+MYHOUSE_ALL_ON = TwoBit.encode_switch_message(True, house_address=0x12345)
 
 tests = [ALL_ON, ALL_OFF, ONE_ON, ONE_OFF, TWO_ON, TWO_OFF, THREE_ON, THREE_OFF, FOUR_ON, FOUR_OFF, MYHOUSE_ALL_ON]
 
diff --git a/src/energenie/lifecycle.py b/src/energenie/lifecycle.py
new file mode 100644
index 0000000..88422d3
--- /dev/null
+++ b/src/energenie/lifecycle.py
@@ -0,0 +1,38 @@
+# lifecycle.py  21/05/2016  D.J.Whale
+#
+# Coding lifecycle method decorators.
+
+def unimplemented(m):
+    print("warning: unimplemented method %s" % str(m))
+    def inner(*args, **kwargs):
+        print("warning: unimplemented method %s" % str(m))
+        return m()
+    return inner
+
+def disabled(m):
+    """Load-time waring about disabled function"""
+    print("warning: method is disabled:%s" % m)
+    def nothing(*args, **kwargs):pass
+    return nothing
+
+def untested(m):
+    print("warning: untested method %s" % str(m))
+    return m
+
+def log_method(m):
+    def inner(*args, **kwargs):
+        print("CALL %s with: %s %s" % (m, args, kwargs))
+        r = m(*args, **kwargs)
+        print("RETURN %s with: %s" % (m, r))
+        return r
+    return inner
+
+def deprecated(m):
+    print("warning: deprecated method %s" % str(m))
+    return m
+
+# END
+
+
+
+
diff --git a/src/energenie/radio.py b/src/energenie/radio.py
index 5377d31..c4a2601 100644
--- a/src/energenie/radio.py
+++ b/src/energenie/radio.py
@@ -12,6 +12,8 @@
 # All you would need is a different radio.py that marshalled data to and from
 # the Arduino via pyserial.
 
+from lifecycle import *
+
 #TODO: Should really add parameter validation here, so that C code doesn't have to.
 #although it will be faster in C (C could be made optional, like an assert?)
 
@@ -62,30 +64,6 @@
     return line
 
 
-def unimplemented(m):
-    print("warning: method is not implemented:%s" % m)
-    return m
-
-
-def deprecated(m):
-    """Load-time warning about deprecated method"""
-    print("warning: method is deprecated:%s" % m)
-    return m
-
-
-def untested(m):
-    """Load-time warning about untested function"""
-    print("warning: method is untested:%s" % m)
-    return m
-
-
-def disabled(m):
-    """Load-time waring about disabled function"""
-    print("warning: method is disabled:%s" % m)
-    def nothing(*args, **kwargs):pass
-    return nothing
-
-
 def init():
     """Initialise the module ready for use"""
     #extern void radio_init(void);