diff --git a/Demo/turtle/demohelp.txt b/Demo/turtle/demohelp.txt
index d364e94..7d13763 100644
--- a/Demo/turtle/demohelp.txt
+++ b/Demo/turtle/demohelp.txt
@@ -52,6 +52,9 @@
 
 
    (2) How to add your own demos to the demo repository
+     IMPORTANT! When imported, the demo should not modify the system
+     by calling functions in other modules, such as sys, tkinter, or
+     turtle. Global variables should be initialized in main().
 
    - The script name must begin with tdemo_ ,
      so it must have the form tdemo_<your-script-name>.py
diff --git a/Demo/turtle/tdemo_clock.py b/Demo/turtle/tdemo_clock.py
index d4e0686..1d6eb80 100755
--- a/Demo/turtle/tdemo_clock.py
+++ b/Demo/turtle/tdemo_clock.py
@@ -11,11 +11,8 @@
   ------------------------------------
 """
 from turtle import *
-from turtle import Terminator  # not in __all__
 from datetime import datetime
 
-mode("logo")
-
 def jump(distanz, winkel=0):
     penup()
     right(winkel)
@@ -43,7 +40,6 @@
     hand_form = get_poly()
     register_shape(name, hand_form)
 
-
 def clockface(radius):
     reset()
     pensize(7)
@@ -84,7 +80,6 @@
     writer.pu()
     writer.bk(85)
 
-
 def wochentag(t):
     wochentag = ["Monday", "Tuesday", "Wednesday",
         "Thursday", "Friday", "Saturday", "Sunday"]
@@ -131,6 +126,7 @@
     return "EVENTLOOP"
 
 if __name__ == "__main__":
+    mode("logo")
     msg = main()
     print msg
-    mainloop()
+    mainloop()  # keep window open
diff --git a/Demo/turtle/tdemo_minimal_hanoi.py b/Demo/turtle/tdemo_minimal_hanoi.py
index 3cb9efc..86001b6 100755
--- a/Demo/turtle/tdemo_minimal_hanoi.py
+++ b/Demo/turtle/tdemo_minimal_hanoi.py
@@ -18,7 +18,6 @@
  ---------------------------------------
 """
 from turtle import *
-from turtle import Terminator  # not in __all__
 
 class Disc(Turtle):
     def __init__(self, n):
