I confused the issue in my response, and want to clear it up. As you say, when the heading has no contents, "after metadata" is the next headline. However, my problem is if heading 1 contains several blank lines: * Heading 1 :PROPERTIES: :ID: 111111 :END: * Heading 2 In this example, a call of (org-end-of-meta-data) places point on the first blank after :END:, in agreement with the docstring. On the other hand, (org-end-of-meta-data t) places point all the way to heading 2, which is not what the docstring says. This mismatch caused me some headache. However, the suggestion to move back lines is clever, and solves my problem. Granted that it is not worth changing behavior of the function, would it be reasonable to update the docstring? Something like "When optional argument FULL is t, also skip planning information, clocking lines, any kind of drawer, and blank lines. When FULL is non-nil but not t, skip planning information, properties, clocking lines, logbook drawers, and blank lines."