diff --git a/preload/apps/ecg/__init__.py b/preload/apps/ecg/__init__.py
index ccc38843d0201298e5933318c2f5124c220e732d..474b0654bd2617082771b0c126a208da83e7be6f 100644
--- a/preload/apps/ecg/__init__.py
+++ b/preload/apps/ecg/__init__.py
@@ -8,9 +8,9 @@ import struct
 
 WIDTH = 160
 HEIGHT = 80
-OFFSET = 50
+OFFSET_Y = 49
 ECG_RATE = 128
-HISTORY_MAX = ECG_RATE * 2
+HISTORY_MAX = ECG_RATE * 4
 DRAW_AFTER_SAMPLES = 5
 SCALE_FACTOR = 30
 MODE_USB = "USB"
@@ -31,20 +31,26 @@ write = 0
 bias = True
 update_screen = 0
 pause_screen = 0
+pause_histogram = False
+histogram_offset = 0
 sensor = 0
 disp = display.open()
 
 
 def callback_ecg(datasets):
     global update_screen, history, filebuffer, write
-    if len(datasets) > 0:
-        for value in datasets:
-            history.append(value)
-        update_screen += len(datasets)
-    if len(history) > HISTORY_MAX:
-        r = len(history) - HISTORY_MAX
-        for i in range(r):
-            history.pop(0)
+    update_screen += len(datasets)
+    # print("callback_ecg(%i)" % len(datasets))
+
+    # update histogram datalist
+    if pause_histogram == False:
+        if len(datasets) > 0:
+            for value in datasets:
+                history.append(value)
+        if len(history) > HISTORY_MAX:
+            r = len(history) - HISTORY_MAX
+            for i in range(r):
+                history.pop(0)
 
     # buffer for writes
     if write > 0:
@@ -57,8 +63,8 @@ def callback_ecg(datasets):
     # don't update on every callback
     if update_screen >= DRAW_AFTER_SAMPLES:
         # print("history: %i, filebuffer: %i" % (len(history), len(filebuffer)))
+        # print("draw_histogram(%i) via callback" % histogram_offset)
         draw_histogram()
-        update_screen = 0
 
 
 def write_filebuffer():
@@ -149,8 +155,19 @@ def toggle_write():
     return
 
 
+def toggle_pause():
+    global pause_histogram, histogram_offset, history
+    if pause_histogram == True:
+        pause_histogram = False
+        history = []
+    else:
+        pause_histogram = True
+    histogram_offset = 0
+    # print("toggle_pause()", pause_histogram)
+
+
 def draw_histogram():
-    global disp, history, current_mode, bias, write, pause_screen
+    global disp, history, current_mode, bias, write, pause_screen, update_screen
 
     # skip rendering due to message beeing shown
     if pause_screen == -1:
@@ -164,34 +181,64 @@ def draw_histogram():
 
     disp.clear(COLOR_BACKGROUND)
 
+    # offset in pause_histogram mode
+    samples = len(history)
+    s_start = samples - (histogram_offset + (ECG_RATE * 2))
+    s_end = samples - (histogram_offset + 1)
+    s_draw = s_end - (WIDTH - 1)
+
     # get max value and calc scale
     value_max = 0
-    for value in history:
-        if abs(value) > value_max:
+    for i, value in enumerate(history):
+        if i >= s_start and i <= s_end and abs(value) > value_max:
             value_max = abs(value)
     scale = SCALE_FACTOR / (value_max if value_max > 0 else 1)
 
     # draw histogram
     old = False
     x = 0
-    samples = len(history)
     for i, value in enumerate(history):
         if old == False:
-            old = (x, int(value * scale) + OFFSET)
+            old = value
             x += 1
             continue
-        elif i > samples - WIDTH:
-            disp.line(old[0], old[1], x, int(value * scale) + OFFSET, col=COLOR_LINE)
-            old = (x, int(value * scale) + OFFSET)
+        elif i > s_start and i > s_draw and i < s_end:
+
+            oldy = int(old * scale)
+            if oldy < -SCALE_FACTOR:
+                oldy = -SCALE_FACTOR
+            elif oldy > SCALE_FACTOR:
+                oldy = SCALE_FACTOR
+
+            disp.line(
+                x - 1,
+                oldy + OFFSET_Y,
+                x,
+                int(value * scale) + OFFSET_Y,
+                col=COLOR_LINE
+            )
+            old = value
             x += 1
 
     # draw text: mode/bias/write
-    disp.print(
-        current_mode + ("+Bias" if bias else ""),
-        posx=0,
-        posy=0,
-        fg=(COLOR_MODE_FINGER if current_mode == MODE_FINGER else COLOR_MODE_USB),
-    )
+    if pause_histogram == True:
+        disp.print(
+            "Pause" + (
+                " -%0.1fs" % (histogram_offset / ECG_RATE)
+                if histogram_offset > 0
+                else ""
+            ),
+            posx=0,
+            posy=0,
+            fg=COLOR_TEXT
+        )
+    else:
+        disp.print(
+            current_mode + ("+Bias" if bias else ""),
+            posx=0,
+            posy=0,
+            fg=(COLOR_MODE_FINGER if current_mode == MODE_FINGER else COLOR_MODE_USB),
+        )
 
     # announce writing ecg log
     if write > 0:
