   (interactive)
   (message "%s" (or (get-char-property (point) 'help-echo) "No tags")))
 
-(defun ovirt-log-analyzer-poi (search-function)
+(defun ovirt-log-analyzer-poi (search-function limit-function)
   (let ((point (funcall search-function (point) 'face)))
     (while (and point
+                (< point (point-max))
+                (not (eq (get-char-property point 'face) 'font-lock-variable-name-face))
                 (not (eq (get-text-property point 'face) 'font-lock-variable-name-face)))
-      (setq point (funcall search-function point 'face)))
-    (if point
+      (setq point (funcall search-function point 'face nil (funcall limit-function))))
+    (if (and point
+             (< point (point-max)))
         (goto-char point)
       (message "No further point of interest"))))
 
 (defun ovirt-log-analyzer-next-poi ()
   (interactive)
-  (ovirt-log-analyzer-poi 'next-single-property-change))
+  (ovirt-log-analyzer-poi #'(lambda (&rest args) (min (apply #'next-single-char-property-change args)
+                                                      (apply #'next-single-property-change args)))
+                          #'point-max))
 
 (defun ovirt-log-analyzer-previous-poi ()
   (interactive)
-  (ovirt-log-analyzer-poi 'previous-single-property-change))
+  (ovirt-log-analyzer-poi #'(lambda (&rest args) (min (apply #'previous-single-char-property-change args)
+                                                      (apply #'previous-single-property-change args)))
+                          #'point-min))
 
 (defun ovirt-log-analyzer-filter-by-function (filter-function)
   (save-excursion

          (push value analyzer-properties)
          (push property analyzer-properties))))
    (cond
     ((eq (get-text-property (point) 'face) 'font-lock-variable-name-face)
      (ovirt-log-analyzer-filter-by-text
       (buffer-substring-no-properties (previous-single-property-change (point) 'face)
                                       (next-single-property-change (point) 'face))))
     (analyzer-properties
      (ovirt-log-analyzer-filter-by-property (cl-first analyzer-properties) (cl-second analyzer-properties)))
     (t
      (error "Nothing to filter on")))))


    (while (not (eobp))
      (unless (funcall filter-function)
        (let ((o (make-overlay (line-beginning-position) (1+ (line-end-position)))))
          (overlay-put o 'invisible 'yes)
          (overlay-put o 'ovirt-log-analyzer-filter t)))
      (forward-line))))

(defun ovirt-log-analyzer-filter-by-text (text)
  (message "Filtering by %s" text)
  (ovirt-log-analyzer-filter-by-function (lambda () (search-forward text (line-end-position) t))))

(defun ovirt-log-analyzer-filter ()
  (interactive)
