diff --git a/bin/logtool b/bin/logtool
index 780fdd4f2880173c8f6912aa66c78c28769b5ae8..7b66471ae6a5133b8d67905aca5de734c5b914d5 100755
--- a/bin/logtool
+++ b/bin/logtool
@@ -10,7 +10,9 @@ FILE is a log saved from a code run. COMMANDS may be one of the
 following:
 "list" to list the available variables,
 "plot expr_x,expr_y" to plot a graph,
-"datafile outfile expr_x,expr_y" to write out a data file."""
+"datafile outfile expr_x,expr_y" to write out a data file.
+"table variable" to print the full data table for a time series variable.
+"""
     parser = OptionParser(usage="%prog FILE COMMANDS FILE COMMANDS...",
             description=description)
 
@@ -40,8 +42,8 @@ following:
     did_plot = False
 
     while args:
-        if args[0] == "list":
-            args.pop(0)
+        cmd = args.pop(0)
+        if cmd == "list":
             print "Time series"
             print "-----------"
 
@@ -63,11 +65,8 @@ following:
 
             for key, value in items:
                 print "%s\t%s" % (key.ljust(col0_len), str(value))
-        elif args[0] == "plot":
-            args.pop(0)
-
-            expr_x, expr_y = args[0].split(",")
-            args.pop(0)
+        elif cmd == "plot":
+            expr_x, expr_y = args.pop(0).split(",")
 
             from pylab import xlabel, ylabel, plot
             (data_x, descr_x, unit_x), (data_y, descr_y, unit_y) = \
@@ -92,18 +91,15 @@ following:
             plot(data_x, data_y, hold=True, **kwargs)
 
             did_plot = True
-        elif args[0] == "datafile":
-            args.pop(0)
-
-            expr_x, expr_y = args[0].split(",")
-            args.pop(0)
+        elif cmd == "datafile":
+            expr_x, expr_y = args.pop(0).split(",")
 
-            logmgr.write_datafile(args[0], expr_x, expr_y)
-            args.pop(0)
+            logmgr.write_datafile(args.pop(0), expr_x, expr_y)
+        elif cmd == "table":
+            print logmgr.quantity_data[args.pop(0)].table
         else:
             # not a known command, interpret as file name
-            logmgr.load(args[0])
-            args.pop(0)
+            logmgr.load(cmd)
 
     if did_plot:
         from pylab import show, title, legend
diff --git a/src/datatable.py b/src/datatable.py
index d381743b1c676ee82042f5c4da7ed1683a20425b..02bd1ae63763a8fc7421b83686de3a7955e077af 100644
--- a/src/datatable.py
+++ b/src/datatable.py
@@ -20,6 +20,9 @@ class DataTable:
         if len(self.column_indices) != len(self.column_names):
             raise RuntimeError, "non-unique column names encountered"
 
+    def __bool__(self):
+        return bool(self.data)
+
     def __len__(self):
         return len(self.data)
 
@@ -28,10 +31,13 @@ class DataTable:
 
     def __str__(self):
         """Return a pretty-printed version of the table."""
-        col_widths = [
-                max(len(self.column_names[i]), 
-                    max(len(str(row[i])) for row in self.data))
-                for i in range(len(self.column_names))]
+
+        def col_width(i):
+            width = len(self.column_names[i])
+            if self:
+                width = max(width, max(len(str(row[i])) for row in self.data))
+            return width
+        col_widths = [col_width(i) for i in range(len(self.column_names))]
 
         def format_row(row):
             return "|".join([str(cell).ljust(col_width)