diff --git a/mistletoe/block_token.py b/mistletoe/block_token.py
index 0a4c2c0..7eeb3f1 100644
--- a/mistletoe/block_token.py
+++ b/mistletoe/block_token.py
@@ -574,6 +574,9 @@ class ListItem(BlockToken):
             if not cls.in_continuation(next_line, prepend):
                 # directly followed by another token
                 if cls.other_token(next_line):
+                    if newline:
+                        lines.backstep()
+                        del line_buffer[-newline:]
                     break
                 # next_line is a new list item
                 marker_info = cls.parse_marker(next_line)

diff --git a/test/test_block_token.py b/test/test_block_token.py
index b3c94b1..78fb0b2 100644
--- a/test/test_block_token.py
+++ b/test/test_block_token.py
@@ -191,6 +191,14 @@ class TestListItem(unittest.TestCase):
         list_item = block_token.tokenize(lines)[0].children[0]
         self.assertEqual(list_item.loose, False)
 
+    def test_tight_list(self):
+        lines = ['- foo\n',
+                 '\n',
+                 '# bar\n']
+        f = FileWrapper(lines)
+        list_item = block_token.tokenize(lines)[0].children[0]
+        self.assertEqual(list_item.loose, False)
+
 
 class TestList(unittest.TestCase):
     def test_different_markers(self):

lists should not contain <p>
Why do you use &lt;p&gt;&lt;/p&gt; in lists ? This is not the way Commonmark does it.

Other strange behavior: in the same document, some lists get the paragraphs, some others don't. Could you explain how it is supposed to work ?
test/test_block_token.py::TestListItem::test_tight_list
test/test_block_token.py::TestATXHeading::test_children_with_enclosing_hashes test/test_block_token.py::TestATXHeading::test_heading_in_paragraph test/test_block_token.py::TestATXHeading::test_match test/test_block_token.py::TestATXHeading::test_not_heading test/test_block_token.py::TestSetextHeading::test_match test/test_block_token.py::TestSetextHeading::test_next test/test_block_token.py::TestQuote::test_lazy_continuation test/test_block_token.py::TestQuote::test_match test/test_block_token.py::TestCodeFence::test_fence_code_lazy_continuation test/test_block_token.py::TestCodeFence::test_match_fenced_code test/test_block_token.py::TestCodeFence::test_match_fenced_code_with_tilda test/test_block_token.py::TestCodeFence::test_mixed_code_fence test/test_block_token.py::TestCodeFence::test_no_wrapping_newlines_code_fence test/test_block_token.py::TestCodeFence::test_unclosed_code_fence test/test_block_token.py::TestBlockCode::test_parse_indented_code test/test_block_token.py::TestParagraph::test_parse test/test_block_token.py::TestParagraph::test_read test/test_block_token.py::TestListItem::test_deep_list test/test_block_token.py::TestListItem::test_loose_list test/test_block_token.py::TestListItem::test_parse_marker test/test_block_token.py::TestListItem::test_sublist test/test_block_token.py::TestListItem::test_tokenize test/test_block_token.py::TestList::test_different_markers test/test_block_token.py::TestList::test_sublist test/test_block_token.py::TestTable::test_easy_table test/test_block_token.py::TestTable::test_match test/test_block_token.py::TestTable::test_not_easy_table test/test_block_token.py::TestTable::test_parse_align test/test_block_token.py::TestTable::test_parse_delimiter test/test_block_token.py::TestTableRow::test_easy_table_row test/test_block_token.py::TestTableRow::test_match test/test_block_token.py::TestTableCell::test_match test/test_block_token.py::TestFootnote::test_store test/test_block_token.py::TestDocument::test_auto_splitlines test/test_block_token.py::TestDocument::test_store_footnote test/test_block_token.py::TestThematicBreak::test_match test/test_block_token.py::TestContains::test_contains