diff --git a/ch-tikz.tex b/ch-tikz.tex
index 4d570c0c1cee4b18b62ac4207d8182959b70200d..a01e6b43bc3af96bda196b1b8c468c4f4c88861b 100644
--- a/ch-tikz.tex
+++ b/ch-tikz.tex
@@ -660,7 +660,7 @@
   %% overwrite it for the first node.
   \edef\array@SaveOppositeDirection{\array@OppositeDirection}
   \edef\array@OppositeDirection{\array@Anchor}
-  \drawarray@Element[array origin]{#3}%
+  \drawarray@Element[array origin]{#3}{}%
   %% Restore the correct opposite direction.
   \edef\array@OppositeDirection{\array@SaveOppositeDirection}
   \pgfmathtruncatemacro{\array@Index}{\array@Index + 1}%
@@ -785,7 +785,7 @@
   down/.initial  = north,
 }
 
-\newcommand{\drawarray@Element}[2][\ExpandWithSpaceBetween{\array@Name}{\array@PrevIndex}.\array@Direction]{%
+\newcommand{\drawarray@Element}[3][\ExpandWithSpaceBetween{\array@Name}{\array@PrevIndex}.\array@Direction]{%
   %% Save the nodes in a list so that we can pass to fit later
   \xdef\array@Nodes{\array@Nodes(\ExpandWithSpaceBetween{\array@Name}{\array@Index})}%
   \pgfmathtruncatemacro{\array@PrevIndex}{\array@Index - 1}%
@@ -795,7 +795,7 @@
         yshift={\array@ShiftY\pgflinewidth},%
         fill=\array@Fill,%
         rectangle, draw=black, anchor=\array@OppositeDirection,%
-        array element]%
+        array element, #3]%
   (\ExpandWithSpaceBetween{\array@Name}{\array@Index})%
   at (#1) {#2};%
   \ifx\array@ShowIndex\undefined%
@@ -815,18 +815,23 @@
   \@ifnextchar\bgroup{%
     \drawarray@GobbleArg%
   }{%
+    \@ifnextchar[{%
+      \drawarray@GobbleArg%
+    }{%
     \node[inner sep=0, outer sep=0,%
-          array container, fit=\array@Nodes] (\array@Name) {};%
+      array container, fit=\array@Nodes] (\array@Name) {};%
+    }%
   }%
 }%
 
 %% Draw the next array element and then recurse via
 %% \drawarray@NextArg
-\newcommand{\drawarray@GobbleArg}[1]{%
-  \drawarray@Element{#1}%
+\newcommand{\drawarray@GobbleArg}[2][]{%
+  \drawarray@Element{#2}{#1}%
   \pgfmathtruncatemacro{\array@Index}{\array@Index + 1}%
   \drawarray@NextArg
 }
+
 \makeatother
 
 %%%% draw list %%%%
@@ -913,7 +918,7 @@
   % Once the initial position is set, undef it so that it is
   % not defined for the next \drawlist
   \undef\list@Position
-  \drawlist@Element[list origin]{#3}%
+  \drawlist@Element[list origin]{#3}{}%
 
   \pgfmathtruncatemacro{\list@Index}{\list@Index + 1}%
   %% Goto next argument
@@ -1013,7 +1018,7 @@
   down/.initial  = north
 }
 
-\newcommand{\drawlist@Element}[2][$(\ExpandWithSpaceBetween{\list@Name}{\list@PrevIndex}.east) + (\list@Offset, 0)$]{%
+\newcommand{\drawlist@Element}[3][$(\ExpandWithSpaceBetween{\list@Name}{\list@PrevIndex}.east) + (\list@Offset, 0)$]{%
   %% Save the nodes in a list so that we can pass to fit later
   \xdef\list@Nodes{\list@Nodes(\ExpandWithSpaceBetween{\list@Name}{\list@Index})}%
   \edef\list@CurrentValue{\ExpandWithSpaceBetween{\ExpandWithSpaceBetween{\list@Name}{value}}{\list@Index}}
@@ -1023,7 +1028,7 @@
         minimum height=\list@ElementSize,%
         fill=\list@Fill,%
         rectangle, draw=black, anchor=west,%
-        list element]%
+        list element, #3]%
   (\list@CurrentValue)%
   at (#1) {#2};%
   \node[minimum width=\list@ElementSize,%
@@ -1031,7 +1036,7 @@
         xshift=-\pgflinewidth,%
         fill=\list@Fill,%
         rectangle, draw=black, anchor=west,%
-        list element]%
+        list element, #3]%
   (\list@CurrentNext)%
   at (\list@CurrentValue.east) {};%  
   \node[inner sep=0, outer sep=0, fit=(\list@CurrentValue)(\list@CurrentNext)]%
@@ -1053,13 +1058,17 @@
   \@ifnextchar\bgroup{%
     \drawlist@GobbleArg%
   }{%
-    \node[inner sep=0, outer sep=0,%
+    \@ifnextchar[{%
+      \drawlist@GobbleArg%
+    }{%
+        \node[inner sep=0, outer sep=0,%
           list container, fit=\list@Nodes] (\list@Name) {};%
+    }%
   }%
 }%
 
-\newcommand{\drawlist@GobbleArg}[1]{%
-  \drawlist@Element{#1}%
+\newcommand{\drawlist@GobbleArg}[2][]{%
+  \drawlist@Element{#2}{#1}%
   \draw[->] (\ExpandWithSpaceBetween{\ExpandWithSpaceBetween{\list@Name}{next}}{\list@PrevIndex}.center) -- (\ExpandWithSpaceBetween{\list@Name}{\list@Index});
   \pgfmathtruncatemacro{\list@Index}{\list@Index + 1}%
   \drawlist@NextArg