diff --git a/Demo/turtle/tdemo_I_dontlike_tiltdemo.py b/Demo/turtle/tdemo_I_dontlike_tiltdemo.py
deleted file mode 100644
index 1e5c440..0000000
--- a/Demo/turtle/tdemo_I_dontlike_tiltdemo.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env python3
-"""       turtle-example-suite:
-
-     tdemo-I_dont_like_tiltdemo.py
-
-Demostrates
-  (a) use of a tilted ellipse as
-      turtle shape
-  (b) stamping that shape
-
-We can remove it, if you don't like it.
-      Without using reset() ;-)
- ---------------------------------------
-"""
-from turtle import *
-import time
-
-def main():
-    reset()
-    shape("circle")
-    resizemode("user")
-
-    pu(); bk(24*18/6.283); rt(90); pd()
-    tilt(45)
-
-    pu()
-
-    turtlesize(16,10,5)
-    color("red", "violet")
-    for i in range(18):
-        fd(24)
-        lt(20)
-        stamp()
-    color("red", "")
-    for i in range(18):
-        fd(24)
-        lt(20)
-        stamp()
-
-    tilt(-15)
-    turtlesize(3, 1, 4)
-    color("blue", "yellow")
-    for i in range(17):
-        fd(24)
-        lt(20)
-        if i%2 == 0:
-            stamp()
-    time.sleep(1)
-    while undobufferentries():
-        undo()
-    ht()
-    write("OK, OVER!", align="center", font=("Courier", 18, "bold"))
-    return "Done!"
-
-if __name__=="__main__":
-    msg = main()
-    print(msg)
-#    mainloop()
diff --git a/Demo/turtle/tdemo_lindenmayer_indian.py b/Demo/turtle/tdemo_lindenmayer_indian.py
deleted file mode 100644
index 3925f25..0000000
--- a/Demo/turtle/tdemo_lindenmayer_indian.py
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/usr/bin/env python3
-"""       turtle-example-suite:
-
-        xtx_lindenmayer_indian.py
-
-Each morning women in Tamil Nadu, in southern
-India, place designs, created by using rice
-flour and known as kolam on the thresholds of
-their homes.
-
-These can be described by Lindenmayer systems,
-which can easily be implemented with turtle
-graphics and Python.
-
-Two examples are shown here:
-(1) the snake kolam
-(2) anklets of Krishna
-
-Taken from Marcia Ascher: Mathematics
-Elsewhere, An Exploration of Ideas Across
-Cultures
-
-"""
-################################
-# Mini Lindenmayer tool
-###############################
-
-from turtle import *
-
-def replace( seq, replacementRules, n ):
-    for i in range(n):
-        newseq = ""
-        for element in seq:
-            newseq = newseq + replacementRules.get(element,element)
-        seq = newseq
-    return seq
-
-def draw( commands, rules ):
-    for b in commands:
-        try:
-            rules[b]()
-        except TypeError:
-            try:
-                draw(rules[b], rules)
-            except:
-                pass
-
-
-def main():
-    ################################
-    # Example 1: Snake kolam
-    ################################
-
-
-    def r():
-        right(45)
-
-    def l():
-        left(45)
-
-    def f():
-        forward(7.5)
-
-    snake_rules = {"-":r, "+":l, "f":f, "b":"f+f+f--f--f+f+f"}
-    snake_replacementRules = {"b": "b+f+b--f--b+f+b"}
-    snake_start = "b--f--b--f"
-
-    drawing = replace(snake_start, snake_replacementRules, 3)
-
-    reset()
-    speed(3)
-    tracer(1,0)
-    ht()
-    up()
-    backward(195)
-    down()
-    draw(drawing, snake_rules)
-
-    from time import sleep
-    sleep(3)
-
-    ################################
-    # Example 2: Anklets of Krishna
-    ################################
-
-    def A():
-        color("red")
-        circle(10,90)
-
-    def B():
-        from math import sqrt
-        color("black")
-        l = 5/sqrt(2)
-        forward(l)
-        circle(l, 270)
-        forward(l)
-
-    def F():
-        color("green")
-        forward(10)
-
-    krishna_rules = {"a":A, "b":B, "f":F}
-    krishna_replacementRules = {"a" : "afbfa", "b" : "afbfbfbfa" }
-    krishna_start = "fbfbfbfb"
-
-    reset()
-    speed(0)
-    tracer(3,0)
-    ht()
-    left(45)
-    drawing = replace(krishna_start, krishna_replacementRules, 3)
-    draw(drawing, krishna_rules)
-    tracer(1)
-    return "Done!"
-
-if __name__=='__main__':
-    msg = main()
-    print(msg)
-    mainloop()
diff --git a/Demo/turtle/turtleDemo.py b/Demo/turtle/turtleDemo.py
deleted file mode 100644
index b5b99c0..0000000
--- a/Demo/turtle/turtleDemo.py
+++ /dev/null
@@ -1,291 +0,0 @@
-#!/usr/bin/env python3
-import sys
-import os
-
-from tkinter import *
-from idlelib.Percolator import Percolator
-from idlelib.ColorDelegator import ColorDelegator
-from idlelib.textView import view_file # TextViewer
-from imp import reload
-
-import turtle
-import time
-
-STARTUP = 1
-READY = 2
-RUNNING = 3
-DONE = 4
-EVENTDRIVEN = 5
-
-menufont = ("Arial", 12, NORMAL)
-btnfont = ("Arial", 12, 'bold')
-txtfont = ('Lucida Console', 8, 'normal')
-
-def getExampleEntries():
-    cwd = os.getcwd()
-    #print(cwd, os.listdir(cwd))
-    if "turtleDemo.py" not in os.listdir(cwd):
-        print("Directory of turtleDemo must be current working directory!")
-        print("But in your case this is", cwd)
-        sys.exit()
-    entries1 = [entry for entry in os.listdir(cwd) if
-                     entry.startswith("tdemo_") and
-                     not entry.endswith(".pyc")]
-    entries2 = []
-    for entry in entries1:
-        if entry.endswith(".py"):
-            entries2.append(entry)
-        else:
-            path = os.path.join(cwd,entry)
-            sys.path.append(path)
-            subdir = [entry]
-            scripts = [script for script in os.listdir(path) if
-                            script.startswith("tdemo_") and
-                            script.endswith(".py")]
-            entries2.append(subdir+scripts)
-    return entries2
-
-def showDemoHelp():
-    view_file(demo.root, "Help on turtleDemo", "demohelp.txt")
-
-def showAboutDemo():
-    view_file(demo.root, "About turtleDemo", "about_turtledemo.txt")
-
-def showAboutTurtle():
-    view_file(demo.root, "About the new turtle module.", "about_turtle.txt")
-
-class DemoWindow(object):
-
-    def __init__(self, filename=None):   #, root=None):
-        self.root = root = turtle._root = Tk()
-        root.wm_protocol("WM_DELETE_WINDOW", self._destroy)
-
-        #################
-        self.mBar = Frame(root, relief=RAISED, borderwidth=2)
-        self.mBar.pack(fill=X)
-
-        self.ExamplesBtn = self.makeLoadDemoMenu()
-        self.OptionsBtn = self.makeHelpMenu()
-        self.mBar.tk_menuBar(self.ExamplesBtn, self.OptionsBtn) #, QuitBtn)
-
-        root.title('Python turtle-graphics examples')
-        #################
-        self.left_frame = left_frame = Frame(root)
-        self.text_frame = text_frame = Frame(left_frame)
-        self.vbar = vbar =Scrollbar(text_frame, name='vbar')
-        self.text = text = Text(text_frame,
-                                name='text', padx=5, wrap='none',
-                                width=45)
-        vbar['command'] = text.yview
-        vbar.pack(side=LEFT, fill=Y)
-        #####################
-        self.hbar = hbar =Scrollbar(text_frame, name='hbar', orient=HORIZONTAL)
-        hbar['command'] = text.xview
-        hbar.pack(side=BOTTOM, fill=X)
-        #####################
-        text['yscrollcommand'] = vbar.set
-        text.config(font=txtfont)
-        text.config(xscrollcommand=hbar.set)
-        text.pack(side=LEFT, fill=Y, expand=1)
-        #####################
-        self.output_lbl = Label(left_frame, height= 1,text=" --- ", bg = "#ddf",
-                                font = ("Arial", 16, 'normal'))
-        self.output_lbl.pack(side=BOTTOM, expand=0, fill=X)
-        #####################
-        text_frame.pack(side=LEFT, fill=BOTH, expand=0)
-        left_frame.pack(side=LEFT, fill=BOTH, expand=0)
-        self.graph_frame = g_frame = Frame(root)
-
-        turtle._Screen._root = g_frame
-        turtle._Screen._canvas = turtle.ScrolledCanvas(g_frame, 800, 600, 1000, 800)
-        #xturtle.Screen._canvas.pack(expand=1, fill="both")
-        self.screen = _s_ = turtle.Screen()
-#####
-        turtle.TurtleScreen.__init__(_s_, _s_._canvas)
-#####
-        self.scanvas = _s_._canvas
-        #xturtle.RawTurtle.canvases = [self.scanvas]
-        turtle.RawTurtle.screens = [_s_]
-
-        self.scanvas.pack(side=TOP, fill=BOTH, expand=1)
-
-        self.btn_frame = btn_frame = Frame(g_frame, height=100)
-        self.start_btn = Button(btn_frame, text=" START ", font=btnfont, fg = "white",
-                                disabledforeground = "#fed", command=self.startDemo)
-        self.start_btn.pack(side=LEFT, fill=X, expand=1)
-        self.stop_btn = Button(btn_frame, text=" STOP ",  font=btnfont, fg = "white",
-                                disabledforeground = "#fed", command = self.stopIt)
-        self.stop_btn.pack(side=LEFT, fill=X, expand=1)
-        self.clear_btn = Button(btn_frame, text=" CLEAR ",  font=btnfont, fg = "white",
-                                disabledforeground = "#fed", command = self.clearCanvas)
-        self.clear_btn.pack(side=LEFT, fill=X, expand=1)
-
-        self.btn_frame.pack(side=TOP, fill=BOTH, expand=0)
-        self.graph_frame.pack(side=TOP, fill=BOTH, expand=1)
-
-        Percolator(text).insertfilter(ColorDelegator())
-        self.dirty = False
-        self.exitflag = False
-        if filename:
-            self.loadfile(filename)
-        self.configGUI(NORMAL, DISABLED, DISABLED, DISABLED,
-                       "Choose example from menu", "black")
-        self.state = STARTUP
-
-    def _destroy(self):
-        self.root.destroy()
-        sys.exit()
-
-    def configGUI(self, menu, start, stop, clear, txt="", color="blue"):
-        self.ExamplesBtn.config(state=menu)
-
-        self.start_btn.config(state=start)
-        if start==NORMAL:
-            self.start_btn.config(bg="#d00")
-        else:
-            self.start_btn.config(bg="#fca")
-
-        self.stop_btn.config(state=stop)
-        if stop==NORMAL:
-            self.stop_btn.config(bg="#d00")
-        else:
-            self.stop_btn.config(bg="#fca")
-        self.clear_btn.config(state=clear)
-
-        self.clear_btn.config(state=clear)
-        if clear==NORMAL:
-            self.clear_btn.config(bg="#d00")
-        else:
-            self.clear_btn.config(bg="#fca")
-
-        self.output_lbl.config(text=txt, fg=color)
-
-
-    def makeLoadDemoMenu(self):
-        CmdBtn = Menubutton(self.mBar, text='Examples', underline=0, font=menufont)
-        CmdBtn.pack(side=LEFT, padx="2m")
-        CmdBtn.menu = Menu(CmdBtn)
-
-        for entry in getExampleEntries():
-            def loadexample(x):
-                def emit():
-                    self.loadfile(x)
-                return emit
-            if isinstance(entry,str):
-                CmdBtn.menu.add_command(label=entry[6:-3], underline=0, font=menufont,
-                                        command=loadexample(entry))
-            else:
-                _dir, entries = entry[0], entry[1:]
-                CmdBtn.menu.choices = Menu(CmdBtn.menu)
-                for e in entries:
-                    CmdBtn.menu.choices.add_command(label=e[6:-3], underline=0, font=menufont,
-                              command = loadexample(os.path.join(_dir,e)))
-
-                CmdBtn.menu.add_cascade(label=_dir[6:],
-                                        menu = CmdBtn.menu.choices, font=menufont )
-
-        CmdBtn['menu'] = CmdBtn.menu
-        return CmdBtn
-
-
-    def makeHelpMenu(self):
-        CmdBtn = Menubutton(self.mBar, text='Help', underline=0, font = menufont)
-        CmdBtn.pack(side=LEFT, padx='2m')
-        CmdBtn.menu = Menu(CmdBtn)
-
-        CmdBtn.menu.add_command(label='About turtle.py', font=menufont, command=showAboutTurtle)
-        CmdBtn.menu.add_command(label='turtleDemo - Help', font=menufont, command=showDemoHelp)
-        CmdBtn.menu.add_command(label='About turtleDemo', font=menufont, command=showAboutDemo)
-
-        CmdBtn['menu'] = CmdBtn.menu
-        return CmdBtn
-
-    def refreshCanvas(self):
-        if not self.dirty: return
-        self.screen.clear()
-        #self.screen.mode("standard")
-        self.dirty=False
-
-    def loadfile(self,filename):
-        self.refreshCanvas()
-        if os.path.exists(filename) and not os.path.isdir(filename):
-            # load and display file text
-            f = open(filename,'r')
-            chars = f.read()
-            f.close()
-            self.text.delete("1.0", "end")
-            self.text.insert("1.0",chars)
-            direc, fname = os.path.split(filename)
-            self.root.title(fname[6:-3]+" - a Python turtle graphics example")
-            self.module = __import__(fname[:-3])
-            reload(self.module)
-            self.configGUI(NORMAL, NORMAL, DISABLED, DISABLED,
-                           "Press start button", "red")
-            self.state = READY
-
-    def startDemo(self):
-        self.refreshCanvas()
-        self.dirty = True
-        turtle.TurtleScreen._RUNNING = True
-        self.configGUI(DISABLED, DISABLED, NORMAL, DISABLED,
-                       "demo running...", "black")
-        self.screen.clear()
-        self.screen.mode("standard")
-        self.state = RUNNING
-
-        try:
-            result = self.module.main()
-            if result == "EVENTLOOP":
-                self.state = EVENTDRIVEN
-            else:
-                self.state = DONE
-        except turtle.Terminator:
-            self.state = DONE
-            result = "stopped!"
-        if self.state == DONE:
-            self.configGUI(NORMAL, NORMAL, DISABLED, NORMAL,
-                           result)
-        elif self.state == EVENTDRIVEN:
-            self.exitflag = True
-            self.configGUI(DISABLED, DISABLED, NORMAL, DISABLED,
-                           "use mouse/keys or STOP", "red")
-
-    def clearCanvas(self):
-        self.refreshCanvas()
-        self.screen._delete("all")
-        self.scanvas.config(cursor="")
-        self.configGUI(NORMAL, NORMAL, DISABLED, DISABLED)
-
-    def stopIt(self):
-        if self.exitflag:
-            self.clearCanvas()
-            self.exitflag = False
-            self.configGUI(NORMAL, NORMAL, DISABLED, DISABLED,
-                           "STOPPED!", "red")
-            turtle.TurtleScreen._RUNNING = False
-            #print "stopIT: exitflag = True"
-        else:
-            turtle.TurtleScreen._RUNNING = False
-            #print "stopIt: exitflag = False"
-
-if __name__ == '__main__':
-    demo = DemoWindow()
-    RUN = True
-    while RUN:
-        try:
-            #print("ENTERING mainloop")
-            demo.root.mainloop()
-        except AttributeError:
-            #print("AttributeError!- WAIT A MOMENT!")
-            time.sleep(0.3)
-            print("GOING ON ..")
-            demo.ckearCanvas()
-        except TypeError:
-            demo.screen._delete("all")
-            #print("CRASH!!!- WAIT A MOMENT!")
-            time.sleep(0.3)
-            #print("GOING ON ..")
-            demo.clearCanvas()
-        except:
-            print("BYE!")
-            RUN = False
diff --git a/Doc/library/turtle.rst b/Doc/library/turtle.rst
index d424b43..d96a543 100644
--- a/Doc/library/turtle.rst
+++ b/Doc/library/turtle.rst
@@ -2266,29 +2266,36 @@
 Demo scripts
 ============
 
