diff --git a/monikerclient/cli/base.py b/monikerclient/cli/base.py
index 9c6690d0..5c65c1fb 100644
--- a/monikerclient/cli/base.py
+++ b/monikerclient/cli/base.py
@@ -17,6 +17,7 @@ import abc
 from cliff.command import Command as CliffCommand
 from cliff.lister import Lister
 from cliff.show import ShowOne
+from monikerclient import exceptions
 from monikerclient import utils
 from monikerclient.v1 import Client
 
@@ -44,7 +45,30 @@ class Command(CliffCommand):
 
         self.client = Client(**client_args)
 
-        return super(Command, self).run(parsed_args)
+        try:
+            return super(Command, self).run(parsed_args)
+        except exceptions.RemoteError, e:
+            columns = ['Code', 'Type']
+            values = [e.code, e.type]
+
+            if e.message:
+                columns.append('Message')
+                values.append(e.message)
+
+            if e.errors:
+                columns.append('Errors')
+                values.append(e.errors)
+
+            self.error_output(parsed_args, columns, values)
+
+            return 1
+
+    def error_output(self, parsed_args, column_names, data):
+        self.formatter.emit_one(column_names,
+                                data,
+                                self.app.stdout,
+                                parsed_args)
+        self.app.log.error('The requested action did not complete sucessfully')
 
     @abc.abstractmethod
     def execute(self, parsed_args):
@@ -66,7 +90,6 @@ class Command(CliffCommand):
         return data
 
     def take_action(self, parsed_args):
-        # TODO: Common Exception Handling Here
         results = self.execute(parsed_args)
         return self.post_execute(results)
 
diff --git a/monikerclient/exceptions.py b/monikerclient/exceptions.py
index 1e0a9fdd..6d276cc8 100644
--- a/monikerclient/exceptions.py
+++ b/monikerclient/exceptions.py
@@ -24,7 +24,13 @@ class ResourceNotFound(Base):
 
 
 class RemoteError(Base):
-    pass
+    def __init__(self, message=None, code=None, type=None, errors=None):
+        super(RemoteError, self).__init__(message)
+
+        self.message = message
+        self.code = code
+        self.type = type
+        self.errors = errors
 
 
 class Unknown(RemoteError):
diff --git a/monikerclient/shell.py b/monikerclient/shell.py
index d9d7ee42..42a9e476 100644
--- a/monikerclient/shell.py
+++ b/monikerclient/shell.py
@@ -13,6 +13,7 @@
 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 # License for the specific language governing permissions and limitations
 # under the License.
+import logging
 import os
 from cliff.app import App
 from cliff.commandmanager import CommandManager
@@ -20,6 +21,8 @@ from monikerclient.version import version_info as version
 
 
 class MonikerShell(App):
+    CONSOLE_MESSAGE_FORMAT = '%(levelname)s: %(message)s'
+
     def __init__(self):
         super(MonikerShell, self).__init__(
             description='Moniker Client',
@@ -27,6 +30,19 @@ class MonikerShell(App):
             command_manager=CommandManager('moniker.cli'),
         )
 
+        self.log = logging.getLogger(__name__)
+
+    def configure_logging(self):
+        super(MonikerShell, self).configure_logging()
+
+        # Set requests logging
+        requests_logger = logging.getLogger('requests')
+
+        if self.options.verbose_level <= 1:
+            requests_logger.setLevel(logging.WARN)
+        else:
+            requests_logger.setLevel(logging.DEBUG)
+
     def build_option_parser(self, description, version):
         parser = super(MonikerShell, self).build_option_parser(
             description, version)
diff --git a/monikerclient/v1/__init__.py b/monikerclient/v1/__init__.py
index 7ea8d1ad..eb24f3a6 100644
--- a/monikerclient/v1/__init__.py
+++ b/monikerclient/v1/__init__.py
@@ -52,7 +52,6 @@ class Client(object):
             raise ValueError('Either an endpoint or auth_url must be supplied')
 
         headers = {'Content-Type': 'application/json'}
-
         self.requests = requests.Session()
         self.requests.auth = auth
         self.requests.headers.update(headers)
@@ -76,15 +75,15 @@ class Client(object):
         response = func(*args, **kw)
 
         if response.status_code == 400:
-            raise exceptions.BadRequest(response.json['errors'])
+            raise exceptions.BadRequest(**response.json)
         elif response.status_code in (401, 403):
-            raise exceptions.Forbidden()
+            raise exceptions.Forbidden(**response.json)
         elif response.status_code == 404:
-            raise exceptions.NotFound()
+            raise exceptions.NotFound(**response.json)
         elif response.status_code == 409:
-            raise exceptions.Conflict()
+            raise exceptions.Conflict(**response.json)
         elif response.status_code == 500:
-            raise exceptions.Unknown()
+            raise exceptions.Unknown(**response.json)
         else:
             return response