diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,12 @@
 # Changelog for commonmark-extensions
 
+## 0.2.3.3
+
+  - Fix definition_lists extension (#96). We were not properly consuming
+    indentation in definitions, which caused problems when the definitions
+    themselves contained lists.
+
+
 ## 0.2.3.2
 
 - Update lower version bounds for commonmark (#93, David
diff --git a/commonmark-extensions.cabal b/commonmark-extensions.cabal
--- a/commonmark-extensions.cabal
+++ b/commonmark-extensions.cabal
@@ -1,5 +1,5 @@
 name:           commonmark-extensions
-version:        0.2.3.2
+version:        0.2.3.3
 synopsis:       Pure Haskell commonmark parser.
 description:
    This library provides some useful extensions to core commonmark
diff --git a/src/Commonmark/Extensions/DefinitionList.hs b/src/Commonmark/Extensions/DefinitionList.hs
--- a/src/Commonmark/Extensions/DefinitionList.hs
+++ b/src/Commonmark/Extensions/DefinitionList.hs
@@ -81,21 +81,27 @@
      }
 
 
-
 definitionListDefinitionBlockSpec ::
    (Monad m, IsBlock il bl, IsInline il, HasDefinitionList il bl)
    => BlockSpec m il bl
 definitionListDefinitionBlockSpec = BlockSpec
      { blockType           = "DefinitionListDefinition"
      , blockStart          = try $ do
-         n <- gobbleUpToSpaces 3
+         initcol <- sourceColumn <$> getPosition
+         gobbleUpToSpaces 3
          pos <- getPosition
          symbol ':' <|> symbol '~'
-         gobbleSpaces (min 1 (3 - n))
+         try (gobbleUpToSpaces 4 <* notFollowedBy whitespace)
+           <|> gobbleSpaces 1
+           <|> 1 <$ lookAhead lineEnd
+         finalcol <- sourceColumn <$> getPosition
          (Node bdata children : rest) <- nodeStack <$> getState
+         let definitionIndent :: Int
+             definitionIndent = finalcol - initcol
          let defnode = Node (defBlockData
                               definitionListDefinitionBlockSpec){
-                                  blockStartPos = [pos] } []
+                                  blockStartPos = [pos],
+                                  blockData = toDyn definitionIndent } []
          if blockType (blockSpec bdata) == "DefinitionListItem"
             then addNodeToStack defnode
             else do
@@ -153,9 +159,10 @@
      , blockCanContain     = const True
      , blockContainsLines  = False
      , blockParagraph      = False
-     , blockContinue       = \node -> do
+     , blockContinue       = \node@(Node ndata _cs) -> do
          pos <- getPosition
-         gobbleSpaces 4 <|> 0 <$ lookAhead blankLine
+         let definitionIndent = fromDyn (blockData ndata) 0
+         gobbleSpaces definitionIndent <|> 0 <$ lookAhead blankLine
          return $! (pos, node)
      , blockConstructor    = fmap mconcat . renderChildren
      , blockFinalize       = defaultFinalizer
diff --git a/test/definition_lists.md b/test/definition_lists.md
--- a/test/definition_lists.md
+++ b/test/definition_lists.md
@@ -126,6 +126,26 @@
 </dl>
 ````````````````````````````````
 
+Nested lists:
+
+```````````````````````````````` example
+term
+
+:   1. Para one
+
+       Para two
+.
+<dl>
+<dt>term</dt>
+<dd>
+<ol>
+<li><p>Para one</p>
+<p>Para two</p></li>
+</ol>
+</dd>
+</dl>
+````````````````````````````````
+
 Multiple definitions, tight:
 
 ```````````````````````````````` example
