diff --git a/.gitattributes b/.gitattributes
index e1be89594c9a73ac4f5c10d49d524b4e85c1d86a..44299651b869558456c5bade015caa50bc4cab95 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -42,14 +42,15 @@ examples/memcpy.c -text
 examples/myhanoi.c -text
 examples/print_ptr.c -text
 examples/recover_example.c -text
+tools/db/drop_my_tables.sh -text
 tools/db/pdb.create.tbl -text
 tools/db/pdb.createprogram.tbl -text
 tools/db/pdb.drop.tbl -text
-tools/db/pdb_create_program_tables -text
-tools/db/pdb_info -text
-tools/db/pdb_register -text
-tools/db/pdb_setup -text
-tools/db/pdb_teardown -text
+tools/db/pdb_create_program_tables.sh -text
+tools/db/pdb_info.sh -text
+tools/db/pdb_register.sh -text
+tools/db/pdb_setup.sh -text
+tools/db/pdb_teardown.sh -text
 tools/do_concolic.sh -text
 tools/generate_exe.sh -text
 tools/generate_io_baseline.sh -text
diff --git a/examples/Makefile b/examples/Makefile
index 410262d9507c49c88fab5920ef442f9b009c914c..9d8cd4afbe9689f81b46c1ca9408b9779ec234fa 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -63,6 +63,7 @@ clean:
 	rm -Rf peasoup_executable_directory.*
 	rm -f strata.log.*
 	rm -f *.sym
+	if [ ! "X" = "X"${PGUSER} ]; then sh ../tools/db/drop_my_tables.sh; sh ../tools/db/pdb_setup.sh; fi
 
 concclean:
 	rm -Rf concolic.files_*
diff --git a/tools/db/drop_my_tables.sh b/tools/db/drop_my_tables.sh
new file mode 100755
index 0000000000000000000000000000000000000000..abd8299f2fb3d64299ebf279cc301c6530508660
--- /dev/null
+++ b/tools/db/drop_my_tables.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+psql << 'EOF'
+CREATE LANGUAGE plpgsql;
+CREATE OR REPLACE FUNCTION drop_tables(username IN VARCHAR) RETURNS void AS $$
+DECLARE
+    statements CURSOR FOR
+        SELECT tablename FROM pg_tables
+        WHERE tableowner = username;
+BEGIN
+    FOR stmt IN statements LOOP
+        EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(stmt.tablename) || ' CASCADE;';
+    END LOOP;
+END;
+$$
+LANGUAGE plpgsql;
+EOF
+
+psql -c "SELECT drop_tables('$PGUSER');"
diff --git a/tools/db/pdb.create.tbl b/tools/db/pdb.create.tbl
index 2260f6d2331dc078b49ccc17521e0b56aaf963e7..c8d5863155f9b3c560b13e27da350c7b0c8b730a 100644
--- a/tools/db/pdb.create.tbl
+++ b/tools/db/pdb.create.tbl
@@ -1,21 +1,41 @@
-CREATE TABLE program_info
+CREATE TABLE doip
 (
-  program_id       SERIAL PRIMARY KEY,       
-  name             text    NOT NULL CHECK (name <> ''),
-  orig_program_id  integer DEFAULT -1 
+	doip_id 	SERIAL PRIMARY KEY,
+	confidence 	integer,  
+	tool_name	text,
+	comment		text
+);
+
+
+CREATE TABLE variant_info
+(
+  schema_version_id 		integer DEFAULT 1,
+  variant_id       		SERIAL PRIMARY KEY,       
+  name             		text    NOT NULL CHECK (name <> ''),
+  orig_variant_id  		integer DEFAULT -1,
+  address_table_name 		text,
+  function_table_name 		text,
+  instruction_table_name 	text,
+  doip_id                   	integer DEFAULT -1
+
 );
 
 CREATE TABLE file_info
 (
   file_id          SERIAL PRIMARY KEY,
-  orig_file_id     integer DEFAULT -1,
   url              text NOT NULL CHECK (url <> ''),
   hash             text,
-  arch             text
+  arch             text,
+  type		   text DEFAULT 'ELF-Static',
+  doip_id          integer DEFAULT -1
+
 );
 
