       (goto-char (point-min))
       (timeline-tools-next-line))))
 
+(defun timeline-tools--get-entry-from-point ()
+  "Return timeline entry of point when in timeline buffer."
+  (unless (derived-mode-p 'timeline-tools-mode))
+  (save-mark-and-excursion
+    (unless (org-at-table-p)
+      (user-error "Not in table"))
+    (unless (looking-at "^| ")
+      (user-error "Not on valid row in timeline"))
+    (beginning-of-line)
+    (org-table-next-field)
+    (if-let ((entry (get-text-property (point) 'entry)))
+        entry
+      (user-error "Not on valid row in timeline"))))
+
 (defun timeline-tools-next-line ()
   "Move point to next line in timetable, if possible."
   (interactive)

  (interactive)
  (unless (eq major-mode 'timeline-tools-mode)
    (user-error "Not in Timeline buffer"))
  (save-mark-and-excursion
    ;; get actual entry from headline of line
    (beginning-of-line)
    (unless (looking-at "^| ")
      (user-error "Not in table"))
    (org-table-next-field)
    (let ((entry (get-text-property (point) 'entry)))
      (unless entry
        (user-error "Not on valid row in timeline"))
      (kill-line)))
  ;; the call to `erase-buffer’ in `timeline-tools-redraw-timeline’ somehow
  ;; makes `save-mark-and-excursion’ meaningless; thus we save the number of the
  ;; current line by ourselves
  (let ((linenum (line-number-at-pos (point))))
    (timeline-tools-redraw-timeline)
    (goto-char (point-min))

  (interactive)
  (unless (eq major-mode 'timeline-tools-mode)
    (user-error "Not in Timeline buffer"))
  (let ((marker (timeline-tools-entry-marker (timeline-tools--get-entry-from-point))))
    (switch-to-buffer (marker-buffer marker))
    (goto-char marker)
    (org-reveal)))
