diff --git a/README.md b/README.md
index b5b46631df1c3dd1c07806ae8c74b25b03475475..c06f9e7c7dcb740440abe5d1e935795d4a2827e0 100644
--- a/README.md
+++ b/README.md
@@ -1,28 +1,80 @@
-To run the SQLP parser, run `make` then run `./SQLPParser`. An example of a test input is `select s.name from student s where s.name = "John" and s.num = 10;`. Currently a syntax error will be reported when the semi-colon is read, but the parse tree that is outputted is correct.
+Overview
 
-The grammar is located in `SQLPGrammar.y`, and non-keyword types (such as `INTEGER`, `IDENTIFIER`, `STRING`) are defined in `SQLPScanner.l`. `util.c` contains the functions needed to build the con cell structure.
+The usual way of defining a thread behavior in cases where performance is
+critical is in terms of a collection of n+1 files containing code in the C
+programming language. In particular, there are n "module" files with a ".c"
+suffix that contain the bodies of C functions and procedures, and one additional
+shared file with a ".h" suffix that contains definitions of C global variables
+and types that are used by each of the module files. Roseseed is a system that
+makes it possible to define performance critical thread behaviors in another
+way. First, the ".h" file is replaced with a relational database schema that
+abstracts all data relevant to the thread behavior. This now includes all local
+heap-memory data with the low level interface defined by the ".h" file. And
+second, each of the ".c" module files is replaced with a ".sql" version in which
+all data manipulation in the bodies of C functions and procedures is re-coded by
+using a variant of the static embedded SQL protocol.
 
-For parsing any general string into a tree of `cons_cells`, run `make` then run `./Parser`. An example of a test input is `PROJ (AS (SPCOL (VAR (s) PF (ATTR (name)))) ATOM (TABLE (student) VAR (s)))`. Every clause encosed in brackets is nested within a child `cons_cell`, and any two adjacent terms are connected via the `next` pointer.
+Roseseed is itself a collection of performance critical thread behavior
+definitions that we call atomic tools.  Thus, each atomic tool comprising
+Roseseed will ultimately be coded in this fashion and serve as part of the
+benchmark for evaluating Roseseed. (Of course, this raises the issue of how one
+bootstraps the initial Roseseed implementation; more on this below.)
+
+
+SQLPtoSQL
+
+Here, we introduce the abstract relational model (ARM) and its SQLP interface.
+The former is a simple extension to the relational model (RM) and the latter
+is a simple extension to SQL that admits attribute paths as a shorthand for a
+sequence of unary foreign key joins.
+
+The first atomic tool comprising Roseseed, called SQLPtoSQL, translates SQLP
+queries over a given ARM schema S to an equivalent formulation in SQL over a
+corresponding RM schema T. The correspondence between S and T is defined by a
+so-called referring expression type assignment (RET) for each table defined in
+S. (More on this below.)
+
+(outline for the bootstraping coding of SQLPtoSQL)
+
+We have started to implement a bootstraping version of SQPtoSQP that uses
+Flex and Bison to accomplish all token scanning and parsing for SQLP.
+
+To run the SQLP parser, run `make` then run `./SQLPParser`. An example of a
+test input is
+
+`select s.name from student s where s.name = "John" and s.num = 10;`.
+
+Currently a syntax error will be reported when the semi-colon is read, but the
+parse tree that is output is correct.
+
+The grammar is located in `SQLPGrammar.y`, and non-keyword types (such as
+`INTEGER`, `IDENTIFIER`, `STRING`) are defined in `SQLPScanner.l`. `util.c`
+contains the functions needed to build the con cell structure.
+
+For parsing any general string into a tree of `cons_cells`, run `make` then run
+`./Parser`. An example of a test input is
+
+`PROJ (AS (SPCOL (VAR (s) PF (ATTR (name)))) ATOM (TABLE (student) VAR (s)))`.
+
+Every clause encosed in brackets is nested within a child `cons_cell`, and any
+two adjacent terms are connected via the `next` pointer.
 
 NOTE OF THINGS TO BE CHANGED/CAREFUL ABOUT:
-In `SQLPGrammar.y` currently we reuse `create_rename_operator` in `select_list` section, however this needs to be changed in the future as this is incorrect. Instead this should be used when we rename what is selected, for example `select s.t as st ...` should become something like `PROJ (RENAME (s.t (st)) ...`. Currently we don't support this type of query with `as` in it even though it's valid.
-
-Also the Makefile only has 2 commands, `make` and `make clean`. `make` will create both the SQLPParser and Parser programs to do what was described above. Maybe this should be changed in the future to be separate but we'll leave that discussion for the future.
-
-A common way of defining the behavior of a process or thread in cases where
-performance is critical is in terms of a collection of n+1 files containing
-code in the C programming language: n "module" files with a ".c" suffix that
-contain the bodies of C functions and procedures, and one additional shared file
-with a ".h" suffix that contains definitions of C global variables and types
-that are used by each of the module files. LDI, short for "logical data
-integration", is a collection of tools that make it possible to define this
-behavior in another way. First, the ".h" file is replaced with a relational
-database schema that abstracts all data relevant to the process or threads. This
-includes all local heap-memory data with the low level interface defined by the
-".h" file. And second, each of the ".c" module files is replaced with a ".sql"
-version in which all data manipulation in the bodies of C functions and
-procedures is re-coded by using a variant of the static embedded SQL protocol.
-
-Note that each of the tools comprising the LDI system define the behavior of
-such a process or thread, and are therefore also coded in this manner. Thus, the
-tools themselves are benchmarks for their own evaluation.
+
+In `SQLPGrammar.y` currently we reuse `create_rename_operator` in `select_list`
+section, however this needs to be changed in the future as this is incorrect.
+Instead this should be used when we rename what is selected, for example
+
+`select s.t as st ...`
+
+should become something like
+
+`PROJ (RENAME (s.t (st)) ...`.
+
+Currently we don't support this type of query with `as` in it even though it's
+valid.
+
+Also the Makefile only has two commands, `make` and `make clean`. `make` will
+create both the SQLPParser and Parser programs to do what was described above.
+Maybe this should be changed in the future to be separate but we'll leave that
+discussion for the future.
\ No newline at end of file