diff --git a/src/API/PythonAPI.cpp b/src/API/PythonAPI.cpp
index 90ee59c..ee445f7 100644
--- a/src/API/PythonAPI.cpp
+++ b/src/API/PythonAPI.cpp
@@ -67,6 +67,8 @@
 
 bool PythonAPI::m_strictMode = false;
 
+std::string PythonAPI::m_builtinPath;
+
 PythonAPI::PythonAPI() {}
 
 PythonAPI::PythonAPI(const PythonAPI& orig) {}
@@ -149,24 +151,19 @@
 
   std::string waivers = m_programPath + "/python/slwaivers.py";
   bool waiverLoaded = loadScript_(waivers);
-
-  const char* home = getenv("HOME");
-  if (home) {
-    waivers = std::string(home) + "/slwaivers.py";
-    waiverLoaded = loadScript_(waivers) || waiverLoaded;
-  }
-
+  waivers =  "/usr/lib/surelog/slwaivers.py";
+  waiverLoaded = loadScript_(waivers) || waiverLoaded;
+  waivers =  "/usr/local/lib/surelog/slwaivers.py";
+  waiverLoaded = loadScript_(waivers) || waiverLoaded;
   waivers = "./slwaivers.py";
   waiverLoaded = loadScript_(waivers) || waiverLoaded;
 
   std::string format = m_programPath + "/python/slformatmsg.py";
   bool messageFormatLoaded = loadScript_(format);
-
-  if (home) {
-    format = std::string(home) + "/slformatmsg.py";
-    messageFormatLoaded = loadScript_(format) || messageFormatLoaded;
-  }
-
+  format = "/usr/lib/surelog/slformatmsg.py";
+  messageFormatLoaded = loadScript_(format) || messageFormatLoaded;
+  format = "/usr/local/lib/surelog/slformatmsg.py";
+  messageFormatLoaded = loadScript_(format) || messageFormatLoaded;
   format = "./slformatmsg.py";
   messageFormatLoaded = loadScript_(format) || messageFormatLoaded;
 
@@ -182,22 +179,28 @@
     if (FileUtils::fileExists(listener)) m_listenerScript = listener;
     m_listenerLoaded = loadScript_(listener);
 
-    if (home) {
-      listener = std::string(home) + "/slSV3_1aPythonListener.py";
-      if (FileUtils::fileExists(listener)) m_listenerScript = listener;
-      m_listenerLoaded = loadScript_(listener) || m_listenerLoaded;
-    }
-
+    listener = "/usr/lib/surelog/slSV3_1aPythonListener.py";
+    if (FileUtils::fileExists(listener)) m_listenerScript = listener;
+    m_listenerLoaded = loadScript_(listener) || m_listenerLoaded;
+    listener = "/usr/local/lib/surelog/slSV3_1aPythonListener.py";
+    if (FileUtils::fileExists(listener)) m_listenerScript = listener;
+    m_listenerLoaded = loadScript_(listener) || m_listenerLoaded;
     listener = "./slSV3_1aPythonListener.py";
     if (FileUtils::fileExists(listener)) m_listenerScript = listener;
     m_listenerLoaded = loadScript_(listener) || m_listenerLoaded;
   }
 }
 
-void PythonAPI::init(const char** argv) {
+void PythonAPI::init(int argc, const char** argv) {
   m_programPath = argv[0];
   m_programPath = StringUtils::rtrim(m_programPath, '/');
-
+  for (int i = 1; i < argc; i++) {
+      if (!strcmp(argv[i], "-builtin")) {
+          if (i < argc - 1) {
+            m_builtinPath = argv[i + 1];
+          }
+      } 
+  }
   Py_SetProgramName((wchar_t*)argv[0]); /* optional but recommended */
 
   PyImport_AppendInittab("slapi", &PyInit_slapi);
diff --git a/src/API/PythonAPI.h b/src/API/PythonAPI.h
index 74ac368..236513a 100644
--- a/src/API/PythonAPI.h
+++ b/src/API/PythonAPI.h
@@ -37,7 +37,7 @@
   PythonAPI(const PythonAPI& orig);
   virtual ~PythonAPI();
   /* Main interpreter (in main thread) */
-  static void init(const char** argv);
+  static void init(int argc, const char** argv);
   static void shutdown();
   static PyThreadState* getMainInterp() { return m_mainThreadState; }
 
@@ -71,6 +71,7 @@
   static bool m_listenerLoaded;
   static std::string m_listenerScript;
   static bool m_strictMode;
+  static std::string m_builtinPath;
 };
 
 };  // namespace SURELOG
diff --git a/src/CommandLine/CommandLineParser.cpp b/src/CommandLine/CommandLineParser.cpp
index b5f57d5..9b7e855 100644
--- a/src/CommandLine/CommandLineParser.cpp
+++ b/src/CommandLine/CommandLineParser.cpp
@@ -145,7 +145,8 @@
     "  -noinfo               Filters out INFO messages",
     "  -nonote               Filters out NOTE messages",
     "  -nowarning            Filters out WARNING messages",
-    "  -o <path>             Turns on all compilation stages, produces all "
+    "  -o <path>             Turns on all compilation stages, produces all ",
+    "  -builtin <path>       Alternative path to builtin.sv, python/ and pkg/ dirs",        
     "outputs under that path",
     "  --help               This help",
     "  --version            Surelog version"
@@ -354,13 +355,33 @@
   std::string exe_name = argv[0];
   std::string exe_path = FileUtils::getPathName(exe_name);
   m_precompiledDirId = m_symbolTable->registerSymbol(exe_path + "pkg/");
+  if (!FileUtils::fileExists(exe_path + "pkg/")) {
+    if (FileUtils::fileExists("/usr/lib/surelog/pkg/")) {
+      m_precompiledDirId = m_symbolTable->registerSymbol("/usr/lib/surelog/pkg/");   
+    }
+  if (FileUtils::fileExists("/usr/local/lib/surelog/pkg/")) {
+      m_precompiledDirId = m_symbolTable->registerSymbol("/usr/local/lib/surelog/pkg/");   
+    }
+  }
+  
   std::string built_in_verilog = exe_path + "/sv/builtin.sv";
+  if (!FileUtils::fileExists(built_in_verilog)) {
+    built_in_verilog = "/usr/lib/surelog/sv/builtin.sv";
+    if (!FileUtils::fileExists("/usr/lib/surelog/sv/builtin.sv")) {
+      built_in_verilog = "/usr/local/lib/surelog/sv/builtin.sv";   
+    }
+  }
+  
   std::vector<std::string> all_arguments;
   std::vector<std::string> cmd_line;
   for (int i = 1; i < argc; i++) {
     cmd_line.push_back(argv[i]);
-
-      if (!strcmp (argv[i], "-l"))
+      if (!strcmp(argv[i], "-builtin")) {
+          if (i < argc - 1) {
+            m_builtinPath = argv[i + 1];
+            built_in_verilog = m_builtinPath + "/builtin.sv";
+          }
+      } else if (!strcmp (argv[i], "-l"))
         {
           if (i < argc - 1)
             {
diff --git a/src/CommandLine/CommandLineParser.hpp b/src/CommandLine/CommandLineParser.hpp
index 7121567..7ebe7bd 100644
--- a/src/CommandLine/CommandLineParser.hpp
+++ b/src/CommandLine/CommandLineParser.hpp
@@ -122,7 +122,7 @@
   bool createCache() { return m_createCache; }
   const std::string currentDateTime();
   bool parseBuiltIn();
-
+  std::string getBuiltInPath() { return m_builtinPath; }
  private:
   bool plus_arguments_(const std::string& s);
   void processArgs_(std::vector<std::string>& args,
@@ -199,6 +199,7 @@
   bool m_parseBuiltIn;
   bool m_ppOutputFileLocation;
   bool m_logFileSpecified;
+  std::string m_builtinPath;
 };
 
 };  // namespace SURELOG
diff --git a/src/main.cpp b/src/main.cpp
index 7856bf7..d9efe97 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -106,7 +106,7 @@
     }
   
   if (python_mode)
-    SURELOG::PythonAPI::init(argv);
+    SURELOG::PythonAPI::init(argc, argv);
   
   if (diff_comp_mode == true)
     {
