diff --git a/elftools/dwarf/descriptions.py b/elftools/dwarf/descriptions.py
index 57df8a4..4f88bf3 100644
--- a/elftools/dwarf/descriptions.py
+++ b/elftools/dwarf/descriptions.py
@@ -9,7 +9,7 @@
 from collections import defaultdict
 
 from .constants import *
-from .location_expr import LocationExpressionDumper
+from .dwarf_expr import ExprDumper
 from .die import DIE
 from ..common.utils import preserve_stream_pos
 
@@ -214,7 +214,7 @@
     return extra
 
 
-_LOCATION_EXPR_DUMPER_CACHE = {}
+_DWARF_EXPR_DUMPER_CACHE = {}
 
 def _location_list_extra(attr, die, section_offset):
     # According to section 2.6 of the DWARF spec v3, class loclistptr means
@@ -228,13 +228,13 @@
         # caching scheme is in place to create only one such dumper per
         # processed CU.
         cache_key = id(die.cu.structs)
-        if cache_key not in _LOCATION_EXPR_DUMPER_CACHE:
-            _LOCATION_EXPR_DUMPER_CACHE[cache_key] = \
-                LocationExpressionDumper(die.cu.structs)
-        location_expr_dumper = _LOCATION_EXPR_DUMPER_CACHE[cache_key]
-        location_expr_dumper.clear()
-        location_expr_dumper.process_expr(attr.value)
-        return '(' + location_expr_dumper.get_str() + ')'
+        if cache_key not in _DWARF_EXPR_DUMPER_CACHE:
+            _DWARF_EXPR_DUMPER_CACHE[cache_key] = \
+                ExprDumper(die.cu.structs)
+        dwarf_expr_dumper = _DWARF_EXPR_DUMPER_CACHE[cache_key]
+        dwarf_expr_dumper.clear()
+        dwarf_expr_dumper.process_expr(attr.value)
+        return '(' + dwarf_expr_dumper.get_str() + ')'
 
 
 def _import_extra(attr, die, section_offset):
diff --git a/elftools/dwarf/location_expr.py b/elftools/dwarf/dwarf_expr.py
similarity index 96%
rename from elftools/dwarf/location_expr.py
rename to elftools/dwarf/dwarf_expr.py
index 1d92da3..6140d20 100644
--- a/elftools/dwarf/location_expr.py
+++ b/elftools/dwarf/dwarf_expr.py
@@ -1,7 +1,7 @@
 #-------------------------------------------------------------------------------
-# elftools: dwarf/location_expr.py
+# elftools: dwarf/dwarf_expr.py
 #
-# Decoding DWARF location expressions
+# Decoding DWARF expressions
 #
 # Eli Bendersky (eliben@gmail.com)
 # This code is in the public domain
@@ -11,7 +11,7 @@
 from ..common.utils import struct_parse, bytelist2string
 
 
-# Location expression opcodes. name -> opcode mapping
+# DWARF expression opcodes. name -> opcode mapping
 DW_OP_name2opcode = dict(
     DW_OP_addr=0x03,
     DW_OP_deref=0x06,
@@ -89,7 +89,7 @@
 DW_OP_opcode2name = dict((v, k) for k, v in DW_OP_name2opcode.iteritems())
 
 
-class GenericLocationExprVisitor(object):
+class GenericExprVisitor(object):
     def __init__(self, structs):
         self.structs = structs
         self._init_dispatch_table()
@@ -99,7 +99,7 @@
         self._cur_args = []
 
     def process_expr(self, loc_expr):
-        """ Process (visit) a location expression. Currently two possible
+        """ Process (visit) a DWARF expression. Currently two possible
             types are supported for expr:
 
             1. File-like stream object
@@ -249,9 +249,9 @@
             self._make_visitor_arg_struct(self.structs.Dwarf_offset('')))
 
 
-class LocationExpressionDumper(GenericLocationExprVisitor):
+class ExprDumper(GenericExprVisitor):
     def __init__(self, structs):
-        super(LocationExpressionDumper, self).__init__(structs)
+        super(ExprDumper, self).__init__(structs)
         self._init_lookups()
         self._str_parts = []
 
diff --git a/tests/test_dwarf_location_expr.py b/tests/test_dwarf_expr.py
similarity index 90%
rename from tests/test_dwarf_location_expr.py
rename to tests/test_dwarf_expr.py
index d0d6ab0..4202633 100644
--- a/tests/test_dwarf_location_expr.py
+++ b/tests/test_dwarf_expr.py
@@ -2,18 +2,18 @@
 from cStringIO import StringIO
 
 sys.path.extend(('..', '.'))
-from elftools.dwarf.location_expr import LocationExpressionDumper
+from elftools.dwarf.dwarf_expr import ExprDumper
 from elftools.dwarf.structs import DWARFStructs
 
 
-class TestLocationExpressionDumper(unittest.TestCase):
+class TestExprDumper(unittest.TestCase):
     structs32 = DWARFStructs(
             little_endian=True,
             dwarf_format=32,
             address_size=4)
 
     def setUp(self):
-        self.visitor = LocationExpressionDumper(self.structs32)
+        self.visitor = ExprDumper(self.structs32)
 
     def test_basic_single(self):
         self.visitor.process_expr([0x1b])