@@ -200,9 +247,12 @@ def draw_histogram():
             disp.print("LOG", posx=0, posy=60, fg=COLOR_WRITE_FG, bg=COLOR_WRITE_BG)
 
     disp.update()
+    update_screen = 0
 
 
 def main():
+    global pause_histogram, histogram_offset
+
     # show button layout
     disp.clear(COLOR_BACKGROUND)
     disp.print("  BUTTONS  ", posx=0, posy=0, fg=COLOR_TEXT)
@@ -215,25 +265,81 @@ def main():
     # start ecg
     open_sensor()
     while True:
-        button_pressed = False
+        button_pressed = {
+            "BOTTOM_LEFT": 0,
+            "BOTTOM_RIGHT": 0,
+            "TOP_RIGHT": 0,
+        }
         while True:
             v = buttons.read(
                 buttons.BOTTOM_LEFT | buttons.BOTTOM_RIGHT | buttons.TOP_RIGHT
             )
-            if v == 0:
-                button_pressed = False
-
-            if not button_pressed and v & buttons.BOTTOM_LEFT != 0:
-                button_pressed = True
-                toggle_write()
-
-            elif not button_pressed and v & buttons.BOTTOM_RIGHT != 0:
-                button_pressed = True
-                toggle_bias()
-
-            elif not button_pressed and v & buttons.TOP_RIGHT != 0:
-                button_pressed = True
-                toggle_mode()
+            # print("button.read(%i)" % v)
+
+            # BUTTOM LEFT
+
+            if button_pressed["BOTTOM_LEFT"] == 0 and v & buttons.BOTTOM_LEFT != 0:
+                button_pressed["BOTTOM_LEFT"] = utime.time_ms()
+                if pause_histogram == False:
+                    toggle_write()
+                else:
+                    l = len(history)
+                    histogram_offset += ECG_RATE / 2
+                    if l - histogram_offset < WIDTH:
+                        histogram_offset = l - WIDTH
+                    # print ("LEFT: ", histogram_offset, len(history))
+
+            if button_pressed["BOTTOM_LEFT"] > 0 and v & buttons.BOTTOM_LEFT == 0:
+                duration = utime.time_ms() - button_pressed["BOTTOM_LEFT"]
+                button_pressed["BOTTOM_LEFT"] = 0
+                # print("BOTTOM_LEFT up (%ims)" % duration)
+
+            # BUTTOM RIGHT
+
+            if button_pressed["BOTTOM_RIGHT"] == 0 and v & buttons.BOTTOM_RIGHT != 0:
+                button_pressed["BOTTOM_RIGHT"] = utime.time_ms()
+                if pause_histogram == False:
+                    toggle_bias()
+                else:
+                    histogram_offset -= ECG_RATE / 2
+                    histogram_offset -= histogram_offset % (ECG_RATE / 2)
+                    if histogram_offset < 0:
+                        histogram_offset = 0
+                    # print ("RIGHT: ", histogram_offset, len(history))
+
+            if button_pressed["BOTTOM_RIGHT"] > 0 and v & buttons.BOTTOM_RIGHT == 0:
+                duration = utime.time_ms() - button_pressed["BOTTOM_RIGHT"]
+                button_pressed["BOTTOM_RIGHT"] = 0
+                # print("BOTTOM_RIGHT up (%ims)" % duration)
+
+            # TOP RIGHT
+
+            # down, and still pressed
+            if button_pressed["TOP_RIGHT"] > 0 and v & buttons.TOP_RIGHT != 0:
+                duration = utime.time_ms() - button_pressed["TOP_RIGHT"]
+                if duration > 1000:
+                    button_pressed["TOP_RIGHT"] = -1
+                    # print("TOP_RIGHT down longer then 1000ms (%ims)" % duration)
+                    toggle_pause()
+
+            # register down event
+            elif button_pressed["TOP_RIGHT"] == 0 and v & buttons.TOP_RIGHT != 0:
+                button_pressed["TOP_RIGHT"] = utime.time_ms()
+                # print("TOP_RIGHT down")
+
+            # register up event but event already called
+            if button_pressed["TOP_RIGHT"] == -1 and v & buttons.TOP_RIGHT == 0:
+                button_pressed["TOP_RIGHT"] = 0
+
+            # register normal up event
+            elif button_pressed["TOP_RIGHT"] > 0 and v & buttons.TOP_RIGHT == 0:
+                duration = utime.time_ms() - button_pressed["TOP_RIGHT"]
+                button_pressed["TOP_RIGHT"] = 0
+                # print("TOP_RIGHT up (%ims)" % duration)
+                if pause_histogram == True:
+                    toggle_pause()
+                else:
+                    toggle_mode()
 
         pass