diff --git a/src/__init__.py b/src/__init__.py
index c655e850bf518c33b716c4f54cc966a962fddd08..df1f2032a545c72e38d857e8ce80af27ebc1f66c 100644
--- a/src/__init__.py
+++ b/src/__init__.py
@@ -1141,46 +1141,61 @@ def typedump(val, max_seq=5, special_handlers={}):
 class ProgressBar:
     def __init__(self, descr, total, initial=0, length=40):
         import time
-        self.Description = descr
-        self.Total = total
-        self.Done = initial
-        self.Length = length
-        self.LastSquares = -1
-        self.StartTime = time.time()
-        self.LastUpdate = self.StartTime
+        self.description = descr
+        self.total = total
+        self.done = initial
+        self.length = length
+        self.last_squares = -1
+        self.start_time = time.time()
+        self.last_update_time = self.start_time
+
+        self.speed_meas_start_time = self.start_time
+        self.speed_meas_start_done = initial
+
+        self.time_per_step = None
 
     def draw(self):
         import time
 
         now = time.time()
-        squares = int(self.Done/self.Total*self.Length)
-        if squares != self.LastSquares or now-self.LastUpdate > 0.5:
-            elapsed = now-self.StartTime
-            if self.Done:
-                time_per_step = elapsed/self.Done
-                total_time = self.Total * time_per_step
-                eta_str = "%6.1fs" % max(0, total_time-elapsed)
+        squares = int(self.done/self.total*self.length)
+        if squares != self.last_squares or now-self.last_update_time > 0.5:
+            if (self.done != self.speed_meas_start_done
+                    and now-self.speed_meas_start_time > 3):
+                new_time_per_step = (now-self.speed_meas_start_time) \
+                        / (self.done-self.speed_meas_start_done)
+                if self.time_per_step is not None:
+                    self.time_per_step = (new_time_per_step + self.time_per_step)/2
+                else:
+                    self.time_per_step = new_time_per_step
+
+                self.speed_meas_start_time = now
+                self.speed_meas_start_done = self.done
+
+            if self.time_per_step is not None:
+                eta_str = "%6.1fs" % max(0, (self.total-self.done) * self.time_per_step)
             else:
                 eta_str = "?"
 
             import sys
             sys.stderr.write("%-20s [%s] ETA %s\r" % (
-                self.Description,
-                squares*"#"+(self.Length-squares)*" ",
+                self.description,
+                squares*"#"+(self.length-squares)*" ",
                 eta_str))
-        self.LastSquares = squares
-        self.LastUpdate = now
+
+            self.last_squares = squares
+            self.last_update_time = now
 
     def progress(self, steps=1):
-        self.set_progress(self.Done + steps)
+        self.set_progress(self.done + steps)
 
     def set_progress(self, done):
-        self.Done = done
+        self.done = done
         self.draw()
 
     def finished(self):
         import sys
-        self.set_progress(self.Total)
+        self.set_progress(self.total)
         sys.stderr.write("\n")
 
 
diff --git a/src/log.py b/src/log.py
index 30393df69884e76d527edf6ee5049ee6e76fcaa8..e6d52e72f0d5d7a45dfa55bad3e5a9bcc6a0f71d 100644
--- a/src/log.py
+++ b/src/log.py
@@ -297,7 +297,7 @@ class LogManager(object):
                 and self.schema_version >= 1 
                 and self.mode == "w"):
             self.db_conn.execute("insert into warnings values (?,?,?,?,?)",
-                    (self.tick_count, message.message, str(category), filename, lineno))
+                    (self.tick_count, message.message, str(category), filename, line))
 
     def _load(self):
         if self.mpi_comm and self.mpi_comm.rank != self.head_rank: