diff --git a/.gitattributes b/.gitattributes
index 15aee79198f31adaf1e1d103277a5443c6fe9ddd..1381bb908cdfabce89747065c97ae9c8cabad586 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -4,7 +4,8 @@
 /README.txt -text
 /SConscript -text
 /SConscript.ida -text
-/SConscript.irdb -text
+/SConscript.irdb_driver -text
+/SConscript.irdb_lib -text
 /SConstruct -text
 /SMP-analyze.sh -text
 /config.guess -text
@@ -43,6 +44,7 @@ include/interfaces/irdb/STARSOp.h -text
 include/interfaces/irdb/STARSProgram.h -text
 include/interfaces/irdb/STARSSSAInstruction.h -text
 include/interfaces/irdb/STARSSegment.h -text
+include/stars.h -text
 /install-sh -text
 lib/Makefile.in -text
 lib/idapro/Makefile.in -text
@@ -66,8 +68,8 @@ src/drivers/idapro/Makefile.in -text
 src/drivers/idapro/SMPStaticAnalyzer.cpp -text
 src/drivers/irdb/Makefile.in -text
 src/drivers/irdb/stars_driver.cpp -text
-src/drivers/irdb/stars_irdb.cpp -text
 src/drivers/irdb/stars_irdb.hpp -text
+src/drivers/library/stars_irdb.cpp -text
 src/interfaces/Makefile.in -text
 src/interfaces/abstract/Makefile.in -text
 src/interfaces/abstract/STARSInstruction.cpp -text
diff --git a/SConscript b/SConscript
index 739f8f4f4d1360fb0eb7aad79cd2c52c9b7c7bba..6113d35f29963e2ed22ab50f8b2d8b7b594b8cab 100644
--- a/SConscript
+++ b/SConscript
@@ -7,6 +7,7 @@ argenv.Replace(do_64bit_analysis=ARGUMENTS.get("do_64bit_analysis",1))
 argenv.Replace(do_64bit_build=ARGUMENTS.get("do_64bit_build",0))
 argenv.Replace(build_ida=ARGUMENTS.get("build_ida",1))
 argenv.Replace(build_irdb=ARGUMENTS.get("build_irdb",0))
+argenv.Replace(build_irdb_driver=ARGUMENTS.get("build_irdb_driver",0))
 argenv.Replace(install=ARGUMENTS.get("install",1))
 
 # environment options
@@ -44,8 +45,10 @@ Export('argenv', 'STARS_CCFLAGS')
 
 if int(argenv['build_ida']) == 1:
 	lib=SConscript('SConscript.ida', variant_dir='build_ida')
-if int(argenv['build_irdb']) == 1:
-	lib=SConscript('SConscript.irdb', variant_dir='build_irdb')
+if int(argenv['build_irdb']) == 1 or int(argenv['build_irdb_driver']) == 1:
+	lib=SConscript('SConscript.irdb_lib', variant_dir='build_irdb_lib')
+if int(argenv['build_irdb_driver']) == 1:
+	lib=SConscript('SConscript.irdb_driver', variant_dir='build_irdb_driver')
 
 Default(lib)
 
diff --git a/SConscript.irdb b/SConscript.irdb_driver
similarity index 77%
rename from SConscript.irdb
rename to SConscript.irdb_driver
index e97b48b72bce9f852643aa1e6729678205038f0c..ad8b3658cbd8510cf5978650fd59e6703ce6b2a1 100644
--- a/SConscript.irdb
+++ b/SConscript.irdb_driver
@@ -5,14 +5,10 @@ Import('argenv', 'STARS_CCFLAGS')
 
 
 
-dirs='''
-	src/base
-	src/interfaces
-	src/interfaces/abstract
-	src/interfaces/irdb
+driverdirs='''
 	src/drivers/irdb
