diff -ru tcllib-1.13/modules/struct/list.tcl tcllib-changed/modules/struct/list.tcl
--- tcllib-1.13/modules/struct/list.tcl 2011-01-25 06:37:58.000000000 +0100
+++ tcllib-changed/modules/struct/list.tcl      2011-05-24 17:15:38.000000000 +0200
@@ -942,7 +942,7 @@
     # Author of this command is "Richard Suchenwirth"

     if {[::llength $a] != [::llength $b]} {return 0}
-    if {[::lindex $a 0] == $a} {return [string equal $a $b]}
+    if {[::lindex $a 0] == $a && [::lindex $b 0] == $b} {return [string equal $a $b]}
     foreach i $a j $b {if {![Lequal $i $j]} {return 0}}
     return 1
 }
diff -ru tcllib-1.13/modules/struct/list.test tcllib-changed/modules/struct/list.test
--- tcllib-1.13/modules/struct/list.test        2011-01-25 06:37:58.000000000 +0100
+++ tcllib-changed/modules/struct/list.test     2011-05-24 19:40:00.000000000 +0200
@@ -717,6 +720,32 @@
     equal {{0 2 3} 1} {{0 2 3} 1}
 } 1

+test equal-4.5 {equal command} {
+    equal [list [list a]] {{a}}
+} 1
+
+test equal-4.6 {equal command} {
+    equal {{a}} [list [list a]]
+} 1
+
+test equal-4.7 {equal command} {
+    set a {{a}}
+    set b [list [list a]]
+    expr {[equal $a $b] == [equal $b $a]}
+} 1
+
+test equal-4.8 {equal command} {
+    set a {{a b}}
+    set b [list [list a b]]
+    expr {[equal $a $b] == [equal $b $a]}
+} 1
+
+test equal-4.9 {equal command} {
+    set a {{a} {b}}
+    set b [list [list a] [list b]]
+    expr {[equal $a $b] == [equal $b $a]}
+} 1
+
 #----------------------------------------------------------------------

 interp alias {} delete {} ::struct::list::list delete
