diff --git a/Makefile.rules b/Makefile.rules
index 808e2b5..88fa992 100644
--- a/Makefile.rules
+++ b/Makefile.rules
@@ -206,11 +206,6 @@
   OPTIMIZE_OPTION := -O2
 endif
 
-# IF REQUIRES_EH=1 is specified then don't disable exceptions
-#ifndef REQUIRES_EH
-#  CXX.Flags += -fno-exceptions
-#endif
-
 ifdef ENABLE_PROFILING
   BuildMode := Profile
   CXX.Flags := $(OPTIMIZE_OPTION) -pg -g
@@ -243,6 +238,11 @@
   endif
 endif
 
+# IF REQUIRES_EH=1 is specified then don't disable exceptions
+#ifndef REQUIRES_EH
+#  CXX.Flags += -fno-exceptions
+#endif
+
 # If DISABLE_ASSERTIONS=1 is specified (make command line or configured),
 # then disable assertions by defining the appropriate preprocessor symbols.
 ifdef DISABLE_ASSERTIONS
diff --git a/include/llvm/System/DynamicLibrary.h b/include/llvm/System/DynamicLibrary.h
index fc1bfbe..5499f9d 100644
--- a/include/llvm/System/DynamicLibrary.h
+++ b/include/llvm/System/DynamicLibrary.h
@@ -45,12 +45,6 @@
       /// @brief Open program as dynamic library.
       DynamicLibrary();
 
-      /// This is the constructor for DynamicLibrary instances. It will open
-      /// the dynamic library specified by the filename Path.
-      /// @throws std::string indicating why the library couldn't be opened.
-      /// @brief Open a dynamic library.
-      DynamicLibrary(const char* filename);
-
       /// After destruction, the symbols of the library will no longer be
       /// available to the program. It is important to make sure the lifespan
       /// of a DynamicLibrary exceeds the lifetime of the pointers returned
diff --git a/lib/Archive/Makefile b/lib/Archive/Makefile
index 39712b5..0ecf38b 100644
--- a/lib/Archive/Makefile
+++ b/lib/Archive/Makefile
@@ -9,7 +9,6 @@
 
 LEVEL = ../../..
 LIBRARYNAME = LLVMArchive
-REQUIRES_EH := 1
 
 # We only want an archive so only those modules actually used by a tool are 
 # included.
diff --git a/lib/Bytecode/Archive/Makefile b/lib/Bytecode/Archive/Makefile
index 39712b5..0ecf38b 100644
--- a/lib/Bytecode/Archive/Makefile
+++ b/lib/Bytecode/Archive/Makefile
@@ -9,7 +9,6 @@
 
 LEVEL = ../../..
 LIBRARYNAME = LLVMArchive
-REQUIRES_EH := 1
 
 # We only want an archive so only those modules actually used by a tool are 
 # included.
diff --git a/lib/Bytecode/Reader/Makefile b/lib/Bytecode/Reader/Makefile
index 989eba7..a86d008 100644
--- a/lib/Bytecode/Reader/Makefile
+++ b/lib/Bytecode/Reader/Makefile
@@ -9,7 +9,6 @@
 LEVEL = ../../..
 LIBRARYNAME = LLVMBCReader
 BUILD_ARCHIVE = 1
-REQUIRES_EH := 1
 
 include $(LEVEL)/Makefile.common
 
diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp
index 4a0685b..7b42fee 100644
--- a/lib/Bytecode/Reader/Reader.cpp
+++ b/lib/Bytecode/Reader/Reader.cpp
@@ -1943,14 +1943,18 @@
 /// ParseAllFunctionBodies.
 /// @see ParseAllFunctionBodies
 /// @see ParseBytecode
-void BytecodeReader::ParseFunction(Function* Func) {
+bool BytecodeReader::ParseFunction(Function* Func, std::string* ErrMsg) {
+
+  if (setjmp(context))
+    return true;
+
   // Find {start, end} pointers and slot in the map. If not there, we're done.
   LazyFunctionMap::iterator Fi = LazyFunctionLoadMap.find(Func);
 
   // Make sure we found it
   if (Fi == LazyFunctionLoadMap.end()) {
     error("Unrecognized function of type " + Func->getType()->getDescription());
-    return;
+    return true;
   }
 
   BlockStart = At = Fi->second.Buf;
@@ -1960,6 +1964,7 @@
   LazyFunctionLoadMap.erase(Fi);
 
   this->ParseFunctionBody(Func);
+  return false;
 }
 
 /// The ParseAllFunctionBodies method parses through all the previously
@@ -1969,7 +1974,10 @@
 /// the function definitions are located. This function uses that information
 /// to materialize the functions.
 /// @see ParseBytecode
-void BytecodeReader::ParseAllFunctionBodies() {
+bool BytecodeReader::ParseAllFunctionBodies(std::string* ErrMsg) {
+  if (setjmp(context))
+    return true;
+
   LazyFunctionMap::iterator Fi = LazyFunctionLoadMap.begin();
   LazyFunctionMap::iterator Fe = LazyFunctionLoadMap.end();
 
@@ -1981,7 +1989,7 @@
     ++Fi;
   }
   LazyFunctionLoadMap.clear();
-
+  return false;
 }
 
 /// Parse the global type list
diff --git a/lib/Bytecode/Reader/Reader.h b/lib/Bytecode/Reader/Reader.h
index 37dd1d7..711dc89 100644
--- a/lib/Bytecode/Reader/Reader.h
+++ b/lib/Bytecode/Reader/Reader.h
@@ -147,26 +147,21 @@
   );
 
   /// @brief Parse all function bodies
