diff --git a/show/dance2012/URI b/show/dance2012/URI
new file mode 100644
--- /dev/null
+++ b/show/dance2012/URI
@@ -0,0 +1,1 @@
+http://light9.bigasterisk.com/show/dance2012
diff --git a/show/dance2012/config.n3 b/show/dance2012/config.n3
new file mode 100644
--- /dev/null
+++ b/show/dance2012/config.n3
@@ -0,0 +1,228 @@
+@prefix : .
+@prefix ch: .
+@prefix chase: .
+@prefix dmx: .
+@prefix group: .
+@prefix mus: .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix sh: .
+@prefix show: .
+@prefix sub: .
+
+show:dance2012 :playList (
+ sh:song1 sh:song2 sh:song3 sh:song4 sh:song5
+ sh:song6 sh:song7 sh:song8 sh:song9 sh:song10
+ sh:song11 sh:song12 sh:song13 sh:song14 sh:song15
+ sh:song16 sh:song17
+) .
+
+show:dance2012 :networking sh:netHome .
+sh:netHome
+ :musicPlayer ;
+ :dmxServer ;
+ :keyboardComposer .
+
+:Song is rdf:type of sh:song1, sh:song2, sh:song3, sh:song4,
+ sh:song5, sh:song6, sh:song7, sh:song8, sh:song9, sh:song10,
+ sh:song11, sh:song12, sh:song13, sh:song14, sh:song15, sh:song16,
+ sh:song17 .
+
+show:dance2012 :musicRoot "show/dance2012/music/pad" .
+
+sh:song1 rdfs:label "01 opening"; :songFilename "01-mix.wav" .
+sh:song2 rdfs:label "02 dancinghappy"; :songFilename "02-dancinghappy.wav" .
+sh:song3 rdfs:label "03 popularmix"; :songFilename "03-popularmix.wav" .
+sh:song4 rdfs:label "04 hellodolly"; :songFilename "04-hellodolly.wav" .
+sh:song5 rdfs:label "05 wink"; :songFilename "05-wink.wav" .
+sh:song6 rdfs:label "06 roses"; :songFilename "06-roses.wav" .
+sh:song7 rdfs:label "07 chicagomix"; :songFilename "07-chicagomix.wav" .
+sh:song8 rdfs:label "08 forgetmix"; :songFilename "08-forgetmix.wav" .
+sh:song9 rdfs:label "09 secondhandrose "; :songFilename "09-secondhandrose.wav" .
+sh:song10 rdfs:label "10 mazie"; :songFilename "10-mazie.wav" .
+sh:song11 rdfs:label "11 hotbox"; :songFilename "11-hotbox.wav" .
+sh:song12 rdfs:label "12 razz"; :songFilename "12-razz.wav" .
+sh:song13 rdfs:label "13 daintyjunemix"; :songFilename "13-daintyjunemix.wav" .
+sh:song14 rdfs:label "14 showoff"; :songFilename "14-showoff.wav" .
+sh:song15 rdfs:label "15 rocky"; :songFilename "15-rocky.wav" .
+sh:song16 rdfs:label "16 mix"; :songFilename "16-mix.wav" .
+sh:song17 rdfs:label "17 mywife"; :songFilename "17-mywife-declick-strong-compress.wav" .
+
+sub:red :color "#ff0000"; :group group:strip; :order 0 .
+sub:orange :color "#f65d00"; :group group:strip; :order 1 .
+sub:green :color "#1d9500"; :group group:strip; :order 2 .
+sub:blue :color "#0000ff"; :group group:strip; :order 3.
+sub:purple :color "#ff00cd"; :group group:strip; :order 4.
+
+sub:sharlyn :group group:live; :order 1 .
+sub:cyc :group group:live; :order 2 .
+sub:house :group group:live; :order 3 .
+sub:scoop :group group:live; :order 4 .
+sub:front :group group:live; :order 5 .
+sub:curtain :group group:live; :order 6 .
+sub:patio :group group:live; :order 7 .
+
+ :color "#81b5b1"; :xgroup group:back; :order 0 .
+ :color "#3e6dca"; :xgroup group:back; :order 1 .
+ :color "#003cb3"; :xgroup group:back; :order 2 .
+ :color "#ffaa77"; :xgroup group:back; :order 3 .
+ :color "#b4099d"; :xgroup group:back; :order 4 .
+ :color "#c0341b"; :xgroup group:back; :order 5 .
+ :color "#ff0000"; :xgroup group:back; :order 6 .
+
+chase:colors a :Chase; :channels (
+ch:oran1 ch:gree1 ch:blue1 ch:red1
+ch:oran2 ch:gree2 ch:blue2 ch:red2
+ch:oran3 ch:gree2 ch:blue2 ch:red2
+ch:oran4 ) .
+
+chase:colors1 a :Chase; :channels (ch:red1 ch:gree1 ch:oran1 ch:blue1) .
+chase:colors2 a :Chase; :channels (ch:red2 ch:gree2 ch:oran2 ch:blue2) .
+chase:colors3 a :Chase; :channels (ch:red3 ch:gree3 ch:oran3 ch:blue3) .
+chase:colors4 a :Chase; :channels (ch:red4 ch:gree4 ch:oran4 ch:blue4) .
+
+chase:colorrb a :Chase; :channels (
+ch:blue1 ch:red1
+ch:blue2 ch:red2
+ch:blue2 ch:red2
+ ) .
+
+chase:back a :Chase; rdfs:comment "back non-white, brightness order";
+ :channels (
+ch:b33-b-c
+ch:b14-b-c
+ch:b26-c-r
+ch:b31-r-l
+ch:b32-c-l
+ch:b16-r-r
+ch:b12-p-r
+ch:b35-p-l
+ch:b21-c-l
+ch:b25-w-r
+ch:b15-c-r
+ch:b24-w-l
+) .
+
+chase:scoop a :Chase; :channels (
+ch:cyc-left
+ch:down-r
+ch:cyc-mid
+ch:down-c
+ch:cyc-right
+ch:down-l
+ch:cyc-mid
+ch:down-c
+#ch:upleft
+#ch:upright
+) .
+
+chase:fronts a :Chase; :channels (
+ch:front3-l3
+ch:front5-l
+ch:front9-l
+ch:front6-pool
+ch:front11-c
+ch:front4-r
+ch:front8-r
+ch:front10-r3
+) .
+
+chase:frontsrand a :Chase; :channels (
+ch:front9-l
+ch:front6-pool
+ch:front5-l
+ch:front4-r
+ch:front6-pool
+ch:front9-l
+ch:front8-r
+ch:front11-c
+ch:front11-c
+ch:front5-l
+ch:front8-r
+ch:front4-r
+) .
+
+chase:cycline a :Chase; :channels (ch:cyc-left ch:cyc-mid ch:cyc-right ) .
+chase:cycpong a :Chase; :channels (ch:cyc-left ch:cyc-mid ch:cyc-right ch:cyc-mid) .
+
+
+#ch:b26 :previewLayer [ :path "lightsim/skyline/front-left.png" ] .
+#ch:front11 :previewLayer [ :path "lightsim/skyline/front-right.png" ] .
+#ch:house1 :previewLayer [ :path "lightsim/skyline/bg.png" ] .
+#ch:gree1 :previewLayer [ :path "lightsim/skyline/cyc-lo-grn.png" ] .
+#ch:oran1 :previewLayer [ :path "lightsim/skyline/cyc-lo-or.png" ] .
+#ch:red1 :previewLayer [ :path "lightsim/skyline/cyc-lo-red.png" ] .
+#ch:blue1 :previewLayer [ :path "lightsim/skyline/cyc-lo-blu.png" ]; rdfs:comment "(image is blank)".
+
+dmx:c1 :dmxAddress 1 .
+dmx:c2 :dmxAddress 2 .
+dmx:c3 :dmxAddress 3 .
+dmx:c4 :dmxAddress 4 .
+dmx:c5 :dmxAddress 5 .
+dmx:c6 :dmxAddress 6 .
+dmx:c7 :dmxAddress 7 .
+dmx:c8 :dmxAddress 8 .
+dmx:c9 :dmxAddress 9 .
+dmx:c10 :dmxAddress 10 .
+dmx:c11 :dmxAddress 11 .
+dmx:c12 :dmxAddress 12 .
+dmx:c13 :dmxAddress 13 .
+dmx:c14 :dmxAddress 14 .
+dmx:c15 :dmxAddress 15 .
+dmx:c16 :dmxAddress 16 .
+dmx:c17 :dmxAddress 17 .
+dmx:c18 :dmxAddress 18 .
+dmx:c19 :dmxAddress 19 .
+dmx:c20 :dmxAddress 20 .
+dmx:c21 :dmxAddress 21 .
+dmx:c22 :dmxAddress 22 .
+dmx:c23 :dmxAddress 23 .
+dmx:c24 :dmxAddress 24 .
+dmx:c25 :dmxAddress 25 .
+dmx:c26 :dmxAddress 26 .
+dmx:c27 :dmxAddress 27 .
+dmx:c28 :dmxAddress 28 .
+dmx:c29 :dmxAddress 29 .
+dmx:c30 :dmxAddress 30 .
+dmx:c31 :dmxAddress 31 .
+dmx:c32 :dmxAddress 32 .
+dmx:c33 :dmxAddress 33 .
+dmx:c34 :dmxAddress 34 .
+dmx:c35 :dmxAddress 35 .
+dmx:c36 :dmxAddress 36 .
+dmx:c37 :dmxAddress 37 .
+dmx:c38 :dmxAddress 38 .
+dmx:c39 :dmxAddress 39 .
+dmx:c40 :dmxAddress 40 .
+dmx:c41 :dmxAddress 41 .
+dmx:c42 :dmxAddress 42 .
+dmx:c43 :dmxAddress 43 .
+dmx:c44 :dmxAddress 44 .
+dmx:c45 :dmxAddress 45 .
+dmx:c46 :dmxAddress 46 .
+dmx:c47 :dmxAddress 47 .
+dmx:c48 :dmxAddress 48 .
+dmx:c49 :dmxAddress 49 .
+dmx:c50 :dmxAddress 50 .
+dmx:c51 :dmxAddress 51 .
+dmx:c52 :dmxAddress 52 .
+dmx:c53 :dmxAddress 53 .
+dmx:c54 :dmxAddress 54 .
+dmx:c55 :dmxAddress 55 .
+dmx:c56 :dmxAddress 56 .
+dmx:c57 :dmxAddress 57 .
+dmx:c58 :dmxAddress 58 .
+dmx:c59 :dmxAddress 59 .
+dmx:c60 :dmxAddress 60 .
+dmx:c61 :dmxAddress 61 .
+dmx:c62 :dmxAddress 62 .
+dmx:c63 :dmxAddress 63 .
+dmx:c64 :dmxAddress 64 .
+dmx:c65 :dmxAddress 65 .
+dmx:c66 :dmxAddress 66 .
+dmx:c67 :dmxAddress 67 .
+dmx:c68 :dmxAddress 68 .
+dmx:c69 :dmxAddress 69 .
+dmx:c70 :dmxAddress 70 .
+dmx:c71 :dmxAddress 71 .
+dmx:c72 :dmxAddress 72 .
diff --git a/show/dance2012/makefile b/show/dance2012/makefile
new file mode 100644
--- /dev/null
+++ b/show/dance2012/makefile
@@ -0,0 +1,2 @@
+patch.n3: patch-source.n3 patch-rules.n3
+ python2.6 /usr/local/bin/cwm patch-source.n3 --filter=patch-rules.n3 --n3=/ > patch.n3
diff --git a/show/dance2012/patch-rules.n3 b/show/dance2012/patch-rules.n3
new file mode 100644
--- /dev/null
+++ b/show/dance2012/patch-rules.n3
@@ -0,0 +1,18 @@
+@prefix ch: .
+@prefix dmx: .
+@prefix rdfs: .
+@prefix l9: .
+@prefix log: .
+@prefix string: .
+
+@prefix prep: .
+
+{
+ [prep:name ?name; prep:output ?c] .
+
+ ch: log:uri ?channelNamespace .
+ (?channelNamespace ?name) string:concatenation ?uriString .
+ ?chanUri log:uri ?uriString .
+} => {
+ ?chanUri a l9:Channel; rdfs:label ?name; l9:output ?c .
+} .
diff --git a/show/dance2012/patch-source.n3 b/show/dance2012/patch-source.n3
new file mode 100644
--- /dev/null
+++ b/show/dance2012/patch-source.n3
@@ -0,0 +1,84 @@
+@prefix : .
+@prefix dmx: .
+
+# build with:
+# python2.5 =cwm patch-source.n3 --filter=patch-rules.n3 --n3=/ > patch.n3
+# python2.5 =cwm show/dance2009/patch-source.n3 --filter=show/dance2009/patch-rules.n3 --n3=/ > show/dance2009/patch.n3
+[ :name "oran1"; :output dmx:c21 ] .
+[ :name "oran2"; :output dmx:c25 ] .
+[ :name "oran3"; :output dmx:c29 ] .
+[ :name "oran4"; :output dmx:c33 ] .
+[ :name "gree1"; :output dmx:c22 ] .
+[ :name "gree2"; :output dmx:c26 ] .
+[ :name "gree3"; :output dmx:c30 ] .
+[ :name "gree4"; :output dmx:c34 ] .
+[ :name "blue1"; :output dmx:c23 ] .
+[ :name "blue2"; :output dmx:c27 ] .
+[ :name "blue3"; :output dmx:c31 ] .
+[ :name "blue4"; :output dmx:c35 ] .
+[ :name "red1"; :output dmx:c24 ] .
+[ :name "red2"; :output dmx:c28 ] .
+[ :name "red3"; :output dmx:c32 ] .
+[ :name "red4"; :output dmx:c36 ] .
+[ :name "upright"; :output dmx:c37 ] .
+[ :name "upleft"; :output dmx:c38 ] .
+# 35 blue has a white in it too
+# nice rhyme, drew
+
+[ :name "strobespeed"; :output dmx:c47 ] .
+[ :name "strobebright"; :output dmx:c48 ] .
+
+[ :name "b11-#-c"; :output dmx:c54 ] .
+[ :name "b12-p-r"; :output dmx:c53 ] .
+[ :name "b13-fos-l"; :output dmx:c52 ] .
+[ :name "b14-b-c"; :output dmx:c51 ] .
+[ :name "b15-c-r"; :output dmx:c50 ] .
+[ :name "b16-r-r"; :output dmx:c49 ] .
+[ :name "b21-c-l"; :output dmx:c55 ] .
+[ :name "b22-fos-c"; :output dmx:c56 ] .
+[ :name "b23x"; :output dmx:c57 ] .
+[ :name "b24-w-l"; :output dmx:c58 ] .
+[ :name "b25-w-r"; :output dmx:c59 ] .
+[ :name "b26-c-r"; :output dmx:c60 ] .
+[ :name "b31-r-l"; :output dmx:c61 ] .
+[ :name "b32-c-l"; :output dmx:c62 ] .
+[ :name "b33-b-c"; :output dmx:c63 ] .
+[ :name "b34-fos-r"; :output dmx:c64 ] .
+[ :name "b35-p-l"; :output dmx:c65 ] .
+[ :name "b36-#-c"; :output dmx:c66 ] .
+
+[ :name "post-l"; :output dmx:c45 ] .
+[ :name "post-r"; :output dmx:c46 ] .
+
+[ :name "s40x"; :output dmx:c40 ] .
+
+[ :name "front1-l"; :output dmx:c1 ] .
+[ :name "front2-l"; :output dmx:c2 ] .
+[ :name "front3-l3"; :output dmx:c3 ] .
+[ :name "front4-r"; :output dmx:c4 ] .
+[ :name "front5-l"; :output dmx:c5 ] .
+[ :name "front6-pool"; :output dmx:c6 ] .
+[ :name "sharlyn"; :output dmx:c7 ] .
+[ :name "front8-r"; :output dmx:c8 ] .
+[ :name "front9-l"; :output dmx:c9 ] .
+[ :name "front10-r3"; :output dmx:c10 ] .
+[ :name "front11-c"; :output dmx:c11 ] .
+[ :name "front12-crap"; :output dmx:c12 ] .
+
+[ :name "blacklight"; :output dmx:c14 ] .
+[ :name "down-l"; :output dmx:c16 ] .
+[ :name "down-l-P"; :output dmx:c17 ] .
+[ :name "down-c"; :output dmx:c18 ] .
+[ :name "down-r-P"; :output dmx:c19 ] .
+[ :name "down-r"; :output dmx:c20 ] .
+
+[ :name "cyc-right"; :output dmx:c41 ] .
+[ :name "cyc-mid"; :output dmx:c43 ] .
+[ :name "cyc-left"; :output dmx:c44 ] .
+
+[ :name "house-side"; :output dmx:c68 ] .
+[ :name "house1"; :output dmx:c69 ] .
+[ :name "house4"; :output dmx:c70 ] .
+[ :name "house3"; :output dmx:c71 ] .
+[ :name "house2"; :output dmx:c72 ] .
+
diff --git a/show/dance2012/patch.n3 b/show/dance2012/patch.n3
new file mode 100644
--- /dev/null
+++ b/show/dance2012/patch.n3
@@ -0,0 +1,9 @@
+#Processed by Id: cwm.py,v 1.197 2007-12-13 15:38:39 syosi Exp
+ # using base file:///home/drewp/projects-local/light9/show/dance2012/patch-source.n3
+
+# Notation3 generation by
+# notation3.py,v 1.200 2007-12-11 21:18:08 syosi Exp
+
+# Base was: file:///home/drewp/projects-local/light9/show/dance2012/patch-source.n3
+
+#ENDS