diff --git a/loopy/kernel/__init__.py b/loopy/kernel/__init__.py
index 91c22dbeb9d7c1cb40abc83a52aab82e7d7d85b2..fb081a959523114ee5fc823eec59420f4adf3457 100644
--- a/loopy/kernel/__init__.py
+++ b/loopy/kernel/__init__.py
@@ -1012,6 +1012,9 @@ class LoopKernel(RecordWithoutPickling):
 
         printed_insn_ids = set()
 
+        Fore = self.options._fore
+        Style = self.options._style
+
         def print_insn(insn):
             if insn.id in printed_insn_ids:
                 return
@@ -1035,7 +1038,7 @@ class LoopKernel(RecordWithoutPickling):
 
             loop_list = ",".join(sorted(kernel.insn_inames(insn)))
 
-            options = [insn.id]
+            options = [Fore.GREEN+insn.id+Style.RESET_ALL]
             if insn.priority:
                 options.append("priority=%d" % insn.priority)
             if insn.tags:
@@ -1048,12 +1051,15 @@ class LoopKernel(RecordWithoutPickling):
             if len(loop_list) > loop_list_width:
                 lines.append("[%s]" % loop_list)
                 lines.append("%s%s <- %s   # %s" % (
-                    (loop_list_width+2)*" ", lhs,
-                    rhs, ", ".join(options)))
+                    (loop_list_width+2)*" ", Fore.BLUE+lhs+Style.RESET_ALL,
+                    Fore.MAGENTA+rhs+Style.RESET_ALL,
+                    ", ".join(options)))
             else:
                 lines.append("[%s]%s%s <- %s   # %s" % (
                     loop_list, " "*(loop_list_width-len(loop_list)),
-                    lhs, rhs, ",".join(options)))
+                    Fore.BLUE + lhs + Style.RESET_ALL,
+                    Fore.MAGENTA+rhs+Style.RESET_ALL,
+                    ",".join(options)))
 
             lines.extend(trailing)
 
diff --git a/loopy/options.py b/loopy/options.py
index 049d21affd284d94f27416d018d38bdbd5b4bddc..ba2fa4f5d212cb2e44eed84e6458fc6280c4c266 100644
--- a/loopy/options.py
+++ b/loopy/options.py
@@ -27,6 +27,11 @@ from pytools import Record
 import re
 
 
+class _ColoramaStub(object):
+    def getattribute(self, name):
+        return ""
+
+
 class Options(Record):
     """
     Unless otherwise specified, these options are Boolean-valued
@@ -105,6 +110,11 @@ class Options(Record):
 
         Options to pass to the OpenCL compiler when building the kernel.
         A list of strings.
+
+    .. attribute:: allow_terminal_colors
+
+        A :class:`bool`. Whether to allow colors in terminal output
+
     """
 
     def __init__(
@@ -124,6 +134,7 @@ class Options(Record):
             write_wrapper=False, highlight_wrapper=False,
             write_cl=False, highlight_cl=False,
             edit_cl=False, cl_build_options=[],
+            allow_terminal_colors=True
             ):
         Record.__init__(
                 self,
@@ -137,6 +148,7 @@ class Options(Record):
                 write_wrapper=write_wrapper, highlight_wrapper=highlight_wrapper,
                 write_cl=write_cl, highlight_cl=highlight_cl,
                 edit_cl=edit_cl, cl_build_options=cl_build_options,
+                allow_terminal_colors=allow_terminal_colors,
                 )
 
     def update(self, other):
@@ -150,6 +162,30 @@ class Options(Record):
         for field_name in sorted(self.__class__.fields):
             key_builder.rec(key_hash, getattr(self, field_name))
 
+    @property
+    def _fore(self):
+        if self.allow_terminal_colors:
+            import colorama
+            return colorama.Fore
+        else:
+            return _ColoramaStub()
+
+    @property
+    def _back(self):
+        if self.allow_terminal_colors:
+            import colorama
+            return colorama.Back
+        else:
+            return _ColoramaStub()
+
+    @property
+    def _style(self):
+        if self.allow_terminal_colors:
+            import colorama
+            return colorama.Style
+        else:
+            return _ColoramaStub()
+
 
 KEY_VAL_RE = re.compile("^([a-zA-Z0-9]+)=(.*)$")
 
diff --git a/setup.py b/setup.py
index ec03f82fa986babad881be80df47cf6ab3e51cc2..5ed095315234339709309a1c55ec88c7fdab6bfa 100644
--- a/setup.py
+++ b/setup.py
@@ -42,6 +42,7 @@ setup(name="loo.py",
           "cgen>=2016.1",
           "islpy>=2016.1.2",
           "six>=1.8.0",
+          "colorama",
           ],
 
       extras_require={