diff --git a/scripts/illumina/laydi-mapping-illumina b/scripts/illumina/laydi-mapping-illumina
new file mode 100755
index 0000000..211024e
--- /dev/null
+++ b/scripts/illumina/laydi-mapping-illumina
@@ -0,0 +1,93 @@
+#!/usr/bin/python
+
+import getopt
+import os, os.path
+import sys
+
+OUTPUT_COLS = ["Array_Address_Id", "Entrez_Gene_ID", "Accession", "ILMN_Gene", "Definition", ]
+
+def print_help(): 
+    print "laydi-mapping-illumina"
+    print
+    print "Usage: laydi-mapping-illumina <illumina-annotation-file.txt> <from_dim> <to_dim>"
+    print
+    print "Description:"
+    print "    Produce mapping files from Illumina text annotation files"
+    print "    Illumina files can be downloaded from:"
+    print "    http://www.switchtoi.com/annotationfiles.ilmn"
+    print
+    print "    NOTE: <from_dim> and <to_dim> are the column names in the illumina text file,"
+    print "    not laydi dimensions."
+    print
+
+
+def parse_cmdline():
+    short_opts = "h"
+    long_opts = ["help"]
+    options, params = getopt.getopt(sys.argv[1:], short_opts, long_opts)
+
+    for key, val in options:
+        if key in ["-h", "--help"]:
+            print_help()
+            sys.exit(0)
+    
+    if len(params) != 3:
+        print_help()
+        sys.exit(1)
+
+    return params
+
+
+def build_map(fn, from_dim, to_dim):
+    retval = {}
+    fd = open(fn)
+    line = fd.readline()
+    while line != "" and line.strip() != "[Probes]":
+        line = fd.readline()
+    if line == "":
+        return None
+
+    line = fd.readline()
+    cols = [x.strip() for x in line.split("\t")]
+    from_col = cols.index(from_dim)
+    to_col = cols.index(to_dim)
+
+    line = fd.readline()
+    while line != "" and not line.strip().startswith("["):
+        key = line.split("\t")[from_col]
+        val = line.split("\t")[to_col]
+        if not retval.has_key(key):
+            retval[key] = [val]
+        else:
+            retval[key].append(val)
+
+        line = fd.readline()
+
+    return retval
+
+
+def write_map(fd, d, from_dim, to_dim):
+    opened_here = False
+    if isinstance(fd, str):
+        fd = open(fd, "w")
+        opened_here = True
+
+    print >> fd, "# from: %s" % from_dim
+    print >> fd, "# to: %s" % to_dim
+    print >> fd, "# description: "
+    print >> fd
+
+    for k, v in d.items():
+        print >> fd, k,
+        for e in v:
+            print >> fd, e,
+        print >> fd
+    if opened_here:
+        fd.close()
+
+
+if __name__ == '__main__':
+    fn, from_dim, to_dim = parse_cmdline()
+    m = build_map(fn, from_dim, to_dim)
+    write_map(sys.stdout, m, from_dim, to_dim)
+