-There is a set of demo scripts in the turtledemo directory located in the
-:file:`Demo/turtle` directory in the source distribution.
+There is a set of demo scripts in the :mod:`turtledemo` package.  These
+scripts can be run and viewed using the supplied demo viewer as follows::
 
-It contains:
+   python -m turtledemo
+
+Alternatively, you can run the demo scripts individually.  For example,
+
+::
+   python -m turtledemo.bytedesign
+
+The :mod:`turtledemo` package directory contains:
 
 - a set of 15 demo scripts demonstrating different features of the new module
-  :mod:`turtle`
-- a demo viewer :file:`turtleDemo.py` which can be used to view the sourcecode
+  :mod:`turtle`;
+- a demo viewer :file:`__main__.py` which can be used to view the sourcecode
   of the scripts and run them at the same time. 14 of the examples can be
   accessed via the Examples menu; all of them can also be run standalone.
-- The example :file:`turtledemo_two_canvases.py` demonstrates the simultaneous
+- The example :mod:`turtledemo.two_canvases` demonstrates the simultaneous
   use of two canvases with the turtle module.  Therefore it only can be run
   standalone.
-- There is a :file:`turtle.cfg` file in this directory, which also serves as an
+- There is a :file:`turtle.cfg` file in this directory, which serves as an
   example for how to write and use such files.
 
