diff --git a/Lib/turtledemo/tdemo_lindenmayer_indian.py b/Lib/turtledemo/tdemo_lindenmayer_indian.py
deleted file mode 100644
index 3925f25..0000000
--- a/Lib/turtledemo/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()
