diff --git a/private/ptkutil.nim b/private/ptkutil.nim
new file mode 100644
index 0000000..57fef5b
--- /dev/null
+++ b/private/ptkutil.nim
@@ -0,0 +1,8 @@
+template first*(a: openarray): auto = a[0]
+
+template last*(a: openarray): auto = a[len(a)-1]
+
+proc flatten*[T](a: seq[seq[T]]): seq[T] =
+  result = @[]
+  for subseq in a:
+    result.add(subseq)
diff --git a/ptk.nim b/ptk.nim
index 452f9b2..677a0e4 100644
--- a/ptk.nim
+++ b/ptk.nim
@@ -6,7 +6,7 @@
 import algorithm, docopt, json, langutils, logging, os, nre, sequtils,
   sets, strutils, tempfile, terminal, times, timeutils, uuids
 
-import ptkutil
+import private/ptkutil
 
 type
   Mark* = tuple[id: UUID, time: TimeInfo, summary: string, notes: string, tags: seq[string]]
@@ -347,6 +347,7 @@ Usage:
   ptk continue
   ptk delete <id>
   ptk (list | ls) [options]
+  ptk (list | ls) tags
   ptk sum-time --ids <ids>...
   ptk sum-time [options] [<firstId>] [<lastId>]
   ptk (-V | --version)
@@ -379,7 +380,7 @@ Options:
   let now = getLocalTime(getTime())
 
   # Parse arguments
-  let args = docopt(doc, version = "ptk 0.8.0")
+  let args = docopt(doc, version = "ptk 0.9.0")
 
   if args["--echo-args"]: echo $args
 
@@ -590,11 +591,17 @@ Options:
 
     if args["list"] or args["ls"]:
 
-      var selectedIndices = timeline.filterMarkIndices(args)
+      if args["tags"]:
 
-      timeline.writeMarks(
-        indices = selectedIndices,
-        includeNotes = args["--version"])
+        echo $(timeline.marks.mapIt(it.tags)
+                .flatten().deduplicate().sorted(system.cmp).join("\n"))
+
+      else:
+        var selectedIndices = timeline.filterMarkIndices(args)
+
+        timeline.writeMarks(
+          indices = selectedIndices,
+          includeNotes = args["--version"])
 
     if args["sum-time"]:
     
diff --git a/ptk.nimble b/ptk.nimble
index 5b59c53..5fb84ce 100644
--- a/ptk.nimble
+++ b/ptk.nimble
@@ -1,6 +1,6 @@
 # Package
 
-version       = "0.8.0"
+version       = "0.9.0"
 author        = "Jonathan Bernard"
 description   = "Personal Time Keeper"
 license       = "MIT"
diff --git a/ptkutil.nim b/ptkutil.nim
deleted file mode 100644
index 69f4601..0000000
--- a/ptkutil.nim
+++ /dev/null
@@ -1,3 +0,0 @@
-template first*(a: openarray): auto = a[0]
-
-template last*(a: openarray): auto = a[len(a)-1]