diff --git a/Demo/turtle/tdemo_nim.py b/Demo/turtle/tdemo_nim.py
index 8e66d7e..d739457 100644
--- a/Demo/turtle/tdemo_nim.py
+++ b/Demo/turtle/tdemo_nim.py
@@ -1,7 +1,7 @@
 """      turtle-example-suite:
 
             tdemo_nim.py
-         
+
 Play nim against the computer. The player
 who takes the last stick is the winner.
 
@@ -41,7 +41,7 @@
             return move
 
 def randommove(state):
-    m = max(state)   
+    m = max(state)
     while True:
         z = random.randint(0,2)
         if state[z] > (m > 1):
@@ -62,7 +62,7 @@
         self.winner = None
         self.game.view.setup()
         self.game.state = Nim.RUNNING
-        
+
     def move(self, row, col):
         maxspalte = self.sticks[row]
         self.sticks[row] = col
@@ -76,7 +76,7 @@
             row, col = computerzug(self.sticks)
             self.move(row, col)
             self.player = 0
-        
+
     def game_over(self):
         return self.sticks == [0, 0, 0]
 
@@ -100,13 +100,13 @@
         self.goto(x,y)
         self.color("white")
         self.showturtle()
-            
+
     def coords(self, row, col):
         packet, remainder = divmod(col, 5)
         x = (3 + 11 * packet + 2 * remainder) * WUNIT
         y = (2 + 3 * row) * HUNIT
         return x - SCREENWIDTH // 2 + WUNIT // 2, SCREENHEIGHT // 2 - y - HUNIT // 2
-        
+
     def makemove(self, x, y):
         if self.game.state != Nim.RUNNING:
             return
@@ -142,7 +142,7 @@
         self.writer.pencolor("black")
         self.writer.write(msg1, align="center", font=("Courier",14,"bold"))
         self.screen.tracer(True)
-        
+
 
     def setup(self):
         self.screen.tracer(False)
@@ -181,6 +181,7 @@
         if self.game.state == Nim.OVER:
             self.screen.clear()
 
+
 class NimController(object):
 
     def __init__(self, game):
@@ -200,28 +201,26 @@
         self.BUSY = True
         self.game.model.notify_move(row, col)
         self.BUSY = False
-                
+
 class Nim(object):
     CREATED = 0
     RUNNING = 1
     OVER = 2
     def __init__(self, screen):
-        self.state = Nim.CREATED 
+        self.state = Nim.CREATED
         self.screen = screen
         self.model = NimModel(self)
         self.view = NimView(self)
         self.controller = NimController(self)
-        
 
-mainscreen = turtle.Screen()
-mainscreen.mode("standard")
-mainscreen.setup(SCREENWIDTH, SCREENHEIGHT)
 
 def main():
+    mainscreen = turtle.Screen()
+    mainscreen.mode("standard")
+    mainscreen.setup(SCREENWIDTH, SCREENHEIGHT)
     nim = Nim(mainscreen)
     return "EVENTLOOP!"
 
 if __name__ == "__main__":
     main()
     turtle.mainloop()
-    
diff --git a/Demo/turtle/tdemo_two_canvases.py b/Demo/turtle/tdemo_two_canvases.py
new file mode 100644
index 0000000..d579876
--- /dev/null
+++ b/Demo/turtle/tdemo_two_canvases.py
@@ -0,0 +1,54 @@
+"""turtledemo.two_canvases
+
+Use TurtleScreen and RawTurtle to draw on two
+distinct canvases in a separate windows. The
+new window must be separately closed in
+addition to pressing the STOP button.
+"""
+
+from turtle import TurtleScreen, RawTurtle, TK
+
+def main():
+    root = TK.Tk()
+    cv1 = TK.Canvas(root, width=300, height=200, bg="#ddffff")
+    cv2 = TK.Canvas(root, width=300, height=200, bg="#ffeeee")
+    cv1.pack()
+    cv2.pack()
+
+    s1 = TurtleScreen(cv1)
+    s1.bgcolor(0.85, 0.85, 1)
+    s2 = TurtleScreen(cv2)
+    s2.bgcolor(1, 0.85, 0.85)
+
+    p = RawTurtle(s1)
+    q = RawTurtle(s2)
+
+    p.color("red", (1, 0.85, 0.85))
+    p.width(3)
+    q.color("blue", (0.85, 0.85, 1))
+    q.width(3)
+
+    for t in p,q:
+        t.shape("turtle")
+        t.lt(36)
+
+    q.lt(180)
+
+    for t in p, q:
+        t.begin_fill()
+    for i in range(5):
+        for t in p, q:
+            t.fd(50)
+            t.lt(72)
+    for t in p,q:
+        t.end_fill()
+        t.lt(54)
+        t.pu()
+        t.bk(50)
+
+    return "EVENTLOOP"
+
+
+if __name__ == '__main__':
+    main()
+    TK.mainloop()  # keep window open until user closes it
diff --git a/Demo/turtle/turtledemo_two_canvases.py b/Demo/turtle/turtledemo_two_canvases.py
deleted file mode 100755
index 5a9831d..0000000
--- a/Demo/turtle/turtledemo_two_canvases.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env python
-## DEMONSTRATES USE OF 2 CANVASES, SO CANNOT BE RUN IN DEMOVIEWER!
-"""turtle example: Using TurtleScreen and RawTurtle
-for drawing on two distinct canvases.
-"""
-from turtle import TurtleScreen, RawTurtle, TK
-
-root = TK.Tk()
-cv1 = TK.Canvas(root, width=300, height=200, bg="#ddffff")
-cv2 = TK.Canvas(root, width=300, height=200, bg="#ffeeee")
-cv1.pack()
-cv2.pack()
-
-s1 = TurtleScreen(cv1)
-s1.bgcolor(0.85, 0.85, 1)
-s2 = TurtleScreen(cv2)
-s2.bgcolor(1, 0.85, 0.85)
-
-p = RawTurtle(s1)
-q = RawTurtle(s2)
-
-p.color("red", "white")
-p.width(3)
-q.color("blue", "black")
-q.width(3)
-
-for t in p,q:
-    t.shape("turtle")
-    t.lt(36)
-
-q.lt(180)
-
-for i in range(5):
-    for t in p, q:
-        t.fd(50)
-        t.lt(72)
-for t in p,q:
-    t.lt(54)
-    t.pu()
-    t.bk(50)
-
-## Want to get some info?
-
-print s1, s2
-print p, q
-print s1.turtles()
-print s2.turtles()
-
-TK.mainloop()
