diff --git a/src/edown_layout.erl b/src/edown_layout.erl
index b8c0422d92bac4ae576c91612499f1b323ec49fc..84f7246e8e8afd25d79de9a1237a5fdd8fc8a7cb 100644
--- a/src/edown_layout.erl
+++ b/src/edown_layout.erl
@@ -894,12 +894,14 @@ t_type([#xmlElement{name = nonempty_list, content = Es}]) ->
     t_nonempty_list(Es);
 t_type([#xmlElement{name = tuple, content = Es}]) ->
     t_tuple(Es);
+t_type([#xmlElement{name = map, content = Es}]) ->
+    t_map(Es);
+t_type([#xmlElement{name = map_field, content=Es}]) ->
+    t_map_field(Es);
 t_type([#xmlElement{name = 'fun', content = Es}]) ->
     ["fun("] ++ t_fun(Es) ++ [")"];
 t_type([E = #xmlElement{name = record, content = Es}]) ->
     t_record(E, Es);
-t_type([#xmlElement{name = map}]) ->
-    t_map();
 t_type([E = #xmlElement{name = abstype, content = Es}]) ->
     t_abstype(E, Es);
 t_type([#xmlElement{name = union, content = Es}]) ->
@@ -951,9 +953,6 @@ t_record(E, Es) ->
             see(E, Name) ++ ["{"] ++ seq(fun t_field/1, Fs, ["}"])
     end.
 
-t_map() ->
-    ["#{}"].
-
 t_field(#xmlElement{content = Es}) ->
     t_type(get_elem(atom, Es)) ++ [" = "] ++ t_utype(get_elem(type, Es)).
 
@@ -1148,6 +1147,10 @@ ot_type([#xmlElement{name = nonempty_list, content = Es}]) ->
     ot_nonempty_list(Es);
 ot_type([#xmlElement{name = tuple, content = Es}]) ->
     ot_tuple(Es);
+ot_type([#xmlElement{name = map, content = Es}]) ->
+    ot_map(Es);
+ot_type([#xmlElement{name = map_field, content = Es}]) ->
+    ot_map_field(Es);
 ot_type([#xmlElement{name = 'fun', content = Es}]) ->
     ot_fun(Es);
 ot_type([#xmlElement{name = record, content = Es}]) ->
@@ -1204,11 +1207,24 @@ ot_nonempty_list(Es) ->
 ot_tuple(Es) ->
     {type,0,tuple,[ot_utype_elem(E) || E <- Es]}.
 
+ot_map(Es) ->
+    {type,0,map,[ot_utype_elem(E) || E <- Es]}.
+
+ot_map_field(Es) ->
+    {type,0,map_field_assoc,[ot_utype_elem(E) || E <- Es]}.
+
+
 ot_fun(Es) ->
     Range = ot_utype(get_elem(type, Es)),
     Args = [ot_utype_elem(A) || A <- get_content(argtypes, Es)],
     {type,0,'fun',[{type,0,product,Args},Range]}.
 
+t_map(Es) ->
+    ["#{"] ++ seq(fun t_utype_elem/1, Es, ["}"]).
+
+t_map_field([K,V]) ->
+    t_utype_elem(K) ++ [" => "] ++ t_utype_elem(V).
+
 ot_record(Es) ->
     {type,0,record,[ot_type(get_elem(atom, Es)) |
                     [ot_field(F) || F <- get_elem(field, Es)]]}.