diff --git a/doc/manual/tutorial b/doc/manual/tutorial
new file mode 100644
index 0000000000000000000000000000000000000000..0a5014d71862fedef678abeb2f90c911de592ce5
--- /dev/null
+++ b/doc/manual/tutorial
@@ -0,0 +1,149 @@
+Contents
+
+BEGIN(What is uLPC)
+{
+  BEGIN(Introduction)
+  {
+    uLPC (Micro L.P.C., sometimes written ulpc or uLPC) is an interpreted,
+    object-oriented programming language for flexible and yet efficient
+    application development and prototyping. It features multiple
+    inheritance, data abstraction, advanced built-in datatypes, such as
+    associative arrays, dynamic arrays and multi-sets, and high-level
+    character string and array operations.
+  }
+
+  BEGIN(uLPC vs. C and C++)
+  {
+    uLPC syntax is very similar to C. Some things has also been borrowed
+    from C++. The certainly biggest differance is that uLPC is interpreted.
+    This gives uLPC some advantages, but also some disadvantages compared
+    to C:
+
+    LIST(Advantages:)
+    {
+      No compilation times
+      Powerful data types
+    }
+  }
+
+  BEGIN(Data types)
+  BEGIN(Object orientation)
+}
+
+BEGIN(Getting started)
+{
+  BEGIN(A short example)
+  {
+    LPC
+    {
+      #!/usr/local/bin/ulpc
+
+      int main()
+      {
+        write("hello world\n");
+      }
+    }
+
+
+    Assume this file is called 'hello_world.lpc', then this might be seen
+    at your unix prompt:
+
+    PRE
+    {
+      $ ./hello_world.lpc
+      hello world
+      $ 
+    }
+  }
+
+  BEGIN(Line by line)
+  {
+    The first line is a unix-trick which causes /usr/local/bin/ulpc to run
+    the hello world program for you when you type it's name at the unix
+    prompt.
+
+    
+  }
+
+  BEGIN(variables)
+  BEGIN(loops)
+}
+
+BEGIN(Program structure)
+{
+  BEGIN(functions)
+  BEGIN(Loops)
+  {
+    BEGIN(while)
+    BEGIN(for)
+    BEGIN(do-while)
+    BEGIN(foreach)
+  }
+  BEGIN(Skips and Jumps)
+  {
+    BEGIN(if)
+    BEGIN(switch)
+    BEGIN(continue)
+    BEGIN(break)
+  }
+}
+
+BEGIN(objects and programs)
+{
+  BEGIN(variable spaces)
+
+  BEGIN(inheritance)
+  {
+    BEGIN(multiple inheritance)
+  }
+}
+
+
+BEGIN(data types)
+{
+  BEGIN(int)
+  {
+    Ints, or <integers> are simple whole numbers 0, 1, 2 ... They are fast
+    and used for all arethmics where fractions of numbers aren't needed.
+  }
+  BEGIN(float)
+  {
+    Floats can be used to represent any number, not just whole numbers.
+    Floats are slower than integers and can not be used where a whole
+    number is expected. (When indexing an array for instance.) Floats
+    are commonly used for mathematical calulations such as averages and
+    trigonometrics.
+  }
+  BEGIN(string)
+  {
+    Strings hold text, or more precicely; sequences of 8-bit characters.
+    Strings can be manipulated in many ways, the simples of which is
+    <indexing>; picking out the ascii value of one of the characters in
+    the string.
+  }
+  BEGIN(array)
+  {
+    Arrays simply hold values.
+  }
+  BEGIN(mapping)
+  {
+    Mappings, or associative arrays, work similar to arrays, but can be
+    indexed on any type of value, not just integers.
+  }
+  BEGIN(list)
+  {
+    A list is essentially what mathematicians call a 'set'. It is a bunch
+    of values without any particular order. Arrays could replace lists
+    in all respects but one: lists are much faster.
+  }
+  BEGIN(object)
+  {
+    Objects hold data.
+  }
+  BEGIN(program)
+  {
+    Programs are the templates for objects.
+  }
+}
+
+