-CREATE TABLE program_dependency
+CREATE TABLE variant_dependency
 (
-  program_id       integer REFERENCES program_info,
-  file_id          integer REFERENCES file_info
+  variant_id       integer REFERENCES variant_info,
+  file_id          integer REFERENCES file_info,
+  doip_id          integer DEFAULT -1
+
 );
+
diff --git a/tools/db/pdb.createprogram.tbl b/tools/db/pdb.createprogram.tbl
index 60ac1e4ffefe87adba60207c9fa6fc60d1b8cf5e..0ebc5af83741d6ab3ccbc6b4a7041c7a4734ea8e 100644
--- a/tools/db/pdb.createprogram.tbl
+++ b/tools/db/pdb.createprogram.tbl
@@ -1,25 +1,30 @@
 CREATE TABLE #PROGNAME#_address
 (
-  address_id         SERIAL PRIMARY KEY,
-  file_id            integer REFERENCES file_info,
-  vaddress_offset    text
+  address_id         	SERIAL PRIMARY KEY,
+  file_id            	integer REFERENCES file_info,
+  vaddress_offset    	integer,
+  doip_id		integer DEFAULT -1
 );
 
 CREATE TABLE #PROGNAME#_function
 (
-  function_id        SERIAL PRIMARY KEY,
-  file_id            integer REFERENCES file_info,
-  name               text,
-  stack_frame_size   integer
+  function_id        	SERIAL PRIMARY KEY,
+  file_id            	integer REFERENCES file_info,
+  name               	text,
+  stack_frame_size   	integer,
+  doip_id	   	integer DEFAULT -1
 );
 
 CREATE TABLE #PROGNAME#_instruction
 (
+  instruction_id	    SERIAL PRIMARY KEY,
   address_id                integer REFERENCES #PROGNAME#_address,
-  parent_function_id        integer REFERENCES #PROGNAME#_function,
+  parent_function_id        integer,
   file_id                   integer REFERENCES file_info,
-  orig_address_id           integer REFERENCES #PROGNAME#_address,
-  fallthrough_address_id    integer REFERENCES #PROGNAME#_address,
-  target_address_id         integer REFERENCES #PROGNAME#_address,
-  data                      text
+  orig_address_id           integer,
+  fallthrough_address_id    integer,
+  target_address_id         integer,
+  data                      bytea,
+  comment                   text,
+  doip_id		    integer DEFAULT -1
 );
diff --git a/tools/db/pdb_create_program_tables b/tools/db/pdb_create_program_tables.sh
similarity index 54%
rename from tools/db/pdb_create_program_tables
rename to tools/db/pdb_create_program_tables.sh
index b4cc56b2f1ddfc8c4400adfd572a190c9f2e93e1..956efec29d0c68fc66c8df4adcc1d5c63e7ece8e 100755
--- a/tools/db/pdb_create_program_tables
+++ b/tools/db/pdb_create_program_tables.sh
@@ -1,3 +1,5 @@
+#!/bin/sh
+
 #
 # pdb_create_program_tables <programName>
 #
@@ -7,7 +9,9 @@ PROGRAM_NAME=$1
 
 DB_SCRIPT=$$.script.tmp
 
-cat pdb.createprogram.tbl | sed "s/#PROGNAME#/$PROGRAM_NAME/g" > $DB_SCRIPT
+PROGRAM_NAME=`echo $PROGRAM_NAME | sed "s/[\.;+\\-\ ]/_/g"`
+
+cat $PEASOUP_HOME/tools/db/pdb.createprogram.tbl | sed "s/#PROGNAME#/$PROGRAM_NAME/g" > $DB_SCRIPT
 
 psql -f $DB_SCRIPT
 
diff --git a/tools/db/pdb_info b/tools/db/pdb_info.sh
similarity index 54%
rename from tools/db/pdb_info
rename to tools/db/pdb_info.sh
index bad326780d9ff51a833c64e69be51bd7a669a4df..2762d2b5d1f47eb44a1dafc4f6d160fba4e32137 100755
--- a/tools/db/pdb_info
+++ b/tools/db/pdb_info.sh
@@ -1 +1,3 @@
+#!/bin/sh
+
 psql -c "\d"