-  void ParseAllFunctionBodies();
+  bool ParseAllFunctionBodies(std::string* ErrMsg);
 
   /// @brief Parse the next function of specific type
-  void ParseFunction(Function* Func) ;
+  bool ParseFunction(Function* Func, std::string* ErrMsg) ;
 
   /// This method is abstract in the parent ModuleProvider class. Its
   /// implementation is identical to the ParseFunction method.
   /// @see ParseFunction
   /// @brief Make a specific function materialize.
-  virtual bool materializeFunction(Function *F, std::string *ErrInfo = 0) {
+  virtual bool materializeFunction(Function *F, std::string *ErrMsg = 0) {
     LazyFunctionMap::iterator Fi = LazyFunctionLoadMap.find(F);
-    if (Fi == LazyFunctionLoadMap.end()) return false;
-    try {
-      ParseFunction(F);
-    } catch (std::string &ErrStr) {
-      if (ErrInfo) *ErrInfo = ErrStr;
+    if (Fi == LazyFunctionLoadMap.end()) 
+      return false;
+    if (ParseFunction(F,ErrMsg))
       return true;
-    } catch (...) {
-      return true;
-    }
     return false;
   }
 
@@ -174,15 +169,9 @@
   /// implementation is identical to ParseAllFunctionBodies.
   /// @see ParseAllFunctionBodies
   /// @brief Make the whole module materialize
-  virtual Module* materializeModule(std::string *ErrInfo = 0) {
-    try {
-      ParseAllFunctionBodies();
-    } catch (std::string &ErrStr) {
-      if (ErrInfo) *ErrInfo = ErrStr;
+  virtual Module* materializeModule(std::string *ErrMsg = 0) {
+    if (ParseAllFunctionBodies(ErrMsg))
       return 0;
-    } catch (...) {
-      return 0;
-    }
     return TheModule;
   }
 
diff --git a/lib/System/DynamicLibrary.cpp b/lib/System/DynamicLibrary.cpp
index 859092a..08b7a88 100644
--- a/lib/System/DynamicLibrary.cpp
+++ b/lib/System/DynamicLibrary.cpp
@@ -45,12 +45,10 @@
 //===          independent code.
 //===----------------------------------------------------------------------===//
 
-static bool did_initialize_ltdl = false;
-
 static inline void check_ltdl_initialization() {
+  static bool did_initialize_ltdl = false;
   if (!did_initialize_ltdl) {
-    if (0 != lt_dlinit())
-      throw std::string(lt_dlerror());
+    assert(0 == lt_dlinit() || "Can't init the ltdl library");
     did_initialize_ltdl = true;
   }
 }
@@ -62,13 +60,13 @@
 
   lt_dlhandle a_handle = lt_dlopen(0);
 
-  if (a_handle == 0)
-    throw std::string("Can't open program as dynamic library");
+  assert(a_handle == 0 || "Can't open program as dynamic library");
 
   handle = a_handle;
   OpenedHandles.push_back(a_handle);
 }
 
+/*
 DynamicLibrary::DynamicLibrary(const char*filename) : handle(0) {
   check_ltdl_initialization();
 
@@ -83,6 +81,7 @@
   handle = a_handle;
   OpenedHandles.push_back(a_handle);
 }
+*/
 
 DynamicLibrary::~DynamicLibrary() {
   lt_dlhandle a_handle = (lt_dlhandle) handle;
diff --git a/lib/System/README.txt b/lib/System/README.txt
index 63e00da..eacb200 100644
--- a/lib/System/README.txt
+++ b/lib/System/README.txt
@@ -25,8 +25,8 @@
  3. No exposed system-specific functions.
  4. No exposed system-specific data.
  5. Data in lib/System classes must use only simple C++ intrinsic types.
- 6. Errors are handled by throwing std::string *only*.
- 7. Library must not throw any exceptions except std::string.
+ 6. Errors are handled by returning "true" and setting an optional std::string
+ 7. Library must not throw any exceptions, period.
  8. Interface functions must not have throw() specifications.
  9. No duplicate function impementations are permitted within an operating
     system class.