-The demoscripts are:
+The demo scripts are:
 
 +----------------+------------------------------+-----------------------+
 | Name           | Description                  | Features              |
 +----------------+------------------------------+-----------------------+
 | bytedesign     | complex classical            | :func:`tracer`, delay,|
-|                | turtlegraphics pattern       | :func:`update`        |
+|                | turtle graphics pattern      | :func:`update`        |
 +----------------+------------------------------+-----------------------+
 | chaos          | graphs verhust dynamics,     | world coordinates     |
 |                | proves that you must not     |                       |
diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py
index 818c99e..055bfd8 100644
--- a/Lib/test/test_dict.py
+++ b/Lib/test/test_dict.py
@@ -329,11 +329,19 @@
         k, v = 'abc', 'def'
         d[k] = v
         self.assertRaises(KeyError, d.pop, 'ghi')
+        try:
+            d.pop('ghi')
+        except KeyError as e:
+            self.assertEquals(e.args[0], 'ghi')
 
         self.assertEqual(d.pop(k), v)
         self.assertEqual(len(d), 0)
 
         self.assertRaises(KeyError, d.pop, k)
+        try:
+            d.pop(k)
+        except KeyError as e:
+            self.assertEquals(e.args[0], k)
 
         self.assertEqual(d.pop(k, v), v)
         d[k] = v