diff --git a/tools/db/pdb_register b/tools/db/pdb_register.sh
similarity index 77%
rename from tools/db/pdb_register
rename to tools/db/pdb_register.sh
index df4704e9f12093ace64711324c37d0ebf9d32f65..23f25235b0db6e17530d0f1c58cf17a5592798eb 100755
--- a/tools/db/pdb_register
+++ b/tools/db/pdb_register.sh
@@ -1,3 +1,5 @@
+#!/bin/sh 
+
 #
 # pdb_register <peasoup_program_name> <peasoup_program_directory> 
 #
@@ -18,7 +20,7 @@ usage()
 log_error()
 {
   echo "pdb_register: ERROR: $1"
-  exit 1
+  exit -1
 }
 
 log_message()
@@ -51,21 +53,21 @@ fi
 MD5HASH=`md5sum $FILENAME | cut -f1 -d' '`
 
 #============================================
-# Update program_info table
+# Update variant_info table
 #============================================
 
 # -q: quiet mode
 # -t: tuple only
 # -c: run command
 
-PROGRAM_ID=`psql -q -t -c "INSERT INTO program_info (name) VALUES ('$PROGRAM_NAME') RETURNING program_id;" | sed "s/^[ \t]*//"`
+PROGRAM_ID=`psql -q -t -c "INSERT INTO variant_info (schema_version_id,name,address_table_name,function_table_name,instruction_table_name) VALUES ('1', '$PROGRAM_NAME', '${PROGRAM_NAME}_ADDRESS', '${PROGRAM_NAME}_function', '${PROGRAM_NAME}_instruction') RETURNING variant_id;" | sed "s/^[ \t]*//"`
 
 if [ ! $? -eq 0 ]; then
   log_error "Failed to register program"
 fi
 
 # Update original program id
-psql -q -t -c "UPDATE program_info SET orig_program_id = '$PROGRAM_ID' WHERE program_id = '$PROGRAM_ID';"
+psql -q -t -c "UPDATE variant_info SET orig_variant_id = '$PROGRAM_ID' WHERE variant_id = '$PROGRAM_ID';"
 
 #============================================
 # Update file_info table
@@ -73,12 +75,11 @@ psql -q -t -c "UPDATE program_info SET orig_program_id = '$PROGRAM_ID' WHERE pro
 
 FILE_ID=`psql -q -t -c "INSERT INTO file_info (url, arch, hash) VALUES ('$URL', '$ARCH', '$MD5HASH') RETURNING file_id;" | sed "s/^[ \t]*//"`
 
-# Update original file id
-psql -q -t -c "UPDATE file_info SET orig_file_id = '$FILE_ID' WHERE file_id = '$FILE_ID';"
-
 log_message "To do: if shared libs, then need to add them to this table"
 
 #============================================
 # Update program_dependency table
 #============================================
-FILE_ID=`psql -q -t -c "INSERT INTO program_dependency (program_id, file_id) VALUES ('$PROGRAM_ID', '$FILE_ID')"`
+FILE_ID=`psql -q -t -c "INSERT INTO variant_dependency (variant_id, file_id) VALUES ('$PROGRAM_ID', '$FILE_ID')"`
+
+exit $PROGRAM_ID
diff --git a/tools/db/pdb_setup b/tools/db/pdb_setup
deleted file mode 100755
index f0b03379d859df9968f512857a58a7be9fe986ae..0000000000000000000000000000000000000000
--- a/tools/db/pdb_setup
+++ /dev/null
@@ -1 +0,0 @@
-psql -f pdb.create.tbl
diff --git a/tools/db/pdb_setup.sh b/tools/db/pdb_setup.sh
new file mode 100755
index 0000000000000000000000000000000000000000..7d489a04658a83b8ee3762e469f9931309ec6563
--- /dev/null
+++ b/tools/db/pdb_setup.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+psql -f $PEASOUP_HOME/tools/db/pdb.create.tbl
diff --git a/tools/db/pdb_teardown b/tools/db/pdb_teardown
deleted file mode 100755
index 415274aa95c2b0d29be975546727e029f057e94e..0000000000000000000000000000000000000000
--- a/tools/db/pdb_teardown
+++ /dev/null
@@ -1 +0,0 @@
-psql -f pdb.drop.tbl
diff --git a/tools/db/pdb_teardown.sh b/tools/db/pdb_teardown.sh
new file mode 100755
index 0000000000000000000000000000000000000000..4c48331df85cce345f5003370c809da6eaadf4d0
--- /dev/null
+++ b/tools/db/pdb_teardown.sh
@@ -0,0 +1,3 @@
+#!/bin/sh 
+
+psql -f $PEASOUP_HOME/tools/db/pdb.drop.tbl
diff --git a/tools/ps_analyze.sh b/tools/ps_analyze.sh
index e5a738f7125068f0d6cfe7aab1d6577e3a3cca63..250ab5bafd652b21b3360c1fb434c5ef554e84e5 100755
--- a/tools/ps_analyze.sh
+++ b/tools/ps_analyze.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/sh -x
 # This script depends on having the following environment variables defined
 # STRATA - The path to the strata installation
 # An example of these environment variables and their settings are listed in
