diff --git a/pymbolic/__init__.py b/pymbolic/__init__.py
index 7ae3e27278efbe89227ad1fe5ae44aec38901894..4f1101f99f8dae4aef8fa5f578fada7ec371b739 100644
--- a/pymbolic/__init__.py
+++ b/pymbolic/__init__.py
@@ -146,6 +146,8 @@ linear_combination = pymbolic.primitives.linear_combination
 cse = pymbolic.primitives.make_common_subexpression
 make_sym_vector = pymbolic.primitives.make_sym_vector
 
+disable_subscript_by_getitem = pymbolic.primitives.disable_subscript_by_getitem
+
 parse = pymbolic.parser.parse
 evaluate = pymbolic.mapper.evaluator.evaluate
 evaluate_kw = pymbolic.mapper.evaluator.evaluate_kw
diff --git a/pymbolic/primitives.py b/pymbolic/primitives.py
index 3bb652657ef502348f1c0d75e5ab4fe9b24022a9..b368c92ad71a7f6cdf9e1dfe32f7b761a7107481 100644
--- a/pymbolic/primitives.py
+++ b/pymbolic/primitives.py
@@ -170,6 +170,16 @@ vectors and matrices of :mod:`pymbolic` objects.
 """
 
 
+_SUBSCRIPT_BY_GETITEM = True
+
+
+def disable_subscript_by_getitem():
+    global _SUBSCRIPT_BY_GETITEM
+    _SUBSCRIPT_BY_GETITEM = False
+
+    del Expression.__getitem__
+
+
 class Expression(object):
     """Superclass for parts of a mathematical expression. Overrides operators
     to implicitly construct :class:`Sum`, :class:`Product` and other expressions.
@@ -362,6 +372,22 @@ class Expression(object):
         return Call(self, pars)
 
     def __getitem__(self, subscript):
+        if _SUBSCRIPT_BY_GETITEM:
+            from warning import warn
+
+            warn("creating subscripts using x[i] syntax is deprecated "
+                    "and will be removed in Pymbolic 2016.x. "
+                    "Use x.index(i) instead.",
+                    DeprecationWarning)
+
+            if subscript == ():
+                return self
+            else:
+                return Subscript(self, subscript)
+        else:
+            return NotImplemented
+
+    def index(self, subscript):
         if subscript == ():
             return self
         else:
@@ -881,7 +907,7 @@ class Comparison(Expression):
 
         self.left = left
         self.right = right
-        if not operator in [">", ">=", "==", "!=", "<", "<="]:
+        if operator not in [">", ">=", "==", "!=", "<", "<="]:
             raise RuntimeError("invalid operator")
         self.operator = operator