diff --git a/Lib/turtledemo/__init__.py b/Lib/turtledemo/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Lib/turtledemo/__init__.py
diff --git a/Demo/turtle/about_turtle.txt b/Lib/turtledemo/about_turtle.txt
similarity index 100%
rename from Demo/turtle/about_turtle.txt
rename to Lib/turtledemo/about_turtle.txt
diff --git a/Demo/turtle/about_turtledemo.txt b/Lib/turtledemo/about_turtledemo.txt
similarity index 100%
rename from Demo/turtle/about_turtledemo.txt
rename to Lib/turtledemo/about_turtledemo.txt
diff --git a/Demo/turtle/tdemo_bytedesign.py b/Lib/turtledemo/bytedesign.py
similarity index 100%
rename from Demo/turtle/tdemo_bytedesign.py
rename to Lib/turtledemo/bytedesign.py
diff --git a/Demo/turtle/tdemo_chaos.py b/Lib/turtledemo/chaos.py
similarity index 100%
rename from Demo/turtle/tdemo_chaos.py
rename to Lib/turtledemo/chaos.py
diff --git a/Demo/turtle/tdemo_clock.py b/Lib/turtledemo/clock.py
similarity index 100%
rename from Demo/turtle/tdemo_clock.py
rename to Lib/turtledemo/clock.py
diff --git a/Demo/turtle/tdemo_colormixer.py b/Lib/turtledemo/colormixer.py
similarity index 100%
rename from Demo/turtle/tdemo_colormixer.py
rename to Lib/turtledemo/colormixer.py
diff --git a/Demo/turtle/demohelp.txt b/Lib/turtledemo/demohelp.txt
similarity index 100%
rename from Demo/turtle/demohelp.txt
rename to Lib/turtledemo/demohelp.txt
diff --git a/Demo/turtle/tdemo_forest.py b/Lib/turtledemo/forest.py
similarity index 100%
rename from Demo/turtle/tdemo_forest.py
rename to Lib/turtledemo/forest.py
diff --git a/Demo/turtle/tdemo_fractalcurves.py b/Lib/turtledemo/fractalcurves.py
similarity index 100%
rename from Demo/turtle/tdemo_fractalcurves.py
rename to Lib/turtledemo/fractalcurves.py
diff --git a/Demo/turtle/tdemo_minimal_hanoi.py b/Lib/turtledemo/minimal_hanoi.py
similarity index 100%
rename from Demo/turtle/tdemo_minimal_hanoi.py
rename to Lib/turtledemo/minimal_hanoi.py
diff --git a/Demo/turtle/tdemo_nim.py b/Lib/turtledemo/nim.py
similarity index 100%
rename from Demo/turtle/tdemo_nim.py
rename to Lib/turtledemo/nim.py
diff --git a/Demo/turtle/tdemo_paint.py b/Lib/turtledemo/paint.py
similarity index 100%
rename from Demo/turtle/tdemo_paint.py
rename to Lib/turtledemo/paint.py
diff --git a/Demo/turtle/tdemo_peace.py b/Lib/turtledemo/peace.py
similarity index 100%
rename from Demo/turtle/tdemo_peace.py
rename to Lib/turtledemo/peace.py
diff --git a/Demo/turtle/tdemo_penrose.py b/Lib/turtledemo/penrose.py
similarity index 100%
rename from Demo/turtle/tdemo_penrose.py
rename to Lib/turtledemo/penrose.py
diff --git a/Demo/turtle/tdemo_planet_and_moon.py b/Lib/turtledemo/planet_and_moon.py
similarity index 100%
rename from Demo/turtle/tdemo_planet_and_moon.py
rename to Lib/turtledemo/planet_and_moon.py
diff --git a/Demo/turtle/tdemo_round_dance.py b/Lib/turtledemo/round_dance.py
similarity index 100%
rename from Demo/turtle/tdemo_round_dance.py
rename to Lib/turtledemo/round_dance.py
diff --git a/Demo/turtle/tdemo_tree.py b/Lib/turtledemo/tree.py
similarity index 100%
rename from Demo/turtle/tdemo_tree.py
rename to Lib/turtledemo/tree.py
diff --git a/Demo/turtle/turtle.cfg b/Lib/turtledemo/turtle.cfg
similarity index 100%
rename from Demo/turtle/turtle.cfg
rename to Lib/turtledemo/turtle.cfg
diff --git a/Demo/turtle/turtledemo_two_canvases.py b/Lib/turtledemo/two_canvases.py
similarity index 92%
rename from Demo/turtle/turtledemo_two_canvases.py
rename to Lib/turtledemo/two_canvases.py
index d2d7188..02d89db 100644
--- a/Demo/turtle/turtledemo_two_canvases.py
+++ b/Lib/turtledemo/two_canvases.py
@@ -44,9 +44,9 @@
 
 ## Want to get some info?
 