@@ -71,6 +71,49 @@ echo Running IDA Pro static analysis phase ...
 $SMPSA_HOME/SMP-analyze.sh a.ncexe
 echo Done.
 
+
+#
+# Populate IR Database
+#
+if [ ! "X" = "X"$PGUSER ]; then
+	echo "Registering with IR database: program: $orig_exe server:$PGHOST db:$PGDATABASE"
+	
+	DB_PROGRAM_NAME=`echo $orig_exe.$$ | sed "s/[\.;+\\-\ ]/_/g"`
+	
+	MD5HASH=`md5sum a.ncexe | cut -f1 -d' '`
+	$PEASOUP_HOME/tools/db/pdb_register.sh $DB_PROGRAM_NAME $current_dir	# register the program.
+	varid=$?
+	
+	$PEASOUP_HOME/tools/db/pdb_create_program_tables.sh $DB_PROGRAM_NAME # create the tables for the program.
+	
+	echo "RUNNING MEDS2PDB:"
+	date
+	time $SECURITY_TRANSFORMS_HOME/tools/meds2pdb/meds2pdb $DB_PROGRAM_NAME a.ncexe $MD5HASH a.ncexe.annot 	# import meds information
+	date
+
+	if [ $varid > 0 ]; then
+		$SECURITY_TRANSFORMS_HOME/libIRDB/test/clone.exe $varid		# create a clone
+		cloneid=$?
+	
+		if [ $cloneid > 0 ]; then
+			$SECURITY_TRANSFORMS_HOME/libIRDB/test/fill_in_cfg.exe $cloneid		# finish the initial IR 
+			$SECURITY_TRANSFORMS_HOME/libIRDB/test/fix_calls.exe $cloneid		# fix call insns so they are OK for spri emitting
+			$SECURITY_TRANSFORMS_HOME/libIRDB/test/ilr.exe $cloneid			# perform ILR 
+			$SECURITY_TRANSFORMS_HOME/libIRDB/test/generate_spri.exe $cloneid a.ncexe.aspri	# generate the spri code
+		fi
+	fi
+	echo	-------------------------------------------------------------------------------
+	echo    ---------            Orig Variant ID is $varid         ------------------------
+	echo	-------------------------------------------------------------------------------
+	echo    ---------            Cloned Variant ID is $cloneid     ------------------------
+	echo	-------------------------------------------------------------------------------
+
+fi
+
+
+#
+# Run concolic engine
+#
 echo Running concolic testing to generate inputs ...
 #$PEASOUP_HOME/tools/do_concolic.sh a  --iterations 25 --logging tracer,instance_times,trace
 $PEASOUP_HOME/tools/do_concolic.sh a  --iterations 25 --logging tracer,trace,inputs 
@@ -86,7 +129,6 @@ echo Done.
 #-----------------------------------------
 # Start P1 transform 
 #-----------------------------------------
-#
 #echo Starting the P1 transform
 #date
 #$PEASOUP_HOME/tools/p1xform.sh $newdir > p1xform.out 2> p1xform.err