diff --git a/mistralclient/api/v2/tasks.py b/mistralclient/api/v2/tasks.py
index 7a9eae68..835a9a74 100644
--- a/mistralclient/api/v2/tasks.py
+++ b/mistralclient/api/v2/tasks.py
@@ -29,7 +29,7 @@ class TaskManager(base.ResourceManager):
     resource_class = Task
 
     def list(self, workflow_execution_id=None, marker='', limit=None,
-             sort_keys='', sort_dirs='', **filters):
+             sort_keys='', sort_dirs='', fields=[], **filters):
         url = '/tasks'
 
         if workflow_execution_id:
@@ -51,6 +51,9 @@ class TaskManager(base.ResourceManager):
         if sort_dirs:
             qparams['sort_dirs'] = sort_dirs
 
+        if fields:
+            qparams['fields'] = ",".join(fields)
+
         for name, val in filters.items():
             qparams[name] = val
 
diff --git a/mistralclient/commands/v2/tasks.py b/mistralclient/commands/v2/tasks.py
index 3609e57b..b22d6ced 100644
--- a/mistralclient/commands/v2/tasks.py
+++ b/mistralclient/commands/v2/tasks.py
@@ -27,40 +27,45 @@ from mistralclient import utils
 LOG = logging.getLogger(__name__)
 
 
-def format_list(task=None):
-    return format(task, lister=True)
+class TaskFormatter(object):
+    COLUMNS = [
+        ('id',                      'ID'),
+        ('name',                    'Name'),
+        ('workflow_name',           'Workflow name'),
+        ('workflow_execution_id',   'Execution ID'),
+        ('state',                   'State'),
+        ('state_info',              'State info'),
+        ('created_at',              'Created at'),
+        ('updated_at',              'Updated at'),
+    ]
 
+    COLUMN_FIELD_NAMES = list(zip(*COLUMNS))[0]
+    COLUMN_HEADING_NAMES = list(zip(*COLUMNS))[1]
 
-def format(task=None, lister=False):
-    columns = (
-        'ID',
-        'Name',
-        'Workflow name',
-        'Execution ID',
-        'State',
-        'State info',
-        'Created at',
-        'Updated at'
-    )
+    @staticmethod
+    def format_list(task=None):
+        return TaskFormatter.format(task, lister=True)
 
-    if task:
-        state_info = (task.state_info if not lister
-                      else base.cut(task.state_info))
+    @staticmethod
+    def format(task=None, lister=False):
+        if task:
+            state_info = (task.state_info if not lister
+                          else base.cut(task.state_info))
 
-        data = (
-            task.id,
-            task.name,
-            task.workflow_name,
-            task.workflow_execution_id,
-            task.state,
-            state_info,
-            task.created_at,
-            task.updated_at or '<none>'
-        )
-    else:
-        data = (tuple('' for _ in range(len(columns))),)
+            data = (
+                task.id,
+                task.name,
+                task.workflow_name,
+                task.workflow_execution_id,
+                task.state,
+                state_info,
+                task.created_at,
+                task.updated_at or '<none>'
+            )
+        else:
+            data = (tuple('' for _ in range(len(TaskFormatter.COLUMNS))),)
 
-    return columns, data
+        return TaskFormatter.COLUMN_HEADING_NAMES, data
 
 
 class List(base.MistralLister):
@@ -92,7 +97,7 @@ class List(base.MistralLister):
         return parser
 
     def _get_format_function(self):
-        return format_list
+        return TaskFormatter.format_list
 
     def _get_resources(self, parsed_args):
         if parsed_args.limit is None:
@@ -110,6 +115,7 @@ class List(base.MistralLister):
         return mistral_client.tasks.list(
             parsed_args.workflow_execution,
             limit=parsed_args.limit,
+            fields=TaskFormatter.COLUMN_FIELD_NAMES,
             **base.get_filters(parsed_args)
         )
 
@@ -128,7 +134,7 @@ class Get(command.ShowOne):
         mistral_client = self.app.client_manager.workflow_engine
         execution = mistral_client.tasks.get(parsed_args.task)
 
-        return format(execution)
+        return TaskFormatter.format(execution)
 
 
 class GetResult(command.Command):
@@ -223,4 +229,4 @@ class Rerun(command.ShowOne):
             env=env
         )
 
-        return format(execution)
+        return TaskFormatter.format(execution)
diff --git a/mistralclient/tests/unit/v2/test_cli_tasks.py b/mistralclient/tests/unit/v2/test_cli_tasks.py
index 09fedfff..bb707ae4 100644
--- a/mistralclient/tests/unit/v2/test_cli_tasks.py
+++ b/mistralclient/tests/unit/v2/test_cli_tasks.py
@@ -21,6 +21,7 @@ import mock
 
 from mistralclient.api.v2 import tasks
 from mistralclient.commands.v2 import tasks as task_cmd
+from mistralclient.commands.v2.tasks import TaskFormatter
 from mistralclient.tests.unit import base
 
 TASK_DICT = {
@@ -58,6 +59,10 @@ class TestCLITasksV2(base.BaseCommandTest):
         result = self.call(task_cmd.List)
 
         self.assertEqual([EXPECTED_TASK_RESULT], result[1])
+        self.assertEqual(
+            self.client.tasks.list.call_args[1]["fields"],
+            TaskFormatter.COLUMN_FIELD_NAMES
+        )
 
     def test_list_with_workflow_execution(self):
         self.client.tasks.list.return_value = [TASK]
diff --git a/mistralclient/tests/unit/v2/test_tasks.py b/mistralclient/tests/unit/v2/test_tasks.py
index 93d93702..d2b3e08a 100644
--- a/mistralclient/tests/unit/v2/test_tasks.py
+++ b/mistralclient/tests/unit/v2/test_tasks.py
@@ -50,6 +50,15 @@ class TestTasksV2(base.BaseClientV2Test):
             task.to_dict()
         )
 
+    def test_list_with_fields(self):
+        field_params = "?fields=id,name"
+
+        self.requests_mock.get(self.TEST_URL + URL_TEMPLATE + field_params,
+                               json={'tasks': [TASK]})
+
+        self.tasks.list(fields=["id,name"])
+        self.assertTrue(self.requests_mock.called_once)
+
     def test_get(self):
         url = self.TEST_URL + URL_TEMPLATE_ID % TASK['id']
         self.requests_mock.get(url, json=TASK)