diff --git a/neo/neoctl/app.py b/neo/neoctl/app.py
index 02ae344d973afb8ead8c4a2a5292627fe9717740..2547acfb3de52e41424256f340b19b7eaaf56b66 100644
--- a/neo/neoctl/app.py
+++ b/neo/neoctl/app.py
@@ -61,6 +61,8 @@ class TerminalNeoCTL(object):
                          for (offset, cell_list) in row_list)
 
     def formatNodeList(self, node_list):
+        if not node_list:
+            return 'Empty list!'
         result = []
         for node_type, address, uuid, state in node_list:
             if address is None:
@@ -89,9 +91,8 @@ class TerminalNeoCTL(object):
         max_offset = int(max_offset)
         if node is not None:
             node = self.asNode(node)
-        ptid, row_list = self.neoctl.getPartitionRowList(min_offset=min_offset,
-                                                         max_offset=max_offset,
-                                                         node=node)
+        ptid, row_list = self.neoctl.getPartitionRowList(
+                min_offset=min_offset, max_offset=max_offset, node=node)
         # TODO: return ptid
         return self.formatRowList(row_list)
 
@@ -132,7 +133,7 @@ class TerminalNeoCTL(object):
             update_partition_table = not(not(int(params[2])))
         else:
             update_partition_table = False
-        self.neoctl.setNodeState(node, state,
+        return self.neoctl.setNodeState(node, state,
             update_partition_table=update_partition_table)
 
     def setClusterState(self, params):
@@ -142,7 +143,7 @@ class TerminalNeoCTL(object):
             state: state to put the cluster in
         """
         assert len(params) == 1
-        self.neoctl.setClusterState(self.asClusterState(params[0]))
+        return self.neoctl.setClusterState(self.asClusterState(params[0]))
 
     def startCluster(self, params):
         """
@@ -166,7 +167,7 @@ class TerminalNeoCTL(object):
             uuid_list = [node[2] for node in node_list]
         else:
             uuid_list = [self.asNode(x) for x in params]
-        self.neoctl.enableStorageList(uuid_list)
+        return self.neoctl.enableStorageList(uuid_list)
 
     def dropNode(self, params):
         """
@@ -177,7 +178,7 @@ class TerminalNeoCTL(object):
             set node state (node) DOWN
         """
         assert len(params) == 1
-        self.neoctl.dropNode(self.asNode(params[0]))
+        return self.neoctl.dropNode(self.asNode(params[0]))
 
     def getPrimary(self, params):
         """
@@ -206,20 +207,15 @@ class Application(object):
               isinstance(current_action, dict):
             current_action = current_action.get(args[level])
             level += 1
+        action = None
         if isinstance(current_action, basestring):
             action = getattr(self.neoctl, current_action, None)
-        else:
-            action = None
         if action is None:
-            result = self.usage('unknown command')
-            if result is None:
-                result = 'Ok'
-        else:
-            try:
-                result = action(args[level:])
-            except NotReadyException, message:
-                result = message
-        return result
+            return self.usage('unknown command')
+        try:
+            return action(args[level:])
+        except NotReadyException, message:
+            return 'ERROR: %s' % (message, )
 
     def _usage(self, action_dict, level=0):
         result = []
diff --git a/neo/neoctl/neoctl.py b/neo/neoctl/neoctl.py
index bf1e264b84fad99ea89298b2f23cbd219f2e95c6..1f61022e57602b115ae66f1e2144dfd5aa6b8ae2 100644
--- a/neo/neoctl/neoctl.py
+++ b/neo/neoctl/neoctl.py
@@ -72,6 +72,7 @@ class NeoCTL(object):
         response = self.__ask(packet)
         assert response[0] == Packets.Error
         assert response[1] == ErrorCodes.ACK
+        return response[2]
 
     def setClusterState(self, state):
         """
@@ -81,7 +82,7 @@ class NeoCTL(object):
         response = self.__ask(packet)
         assert response[0] == Packets.Error
         assert response[1] == ErrorCodes.ACK
-        return response[1]
+        return response[2]
 
     def setNodeState(self, node, state, update_partition_table=False):
         """
@@ -95,7 +96,7 @@ class NeoCTL(object):
         response = self.__ask(packet)
         assert response[0] == Packets.Error
         assert response[1] == ErrorCodes.ACK
-        return response[1]
+        return response[2]
 
     def getClusterState(self):
         """
@@ -113,7 +114,7 @@ class NeoCTL(object):
         packet = Packets.AskNodeList(node_type)
         response = self.__ask(packet)
         assert response[0] == Packets.AnswerNodeList
-        return response[1]
+        return response[1] # node_list
 
     def getPartitionRowList(self, min_offset=0, max_offset=0, node=None):
         """
@@ -123,7 +124,7 @@ class NeoCTL(object):
         packet = Packets.AskPartitionList(min_offset, max_offset, node)
         response = self.__ask(packet)
         assert response[0] == Packets.AnswerPartitionList
-        return (response[1], response[2])
+        return response[1:3] # ptid, row_list
 
     def startCluster(self):
         """
diff --git a/neoctl b/neoctl
index 110a999bd16caf58c8815d4e0441bb81da02dde1..baa424acf685aba60fe173f63007744243afde5e 100755
--- a/neoctl
+++ b/neoctl
@@ -40,10 +40,6 @@ handler = options.handler or "SocketConnector"
 
 setupLog('NEOCTL', options.verbose)
 from neo.neoctl.app import Application
-app = Application(address, port, handler)
-result = app.execute(args)
-if result is None:
-    print "failure"
-    sys.exit(1)    
-print result
+
+print Application(address, port, handler).execute(args)