-     '''
-dirs=Split(dirs)
+	'''
+driverdirs=Split(driverdirs)
 
 
 cpppath='''
@@ -32,7 +28,7 @@ IRDB_CCFLAGS=''' -std=c++0x  \
         '''+STARS_CCFLAGS+" "
 
 IRDB_LIBPATH="$SECURITY_TRANSFORMS_HOME/lib $SECURITY_TRANSFORMS_HOME/beaengine/lib/Linux.gnu.Debug "
-LIBS="IRDB-core IRDB-cfg pqxx BeaEngine_s_d MEDSannotation pq IRDB-util"
+LIBS="stars IRDB-core IRDB-cfg pqxx BeaEngine_s_d MEDSannotation pq IRDB-util"
 IRDB_LDFLAGS=" "
 
 
@@ -46,11 +42,9 @@ else:
 
 
 
-# find files
-#print 'dirs: ',dirs
-files=[]
-for dir in dirs:
-	files=files+Glob(os.path.join(dir,"*.cpp"))
+driverfiles=[]
+for dir in driverdirs:
+	driverfiles=driverfiles+Glob(os.path.join(dir,"*.cpp"))
 
 #setup the environment
 irdbenv=argenv.Clone(CCFLAGS=IRDB_CCFLAGS, LINKFLAGS=IRDB_LDFLAGS, CPPPATH=Split(cpppath));
@@ -64,8 +58,7 @@ env['build_tools']=0
 Export('env') 	# for security_transforms.
 SConscript(sectrans_sconscript, variant_dir='scons_build_irdb_libs')
 
-# build the program
-pgm=irdbenv.Program('SMPStaticAnalyzer.exe', files, LIBPATH=Split(IRDB_LIBPATH), LIBS=Split(LIBS))
+pgm=irdbenv.Program('SMPStaticAnalyzer.exe', driverfiles, LIBPATH=Split(IRDB_LIBPATH), LIBS=Split(LIBS))
 install=argenv.Install("$SECURITY_TRANSFORMS_HOME/plugins_install/", pgm)
 Default(install)
 
diff --git a/SConscript.irdb_lib b/SConscript.irdb_lib
new file mode 100644
index 0000000000000000000000000000000000000000..7a516952ad22e16c2575f3f05611283ce1935fb8
--- /dev/null
+++ b/SConscript.irdb_lib
@@ -0,0 +1,64 @@
+import os
+
+Import('argenv', 'STARS_CCFLAGS')
+
+
+
+
+libdirs='''
+	src/base
+	src/interfaces
+	src/interfaces/abstract
+	src/interfaces/irdb
+	src/drivers/library
+     '''
+libdirs=Split(libdirs)
+
+cpppath='''
+        $SMPSA_HOME/include   \
+        $SMPSA_HOME/include/base  \
+        $SMPSA_HOME/include/interfaces \
+        $SMPSA_HOME/include/interfaces/abstract \
+	$SECURITY_TRANSFORMS_HOME/include  \
+	$SECURITY_TRANSFORMS_HOME/beaengine/include  \
+	$SECURITY_TRANSFORMS_HOME/libIRDB/include/  \
+	$SECURITY_TRANSFORMS_HOME/libMEDSannotation/include/ \
+	'''
+
+IRDB_CCFLAGS=''' -std=c++0x  \
+        -w \
+        -DSTARS_IRDB_INTERFACE  \
+        '''+STARS_CCFLAGS+" "
+
+IRDB_LIBPATH="$SECURITY_TRANSFORMS_HOME/lib $SECURITY_TRANSFORMS_HOME/beaengine/lib/Linux.gnu.Debug "
+LIBS="IRDB-core IRDB-cfg pqxx BeaEngine_s_d MEDSannotation pq IRDB-util"
+IRDB_LDFLAGS=" "
+
+
+# set 32/64 bit build properly
+if int(argenv['do_64bit_build']) == 1:
+	IRDB_CCFLAGS+=" -m64 "
+	IRDB_LDFLAGS+=" -m64 "
+else:
+	IRDB_CCFLAGS+=" -m32 "
+	IRDB_LDFLAGS+=" -m32 "
+
+
+
+# find files
+#print 'dirs: ',dirs
+libfiles=[]
+for dir in libdirs:
+	libfiles=libfiles+Glob(os.path.join(dir,"*.cpp"))
+
+#setup the environment
+irdbenv=argenv.Clone(CCFLAGS=IRDB_CCFLAGS, LINKFLAGS=IRDB_LDFLAGS, CPPPATH=Split(cpppath));
+
+
+# build the program
+starslib=irdbenv.Library('stars', libfiles)
+install=argenv.Install("$SECURITY_TRANSFORMS_HOME/lib/", starslib)
+Default(install)
+
+
+Return('starslib')
diff --git a/include/stars.h b/include/stars.h
new file mode 100644
index 0000000000000000000000000000000000000000..09f780abc852cb63e7e4004f5b6957e4a1f69b6a
--- /dev/null
+++ b/include/stars.h
@@ -0,0 +1,34 @@
+
+#ifndef STARS_IRDB_Interface_h
+#define STARS_IRDB_Interface_h
+
+#include <stdlib.h>
+#include <fstream>
+#include <libIRDB-core.hpp>
+#include <libgen.h>
+#include <assert.h>
+
+
+namespace STARS
+{
+
+	class IRDB_Interface_t
+	{
+		public:
+			IRDB_Interface_t(libIRDB::pqxxDB_t &p_pqxx_interface)
+				: pqxx_interface(p_pqxx_interface)
+			{
+			};
+
+			// invoke stars on one file.
+			int do_STARS(libIRDB::FileIR_t* firp);
+
+		private:
+			libIRDB::pqxxDB_t &pqxx_interface;
+	};
+
+
+
+}
+
+#endif
diff --git a/src/base/SMPFunction.cpp b/src/base/SMPFunction.cpp
index b3824a2f70f1513c482d7a3b449f59df2bdc46a7..6a21dadf0282915d02fd68d7bb717a37d075affd 100644
--- a/src/base/SMPFunction.cpp
+++ b/src/base/SMPFunction.cpp
@@ -5698,7 +5698,7 @@ void SMPFunction::SetLinks(void) {
 						SMP_msg("INFO: Removing all nops block at %lx\n", (unsigned long) CurrBlock->GetFirstAddr());
 					else {
 						CurrBlock->SetUnreachableBlock(true);
-						SMP_msg("INFO: Removing unreachable block at %lx\n", (unsigned long) CurrBlock->GetFirstAddr());
+						SMP_msg("INFO: Function is Removing unreachable block at %llx\n", (unsigned long long) CurrBlock->GetFirstAddr());
 					}
 
 					this->RemoveBlock(CurrBlock, BlockIter);
diff --git a/src/drivers/irdb/stars_driver.cpp b/src/drivers/irdb/stars_driver.cpp
index cae2aa9ba4d61fcbac313c6abc8aef7c2dc0d5ca..a65314b177cc33d5975a8601db9a3de836b0a142 100644
--- a/src/drivers/irdb/stars_driver.cpp
+++ b/src/drivers/irdb/stars_driver.cpp
@@ -4,6 +4,7 @@
 #include <fstream>
 #include <libIRDB-core.hpp>
 #include <libgen.h>
+#include <stars.h>
 
 using namespace std;
 using namespace libIRDB;
@@ -68,8 +69,10 @@ int main(int argc, char **argv)
 
 			int success=true;
 
+			STARS::IRDB_Interface_t stars_analysis_engine(pqxx_interface);
+
 			// run stars
-			do_STARS(firp, pqxx_interface);
+			stars_analysis_engine.do_STARS(firp);
 
                         delete firp;
                 }
diff --git a/src/drivers/irdb/stars_irdb.cpp b/src/drivers/library/stars_irdb.cpp
similarity index 97%
rename from src/drivers/irdb/stars_irdb.cpp
rename to src/drivers/library/stars_irdb.cpp
index baea71d2b5bb00d903d848f932fd0c0151e15b5f..f527e25ee50fc4b6f05cc657f35360e5ff5f7e1f 100644
--- a/src/drivers/irdb/stars_irdb.cpp
+++ b/src/drivers/library/stars_irdb.cpp
@@ -5,6 +5,8 @@
 #include <libgen.h>
 #include <assert.h>
 
+#include <stars.h>
+
 using namespace std;
 using namespace libIRDB;
 
@@ -150,11 +152,11 @@ void OutputStatistics()
          SMP_fprintf(global_STARS_program->GetInfoAnnotFile(), "   8000000      2 SUCCESS ANALYSISCOMPLETED\n");
 }
 
-int do_STARS(FileIR_t* firp, pqxxDB_t &pqxx_interface)
+int STARS::IRDB_Interface_t::do_STARS(FileIR_t* firp)
 {
 	STARS_IRDB_Program_t* gsp=NULL;
 	global_stars_interface = new STARS_IRDB_Interface_t(firp, pqxx_interface);
-	global_STARS_program = gsp = new STARS_IRDB_Program_t(firp);
+ 	global_STARS_program = gsp = new STARS_IRDB_Program_t(firp);
 
 	//  this is initing the global_stars_program (GSP)