-print(s1, s2)
-print(p, q)
-print(s1.turtles())
-print(s2.turtles())
+#print(s1, s2)
+#print(p, q)
+#print(s1.turtles())
+#print(s2.turtles())
 
 TK.mainloop()
diff --git a/Demo/turtle/tdemo_wikipedia.py b/Lib/turtledemo/wikipedia.py
similarity index 100%
rename from Demo/turtle/tdemo_wikipedia.py
rename to Lib/turtledemo/wikipedia.py
diff --git a/Demo/turtle/tdemo_yinyang.py b/Lib/turtledemo/yinyang.py
similarity index 100%
rename from Demo/turtle/tdemo_yinyang.py
rename to Lib/turtledemo/yinyang.py
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 475d272..ffa1cb0 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -893,6 +893,7 @@
 		importlib/test/extension importlib/test/frozen \
 		importlib/test/import_ importlib/test/source \
 		setuptools setuptools/command setuptools/tests setuptools.egg-info \
+		turtledemo \
 		multiprocessing multiprocessing/dummy \
 		unittest unittest/test \
 		curses pydoc_data $(MACHDEPS)
diff --git a/Misc/NEWS b/Misc/NEWS
index 5097b95..9cb2589 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -59,6 +59,9 @@
 Library
 -------
 
+- Issue #10199: New package, ``turtledemo`` now contains selected demo
+  scripts that were formerly found under Demo/turtle.
+
 - Issue #10265: Close file objects explicitly in sunau.  Patch by Brian Brazil.
 
 - Issue #10266: uu.decode didn't close in_file explicitly when it was given
