From 19d5cc75486e9816af0b4c0f2cf17a39130e4429 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kristoffer=20=C3=96dmark?= <kristoffer.odmark90@gmail.com>
Date: Thu, 8 Jun 2017 23:47:21 +0200
Subject: [PATCH] Removed all exception specifiers since deprecated.

Exception specifiers are deprecated in cpp11, so went through them all
and removed them from the code.
---
 3d-viewer/3d_math.cpp                         |   2 +-
 AUTHORS.txt                                   |   1 +
 .../development/coding-style-policy.md        |   2 +-
 common/class_page_info.cpp                    |   3 +-
 common/dsnlexer.cpp                           |  24 +-
 common/eda_text.cpp                           |   1 -
 common/filter_reader.cpp                      |   4 +-
 common/fp_lib_table.cpp                       |   3 -
 common/lib_id.cpp                             |   5 +-
 common/lib_table_base.cpp                     |   3 +-
 common/page_layout/page_layout_reader.cpp     |  34 +--
 common/ptree.cpp                              |  10 +-
 common/richio.cpp                             |  30 +--
 common/worksheet.cpp                          |   2 +-
 common/xnode.cpp                              |   4 +-
 eeschema/backanno.cpp                         |   1 -
 eeschema/class_library.cpp                    |   7 +-
 eeschema/class_library.h                      |  13 +-
 eeschema/dialogs/dialog_bom.cpp               |   8 +-
 eeschema/project_rescue.cpp                   |   2 +-
 eeschema/schframe.h                           |   3 +-
 eeschema/symbol_lib_table.cpp                 |   4 +-
 eeschema/symbol_lib_table.h                   |   8 +-
 eeschema/template_fieldnames.cpp              |   8 +-
 eeschema/template_fieldnames.h                |   8 +-
 include/class_board_design_settings.h         |   2 +-
 include/class_page_info.h                     |   3 +-
 include/class_title_block.h                   |   3 +-
 include/dsnlexer.h                            |  26 +-
 include/eda_text.h                            |   3 +-
 include/filter_reader.h                       |   4 +-
 include/fp_lib_table.h                        |   8 +-
 include/frame_type.h                          |   2 +-
 include/lib_id.h                              |   7 +-
 include/lib_table_base.h                      |   5 +-
 include/ptree.h                               |   4 +-
 include/richio.h                              |  31 ++-
 include/wxBasePcbFrame.h                      |   3 +-
 include/wxPcbStruct.h                         |   3 +-
 include/xnode.h                               |   4 +-
 new/sch_dir_lib_source.cpp                    |  14 +-
 new/sch_dir_lib_source.h                      |  24 +-
 new/sch_lib.cpp                               |   6 +-
 new/sch_lib.h                                 |  42 ++-
 new/sch_lib_table.cpp                         |  11 +-
 new/sch_lib_table.h                           |  11 +-
 new/sch_part.cpp                              |  16 --
 new/sch_part.h                                |  42 +--
 pagelayout_editor/page_layout_writer.cpp      |  34 +--
 pcb_calculator/datafile_read_write.cpp        |   8 +-
 pcb_calculator/datafile_read_write.h          |  10 +-
 pcbnew/class_netclass.cpp                     |   1 -
 pcbnew/class_netclass.h                       |   3 +-
 pcbnew/github/github_plugin.cpp               |   2 +-
 pcbnew/github/github_plugin.h                 |   2 +-
 pcbnew/gpcb_plugin.cpp                        |   4 +-
 pcbnew/kicad_netlist_reader.cpp               |  12 +-
 pcbnew/kicad_plugin.cpp                       |  14 -
 pcbnew/kicad_plugin.h                         |  42 +--
 pcbnew/legacy_netlist_reader.cpp              |   7 +-
 pcbnew/loadcmp.cpp                            |   1 -
 pcbnew/netlist.cpp                            |   1 -
 pcbnew/netlist_reader.cpp                     |   3 +-
 pcbnew/netlist_reader.h                       |  27 +-
 pcbnew/pcb_parser.cpp                         |  66 +++--
 pcbnew/pcb_parser.h                           |  86 +++----
 pcbnew/pcb_plot_params.cpp                    |   6 +-
 pcbnew/pcb_plot_params.h                      |   5 +-
 pcbnew/pcb_plot_params_parser.h               |   4 +-
 pcbnew/specctra.cpp                           | 128 +++++-----
 pcbnew/specctra.h                             | 241 +++++++++---------
 pcbnew/specctra_export.cpp                    |   2 -
 pcbnew/specctra_import.cpp                    |   5 +-
 tools/io_benchmark/stdstream_line_reader.cpp  |   4 +-
 tools/io_benchmark/stdstream_line_reader.h    |   4 +-
 75 files changed, 515 insertions(+), 671 deletions(-)

diff --git a/3d-viewer/3d_math.cpp b/3d-viewer/3d_math.cpp
index f4201ca6d6..2f5afd64ac 100644
--- a/3d-viewer/3d_math.cpp
+++ b/3d-viewer/3d_math.cpp
@@ -24,7 +24,7 @@
 
 /**
  * @file  3d_math.cpp
- * @brief 
+ * @brief
  */
 
 
diff --git a/AUTHORS.txt b/AUTHORS.txt
index 644540d7db..656723feef 100644
--- a/AUTHORS.txt
+++ b/AUTHORS.txt
@@ -40,6 +40,7 @@ Mario Luzeiro <mrluzeiro[at]ua-dot-pt>
 Mateusz Skowroński <skowri[at]gmail-dot-com>
 Cheng Sheng <chengsheng[at]google-dot-com>
 Google Inc.
+Kristoffer Ödmark <kristoffer.odmark90[at]gmail-dot-com>
 See also CHANGELOG.txt for contributors.
 
 
diff --git a/Documentation/development/coding-style-policy.md b/Documentation/development/coding-style-policy.md
index e941db8331..82543f6188 100644
--- a/Documentation/development/coding-style-policy.md
+++ b/Documentation/development/coding-style-policy.md
@@ -223,7 +223,7 @@ leading sentence in the doxygen html output. The chosen format is
      * @throw IO_ERROR, if there is a problem outputting, such asisk.
      */
     int PRINTF_FUNC Print( int nestLevel,
-        const char* fmt, ... )
+        const char* fmt, ... );
 ~~~~~~~~~~~~~
 
 The “Function \<name\>” text goes on the 2nd line of the comment. The
diff --git a/common/class_page_info.cpp b/common/class_page_info.cpp
index 2cf94d4cc2..f8164dfbd4 100644
--- a/common/class_page_info.cpp
+++ b/common/class_page_info.cpp
@@ -45,7 +45,7 @@ const wxChar PAGE_INFO::A2[] = wxT( "A2" );
 const wxChar PAGE_INFO::A1[] = wxT( "A1" );
 const wxChar PAGE_INFO::A0[] = wxT( "A0" );
 const wxChar PAGE_INFO::A[]  = wxT( "A" );
-const wxChar PAGE_INFO::B[]  = wxT( "B" ) ;
+const wxChar PAGE_INFO::B[]  = wxT( "B" );
 const wxChar PAGE_INFO::C[]  = wxT( "C" );
 const wxChar PAGE_INFO::D[]  = wxT( "D" );
 const wxChar PAGE_INFO::E[]  = wxT( "E" );
@@ -265,7 +265,6 @@ void PAGE_INFO::SetHeightMils( int aHeightInMils )
 
 
 void PAGE_INFO::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-    throw( IO_ERROR )
 {
     aFormatter->Print( aNestLevel, "(page %s", aFormatter->Quotew( GetType() ).c_str() );
 
diff --git a/common/dsnlexer.cpp b/common/dsnlexer.cpp
index e45f6f146e..696ebcced3 100644
--- a/common/dsnlexer.cpp
+++ b/common/dsnlexer.cpp
@@ -350,7 +350,7 @@ bool DSNLEXER::IsSymbol( int aTok )
 }
 
 
-void DSNLEXER::Expecting( int aTok ) throw( IO_ERROR )
+void DSNLEXER::Expecting( int aTok )
 {
     wxString errText = wxString::Format(
         _("Expecting '%s'"), GetChars( GetTokenString( aTok ) ) );
@@ -358,7 +358,7 @@ void DSNLEXER::Expecting( int aTok ) throw( IO_ERROR )
 }
 
 
-void DSNLEXER::Expecting( const char* text ) throw( IO_ERROR )
+void DSNLEXER::Expecting( const char* text )
 {
     wxString errText = wxString::Format(
         _("Expecting '%s'"), GetChars( wxString::FromUTF8( text ) ) );
@@ -366,7 +366,7 @@ void DSNLEXER::Expecting( const char* text ) throw( IO_ERROR )
 }
 
 
-void DSNLEXER::Unexpected( int aTok ) throw( IO_ERROR )
+void DSNLEXER::Unexpected( int aTok )
 {
     wxString errText = wxString::Format(
         _("Unexpected '%s'"), GetChars( GetTokenString( aTok ) ) );
@@ -374,7 +374,7 @@ void DSNLEXER::Unexpected( int aTok ) throw( IO_ERROR )
 }
 
 
-void DSNLEXER::Duplicate( int aTok ) throw( IO_ERROR )
+void DSNLEXER::Duplicate( int aTok )
 {
     wxString errText = wxString::Format(
         _("%s is a duplicate"), GetTokenString( aTok ).GetData() );
@@ -382,7 +382,7 @@ void DSNLEXER::Duplicate( int aTok ) throw( IO_ERROR )
 }
 
 
-void DSNLEXER::Unexpected( const char* text ) throw( IO_ERROR )
+void DSNLEXER::Unexpected( const char* text )
 {
     wxString errText = wxString::Format(
         _("Unexpected '%s'"), GetChars( wxString::FromUTF8( text ) ) );
@@ -390,7 +390,7 @@ void DSNLEXER::Unexpected( const char* text ) throw( IO_ERROR )
 }
 
 
-void DSNLEXER::NeedLEFT() throw( IO_ERROR )
+void DSNLEXER::NeedLEFT()
 {
     int tok = NextTok();
     if( tok != DSN_LEFT )
@@ -398,7 +398,7 @@ void DSNLEXER::NeedLEFT() throw( IO_ERROR )
 }
 
 
-void DSNLEXER::NeedRIGHT() throw( IO_ERROR )
+void DSNLEXER::NeedRIGHT()
 {
     int tok = NextTok();
     if( tok != DSN_RIGHT )
@@ -406,7 +406,7 @@ void DSNLEXER::NeedRIGHT() throw( IO_ERROR )
 }
 
 
-int DSNLEXER::NeedSYMBOL() throw( IO_ERROR )
+int DSNLEXER::NeedSYMBOL()
 {
     int tok = NextTok();
     if( !IsSymbol( tok ) )
@@ -415,7 +415,7 @@ int DSNLEXER::NeedSYMBOL() throw( IO_ERROR )
 }
 
 
-int DSNLEXER::NeedSYMBOLorNUMBER() throw( IO_ERROR )
+int DSNLEXER::NeedSYMBOLorNUMBER()
 {
     int  tok = NextTok();
     if( !IsSymbol( tok ) && tok!=DSN_NUMBER )
@@ -424,7 +424,7 @@ int DSNLEXER::NeedSYMBOLorNUMBER() throw( IO_ERROR )
 }
 
 
-int DSNLEXER::NeedNUMBER( const char* aExpectation ) throw( IO_ERROR )
+int DSNLEXER::NeedNUMBER( const char* aExpectation )
 {
     int tok = NextTok();
     if( tok != DSN_NUMBER )
@@ -537,7 +537,7 @@ static bool isNumber( const char* cp, const char* limit )
 }
 
 
-int DSNLEXER::NextTok() throw( IO_ERROR )
+int DSNLEXER::NextTok()
 {
     const char*   cur  = next;
     const char*   head = cur;
@@ -808,7 +808,7 @@ exit:   // single point of exit, no returns elsewhere please.
 }
 
 
-wxArrayString* DSNLEXER::ReadCommentLines() throw( IO_ERROR )
+wxArrayString* DSNLEXER::ReadCommentLines()
 {
     wxArrayString*  ret = 0;
     bool            cmt_setting = SetCommentsAreTokens( true );
diff --git a/common/eda_text.cpp b/common/eda_text.cpp
index 70a3ce3a05..e577675436 100644
--- a/common/eda_text.cpp
+++ b/common/eda_text.cpp
@@ -428,7 +428,6 @@ bool EDA_TEXT::IsDefaultFormatting() const
 
 
 void EDA_TEXT::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-    throw( IO_ERROR )
 {
 #ifndef GERBVIEW        // Gerbview does not use EDA_TEXT::Format
                         // and does not define FMT_IU, used here
diff --git a/common/filter_reader.cpp b/common/filter_reader.cpp
index 7ab901866f..820cc18384 100644
--- a/common/filter_reader.cpp
+++ b/common/filter_reader.cpp
@@ -49,7 +49,7 @@ FILTER_READER::~FILTER_READER()
 }
 
 
-char* FILTER_READER::ReadLine() throw( IO_ERROR )
+char* FILTER_READER::ReadLine()
 {
     char* s;
 
@@ -87,7 +87,7 @@ WHITESPACE_FILTER_READER::~WHITESPACE_FILTER_READER()
 }
 
 
-char* WHITESPACE_FILTER_READER::ReadLine() throw( IO_ERROR )
+char* WHITESPACE_FILTER_READER::ReadLine()
 {
     char* s;
 
diff --git a/common/fp_lib_table.cpp b/common/fp_lib_table.cpp
index a337b09452..358d95ac97 100644
--- a/common/fp_lib_table.cpp
+++ b/common/fp_lib_table.cpp
@@ -215,7 +215,6 @@ void FP_LIB_TABLE::PrefetchLib( const wxString& aNickname )
 
 
 const FP_LIB_TABLE_ROW* FP_LIB_TABLE::FindRow( const wxString& aNickname )
-    throw( IO_ERROR )
 {
     FP_LIB_TABLE_ROW* row = dynamic_cast< FP_LIB_TABLE_ROW* >( findRow( aNickname ) );
 
@@ -329,7 +328,6 @@ void FP_LIB_TABLE::FootprintLibCreate( const wxString& aNickname )
 
 
 MODULE* FP_LIB_TABLE::FootprintLoadWithOptionalNickname( const LIB_ID& aFootprintId )
-    throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception )
 {
     wxString   nickname = FROM_UTF8( aFootprintId.GetLibNickname() );
     wxString   fpname   = FROM_UTF8( aFootprintId.GetLibItemName() );
@@ -367,7 +365,6 @@ const wxString FP_LIB_TABLE::GlobalPathEnvVariableName()
 
 
 bool FP_LIB_TABLE::LoadGlobalTable( FP_LIB_TABLE& aTable )
-    throw (IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception )
 {
     bool        tableExists = true;
     wxFileName  fn = GetGlobalTableFileName();
diff --git a/common/lib_id.cpp b/common/lib_id.cpp
index 049e8abcdb..719426138b 100644
--- a/common/lib_id.cpp
+++ b/common/lib_id.cpp
@@ -175,7 +175,7 @@ int LIB_ID::Parse( const UTF8& aId )
 }
 
 
-LIB_ID::LIB_ID( const std::string& aId ) throw( PARSE_ERROR )
+LIB_ID::LIB_ID( const std::string& aId )
 {
     int offset = Parse( aId );
 
@@ -190,7 +190,7 @@ LIB_ID::LIB_ID( const std::string& aId ) throw( PARSE_ERROR )
 }
 
 
-LIB_ID::LIB_ID( const wxString& aId ) throw( PARSE_ERROR )
+LIB_ID::LIB_ID( const wxString& aId )
 {
     UTF8 id = TO_UTF8( aId );
 
@@ -297,7 +297,6 @@ UTF8 LIB_ID::GetLibItemNameAndRev() const
 
 
 UTF8 LIB_ID::Format( const UTF8& aLogicalLib, const UTF8& aLibItemName, const UTF8& aRevision )
-    throw( PARSE_ERROR )
 {
     UTF8    ret;
     int     offset;
diff --git a/common/lib_table_base.cpp b/common/lib_table_base.cpp
index f203fcb9d7..b3294a4883 100644
--- a/common/lib_table_base.cpp
+++ b/common/lib_table_base.cpp
@@ -357,7 +357,7 @@ bool LIB_TABLE::InsertRow( LIB_TABLE_ROW* aRow, bool doReplace )
 
 
 void LIB_TABLE::Load( const wxString& aFileName )
-    throw( IO_ERROR )
+
 {
     // It's OK if footprint library tables are missing.
     if( wxFileName::IsFileReadable( aFileName ) )
@@ -371,7 +371,6 @@ void LIB_TABLE::Load( const wxString& aFileName )
 
 
 void LIB_TABLE::Save( const wxString& aFileName ) const
-    throw( IO_ERROR, boost::interprocess::lock_exception )
 {
     FILE_OUTPUTFORMATTER sf( aFileName );
     Format( &sf, 0 );
diff --git a/common/page_layout/page_layout_reader.cpp b/common/page_layout/page_layout_reader.cpp
index d3b811f460..c7ce07a22c 100644
--- a/common/page_layout/page_layout_reader.cpp
+++ b/common/page_layout/page_layout_reader.cpp
@@ -48,8 +48,7 @@ class PAGE_LAYOUT_READER_PARSER : public PAGE_LAYOUT_READER_LEXER
 {
 public:
     PAGE_LAYOUT_READER_PARSER( const char* aLine, const wxString& aSource );
-    void Parse( WORKSHEET_LAYOUT* aLayout )
-                throw( PARSE_ERROR, IO_ERROR );
+    void Parse( WORKSHEET_LAYOUT* aLayout );
 
 private:
 
@@ -69,41 +68,38 @@ private:
      */
     double parseDouble();
 
-    void parseSetup( WORKSHEET_LAYOUT* aLayout ) throw( IO_ERROR, PARSE_ERROR );
+    void parseSetup( WORKSHEET_LAYOUT* aLayout );
 
     /**
      * parse a graphic item starting by "(line" or "(rect" and read parameters.
      */
-    void parseGraphic( WORKSHEET_DATAITEM * aItem ) throw( IO_ERROR, PARSE_ERROR );
+    void parseGraphic( WORKSHEET_DATAITEM * aItem );
 
     /**
      * parse a text item starting by "(tbtext" and read parameters.
      */
-    void parseText( WORKSHEET_DATAITEM_TEXT * aItem ) throw( IO_ERROR, PARSE_ERROR );
+    void parseText( WORKSHEET_DATAITEM_TEXT * aItem );
 
     /**
      * parse a polygon item starting by "( polygon" and read parameters.
      * the list of corners included in this description is read by parsePolyOutline
      */
-    void parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * aItem )
-        throw( IO_ERROR, PARSE_ERROR );
+    void parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * aItem );
 
     /**
      * parse a list of corners starting by "( pts" and read coordinates.
      */
-    void parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON * aItem )
-        throw( IO_ERROR, PARSE_ERROR );
+    void parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON * aItem );
 
 
     /**
      * parse a bitmap item starting by "( bitmap" and read parameters.
      */
-    void parseBitmap( WORKSHEET_DATAITEM_BITMAP * aItem )
-        throw( IO_ERROR, PARSE_ERROR );
+    void parseBitmap( WORKSHEET_DATAITEM_BITMAP * aItem );
 
-    void parseCoordinate( POINT_COORD& aCoord) throw( IO_ERROR, PARSE_ERROR );
-    void readOption( WORKSHEET_DATAITEM * aItem ) throw( IO_ERROR, PARSE_ERROR );
-    void readPngdata( WORKSHEET_DATAITEM_BITMAP * aItem ) throw( IO_ERROR, PARSE_ERROR );
+    void parseCoordinate( POINT_COORD& aCoord);
+    void readOption( WORKSHEET_DATAITEM * aItem );
+    void readPngdata( WORKSHEET_DATAITEM_BITMAP * aItem );
 };
 
 // PCB_PLOT_PARAMS_PARSER
@@ -115,7 +111,6 @@ PAGE_LAYOUT_READER_PARSER::PAGE_LAYOUT_READER_PARSER( const char* aLine, const w
 
 
 void PAGE_LAYOUT_READER_PARSER::Parse( WORKSHEET_LAYOUT* aLayout )
-                             throw( PARSE_ERROR, IO_ERROR )
 {
     T token;
     WORKSHEET_DATAITEM * item;
@@ -178,7 +173,6 @@ void PAGE_LAYOUT_READER_PARSER::Parse( WORKSHEET_LAYOUT* aLayout )
 }
 
 void PAGE_LAYOUT_READER_PARSER::parseSetup( WORKSHEET_LAYOUT* aLayout )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
     while( ( token = NextTok() ) != T_RIGHT )
@@ -235,7 +229,6 @@ void PAGE_LAYOUT_READER_PARSER::parseSetup( WORKSHEET_LAYOUT* aLayout )
 }
 
 void PAGE_LAYOUT_READER_PARSER::parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * aItem )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
 
@@ -309,7 +302,6 @@ void PAGE_LAYOUT_READER_PARSER::parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * a
 }
 
 void PAGE_LAYOUT_READER_PARSER::parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON * aItem )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     DPOINT corner;
     T token;
@@ -340,7 +332,6 @@ void PAGE_LAYOUT_READER_PARSER::parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON
 
 #include <wx/mstream.h>
 void PAGE_LAYOUT_READER_PARSER::parseBitmap( WORKSHEET_DATAITEM_BITMAP * aItem )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
     BITMAP_BASE* image = new BITMAP_BASE;
@@ -407,7 +398,6 @@ void PAGE_LAYOUT_READER_PARSER::parseBitmap( WORKSHEET_DATAITEM_BITMAP * aItem )
 }
 
 void PAGE_LAYOUT_READER_PARSER::readPngdata( WORKSHEET_DATAITEM_BITMAP * aItem )
-            throw( IO_ERROR, PARSE_ERROR )
 {
     std::string tmp;
     T token;
@@ -448,7 +438,6 @@ void PAGE_LAYOUT_READER_PARSER::readPngdata( WORKSHEET_DATAITEM_BITMAP * aItem )
 
 
 void PAGE_LAYOUT_READER_PARSER::readOption( WORKSHEET_DATAITEM * aItem )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
 
@@ -476,7 +465,6 @@ void PAGE_LAYOUT_READER_PARSER::readOption( WORKSHEET_DATAITEM * aItem )
 
 
 void PAGE_LAYOUT_READER_PARSER::parseGraphic( WORKSHEET_DATAITEM * aItem )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
 
@@ -552,7 +540,6 @@ void PAGE_LAYOUT_READER_PARSER::parseGraphic( WORKSHEET_DATAITEM * aItem )
 
 
 void PAGE_LAYOUT_READER_PARSER::parseText( WORKSHEET_DATAITEM_TEXT* aItem )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
 
@@ -703,7 +690,6 @@ void PAGE_LAYOUT_READER_PARSER::parseText( WORKSHEET_DATAITEM_TEXT* aItem )
 
 // parse an expression like " 25 1 ltcorner)"
 void PAGE_LAYOUT_READER_PARSER::parseCoordinate( POINT_COORD& aCoord)
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
 
diff --git a/common/ptree.cpp b/common/ptree.cpp
index bac47eeac1..b8c82988cc 100644
--- a/common/ptree.cpp
+++ b/common/ptree.cpp
@@ -87,7 +87,7 @@ inline void scanAtom( PTREE* aTree, DSNLEXER* aLexer )
 }
 
 
-void Scan( PTREE* aTree, DSNLEXER* aLexer ) throw( IO_ERROR )
+void Scan( PTREE* aTree, DSNLEXER* aLexer )
 {
     int tok  = aLexer->CurTok();
 
@@ -135,11 +135,11 @@ inline CITER next( CITER it )
 
 
 static void formatNode( OUTPUTFORMATTER* out, int aNestLevel, int aCtl,
-        const std::string& aKey, CPTREE& aTree ) throw( IO_ERROR );
+        const std::string& aKey, CPTREE& aTree );
 
 
 static void formatList( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE& aTree )
-    throw( IO_ERROR )
+
 {
     for( CITER it = aTree.begin();  it != aTree.end();  ++it )
     {
@@ -170,7 +170,7 @@ static void formatList( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE&
 
 static void formatNode( OUTPUTFORMATTER* out, int aNestLevel, int aCtl,
         const std::string& aKey, CPTREE& aTree )
-    throw( IO_ERROR )
+
 {
     if( !isAtom( aTree ) )     // is a list, not an atom
     {
@@ -202,7 +202,7 @@ static void formatNode( OUTPUTFORMATTER* out, int aNestLevel, int aCtl,
 }
 
 
-void Format( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE& aTree ) throw( IO_ERROR )
+void Format( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE& aTree )
 {
     if( aTree.size() == 1 && !aTree.data().size() )
     {
diff --git a/common/richio.cpp b/common/richio.cpp
index 200ca8f74e..a86348763c 100644
--- a/common/richio.cpp
+++ b/common/richio.cpp
@@ -156,7 +156,7 @@ void LINE_READER::expandCapacity( unsigned newsize )
 
 FILE_LINE_READER::FILE_LINE_READER( const wxString& aFileName,
             unsigned aStartingLineNumber,
-            unsigned aMaxLineLength ) throw( IO_ERROR ) :
+            unsigned aMaxLineLength ):
     LINE_READER( aMaxLineLength ),
     iOwn( true )
 {
@@ -193,7 +193,7 @@ FILE_LINE_READER::~FILE_LINE_READER()
 }
 
 
-char* FILE_LINE_READER::ReadLine() throw( IO_ERROR )
+char* FILE_LINE_READER::ReadLine()
 {
     length = 0;
 
@@ -226,7 +226,7 @@ char* FILE_LINE_READER::ReadLine() throw( IO_ERROR )
 }
 
 
-STRING_LINE_READER::STRING_LINE_READER( const std::string& aString, const wxString& aSource ) :
+STRING_LINE_READER::STRING_LINE_READER( const std::string& aString, const wxString& aSource ):
     LINE_READER( LINE_READER_LINE_DEFAULT_MAX ),
     lines( aString ),
     ndx( 0 )
@@ -237,7 +237,7 @@ STRING_LINE_READER::STRING_LINE_READER( const std::string& aString, const wxStri
 }
 
 
-STRING_LINE_READER::STRING_LINE_READER( const STRING_LINE_READER& aStartingPoint ) :
+STRING_LINE_READER::STRING_LINE_READER( const STRING_LINE_READER& aStartingPoint ):
     LINE_READER( LINE_READER_LINE_DEFAULT_MAX ),
     lines( aStartingPoint.lines ),
     ndx( aStartingPoint.ndx )
@@ -250,7 +250,7 @@ STRING_LINE_READER::STRING_LINE_READER( const STRING_LINE_READER& aStartingPoint
 }
 
 
-char* STRING_LINE_READER::ReadLine() throw( IO_ERROR )
+char* STRING_LINE_READER::ReadLine()
 {
     size_t  nlOffset = lines.find( '\n', ndx );
 
@@ -290,7 +290,7 @@ INPUTSTREAM_LINE_READER::INPUTSTREAM_LINE_READER( wxInputStream* aStream, const
 }
 
 
-char* INPUTSTREAM_LINE_READER::ReadLine() throw( IO_ERROR )
+char* INPUTSTREAM_LINE_READER::ReadLine()
 {
     length  = 0;
 
@@ -367,7 +367,7 @@ const char* OUTPUTFORMATTER::GetQuoteChar( const char* wrapee )
     return GetQuoteChar( wrapee, quoteChar );
 }
 
-int OUTPUTFORMATTER::vprint( const char* fmt,  va_list ap )  throw( IO_ERROR )
+int OUTPUTFORMATTER::vprint( const char* fmt,  va_list ap )
 {
     // This function can call vsnprintf twice.
     // But internally, vsnprintf retrieves arguments from the va_list identified by arg as if
@@ -393,7 +393,7 @@ int OUTPUTFORMATTER::vprint( const char* fmt,  va_list ap )  throw( IO_ERROR )
 }
 
 
-int OUTPUTFORMATTER::sprint( const char* fmt, ... )  throw( IO_ERROR )
+int OUTPUTFORMATTER::sprint( const char* fmt, ... )
 {
     va_list     args;
 
@@ -405,7 +405,7 @@ int OUTPUTFORMATTER::sprint( const char* fmt, ... )  throw( IO_ERROR )
 }
 
 
-int OUTPUTFORMATTER::Print( int nestLevel, const char* fmt, ... ) throw( IO_ERROR )
+int OUTPUTFORMATTER::Print( int nestLevel, const char* fmt, ... )
 {
 #define NESTWIDTH           2   ///< how many spaces per nestLevel
 
@@ -434,7 +434,7 @@ int OUTPUTFORMATTER::Print( int nestLevel, const char* fmt, ... ) throw( IO_ERRO
 }
 
 
-std::string OUTPUTFORMATTER::Quotes( const std::string& aWrapee ) throw( IO_ERROR )
+std::string OUTPUTFORMATTER::Quotes( const std::string& aWrapee )
 {
     static const char quoteThese[] = "\t ()\n\r";
 
@@ -483,7 +483,7 @@ std::string OUTPUTFORMATTER::Quotes( const std::string& aWrapee ) throw( IO_ERRO
 }
 
 
-std::string OUTPUTFORMATTER::Quotew( const wxString& aWrapee ) throw( IO_ERROR )
+std::string OUTPUTFORMATTER::Quotew( const wxString& aWrapee )
 {
     // wxStrings are always encoded as UTF-8 as we convert to a byte sequence.
     // The non-virutal function calls the virtual workhorse function, and if
@@ -496,7 +496,7 @@ std::string OUTPUTFORMATTER::Quotew( const wxString& aWrapee ) throw( IO_ERROR )
 
 //-----<STRING_FORMATTER>----------------------------------------------------
 
-void STRING_FORMATTER::write( const char* aOutBuf, int aCount ) throw( IO_ERROR )
+void STRING_FORMATTER::write( const char* aOutBuf, int aCount )
 {
     mystring.append( aOutBuf, aCount );
 }
@@ -519,7 +519,7 @@ void STRING_FORMATTER::StripUseless()
 //-----<FILE_OUTPUTFORMATTER>----------------------------------------
 
 FILE_OUTPUTFORMATTER::FILE_OUTPUTFORMATTER( const wxString& aFileName,
-        const wxChar* aMode,  char aQuoteChar ) throw( IO_ERROR ) :
+        const wxChar* aMode,  char aQuoteChar ):
     OUTPUTFORMATTER( OUTPUTFMTBUFZ, aQuoteChar ),
     m_filename( aFileName )
 {
@@ -542,7 +542,7 @@ FILE_OUTPUTFORMATTER::~FILE_OUTPUTFORMATTER()
 }
 
 
-void FILE_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount ) throw( IO_ERROR )
+void FILE_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount )
 {
     if( 1 != fwrite( aOutBuf, aCount, 1, m_fp ) )
     {
@@ -556,7 +556,7 @@ void FILE_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount ) throw( IO_ER
 
 //-----<STREAM_OUTPUTFORMATTER>--------------------------------------
 
-void STREAM_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount ) throw( IO_ERROR )
+void STREAM_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount )
 {
     int lastWrite;
 
diff --git a/common/worksheet.cpp b/common/worksheet.cpp
index 4cff42e316..ea01e47871 100644
--- a/common/worksheet.cpp
+++ b/common/worksheet.cpp
@@ -243,7 +243,7 @@ wxString WS_DRAW_ITEM_LIST::BuildFullText( const wxString& aTextbase )
 
 
 void TITLE_BLOCK::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-    throw( IO_ERROR )
+
 {
     // Don't write the title block information if there is nothing to write.
     bool isempty = true;
diff --git a/common/xnode.cpp b/common/xnode.cpp
index 7419f23ca8..74d31be9b8 100644
--- a/common/xnode.cpp
+++ b/common/xnode.cpp
@@ -29,7 +29,7 @@
 typedef wxXmlAttribute   XATTR;
 
 
-void XNODE::Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+void XNODE::Format( OUTPUTFORMATTER* out, int nestLevel )
 {
     switch( GetType() )
     {
@@ -48,7 +48,7 @@ void XNODE::Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
 }
 
 
-void XNODE::FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+void XNODE::FormatContents( OUTPUTFORMATTER* out, int nestLevel )
 {
     // output attributes first if they exist
     for( XATTR* attr = (XATTR*) GetAttributes();  attr;  attr = (XATTR*) attr->GetNext() )
diff --git a/eeschema/backanno.cpp b/eeschema/backanno.cpp
index 2b23162b44..7a745ba6fe 100644
--- a/eeschema/backanno.cpp
+++ b/eeschema/backanno.cpp
@@ -49,7 +49,6 @@
 
 
 void SCH_EDIT_FRAME::backAnnotateFootprints( const std::string& aChangedSetOfReferences )
-    throw( IO_ERROR, boost::bad_pointer )
 {
     // Build a flat list of components in schematic:
     SCH_REFERENCE_LIST  refs;
diff --git a/eeschema/class_library.cpp b/eeschema/class_library.cpp
index 55f9fcefad..6e37669291 100644
--- a/eeschema/class_library.cpp
+++ b/eeschema/class_library.cpp
@@ -283,7 +283,7 @@ LIB_PART* PART_LIB::ReplacePart( LIB_PART* aOldPart, LIB_PART* aNewPart )
 }
 
 
-PART_LIB* PART_LIB::LoadLibrary( const wxString& aFileName ) throw( IO_ERROR, boost::bad_pointer )
+PART_LIB* PART_LIB::LoadLibrary( const wxString& aFileName )
 {
     std::unique_ptr<PART_LIB> lib( new PART_LIB( LIBRARY_TYPE_EESCHEMA, aFileName ) );
 
@@ -307,7 +307,7 @@ PART_LIB* PART_LIB::LoadLibrary( const wxString& aFileName ) throw( IO_ERROR, bo
 }
 
 
-PART_LIB* PART_LIBS::AddLibrary( const wxString& aFileName ) throw( IO_ERROR, boost::bad_pointer )
+PART_LIB* PART_LIBS::AddLibrary( const wxString& aFileName )
 {
     PART_LIB* lib;
 
@@ -327,7 +327,6 @@ PART_LIB* PART_LIBS::AddLibrary( const wxString& aFileName ) throw( IO_ERROR, bo
 
 
 PART_LIB* PART_LIBS::AddLibrary( const wxString& aFileName, PART_LIBS::iterator& aIterator )
-    throw( IO_ERROR, boost::bad_pointer )
 {
     // Don't reload the library if it is already loaded.
     wxFileName fn( aFileName );
@@ -479,7 +478,6 @@ int PART_LIBS::GetModifyHash()
 
 void PART_LIBS::LibNamesAndPaths( PROJECT* aProject, bool doSave,
                                   wxString* aPaths, wxArrayString* aNames )
-    throw( IO_ERROR, boost::bad_pointer )
 {
     wxString pro = aProject->GetProjectFullName();
 
@@ -548,7 +546,6 @@ const wxString PART_LIBS::CacheName( const wxString& aFullProjectFilename )
 
 
 void PART_LIBS::LoadAllLibraries( PROJECT* aProject, bool aShowProgress )
-    throw( IO_ERROR, boost::bad_pointer )
 {
     wxString        filename;
     wxString        libs_not_found;
diff --git a/eeschema/class_library.h b/eeschema/class_library.h
index 52587b9f6e..74fe0e91e9 100644
--- a/eeschema/class_library.h
+++ b/eeschema/class_library.h
@@ -211,7 +211,7 @@ public:
      * @param aFileName - File name object of part library.
      * @throw IO_ERROR if there's any problem loading.
      */
-    PART_LIB* AddLibrary( const wxString& aFileName ) throw( IO_ERROR, boost::bad_pointer );
+    PART_LIB* AddLibrary( const wxString& aFileName );
 
     /**
      * Function AddLibrary
@@ -222,16 +222,14 @@ public:
      * @return PART_LIB* - the new PART_LIB, which remains owned by this PART_LIBS container.
      * @throw IO_ERROR if there's any problem loading.
      */
-    PART_LIB* AddLibrary( const wxString& aFileName, PART_LIBS::iterator& aIterator )
-        throw( IO_ERROR, boost::bad_pointer );
+    PART_LIB* AddLibrary( const wxString& aFileName, PART_LIBS::iterator& aIterator );
 
     /**
      * Function LoadAllLibraries
      * loads all of the project's libraries into this container, which should
      * be cleared before calling it.
      */
-    void LoadAllLibraries( PROJECT* aProject, bool aShowProgress=true )
-        throw( IO_ERROR, boost::bad_pointer );
+    void LoadAllLibraries( PROJECT* aProject, bool aShowProgress=true );
 
     /**
      * Function LibNamesAndPaths
@@ -239,8 +237,7 @@ public:
      * (without paths).
      */
     static void LibNamesAndPaths( PROJECT* aProject, bool doSave,
-                                  wxString* aPaths, wxArrayString* aNames=NULL )
-        throw( IO_ERROR, boost::bad_pointer );
+                                  wxString* aPaths, wxArrayString* aNames=NULL );
 
     /**
      * Function cacheName
@@ -509,7 +506,7 @@ public:
      *   the caller.
      * @throw IO_ERROR if there's any problem loading the library.
      */
-    static PART_LIB* LoadLibrary( const wxString& aFileName ) throw( IO_ERROR, boost::bad_pointer );
+    static PART_LIB* LoadLibrary( const wxString& aFileName );
 
     /**
      * Function HasPowerParts
diff --git a/eeschema/dialogs/dialog_bom.cpp b/eeschema/dialogs/dialog_bom.cpp
index 4fcc81d154..d9dc817ac0 100644
--- a/eeschema/dialogs/dialog_bom.cpp
+++ b/eeschema/dialogs/dialog_bom.cpp
@@ -86,10 +86,10 @@ class BOM_CFG_READER_PARSER : public DIALOG_BOM_CFG_LEXER
 public:
     BOM_CFG_READER_PARSER( BOM_PLUGIN_ARRAY* aPlugins,
                            const char* aData, const wxString& aSource );
-    void Parse() throw( PARSE_ERROR, IO_ERROR );
+    void Parse();
 
 private:
-    void parsePlugin() throw( IO_ERROR, PARSE_ERROR );
+    void parsePlugin();
 };
 
 // PCB_PLOT_PARAMS_PARSER
@@ -103,7 +103,7 @@ BOM_CFG_READER_PARSER::BOM_CFG_READER_PARSER(  BOM_PLUGIN_ARRAY* aPlugins,
 }
 
 
-void BOM_CFG_READER_PARSER::Parse() throw( PARSE_ERROR, IO_ERROR )
+void BOM_CFG_READER_PARSER::Parse()
 {
     T token;
 
@@ -131,7 +131,7 @@ void BOM_CFG_READER_PARSER::Parse() throw( PARSE_ERROR, IO_ERROR )
     }
 }
 
-void BOM_CFG_READER_PARSER::parsePlugin() throw( IO_ERROR, PARSE_ERROR )
+void BOM_CFG_READER_PARSER::parsePlugin()
 {
     BOM_PLUGIN plugin;
 
diff --git a/eeschema/project_rescue.cpp b/eeschema/project_rescue.cpp
index f1951a14cf..4607947896 100644
--- a/eeschema/project_rescue.cpp
+++ b/eeschema/project_rescue.cpp
@@ -75,7 +75,7 @@ static bool save_library( PART_LIB* aLibrary, SCH_EDIT_FRAME* aEditFrame )
  *
  * @return true on success, false on failure
  */
-static bool insert_library( PROJECT *aProject, PART_LIB *aLibrary, size_t aIndex ) throw( boost::bad_pointer )
+static bool insert_library( PROJECT *aProject, PART_LIB *aLibrary, size_t aIndex )
 {
     wxArrayString libNames;
     wxString libPaths;
diff --git a/eeschema/schframe.h b/eeschema/schframe.h
index b2d8783c56..7060aae625 100644
--- a/eeschema/schframe.h
+++ b/eeschema/schframe.h
@@ -212,8 +212,7 @@ protected:
 
     void updateFindReplaceView( wxFindDialogEvent& aEvent );
 
-    void backAnnotateFootprints( const std::string& aChangedSetOfReferences )
-        throw( IO_ERROR, boost::bad_pointer );
+    void backAnnotateFootprints( const std::string& aChangedSetOfReferences );
 
     /**
      * Function prepareForNetlist
diff --git a/eeschema/symbol_lib_table.cpp b/eeschema/symbol_lib_table.cpp
index 02c1ff1a97..5ed55651e4 100644
--- a/eeschema/symbol_lib_table.cpp
+++ b/eeschema/symbol_lib_table.cpp
@@ -216,7 +216,7 @@ void SYMBOL_LIB_TABLE::EnumerateSymbolLib( const wxString& aNickname, wxArrayStr
 
 
 const SYMBOL_LIB_TABLE_ROW* SYMBOL_LIB_TABLE::FindRow( const wxString& aNickname )
-    throw( IO_ERROR )
+
 {
     SYMBOL_LIB_TABLE_ROW* row = dynamic_cast< SYMBOL_LIB_TABLE_ROW* >( findRow( aNickname ) );
 
@@ -340,7 +340,6 @@ void SYMBOL_LIB_TABLE::CreateSymbolLib( const wxString& aNickname )
 
 
 LIB_ALIAS* SYMBOL_LIB_TABLE::LoadSymbolWithOptionalNickname( const LIB_ID& aLibId )
-    throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception )
 {
     wxString   nickname = FROM_UTF8( aLibId.GetLibNickname() );
     wxString   name     = FROM_UTF8( aLibId.GetLibItemName() );
@@ -378,7 +377,6 @@ const wxString SYMBOL_LIB_TABLE::GlobalPathEnvVariableName()
 
 
 bool SYMBOL_LIB_TABLE::LoadGlobalTable( SYMBOL_LIB_TABLE& aTable )
-    throw (IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception )
 {
     bool        tableExists = true;
     wxFileName  fn = GetGlobalTableFileName();
diff --git a/eeschema/symbol_lib_table.h b/eeschema/symbol_lib_table.h
index 88dd603fbe..59410067a9 100644
--- a/eeschema/symbol_lib_table.h
+++ b/eeschema/symbol_lib_table.h
@@ -127,7 +127,7 @@ public:
      *
      * @throw IO_ERROR if \a aNickName cannot be found.
      */
-    const SYMBOL_LIB_TABLE_ROW* FindRow( const wxString& aNickName ) throw( IO_ERROR );
+    const SYMBOL_LIB_TABLE_ROW* FindRow( const wxString& aNickName );
 
     //-----<PLUGIN API SUBSET, REBASED ON aNickname>---------------------------
 
@@ -254,8 +254,7 @@ public:
      *                   is thrown in the case where aId cannot be found.
      * @throw   PARSE_ERROR if @a atId is not parsed OK.
      */
-    LIB_ALIAS* LoadSymbolWithOptionalNickname( const LIB_ID& aId )
-        throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception );
+    LIB_ALIAS* LoadSymbolWithOptionalNickname( const LIB_ID& aId );
 
     /**
      * Function LoadGlobalTable
@@ -270,8 +269,7 @@ public:
      * @return true if the global library table exists and is loaded properly.
      * @throw IO_ERROR if an error occurs attempting to load the symbol library table.
      */
-    static bool LoadGlobalTable( SYMBOL_LIB_TABLE& aTable )
-        throw (IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception );
+    static bool LoadGlobalTable( SYMBOL_LIB_TABLE& aTable );
 
     /**
      * Function GetGlobalTableFileName
diff --git a/eeschema/template_fieldnames.cpp b/eeschema/template_fieldnames.cpp
index 28be5dd304..01fbaec352 100644
--- a/eeschema/template_fieldnames.cpp
+++ b/eeschema/template_fieldnames.cpp
@@ -57,7 +57,7 @@ const wxString TEMPLATE_FIELDNAME::GetDefaultFieldName( int aFieldNdx )
     return fieldName;
 }
 
-void TEMPLATE_FIELDNAME::Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR )
+void TEMPLATE_FIELDNAME::Format( OUTPUTFORMATTER* out, int nestLevel ) const
 {
     out->Print( nestLevel, "(field (name %s)",  out->Quotew( m_Name ).c_str() );
 
@@ -71,7 +71,7 @@ void TEMPLATE_FIELDNAME::Format( OUTPUTFORMATTER* out, int nestLevel ) const thr
 }
 
 
-void TEMPLATE_FIELDNAME::Parse( TEMPLATE_FIELDNAMES_LEXER* in ) throw( IO_ERROR )
+void TEMPLATE_FIELDNAME::Parse( TEMPLATE_FIELDNAMES_LEXER* in )
 {
     T    tok;
 
@@ -112,7 +112,7 @@ void TEMPLATE_FIELDNAME::Parse( TEMPLATE_FIELDNAMES_LEXER* in ) throw( IO_ERROR
 }
 
 
-void TEMPLATES::Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR )
+void TEMPLATES::Format( OUTPUTFORMATTER* out, int nestLevel ) const
 {
     // We'll keep this general, and include the \n, even though the only known
     // use at this time will not want the newlines or the indentation.
@@ -125,7 +125,7 @@ void TEMPLATES::Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ER
 }
 
 
-void TEMPLATES::Parse( TEMPLATE_FIELDNAMES_LEXER* in ) throw( IO_ERROR )
+void TEMPLATES::Parse( TEMPLATE_FIELDNAMES_LEXER* in )
 {
     T  tok;
 
diff --git a/eeschema/template_fieldnames.h b/eeschema/template_fieldnames.h
index 130ab14712..ab76a3f054 100644
--- a/eeschema/template_fieldnames.h
+++ b/eeschema/template_fieldnames.h
@@ -97,7 +97,7 @@ struct TEMPLATE_FIELDNAME
      * Function Format
      * serializes this object out as text into the given OUTPUTFORMATTER.
      */
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* out, int nestLevel ) const ;
 
     /**
      * Function Parse
@@ -112,7 +112,7 @@ struct TEMPLATE_FIELDNAME
      *
      * @param aSpec is the input token stream of keywords and symbols.
      */
-    void Parse( TEMPLATE_FIELDNAMES_LEXER* aSpec ) throw( IO_ERROR );
+    void Parse( TEMPLATE_FIELDNAMES_LEXER* aSpec );
 
     /**
      * Function GetDefaultFieldName
@@ -137,13 +137,13 @@ public:
      * Function Format
      * serializes this object out as text into the given OUTPUTFORMATTER.
      */
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* out, int nestLevel ) const ;
 
     /**
      * Function Parse
      * fills this object from information in the input stream handled by TEMPLATE_FIELDNAMES_LEXER
      */
-    void Parse( TEMPLATE_FIELDNAMES_LEXER* in ) throw( IO_ERROR );
+    void Parse( TEMPLATE_FIELDNAMES_LEXER* in );
 
 
     /**
diff --git a/include/class_board_design_settings.h b/include/class_board_design_settings.h
index a55d988a68..785c04ac05 100644
--- a/include/class_board_design_settings.h
+++ b/include/class_board_design_settings.h
@@ -560,7 +560,7 @@ public:
 
 private:
     void formatNetClass( NETCLASS* aNetClass, OUTPUTFORMATTER* aFormatter, int aNestLevel,
-                         int aControlBits ) const throw( IO_ERROR );
+                         int aControlBits ) const;
 };
 
 #endif  // BOARD_DESIGN_SETTINGS_H_
diff --git a/include/class_page_info.h b/include/class_page_info.h
index a9896f6c61..51383879cd 100644
--- a/include/class_page_info.h
+++ b/include/class_page_info.h
@@ -185,8 +185,7 @@ public:
      * @param aControlBits The control bit definition for object specific formatting.
      * @throw IO_ERROR on write error.
      */
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
 protected:
     // only the class implementation(s) may use this constructor
diff --git a/include/class_title_block.h b/include/class_title_block.h
index 78f2459abb..3fecebea9f 100644
--- a/include/class_title_block.h
+++ b/include/class_title_block.h
@@ -137,8 +137,7 @@ public:
      * @param aControlBits The control bit definition for object specific formatting.
      * @throw IO_ERROR on write error.
      */
-    virtual void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    virtual void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
 private:
     wxArrayString m_tbTexts;
diff --git a/include/dsnlexer.h b/include/dsnlexer.h
index ded81c7552..1dc3f8ebd0 100644
--- a/include/dsnlexer.h
+++ b/include/dsnlexer.h
@@ -114,7 +114,7 @@ protected:
 
     void init();
 
-    int readLine() throw( IO_ERROR )
+    int readLine()
     {
         if( reader )
         {
@@ -282,7 +282,7 @@ public:
      * @return int - the type of token found next.
      * @throw IO_ERROR - only if the LINE_READER throws it.
      */
-    int NextTok() throw( IO_ERROR );
+    int NextTok();
 
     /**
      * Function NeedSYMBOL
@@ -292,7 +292,7 @@ public:
      * @return int - the actual token read in.
      * @throw IO_ERROR, if the next token does not satisfy IsSymbol()
      */
-    int NeedSYMBOL() throw( IO_ERROR );
+    int NeedSYMBOL();
 
     /**
      * Function NeedSYMBOLorNUMBER
@@ -302,7 +302,7 @@ public:
      * @return int - the actual token read in.
      * @throw IO_ERROR, if the next token does not satisfy the above test
      */
-    int NeedSYMBOLorNUMBER() throw( IO_ERROR );
+    int NeedSYMBOLorNUMBER();
 
     /**
      * Function NeedNUMBER
@@ -311,7 +311,7 @@ public:
      * @return int - the actual token read in.
      * @throw IO_ERROR, if the next token does not satisfy the above test
      */
-    int NeedNUMBER( const char* aExpectation ) throw( IO_ERROR );
+    int NeedNUMBER( const char* aExpectation );
 
     /**
      * Function CurTok
@@ -387,7 +387,7 @@ public:
      * @return wxArrayString* - heap allocated block of comments, or NULL if none;
      *   caller owns the allocation and must delete if not NULL.
      */
-    wxArrayString* ReadCommentLines() throw( IO_ERROR );
+    wxArrayString* ReadCommentLines();
 
     /**
      * Function IsSymbol
@@ -403,7 +403,7 @@ public:
      * @param aTok is the token/keyword type which was expected at the current input location.
      * @throw IO_ERROR with the location within the input file of the problem.
      */
-    void Expecting( int aTok ) throw( IO_ERROR );
+    void Expecting( int aTok );
 
     /**
      * Function Expecting
@@ -412,7 +412,7 @@ public:
      *         current input location, e.g.  "pin|graphic|property"
      * @throw IO_ERROR with the location within the input file of the problem.
      */
-    void Expecting( const char* aTokenList ) throw( IO_ERROR );
+    void Expecting( const char* aTokenList );
 
     /**
      * Function Unexpected
@@ -421,7 +421,7 @@ public:
      *         current input location.
      * @throw IO_ERROR with the location within the input file of the problem.
      */
-    void Unexpected( int aTok ) throw( IO_ERROR );
+    void Unexpected( int aTok );
 
     /**
      * Function Unexpected
@@ -430,7 +430,7 @@ public:
      *         current input location.
      * @throw IO_ERROR with the location within the input file of the problem.
      */
-    void Unexpected( const char* aToken ) throw( IO_ERROR );
+    void Unexpected( const char* aToken );
 
     /**
      * Function Duplicate
@@ -440,7 +440,7 @@ public:
      *         current input location.
      * @throw IO_ERROR with the location within the input file of the problem.
      */
-    void Duplicate( int aTok ) throw( IO_ERROR );
+    void Duplicate( int aTok );
 
     /**
      * Function NeedLEFT
@@ -448,7 +448,7 @@ public:
      * If it is not, an IO_ERROR is thrown.
      * @throw IO_ERROR, if the next token is not a DSN_LEFT
      */
-    void NeedLEFT() throw( IO_ERROR );
+    void NeedLEFT();
 
     /**
      * Function NeedRIGHT
@@ -456,7 +456,7 @@ public:
      * If it is not, an IO_ERROR is thrown.
      * @throw IO_ERROR, if the next token is not a DSN_RIGHT
      */
-    void NeedRIGHT() throw( IO_ERROR );
+    void NeedRIGHT();
 
     /**
      * Function GetTokenText
diff --git a/include/eda_text.h b/include/eda_text.h
index e0bbf594e1..f4fd59c592 100644
--- a/include/eda_text.h
+++ b/include/eda_text.h
@@ -341,8 +341,7 @@ public:
      * @param aControlBits The control bit definition for object specific formatting.
      * @throw IO_ERROR on write error.
      */
-    virtual void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    virtual void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
 protected:
     wxString    m_Text;
diff --git a/include/filter_reader.h b/include/filter_reader.h
index 8d94969509..1fcfef6f20 100644
--- a/include/filter_reader.h
+++ b/include/filter_reader.h
@@ -48,7 +48,7 @@ public:
 
     ~FILTER_READER();
 
-    char* ReadLine() throw( IO_ERROR ) override;
+    char* ReadLine() override;
 
     const wxString& GetSource() const override
     {
@@ -82,7 +82,7 @@ public:
 
     ~WHITESPACE_FILTER_READER();
 
-    char* ReadLine() throw( IO_ERROR ) override;
+    char* ReadLine() override;
 
     const wxString& GetSource() const override
     {
diff --git a/include/fp_lib_table.h b/include/fp_lib_table.h
index 0022e1d466..385a2d0284 100644
--- a/include/fp_lib_table.h
+++ b/include/fp_lib_table.h
@@ -131,7 +131,7 @@ public:
      *
      * @throw IO_ERROR if \a aNickName cannot be found.
      */
-    const FP_LIB_TABLE_ROW* FindRow( const wxString& aNickName ) throw( IO_ERROR );
+    const FP_LIB_TABLE_ROW* FindRow( const wxString& aNickName );
 
     //-----<PLUGIN API SUBSET, REBASED ON aNickname>---------------------------
 
@@ -249,8 +249,7 @@ public:
      *          is thrown in the case where aFootprintName cannot be found.
      * @throw   PARSE_ERROR if @a aFootprintId is not parsed OK.
      */
-    MODULE* FootprintLoadWithOptionalNickname( const LIB_ID& aFootprintId )
-        throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception );
+    MODULE* FootprintLoadWithOptionalNickname( const LIB_ID& aFootprintId );
 
     /**
      * Function LoadGlobalTable
@@ -265,8 +264,7 @@ public:
      * @throw IO_ERROR if an error occurs attempting to load the footprint library
      *                 table.
      */
-    static bool LoadGlobalTable( FP_LIB_TABLE& aTable )
-        throw (IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception );
+    static bool LoadGlobalTable( FP_LIB_TABLE& aTable );
 
     /**
      * Function GetGlobalTableFileName
diff --git a/include/frame_type.h b/include/frame_type.h
index 92bba7427a..f54d4f3560 100644
--- a/include/frame_type.h
+++ b/include/frame_type.h
@@ -38,7 +38,7 @@ enum FRAME_T
     FRAME_SCH_VIEWER,
     FRAME_SCH_VIEWER_MODAL,
     FRAME_SIMULATOR,
-    
+
     FRAME_PCB,
     FRAME_PCB_MODULE_EDITOR,
     FRAME_PCB_MODULE_VIEWER,
diff --git a/include/lib_id.h b/include/lib_id.h
index 7967d0a495..a6aabc7fde 100644
--- a/include/lib_id.h
+++ b/include/lib_id.h
@@ -70,9 +70,9 @@ public:
      *
      * @param aId is a string to be parsed into the LIB_ID object.
      */
-    LIB_ID( const std::string& aId ) throw( PARSE_ERROR );
+    LIB_ID( const std::string& aId );
 
-    LIB_ID( const wxString& aId ) throw( PARSE_ERROR );
+    LIB_ID( const wxString& aId );
 
     /**
      * This LIB_ID ctor is a special version which ignores the parsing due to symbol
@@ -161,8 +161,7 @@ public:
      * @throw PARSE_ERROR if any of the pieces are illegal.
      */
     static UTF8 Format( const UTF8& aLibNickname, const UTF8& aLibItemName,
-                        const UTF8& aRevision = "" )
-        throw( PARSE_ERROR );
+                        const UTF8& aRevision = "" );
 
     /**
      * Function IsValid
diff --git a/include/lib_table_base.h b/include/lib_table_base.h
index c0466147eb..7e2c0f9b29 100644
--- a/include/lib_table_base.h
+++ b/include/lib_table_base.h
@@ -415,7 +415,7 @@ public:
      * @throw IO_ERROR if an error occurs attempting to load the footprint library
      *                 table.
      */
-    void Load( const wxString& aFileName ) throw( IO_ERROR );
+    void Load( const wxString& aFileName );
 
     /**
      * Function Save
@@ -424,8 +424,7 @@ public:
      *
      * @param aFileName is the name of the file to write to.
      */
-    void Save( const wxString& aFileName ) const
-        throw( IO_ERROR, boost::interprocess::lock_exception );
+    void Save( const wxString& aFileName ) const;
 
     /**
      * Search the paths all of the #LIB_TABLE_ROWS of the #LIB_TABLE and add all of the
diff --git a/include/ptree.h b/include/ptree.h
index 684becc7f5..494b216c56 100644
--- a/include/ptree.h
+++ b/include/ptree.h
@@ -84,12 +84,12 @@ typedef boost::property_tree::ptree_error   PTREE_ERROR;
  *
  * </code>
  */
-void Scan( PTREE* aTree, DSNLEXER* aLexer ) throw ( IO_ERROR );
+void Scan( PTREE* aTree, DSNLEXER* aLexer );
 
 /**
  * Function Format
  * outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
  */
-void Format( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE& aTree ) throw( IO_ERROR );
+void Format( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE& aTree );
 
 #endif  // PTREE_H_
diff --git a/include/richio.h b/include/richio.h
index 0e4900c20b..0d35c8c732 100644
--- a/include/richio.h
+++ b/include/richio.h
@@ -118,7 +118,7 @@ public:
      * @return char* - The beginning of the read line, or NULL if EOF.
      * @throw IO_ERROR when a line is too long.
      */
-    virtual char* ReadLine() throw( IO_ERROR ) = 0;
+    virtual char* ReadLine() = 0;
 
     /**
      * Function GetSource
@@ -205,7 +205,7 @@ public:
      */
     FILE_LINE_READER( const wxString& aFileName,
             unsigned aStartingLineNumber = 0,
-            unsigned aMaxLineLength = LINE_READER_LINE_DEFAULT_MAX ) throw( IO_ERROR );
+            unsigned aMaxLineLength = LINE_READER_LINE_DEFAULT_MAX );
 
     /**
      * Constructor FILE_LINE_READER
@@ -232,7 +232,7 @@ public:
      */
     ~FILE_LINE_READER();
 
-    char* ReadLine() throw( IO_ERROR ) override;
+    char* ReadLine() override;
 
     /**
      * Function Rewind
@@ -279,7 +279,7 @@ public:
      */
     STRING_LINE_READER( const STRING_LINE_READER& aStartingPoint );
 
-    char* ReadLine() throw( IO_ERROR ) override;
+    char* ReadLine() override;
 };
 
 
@@ -302,7 +302,7 @@ public:
      */
     INPUTSTREAM_LINE_READER( wxInputStream* aStream, const wxString& aSource );
 
-    char* ReadLine() throw( IO_ERROR ) override;
+    char* ReadLine() override;
 };
 
 
@@ -329,8 +329,8 @@ class OUTPUTFORMATTER
     std::vector<char>   buffer;
     char                quoteChar[2];
 
-    int sprint( const char* fmt, ... )  throw( IO_ERROR );
-    int vprint( const char* fmt,  va_list ap )  throw( IO_ERROR );
+    int sprint( const char* fmt, ... );
+    int vprint( const char* fmt,  va_list ap );
 
 
 protected:
@@ -365,7 +365,7 @@ protected:
      * @param aCount  tells how many bytes to write.
      * @throw IO_ERROR, if there is a problem outputting, such as a full disk.
      */
-    virtual void write( const char* aOutBuf, int aCount ) throw( IO_ERROR ) = 0;
+    virtual void write( const char* aOutBuf, int aCount ) = 0;
 
 #if defined(__GNUG__)   // The GNU C++ compiler defines this
 
@@ -394,7 +394,7 @@ public:
      * @return int - the number of characters output.
      * @throw IO_ERROR, if there is a problem outputting, such as a full disk.
      */
-    int PRINTF_FUNC Print( int nestLevel, const char* fmt, ... ) throw( IO_ERROR );
+    int PRINTF_FUNC Print( int nestLevel, const char* fmt, ... );
 
     /**
      * Function GetQuoteChar
@@ -429,9 +429,9 @@ public:
      *
      * @throw IO_ERROR, if there is any kind of problem with the input string.
      */
-     virtual std::string Quotes( const std::string& aWrapee ) throw( IO_ERROR );
+     virtual std::string Quotes( const std::string& aWrapee );
 
-     std::string Quotew( const wxString& aWrapee ) throw( IO_ERROR );
+     std::string Quotew( const wxString& aWrapee );
 
     //-----</interface functions>-----------------------------------------
 };
@@ -479,7 +479,7 @@ public:
 
 protected:
     //-----<OUTPUTFORMATTER>------------------------------------------------
-    void write( const char* aOutBuf, int aCount ) throw( IO_ERROR ) override;
+    void write( const char* aOutBuf, int aCount ) override;
     //-----</OUTPUTFORMATTER>-----------------------------------------------
 };
 
@@ -504,14 +504,13 @@ public:
      */
     FILE_OUTPUTFORMATTER(   const wxString& aFileName,
                             const wxChar* aMode = wxT( "wt" ),
-                            char aQuoteChar = '"' )
-        throw( IO_ERROR );
+                            char aQuoteChar = '"' );
 
     ~FILE_OUTPUTFORMATTER();
 
 protected:
     //-----<OUTPUTFORMATTER>------------------------------------------------
-    void write( const char* aOutBuf, int aCount ) throw( IO_ERROR ) override;
+    void write( const char* aOutBuf, int aCount ) override;
     //-----</OUTPUTFORMATTER>-----------------------------------------------
 
     FILE*       m_fp;               ///< takes ownership
@@ -542,7 +541,7 @@ public:
 
 protected:
     //-----<OUTPUTFORMATTER>------------------------------------------------
-    void write( const char* aOutBuf, int aCount ) throw( IO_ERROR ) override;
+    void write( const char* aOutBuf, int aCount ) override;
     //-----</OUTPUTFORMATTER>-----------------------------------------------
 };
 
diff --git a/include/wxBasePcbFrame.h b/include/wxBasePcbFrame.h
index d86a2455a0..5bd389a05a 100644
--- a/include/wxBasePcbFrame.h
+++ b/include/wxBasePcbFrame.h
@@ -95,8 +95,7 @@ protected:
      * @throw IO_ERROR if an I/O error occurs or a #PARSE_ERROR if a file parsing error
      *                 occurs while reading footprint library files.
      */
-    MODULE* loadFootprint( const LIB_ID& aFootprintId )
-        throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception );
+    MODULE* loadFootprint( const LIB_ID& aFootprintId );
 
 public:
     PCB_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType,
diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h
index bcd56f9cd8..91efde8a36 100644
--- a/include/wxPcbStruct.h
+++ b/include/wxPcbStruct.h
@@ -253,8 +253,7 @@ public:
      * @throw IO_ERROR if an I/O error occurs or a #PARSE_ERROR if a file parsing error
      *           occurs while reading footprint library files.
      */
-    void LoadFootprints( NETLIST& aNetlist, REPORTER* aReporter )
-        throw( IO_ERROR, PARSE_ERROR );
+    void LoadFootprints( NETLIST& aNetlist, REPORTER* aReporter );
 
     void OnQuit( wxCommandEvent& event );
 
diff --git a/include/xnode.h b/include/xnode.h
index 59cc6501f1..fce88e3a6f 100644
--- a/include/xnode.h
+++ b/include/xnode.h
@@ -83,7 +83,7 @@ public:
      * @param nestLevel A multiple of the number of spaces to preceed the output with.
      * @throw IO_ERROR if a system error writing the output, such as a full disk.
      */
-    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR );
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel );
 
     /**
      * Function FormatContents
@@ -93,7 +93,7 @@ public:
      * @param nestLevel A multiple of the number of spaces to preceed the output with.
      * @throw IO_ERROR if a system error writing the output, such as a full disk.
      */
-    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR );
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel );
 
 };
 
diff --git a/new/sch_dir_lib_source.cpp b/new/sch_dir_lib_source.cpp
index c91e1b5bcd..4d422a5356 100644
--- a/new/sch_dir_lib_source.cpp
+++ b/new/sch_dir_lib_source.cpp
@@ -288,7 +288,7 @@ STRING DIR_LIB_SOURCE::makeFileName( const STRING& aPartName )
 }
 
 
-void DIR_LIB_SOURCE::readString( STRING* aResult, const STRING& aFileName ) throw( IO_ERROR )
+void DIR_LIB_SOURCE::readString( STRING* aResult, const STRING& aFileName )
 {
     FILE_WRAP   fw = open( aFileName.c_str(), O_RDONLY );
 
@@ -350,7 +350,7 @@ void DIR_LIB_SOURCE::readString( STRING* aResult, const STRING& aFileName ) thro
 }
 
 
-void DIR_LIB_SOURCE::cache() throw( IO_ERROR )
+void DIR_LIB_SOURCE::cache()
 {
     partnames.clear();
     categories.clear();
@@ -360,7 +360,7 @@ void DIR_LIB_SOURCE::cache() throw( IO_ERROR )
 
 
 DIR_LIB_SOURCE::DIR_LIB_SOURCE( const STRING& aDirectoryPath,
-                                const STRING& aOptions ) throw( IO_ERROR ) :
+                                const STRING& aOptions )  :
     useVersioning( strstr( aOptions.c_str(), "useVersioning" ) )
 {
     sourceURI     = aDirectoryPath;
@@ -385,7 +385,6 @@ DIR_LIB_SOURCE::~DIR_LIB_SOURCE()
 
 
 void DIR_LIB_SOURCE::GetCategoricalPartNames( STRINGS* aResults, const STRING& aCategory )
-    throw( IO_ERROR )
 {
     PN_ITER end = aCategory.size() ?
                         partnames.lower_bound( aCategory + char( '/' + 1 ) ) :
@@ -428,7 +427,6 @@ void DIR_LIB_SOURCE::GetCategoricalPartNames( STRINGS* aResults, const STRING& a
 
 
 void DIR_LIB_SOURCE::GetRevisions( STRINGS* aResults, const STRING& aPartName )
-    throw( IO_ERROR )
 {
     aResults->clear();
 
@@ -466,7 +464,6 @@ void DIR_LIB_SOURCE::GetRevisions( STRINGS* aResults, const STRING& aPartName )
 
 
 void DIR_LIB_SOURCE::ReadPart( STRING* aResult, const STRING& aPartName, const STRING& aRev )
-    throw( IO_ERROR )
 {
     STRING      partName = aPartName;
     const char* hasRev   = endsWithRev( partName );
@@ -551,7 +548,6 @@ void DIR_LIB_SOURCE::ReadPart( STRING* aResult, const STRING& aPartName, const S
 
 
 void DIR_LIB_SOURCE::ReadParts( STRINGS* aResults, const STRINGS& aPartNames )
-    throw( IO_ERROR )
 {
     aResults->clear();
 
@@ -563,7 +559,7 @@ void DIR_LIB_SOURCE::ReadParts( STRINGS* aResults, const STRINGS& aPartNames )
 }
 
 
-void DIR_LIB_SOURCE::GetCategories( STRINGS* aResults ) throw( IO_ERROR )
+void DIR_LIB_SOURCE::GetCategories( STRINGS* aResults )
 {
     aResults->clear();
 
@@ -594,7 +590,7 @@ void DIR_LIB_SOURCE::Show()
 #endif
 
 
-void DIR_LIB_SOURCE::cacheOneDir( const STRING& aCategory ) throw( IO_ERROR )
+void DIR_LIB_SOURCE::cacheOneDir( const STRING& aCategory )
 {
     STRING      curDir = sourceURI;
 
diff --git a/new/sch_dir_lib_source.h b/new/sch_dir_lib_source.h
index 9d39352f9e..b5a172c528 100644
--- a/new/sch_dir_lib_source.h
+++ b/new/sch_dir_lib_source.h
@@ -95,7 +95,7 @@ class DIR_LIB_SOURCE : public LIB_SOURCE
      * Function cache
      * [re-]loads the directory cache(s).
      */
-    void cache() throw( IO_ERROR );
+    void cache();
 
     /**
      * Function isCategoryName
@@ -121,7 +121,7 @@ class DIR_LIB_SOURCE : public LIB_SOURCE
      * Function readString
      * reads a Sweet string into aResult.  Candidate for virtual function later.
      */
-    void readString( STRING* aResult, const STRING& aFileName ) throw( IO_ERROR );
+    void readString( STRING* aResult, const STRING& aFileName );
 
     /**
      * Function cacheOneDir
@@ -131,7 +131,7 @@ class DIR_LIB_SOURCE : public LIB_SOURCE
      * only one level of categories is supported.  We know we are in the
      * top most directory if aCategory is empty.
      */
-    void cacheOneDir( const STRING& aCategory ) throw( IO_ERROR );
+    void cacheOneDir( const STRING& aCategory );
 
     /**
      * Function makeFileName
@@ -157,27 +157,23 @@ protected:
      *  tree, otherwise only a single version of each part is recognized, namely the
      *  one without the ".revN[N..]" trailer.
      */
-    DIR_LIB_SOURCE( const STRING& aDirectoryPath, const STRING& aOptions = "" ) throw( IO_ERROR );
+    DIR_LIB_SOURCE( const STRING& aDirectoryPath, const STRING& aOptions = "" );
 
     ~DIR_LIB_SOURCE();
 
     //-----<LIB_SOURCE implementation functions >------------------------------
 
-    void ReadPart( STRING* aResult, const STRING& aPartName, const STRING& aRev = "" )
-        throw( IO_ERROR );
+    void ReadPart( STRING* aResult, const STRING& aPartName, const STRING& aRev = "" );
 
-    void ReadParts( STRINGS* aResults, const STRINGS& aPartNames )
-        throw( IO_ERROR );
+    void ReadParts( STRINGS* aResults, const STRINGS& aPartNames );
 
-    void GetCategories( STRINGS* aResults ) throw( IO_ERROR );
+    void GetCategories( STRINGS* aResults );
 
-    void GetCategoricalPartNames( STRINGS* aResults, const STRING& aCategory = "" )
-        throw( IO_ERROR );
+    void GetCategoricalPartNames( STRINGS* aResults, const STRING& aCategory = "" );
 
-    void GetRevisions( STRINGS* aResults, const STRING& aPartName )
-        throw( IO_ERROR );
+    void GetRevisions( STRINGS* aResults, const STRING& aPartName );
 
-    void FindParts( STRINGS* aResults, const STRING& aQuery ) throw( IO_ERROR )
+    void FindParts( STRINGS* aResults, const STRING& aQuery )
     {
         // @todo
     }
diff --git a/new/sch_lib.cpp b/new/sch_lib.cpp
index a5464fa5d6..5595a34e92 100644
--- a/new/sch_lib.cpp
+++ b/new/sch_lib.cpp
@@ -155,7 +155,7 @@ LIB::~LIB()
 }
 
 
-const PART* LIB::lookupPart( const LPID& aLPID ) throw( IO_ERROR )
+const PART* LIB::lookupPart( const LPID& aLPID )
 {
     if( !parts )
     {
@@ -228,7 +228,7 @@ const PART* LIB::lookupPart( const LPID& aLPID ) throw( IO_ERROR )
 }
 
 
-PART* LIB::LookupPart( const LPID& aLPID, LIB_TABLE* aLibTable ) throw( IO_ERROR )
+PART* LIB::LookupPart( const LPID& aLPID, LIB_TABLE* aLibTable )
 {
     PART*   part = (PART*) lookupPart( aLPID );
 
@@ -264,7 +264,7 @@ PART* LIB::LookupPart( const LPID& aLPID, LIB_TABLE* aLibTable ) throw( IO_ERROR
 
 #if 0 && defined(DEBUG)
 
-void LIB::Test( int argc, char** argv ) throw( IO_ERROR );
+void LIB::Test( int argc, char** argv );
 {
 }
 
diff --git a/new/sch_lib.h b/new/sch_lib.h
index 9a383c31ef..2801d16c78 100644
--- a/new/sch_lib.h
+++ b/new/sch_lib.h
@@ -69,8 +69,7 @@ protected:                  ///< derived classes must implement
      * Function ReadPart
      * fetches @a aPartName's s-expression into @a aResult after clear()ing aResult.
      */
-    virtual void ReadPart( STR_UTF* aResult, const STRING& aPartName, const STRING& aRev = "" )
-        throw( IO_ERROR ) = 0;
+    virtual void ReadPart( STR_UTF* aResult, const STRING& aPartName, const STRING& aRev = "" ) = 0;
 
     /**
      * Function ReadParts
@@ -80,15 +79,13 @@ protected:                  ///< derived classes must implement
      *        does not have a version string, then the most recent version is fetched.
      * @param aResults receives the s-expressions
      */
-    virtual void ReadParts( STR_UTFS* aResults, const STRINGS& aPartNames )
-        throw( IO_ERROR ) = 0;
+    virtual void ReadParts( STR_UTFS* aResults, const STRINGS& aPartNames ) = 0;
 
     /**
      * Function GetCategories
      * fetches all categories present in the library source into @a aResults
      */
-    virtual void GetCategories( STRINGS* aResults )
-        throw( IO_ERROR ) = 0;
+    virtual void GetCategories( STRINGS* aResults ) = 0;
 
     /**
      * Function GetCategoricalPartNames
@@ -99,8 +96,7 @@ protected:                  ///< derived classes must implement
      *
      * @param aResults is a place to put the fetched result, one category per STRING.
      */
-    virtual void GetCategoricalPartNames( STRINGS* aResults, const STRING& aCategory="" )
-        throw( IO_ERROR ) = 0;
+    virtual void GetCategoricalPartNames( STRINGS* aResults, const STRING& aCategory="" ) = 0;
 
     /**
      * Function GetRevisions
@@ -112,8 +108,7 @@ protected:                  ///< derived classes must implement
      * the only result.  This means aPartName is present in the libsource, only once
      * without a revision.  This is a special case.
      */
-    virtual void GetRevisions( STRINGS* aResults, const STRING& aPartName )
-        throw( IO_ERROR ) = 0;
+    virtual void GetRevisions( STRINGS* aResults, const STRING& aPartName ) = 0;
 
     /**
      * Function FindParts
@@ -131,8 +126,7 @@ protected:                  ///< derived classes must implement
      *
      * @param aResults is a place to put the fetched part names, one part per STRING.
      */
-    virtual void FindParts( STRINGS* aResults, const STRING& aQuery )
-        throw( IO_ERROR ) = 0;
+    virtual void FindParts( STRINGS* aResults, const STRING& aQuery ) = 0;
 
     //-----</abstract for implementors>--------------------------------------
 
@@ -179,8 +173,7 @@ protected:                  ///< derived classes must implement
      * @return STRING - if the LIB_SINK support revision numbering, then return a
      *   revision name that was next in the sequence, e.g. "rev22", else "".
      */
-    virtual STRING WritePart( const STRING& aPartName, const STRING& aSExpression )
-        throw( IO_ERROR ) = 0;
+    virtual STRING WritePart( const STRING& aPartName, const STRING& aSExpression ) = 0;
 
 protected:
     STRING      sinkType;
@@ -255,21 +248,20 @@ public:
      *
      * @throw IO_ERROR if the part cannot be found or loaded.
      */
-    PART* LookupPart( const LPID& aLPID, LIB_TABLE* aLibTable )
-        throw( IO_ERROR );
+    PART* LookupPart( const LPID& aLPID, LIB_TABLE* aLibTable );
 
     /**
      * Function ReloadPart
      * will reload the part assuming the library source has a changed content
      * for it.
      */
-    void ReloadPart( PART* aPart ) throw( IO_ERROR );
+    void ReloadPart( PART* aPart );
 
     /**
      * Function GetCategories
      * returns all categories of parts within this LIB into @a aResults.
      */
-    STRINGS GetCategories() throw( IO_ERROR );
+    STRINGS GetCategories();
 
     /**
      * Function GetCategoricalPartNames
@@ -277,7 +269,7 @@ public:
      * creates cache entries for the very same parts if they do not already exist
      * in this LIB (i.e. cache).
      */
-    STRINGS GetCategoricalPartNames( const STRING& aCategory = "" ) throw( IO_ERROR );
+    STRINGS GetCategoricalPartNames( const STRING& aCategory = "" );
 
 
     //-----<.use delegates: source and sink>--------------------------------
@@ -287,16 +279,16 @@ public:
      * saves the part to non-volatile storage and returns the next new revision
      * name in the sequence established by the LIB_SINK.
      */
-    STRING WritePart( PART* aPart ) throw( IO_ERROR );
+    STRING WritePart( PART* aPart );
 
-    void SetPartBody( PART* aPart, const STRING& aSExpression ) throw( IO_ERROR );
+    void SetPartBody( PART* aPart, const STRING& aSExpression );
 
     /**
      * Function GetRevisions
      * returns the revisions of @a aPartName that are present in this LIB.
      * The returned STRINGS will look like "rev1", "rev2", etc.
      */
-    STRINGS GetRevisions( const STRING& aPartName ) throw( IO_ERROR );
+    STRINGS GetRevisions( const STRING& aPartName );
 
     /**
      * Function FindParts
@@ -311,7 +303,7 @@ public:
      *  here is an RPN s-expression that uses (and ..) and (or ..) operators. For example
      *  "(and (footprint 0805)(value 33ohm)(category passives))"
      */
-    STRINGS FindParts( const STRING& aQuery ) throw( IO_ERROR )
+    STRINGS FindParts( const STRING& aQuery )
     {
         // run the query on the cached data first for any PARTS which are fully
         // parsed (i.e. cached), then on the LIB_SOURCE to find any that
@@ -321,7 +313,7 @@ public:
     }
 
 #if defined(DEBUG)
-    static void Test( int argc, char** argv ) throw( IO_ERROR );
+    static void Test( int argc, char** argv );
 #endif
 
 protected:
@@ -356,7 +348,7 @@ protected:
      *
      * @return PART* - the cached PART, or NULL if not found.  No ownership transferred.
      */
-    const PART* lookupPart( const LPID& aLPID ) throw( IO_ERROR );
+    const PART* lookupPart( const LPID& aLPID );
 };
 
 
diff --git a/new/sch_lib_table.cpp b/new/sch_lib_table.cpp
index 0e4fbb0903..6773c279bb 100644
--- a/new/sch_lib_table.cpp
+++ b/new/sch_lib_table.cpp
@@ -35,7 +35,7 @@ using namespace SCH;
 using namespace LT;         // tokens, enum T for LIB_TABLE
 
 
-LIB_TABLE::LIB_TABLE( LIB_TABLE* aFallBackTable ) :
+LIB_TABLE::LIB_TABLE( LIB_TABLE* aFallBackTable ):
     fallBack( aFallBackTable )
 {
     // not copying fall back, simply search aFallBackTable separately
@@ -43,7 +43,7 @@ LIB_TABLE::LIB_TABLE( LIB_TABLE* aFallBackTable ) :
 }
 
 
-void LIB_TABLE::Parse( SCH_LIB_TABLE_LEXER* in ) throw( IO_ERROR, PARSE_ERROR )
+void LIB_TABLE::Parse( SCH_LIB_TABLE_LEXER* in )
 {
     /*  grammar:
 
@@ -143,7 +143,6 @@ void LIB_TABLE::Parse( SCH_LIB_TABLE_LEXER* in ) throw( IO_ERROR, PARSE_ERROR )
 
 
 void LIB_TABLE::Format( OUTPUTFORMATTER* out, int nestLevel ) const
-    throw( IO_ERROR )
 {
     out->Print( nestLevel, "(lib_table\n" );
     for( ROWS_CITER it = rows.begin();  it != rows.end();  ++it )
@@ -153,7 +152,6 @@ void LIB_TABLE::Format( OUTPUTFORMATTER* out, int nestLevel ) const
 
 
 void LIB_TABLE::ROW::Format( OUTPUTFORMATTER* out, int nestLevel ) const
-    throw( IO_ERROR )
 {
     out->Print( nestLevel, "(lib (logical %s)(type %s)(full_uri %s)(options %s))\n",
         out->Quotes( logicalName ).c_str(),
@@ -190,9 +188,7 @@ STRINGS LIB_TABLE::GetLogicalLibs()
     return ret;
 }
 
-
 PART* LIB_TABLE::LookupPart( const LPID& aLPID, LIB* aLocalLib )
-    throw( IO_ERROR )
 {
     LIB* lib = lookupLib( aLPID, aLocalLib );
 
@@ -201,7 +197,6 @@ PART* LIB_TABLE::LookupPart( const LPID& aLPID, LIB* aLocalLib )
 
 
 LIB* LIB_TABLE::lookupLib( const LPID& aLPID, LIB* aFallBackLib )
-    throw( IO_ERROR )
 {
     if( aLPID.GetLogicalLib().size() )
     {
@@ -234,7 +229,7 @@ LIB* LIB_TABLE::lookupLib( const LPID& aLPID, LIB* aFallBackLib )
 }
 
 
-void LIB_TABLE::loadLib( ROW* aRow ) throw( IO_ERROR )
+void LIB_TABLE::loadLib( ROW* aRow )
 {
     assert( !aRow->lib );   // caller should know better.
 
diff --git a/new/sch_lib_table.h b/new/sch_lib_table.h
index d05dfdb569..dc7c899947 100644
--- a/new/sch_lib_table.h
+++ b/new/sch_lib_table.h
@@ -146,8 +146,7 @@ public:
          * @param nestLevel is the indentation level to base all lines of the output.
          *   Actual indentation will be 2 spaces for each nestLevel.
          */
-        void Format( OUTPUTFORMATTER* out, int nestLevel ) const
-            throw( IO_ERROR );
+        void Format( OUTPUTFORMATTER* out, int nestLevel ) const;
 
     protected:
 
@@ -246,7 +245,7 @@ public:
      * @param nestLevel is the indentation level to base all lines of the output.
      *   Actual indentation will be 2 spaces for each nestLevel.
      */
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* out, int nestLevel ) const;
 
     /**
      * Function LookupPart
@@ -268,7 +267,7 @@ public:
      *
      * @throw IO_ERROR if any problem occurs or if the part cannot be found.
      */
-    PART* LookupPart( const LPID& aLogicalPartID, LIB* aFallBackLib = NULL ) throw( IO_ERROR );
+    PART* LookupPart( const LPID& aLogicalPartID, LIB* aFallBackLib = NULL );
 
     /**
      * Function GetLogicalLibs
@@ -366,14 +365,14 @@ private:
      *
      * @throw IO_ERROR if any problem occurs or if the LIB cannot be found or cannot be loaded.
      */
-    LIB* lookupLib( const LPID& aLogicalPartID, LIB* aFallBackLib = NULL ) throw( IO_ERROR );
+    LIB* lookupLib( const LPID& aLogicalPartID, LIB* aFallBackLib = NULL );
 
     /**
      * Function loadLib
      * loads a LIB using information in @a aRow.  Call only if LIB not
      * already loaded.
      */
-    void loadLib( ROW* aRow ) throw( IO_ERROR );
+    void loadLib( ROW* aRow );
 
     typedef boost::ptr_map<STRING, ROW>     ROWS;
     typedef ROWS::iterator                  ROWS_ITER;
diff --git a/new/sch_part.cpp b/new/sch_part.cpp
index 730ded9a11..6c359541d7 100644
--- a/new/sch_part.cpp
+++ b/new/sch_part.cpp
@@ -37,7 +37,6 @@
  * outputs a formatted "(at X Y [ANGLE])" s-expression
  */
  static void formatAt( OUTPUTFORMATTER* out, const SCH::POINT& aPos, ANGLE aAngle, int indent=0 )
-    throw( IO_ERROR )
 {
     // if( aPos.x || aPos.y || aAngle )
     {
@@ -48,7 +47,6 @@
 }
 
 static void formatStroke( OUTPUTFORMATTER* out, STROKE aStroke, int indent=0 )
-    throw( IO_ERROR )
 {
     if( aStroke == STROKE_DEFAULT )
         out->Print( indent, "(stroke %.6g)", InternalToWidth( aStroke ) );
@@ -318,7 +316,6 @@ PROPERTIES::iterator PART::propertyFind( const wxString& aPropertyName )
 
 
 void PART::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     out->Print( indent, "(part %s", partNameAndRev.c_str() );
 
@@ -392,7 +389,6 @@ void PART::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
 
 
 void PROPERTY::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     wxASSERT( owner );      // all PROPERTYs should have an owner.
 
@@ -433,7 +429,6 @@ TEXT_EFFECTS* PROPERTY::EffectsLookup()
 
 
 void TEXT_EFFECTS::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     if( propName.IsEmpty() )
         out->Print( indent, "(effects " );
@@ -451,7 +446,6 @@ void TEXT_EFFECTS::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
 
 
 void FONT::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     if( italic || bold || !name.IsEmpty() || size.height != FONTZ_DEFAULT || size.width != FONTZ_DEFAULT )
     {
@@ -476,7 +470,6 @@ void FONT::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
 
 
 void PIN::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     bool    hasSignal = !signal.text.IsEmpty();
     bool    hasPad    = !pad.text.IsEmpty();
@@ -516,7 +509,6 @@ PIN::~PIN()
 
 
 void PINTEXT::Format( OUTPUTFORMATTER* out, const char* aElement, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     out->Print( indent, "(%s %s", aElement, out->Quotew( text ).c_str() );
 
@@ -530,7 +522,6 @@ void PINTEXT::Format( OUTPUTFORMATTER* out, const char* aElement, int indent, in
 
 
 void POLY_LINE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     out->Print( indent, "(%s ",  pts.size() == 2 ? "line" : "polyline" );
     formatContents( out, indent, ctl );
@@ -538,7 +529,6 @@ void POLY_LINE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
 
 
 void POLY_LINE::formatContents(  OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     formatStroke( out, stroke );
 
@@ -576,15 +566,12 @@ void POLY_LINE::formatContents(  OUTPUTFORMATTER* out, int indent, int ctl ) con
 
 
 void BEZIER::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     out->Print( indent, "(bezier " );
     formatContents( out, indent, ctl );     // inherited from POLY_LINE
 }
 
-
 void RECTANGLE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     // (rectangle (start X Y) (end X Y) [(stroke WIDTH)] (fill FILL_TYPE))
 
@@ -603,7 +590,6 @@ void RECTANGLE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
 
 
 void CIRCLE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     /*
         (circle (center X Y)(radius LENGTH) [(stroke WIDTH)] (fill FILL_TYPE))
@@ -623,7 +609,6 @@ void CIRCLE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
 
 
 void ARC::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     /*
         (arc (pos X Y)(radius RADIUS)(start X Y)(end X Y) [(stroke WIDTH)] (fill FILL_TYPE))
@@ -646,7 +631,6 @@ void ARC::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
 
 
 void GR_TEXT::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     /*
         (text "This is the text that gets drawn."
diff --git a/new/sch_part.h b/new/sch_part.h
index 2340ff42a0..ea0bb55423 100644
--- a/new/sch_part.h
+++ b/new/sch_part.h
@@ -177,8 +177,7 @@ public:
         bold( false )
     {}
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     // trust compiler to write its own assignment operator for this class OK.
 };
@@ -200,8 +199,7 @@ struct TEXT_EFFECTS
         property( 0 )
     {}
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     // trust compiler to write its own assignment operator for this class OK.
 };
@@ -246,7 +244,6 @@ public:
      * outputs this object to @a aFormatter in s-expression form.
      */
     virtual void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR )
     {}
 };
 
@@ -263,8 +260,7 @@ protected:
     int         fillType;       // T_none, T_filled, or T_transparent
     POINTS      pts;
 
-    void formatContents( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void formatContents( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
 public:
     POLY_LINE( PART* aOwner ) :
@@ -274,8 +270,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -299,8 +294,7 @@ public:
         fillType  = PR::T_none;
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -330,8 +324,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -362,8 +355,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -396,8 +388,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -441,8 +432,7 @@ public:
         return SWEET_LEXER::TokenName( PR::T( aJustify ) );
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -507,8 +497,7 @@ public:
         return effects;
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -529,8 +518,7 @@ struct PINTEXT
         isVisible( true )
     {}
 
-    void Format( OUTPUTFORMATTER* aFormatter, const char* aElement, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, const char* aElement, int aNestLevel, int aControlBits ) const;
 };
 
 
@@ -565,8 +553,7 @@ public:
         return SWEET_LEXER::TokenName( PR::T( shape ) );
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -626,7 +613,7 @@ public:
      * instead an exception would be thrown.
      * @throw IO_ERROR if any problem occurs or if the part cannot be found.
      */
-    PART* Lookup( LIB_TABLE* aLibTable, LIB* aFallBackLib ) throw( IO_ERROR )
+    PART* Lookup( LIB_TABLE* aLibTable, LIB* aFallBackLib )
     {
         if( !part )
         {
@@ -725,8 +712,7 @@ public:
      * @param aControlBits are bit flags ORed together which control how the output
      *  is done.
      */
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits = 0 ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits = 0 ) const;
 
     /**
      * Function PropDelete
diff --git a/pagelayout_editor/page_layout_writer.cpp b/pagelayout_editor/page_layout_writer.cpp
index ecc242ad4f..b477334b24 100644
--- a/pagelayout_editor/page_layout_writer.cpp
+++ b/pagelayout_editor/page_layout_writer.cpp
@@ -63,26 +63,21 @@ protected:
     virtual ~WORKSHEET_LAYOUT_IO() {}
 
 public:
-    void Format( WORKSHEET_LAYOUT* aPageLayout ) const
-        throw( IO_ERROR );
+    void Format( WORKSHEET_LAYOUT* aPageLayout ) const;
 
-    void Format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const
-        throw( IO_ERROR );
+    void Format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const;
 
 private:
-    void format( WORKSHEET_LAYOUT* aPageLayout ) const
-        throw( IO_ERROR );
+    void format( WORKSHEET_LAYOUT* aPageLayout ) const;
 
-    void format( WORKSHEET_DATAITEM_TEXT* aItem, int aNestLevel ) const throw( IO_ERROR );
-    void format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const throw( IO_ERROR );
+    void format( WORKSHEET_DATAITEM_TEXT* aItem, int aNestLevel ) const;
+    void format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const;
     void format( WORKSHEET_DATAITEM_POLYPOLYGON* aItem, int aNestLevel )
-                 const throw( IO_ERROR );
-    void format( WORKSHEET_DATAITEM_BITMAP* aItem, int aNestLevel ) const
-                 throw( IO_ERROR );
-    void formatCoordinate( const char * aToken, POINT_COORD & aCoord ) const
-                           throw( IO_ERROR );
-    void formatRepeatParameters( WORKSHEET_DATAITEM* aItem ) const throw( IO_ERROR );
-    void formatOptions( WORKSHEET_DATAITEM* aItem ) const throw( IO_ERROR );
+                 const;
+    void format( WORKSHEET_DATAITEM_BITMAP* aItem, int aNestLevel ) const;
+    void formatCoordinate( const char * aToken, POINT_COORD & aCoord ) const;
+    void formatRepeatParameters( WORKSHEET_DATAITEM* aItem ) const;
+    void formatOptions( WORKSHEET_DATAITEM* aItem ) const;
 };
 
 
@@ -162,7 +157,6 @@ void WORKSHEET_LAYOUT::SaveInString( wxString& aOutputString )
 
 
 void WORKSHEET_LAYOUT_IO::Format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     switch( aItem->GetType() )
     {
@@ -190,7 +184,6 @@ void WORKSHEET_LAYOUT_IO::Format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) co
 
 
 void WORKSHEET_LAYOUT_IO::Format( WORKSHEET_LAYOUT* aPageLayout ) const
-    throw( IO_ERROR )
 {
     LOCALE_IO   toggle;     // switch on/off the locale "C" notation
 
@@ -230,7 +223,6 @@ void WORKSHEET_LAYOUT_IO::Format( WORKSHEET_LAYOUT* aPageLayout ) const
 
 
 void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_TEXT* aItem, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     m_out->Print( aNestLevel, "(%s", getTokenName( T_tbtext ) );
     m_out->Print( 0, " %s", m_out->Quotew( aItem->m_TextBase ).c_str() );
@@ -311,7 +303,6 @@ void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_TEXT* aItem, int aNestLevel
 }
 
 void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     if( aItem->GetType() == WORKSHEET_DATAITEM::WS_RECT )
         m_out->Print( aNestLevel, "(%s", getTokenName( T_rect ) );
@@ -335,7 +326,6 @@ void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) co
 
 
 void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_POLYPOLYGON* aItem, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     m_out->Print( aNestLevel, "(%s", getTokenName( T_polygon ) );
     m_out->Print( 0, " (%s %s)", getTokenName( T_name ),
@@ -386,7 +376,6 @@ void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_POLYPOLYGON* aItem, int aNe
 
 
 void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_BITMAP* aItem, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     m_out->Print( aNestLevel, "(%s", getTokenName( T_bitmap ) );
     m_out->Print( 0, " (%s %s)", getTokenName( T_name ),
@@ -416,7 +405,6 @@ void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_BITMAP* aItem, int aNestLev
 
 void WORKSHEET_LAYOUT_IO::formatCoordinate( const char * aToken,
                                             POINT_COORD & aCoord ) const
-                       throw( IO_ERROR )
 {
     m_out->Print( 0, " (%s %s %s", aToken,
                   double2Str( aCoord.m_Pos.x ).c_str(),
@@ -445,7 +433,6 @@ void WORKSHEET_LAYOUT_IO::formatCoordinate( const char * aToken,
 
 
 void WORKSHEET_LAYOUT_IO::formatRepeatParameters( WORKSHEET_DATAITEM* aItem ) const
-    throw( IO_ERROR )
 {
     if( aItem->m_RepeatCount <= 1 )
         return;
@@ -465,7 +452,6 @@ void WORKSHEET_LAYOUT_IO::formatRepeatParameters( WORKSHEET_DATAITEM* aItem ) co
 
 
 void WORKSHEET_LAYOUT_IO::formatOptions( WORKSHEET_DATAITEM* aItem ) const
-                       throw( IO_ERROR )
 {
     switch( aItem->GetPage1Option() )
     {
diff --git a/pcb_calculator/datafile_read_write.cpp b/pcb_calculator/datafile_read_write.cpp
index b0c795ea8f..349dd411d8 100644
--- a/pcb_calculator/datafile_read_write.cpp
+++ b/pcb_calculator/datafile_read_write.cpp
@@ -123,7 +123,7 @@ static const char* regtype_str[] =
     "normal", "3terminal"
 };
 
-int PCB_CALCULATOR_DATAFILE::WriteHeader( OUTPUTFORMATTER* aFormatter ) const throw( IO_ERROR )
+int PCB_CALCULATOR_DATAFILE::WriteHeader( OUTPUTFORMATTER* aFormatter ) const
 {
     int nestlevel = 0;
     aFormatter->Print( nestlevel++, "(datafile\n");
@@ -138,7 +138,7 @@ int PCB_CALCULATOR_DATAFILE::WriteHeader( OUTPUTFORMATTER* aFormatter ) const th
 }
 
 void PCB_CALCULATOR_DATAFILE::Format( OUTPUTFORMATTER* aFormatter,
-                              int aNestLevel ) const throw( IO_ERROR )
+                              int aNestLevel ) const
 {
     // Write regulators list:
     aFormatter->Print( aNestLevel++, "(%s\n", getTokenName( T_regulators ) );
@@ -163,7 +163,6 @@ void PCB_CALCULATOR_DATAFILE::Format( OUTPUTFORMATTER* aFormatter,
 
 
 void PCB_CALCULATOR_DATAFILE::Parse( PCB_CALCULATOR_DATAFILE_PARSER* aParser )
-                              throw( IO_ERROR, PARSE_ERROR )
 {
     aParser->Parse( this );
 }
@@ -184,7 +183,7 @@ PCB_CALCULATOR_DATAFILE_PARSER::PCB_CALCULATOR_DATAFILE_PARSER( char* aLine, wxS
 }
 
 
-void PCB_CALCULATOR_DATAFILE_PARSER::Parse( PCB_CALCULATOR_DATAFILE* aDataList ) throw( IO_ERROR, PARSE_ERROR )
+void PCB_CALCULATOR_DATAFILE_PARSER::Parse( PCB_CALCULATOR_DATAFILE* aDataList )
 {
     T token;
     while( ( token = NextTok() ) != T_EOF)
@@ -203,7 +202,6 @@ void PCB_CALCULATOR_DATAFILE_PARSER::Parse( PCB_CALCULATOR_DATAFILE* aDataList )
 }
 
 void PCB_CALCULATOR_DATAFILE_PARSER::ParseRegulatorDescr( PCB_CALCULATOR_DATAFILE* aDataList )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
     wxString name;
diff --git a/pcb_calculator/datafile_read_write.h b/pcb_calculator/datafile_read_write.h
index 1f04bde37b..ecf303d635 100644
--- a/pcb_calculator/datafile_read_write.h
+++ b/pcb_calculator/datafile_read_write.h
@@ -42,9 +42,9 @@ protected:
 public:
     PCB_CALCULATOR_DATAFILE( REGULATOR_LIST * aList );
 
-    int         WriteHeader( OUTPUTFORMATTER* aFormatter ) const throw( IO_ERROR );
-    void        Format( OUTPUTFORMATTER* aFormatter, int aNestLevel ) const throw( IO_ERROR );
-    void        Parse( PCB_CALCULATOR_DATAFILE_PARSER* aParser ) throw( IO_ERROR, PARSE_ERROR );
+    int         WriteHeader( OUTPUTFORMATTER* aFormatter ) const ;
+    void        Format( OUTPUTFORMATTER* aFormatter, int aNestLevel ) const ;
+    void        Parse( PCB_CALCULATOR_DATAFILE_PARSER* aParser );
 };
 
 
@@ -58,8 +58,8 @@ public:
     PCB_CALCULATOR_DATAFILE_PARSER( LINE_READER* aReader );
     PCB_CALCULATOR_DATAFILE_PARSER( char* aLine, wxString aSource );
     LINE_READER* GetReader() { return reader; };
-    void Parse( PCB_CALCULATOR_DATAFILE* aDataList ) throw( IO_ERROR, PARSE_ERROR );
-    void ParseRegulatorDescr( PCB_CALCULATOR_DATAFILE* aDataList ) throw( IO_ERROR, PARSE_ERROR );
+    void Parse( PCB_CALCULATOR_DATAFILE* aDataList );
+    void ParseRegulatorDescr( PCB_CALCULATOR_DATAFILE* aDataList );
 };
 
 #endif // PDATAFILE_READ_WRITE_H_
diff --git a/pcbnew/class_netclass.cpp b/pcbnew/class_netclass.cpp
index c10f7c8cbb..8be795da09 100644
--- a/pcbnew/class_netclass.cpp
+++ b/pcbnew/class_netclass.cpp
@@ -249,7 +249,6 @@ void NETCLASS::Show( int nestLevel, std::ostream& os ) const
 
 
 void NETCLASS::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-    throw( IO_ERROR )
 {
     aFormatter->Print( aNestLevel, "(net_class %s %s\n",
                        aFormatter->Quotew( GetName() ).c_str(),
diff --git a/pcbnew/class_netclass.h b/pcbnew/class_netclass.h
index 13eb4f8152..6bcdd8a33e 100644
--- a/pcbnew/class_netclass.h
+++ b/pcbnew/class_netclass.h
@@ -210,8 +210,7 @@ public:
      * @param aControlBits The control bit definition for object specific formatting.
      * @throw IO_ERROR on write error.
      */
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
 #if defined(DEBUG)
     void Show( int nestLevel, std::ostream& os ) const;
diff --git a/pcbnew/github/github_plugin.cpp b/pcbnew/github/github_plugin.cpp
index 0f824cc076..0ca3806647 100644
--- a/pcbnew/github/github_plugin.cpp
+++ b/pcbnew/github/github_plugin.cpp
@@ -529,7 +529,7 @@ bool GITHUB_PLUGIN::repoURL_zipURL( const wxString& aRepoURL, std::string* aZipU
 }
 
 
-void GITHUB_PLUGIN::remoteGetZip( const wxString& aRepoURL ) throw( IO_ERROR )
+void GITHUB_PLUGIN::remoteGetZip( const wxString& aRepoURL )
 {
     std::string  zip_url;
 
diff --git a/pcbnew/github/github_plugin.h b/pcbnew/github/github_plugin.h
index f571ce4b20..76b0e2ef9c 100644
--- a/pcbnew/github/github_plugin.h
+++ b/pcbnew/github/github_plugin.h
@@ -221,7 +221,7 @@ protected:
      * is received into the m_input_stream. If the image has already been stored,
      * do nothing.
      */
-    void remoteGetZip( const wxString& aRepoURL ) throw( IO_ERROR );
+    void remoteGetZip( const wxString& aRepoURL );
 
     wxString    m_lib_path;     ///< from aLibraryPath, something like https://github.com/liftoff-sr/pretty_footprints
     std::string m_zip_image;    ///< byte image of the zip file in its entirety.
diff --git a/pcbnew/gpcb_plugin.cpp b/pcbnew/gpcb_plugin.cpp
index eb4d0d7c2d..a4a7f5a196 100644
--- a/pcbnew/gpcb_plugin.cpp
+++ b/pcbnew/gpcb_plugin.cpp
@@ -187,7 +187,7 @@ class GPCB_FPL_CACHE
     wxDateTime      m_mod_time;     /// Footprint library path modified time stamp.
     MODULE_MAP      m_modules;      /// Map of footprint file name per MODULE*.
 
-    MODULE* parseMODULE( LINE_READER* aLineReader ) throw( IO_ERROR, PARSE_ERROR );
+    MODULE* parseMODULE( LINE_READER* aLineReader );
 
     /**
      * Function testFlags
@@ -418,7 +418,7 @@ bool GPCB_FPL_CACHE::IsModified( const wxString& aLibPath, const wxString& aFoot
 }
 
 
-MODULE* GPCB_FPL_CACHE::parseMODULE( LINE_READER* aLineReader ) throw( IO_ERROR, PARSE_ERROR )
+MODULE* GPCB_FPL_CACHE::parseMODULE( LINE_READER* aLineReader )
 {
     #define TEXT_DEFAULT_SIZE  ( 40*IU_PER_MILS )
     #define OLD_GPCB_UNIT_CONV IU_PER_MILS
diff --git a/pcbnew/kicad_netlist_reader.cpp b/pcbnew/kicad_netlist_reader.cpp
index c3794863bb..c78c54deb2 100644
--- a/pcbnew/kicad_netlist_reader.cpp
+++ b/pcbnew/kicad_netlist_reader.cpp
@@ -35,7 +35,7 @@
 using namespace NL_T;
 
 
-void KICAD_NETLIST_READER::LoadNetlist() throw ( IO_ERROR, PARSE_ERROR, boost::bad_pointer )
+void KICAD_NETLIST_READER::LoadNetlist()
 {
     m_parser->Parse();
 
@@ -61,7 +61,7 @@ KICAD_NETLIST_PARSER::KICAD_NETLIST_PARSER( LINE_READER* aReader, NETLIST* aNetl
 }
 
 
-void KICAD_NETLIST_PARSER::skipCurrent() throw( IO_ERROR, PARSE_ERROR )
+void KICAD_NETLIST_PARSER::skipCurrent()
 {
     int curr_level = 0;
 
@@ -81,7 +81,7 @@ void KICAD_NETLIST_PARSER::skipCurrent() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void KICAD_NETLIST_PARSER::Parse() throw( IO_ERROR, PARSE_ERROR, boost::bad_pointer )
+void KICAD_NETLIST_PARSER::Parse()
 {
     int plevel = 0;     // the count of ')' to read and end of file,
                         // after parsing all sections
@@ -177,7 +177,7 @@ void KICAD_NETLIST_PARSER::Parse() throw( IO_ERROR, PARSE_ERROR, boost::bad_poin
 }
 
 
-void KICAD_NETLIST_PARSER::parseNet() throw( IO_ERROR, PARSE_ERROR )
+void KICAD_NETLIST_PARSER::parseNet()
 {
     /* Parses a section like
      * (net (code 20) (name /PC-A0)
@@ -268,7 +268,7 @@ void KICAD_NETLIST_PARSER::parseNet() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void KICAD_NETLIST_PARSER::parseComponent() throw( IO_ERROR, PARSE_ERROR, boost::bad_pointer )
+void KICAD_NETLIST_PARSER::parseComponent()
 {
    /* Parses a section like
      * (comp (ref P1)
@@ -380,7 +380,7 @@ void KICAD_NETLIST_PARSER::parseComponent() throw( IO_ERROR, PARSE_ERROR, boost:
 }
 
 
-void KICAD_NETLIST_PARSER::parseLibPartList() throw( IO_ERROR, PARSE_ERROR )
+void KICAD_NETLIST_PARSER::parseLibPartList()
 {
    /* Parses a section like
     *   (libpart (lib device) (part C)
diff --git a/pcbnew/kicad_plugin.cpp b/pcbnew/kicad_plugin.cpp
index fb439f0572..8fd3714040 100644
--- a/pcbnew/kicad_plugin.cpp
+++ b/pcbnew/kicad_plugin.cpp
@@ -432,7 +432,6 @@ void PCB_IO::Save( const wxString& aFileName, BOARD* aBoard, const PROPERTIES* a
 
 
 BOARD_ITEM* PCB_IO::Parse( const wxString& aClipboardSourceInput )
-    throw( FUTURE_FORMAT_ERROR, PARSE_ERROR, IO_ERROR )
 {
     std::string input = TO_UTF8( aClipboardSourceInput );
 
@@ -455,7 +454,6 @@ BOARD_ITEM* PCB_IO::Parse( const wxString& aClipboardSourceInput )
 
 
 void PCB_IO::Format( BOARD_ITEM* aItem, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     LOCALE_IO   toggle;     // public API function, perform anything convenient for caller
 
@@ -527,7 +525,6 @@ void PCB_IO::formatLayer( const BOARD_ITEM* aItem ) const
 
 
 void PCB_IO::format( BOARD* aBoard, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     const BOARD_DESIGN_SETTINGS& dsnSettings = aBoard->GetDesignSettings();
 
@@ -784,7 +781,6 @@ void PCB_IO::format( BOARD* aBoard, int aNestLevel ) const
 
 
 void PCB_IO::format( DIMENSION* aDimension, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     m_out->Print( aNestLevel, "(dimension %s (width %s)",
                   FMT_IU( aDimension->GetValue() ).c_str(),
@@ -846,7 +842,6 @@ void PCB_IO::format( DIMENSION* aDimension, int aNestLevel ) const
 
 
 void PCB_IO::format( DRAWSEGMENT* aSegment, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     unsigned i;
 
@@ -912,7 +907,6 @@ void PCB_IO::format( DRAWSEGMENT* aSegment, int aNestLevel ) const
 
 
 void PCB_IO::format( EDGE_MODULE* aModuleDrawing, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     switch( aModuleDrawing->GetShape() )
     {
@@ -976,7 +970,6 @@ void PCB_IO::format( EDGE_MODULE* aModuleDrawing, int aNestLevel ) const
 
 
 void PCB_IO::format( PCB_TARGET* aTarget, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     m_out->Print( aNestLevel, "(target %s (at %s) (size %s)",
                   ( aTarget->GetShape() ) ? "x" : "plus",
@@ -996,7 +989,6 @@ void PCB_IO::format( PCB_TARGET* aTarget, int aNestLevel ) const
 
 
 void PCB_IO::format( MODULE* aModule, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     if( !( m_ctl & CTL_OMIT_INITIAL_COMMENTS ) )
     {
@@ -1147,7 +1139,6 @@ void PCB_IO::format( MODULE* aModule, int aNestLevel ) const
 
 
 void PCB_IO::formatLayers( LSET aLayerMask, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     std::string  output;
 
@@ -1246,7 +1237,6 @@ void PCB_IO::formatLayers( LSET aLayerMask, int aNestLevel ) const
 
 
 void PCB_IO::format( D_PAD* aPad, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     const char* shape;
 
@@ -1365,7 +1355,6 @@ void PCB_IO::format( D_PAD* aPad, int aNestLevel ) const
 
 
 void PCB_IO::format( TEXTE_PCB* aText, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     m_out->Print( aNestLevel, "(gr_text %s (at %s",
                   m_out->Quotew( aText->GetText() ).c_str(),
@@ -1390,7 +1379,6 @@ void PCB_IO::format( TEXTE_PCB* aText, int aNestLevel ) const
 
 
 void PCB_IO::format( TEXTE_MODULE* aText, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     wxString type;
 
@@ -1448,7 +1436,6 @@ void PCB_IO::format( TEXTE_MODULE* aText, int aNestLevel ) const
 
 
 void PCB_IO::format( TRACK* aTrack, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     if( aTrack->Type() == PCB_VIA_T )
     {
@@ -1514,7 +1501,6 @@ void PCB_IO::format( TRACK* aTrack, int aNestLevel ) const
 
 
 void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     // Save the NET info; For keepout zones, net code and net name are irrelevant
     // so be sure a dummy value is stored, just for ZONE_CONTAINER compatibility
diff --git a/pcbnew/kicad_plugin.h b/pcbnew/kicad_plugin.h
index 9a5f362e23..4993b6eb98 100644
--- a/pcbnew/kicad_plugin.h
+++ b/pcbnew/kicad_plugin.h
@@ -145,8 +145,7 @@ public:
      * @param aNestLevel The indentation nest level.
      * @throw IO_ERROR on write error.
      */
-    void Format( BOARD_ITEM* aItem, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void Format( BOARD_ITEM* aItem, int aNestLevel = 0 ) const;
 
     std::string GetStringOutput( bool doClear )
     {
@@ -159,8 +158,7 @@ public:
 
     void SetOutputFormatter( OUTPUTFORMATTER* aFormatter ) { m_out = aFormatter; }
 
-    BOARD_ITEM* Parse( const wxString& aClipboardSourceInput )
-        throw( FUTURE_FORMAT_ERROR, PARSE_ERROR, IO_ERROR );
+    BOARD_ITEM* Parse( const wxString& aClipboardSourceInput );
 
 protected:
 
@@ -189,43 +187,31 @@ protected:
     void init( const PROPERTIES* aProperties );
 
 private:
-    void format( BOARD* aBoard, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( BOARD* aBoard, int aNestLevel = 0 ) const;
 
-    void format( DIMENSION* aDimension, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( DIMENSION* aDimension, int aNestLevel = 0 ) const;
 
-    void format( EDGE_MODULE* aModuleDrawing, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( EDGE_MODULE* aModuleDrawing, int aNestLevel = 0 ) const;
 
-    void format( DRAWSEGMENT* aSegment, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( DRAWSEGMENT* aSegment, int aNestLevel = 0 ) const;
 
-    void format( PCB_TARGET* aTarget, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( PCB_TARGET* aTarget, int aNestLevel = 0 ) const;
 
-    void format( MODULE* aModule, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( MODULE* aModule, int aNestLevel = 0 ) const;
 
-    void format( D_PAD* aPad, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( D_PAD* aPad, int aNestLevel = 0 ) const;
 
-    void format( TEXTE_PCB* aText, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( TEXTE_PCB* aText, int aNestLevel = 0 ) const;
 
-    void format( TEXTE_MODULE* aText, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( TEXTE_MODULE* aText, int aNestLevel = 0 ) const;
 
-    void format( TRACK* aTrack, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( TRACK* aTrack, int aNestLevel = 0 ) const;
 
-    void format( ZONE_CONTAINER* aZone, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( ZONE_CONTAINER* aZone, int aNestLevel = 0 ) const;
 
     void formatLayer( const BOARD_ITEM* aItem ) const;
 
-    void formatLayers( LSET aLayerMask, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void formatLayers( LSET aLayerMask, int aNestLevel = 0 ) const;
 };
 
 #endif  // KICAD_PLUGIN_H_
diff --git a/pcbnew/legacy_netlist_reader.cpp b/pcbnew/legacy_netlist_reader.cpp
index 3d342d0a9a..b51409f277 100644
--- a/pcbnew/legacy_netlist_reader.cpp
+++ b/pcbnew/legacy_netlist_reader.cpp
@@ -34,7 +34,7 @@
 #include <pcb_netlist.h>
 #include <netlist_reader.h>
 
-void LEGACY_NETLIST_READER::LoadNetlist() throw ( IO_ERROR, PARSE_ERROR, boost::bad_pointer )
+void LEGACY_NETLIST_READER::LoadNetlist()
 {
     int state            = 0;
     bool is_comment      = false;
@@ -97,7 +97,6 @@ void LEGACY_NETLIST_READER::LoadNetlist() throw ( IO_ERROR, PARSE_ERROR, boost::
 
 
 COMPONENT* LEGACY_NETLIST_READER::loadComponent( char* aText )
-    throw( PARSE_ERROR, boost::bad_pointer )
 {
     char*    text;
     wxString msg;
@@ -178,7 +177,7 @@ COMPONENT* LEGACY_NETLIST_READER::loadComponent( char* aText )
 }
 
 
-void LEGACY_NETLIST_READER::loadNet( char* aText, COMPONENT* aComponent ) throw( PARSE_ERROR )
+void LEGACY_NETLIST_READER::loadNet( char* aText, COMPONENT* aComponent )
 {
     wxString msg;
     char*    p;
@@ -212,7 +211,7 @@ void LEGACY_NETLIST_READER::loadNet( char* aText, COMPONENT* aComponent ) throw(
 }
 
 
-void LEGACY_NETLIST_READER::loadFootprintFilters() throw( IO_ERROR, PARSE_ERROR )
+void LEGACY_NETLIST_READER::loadFootprintFilters()
 {
     wxArrayString filters;
     wxString      cmpRef;
diff --git a/pcbnew/loadcmp.cpp b/pcbnew/loadcmp.cpp
index 75055e7d13..00290b9836 100644
--- a/pcbnew/loadcmp.cpp
+++ b/pcbnew/loadcmp.cpp
@@ -332,7 +332,6 @@ MODULE* PCB_BASE_FRAME::LoadFootprint( const LIB_ID& aFootprintId )
 
 
 MODULE* PCB_BASE_FRAME::loadFootprint( const LIB_ID& aFootprintId )
-    throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception )
 {
     FP_LIB_TABLE*   fptbl = Prj().PcbFootprintLibs();
 
diff --git a/pcbnew/netlist.cpp b/pcbnew/netlist.cpp
index 7443cb0cba..9024ffb20b 100644
--- a/pcbnew/netlist.cpp
+++ b/pcbnew/netlist.cpp
@@ -224,7 +224,6 @@ MODULE* PCB_EDIT_FRAME::ListAndSelectModuleName()
 #define ALLOW_PARTIAL_FPID      1
 
 void PCB_EDIT_FRAME::LoadFootprints( NETLIST& aNetlist, REPORTER* aReporter )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     wxString   msg;
     LIB_ID     lastFPID;
diff --git a/pcbnew/netlist_reader.cpp b/pcbnew/netlist_reader.cpp
index 06569a8d03..7949f4a485 100644
--- a/pcbnew/netlist_reader.cpp
+++ b/pcbnew/netlist_reader.cpp
@@ -79,7 +79,6 @@ NETLIST_READER::NETLIST_FILE_T NETLIST_READER::GuessNetlistFileType( LINE_READER
 NETLIST_READER* NETLIST_READER::GetNetlistReader( NETLIST*        aNetlist,
                                                   const wxString& aNetlistFileName,
                                                   const wxString& aCompFootprintFileName )
-    throw( IO_ERROR )
 {
     wxASSERT( aNetlist != NULL );
 
@@ -110,7 +109,7 @@ NETLIST_READER* NETLIST_READER::GetNetlistReader( NETLIST*        aNetlist,
 }
 
 
-bool CMP_READER::Load( NETLIST* aNetlist ) throw( IO_ERROR, PARSE_ERROR )
+bool CMP_READER::Load( NETLIST* aNetlist )
 {
     wxCHECK_MSG( aNetlist != NULL,true, wxT( "No netlist passed to CMP_READER::Load()" ) );
 
diff --git a/pcbnew/netlist_reader.h b/pcbnew/netlist_reader.h
index eccae96e6c..74a788f18a 100644
--- a/pcbnew/netlist_reader.h
+++ b/pcbnew/netlist_reader.h
@@ -100,7 +100,7 @@ public:
      * is not updated. This is an usual case, in CvPcb, but can be used to
      * print a warning in Pcbnew.
      */
-    bool Load( NETLIST* aNetlist ) throw( IO_ERROR, PARSE_ERROR );
+    bool Load( NETLIST* aNetlist );
 };
 
 
@@ -170,8 +170,7 @@ public:
      */
     static NETLIST_READER* GetNetlistReader( NETLIST*        aNetlist,
                                              const wxString& aNetlistFileName,
-                                             const wxString& aCompFootprintFileName = wxEmptyString )
-        throw( IO_ERROR );
+                                             const wxString& aCompFootprintFileName = wxEmptyString );
 
     /**
      * Function LoadNetlist
@@ -180,7 +179,7 @@ public:
      * @throw IO_ERROR if a file IO error occurs.
      * @throw PARSE_ERROR if an error occurs while parsing the file.
      */
-    virtual void LoadNetlist() throw( IO_ERROR, PARSE_ERROR, boost::bad_pointer ) = 0;
+    virtual void LoadNetlist() = 0;
 
     /**
      * Function GetLineReader()
@@ -220,7 +219,7 @@ class LEGACY_NETLIST_READER : public NETLIST_READER
      * @return the new component created by parsing \a aLine
      * @throw PARSE_ERROR when \a aLine is not a valid component description.
      */
-    COMPONENT* loadComponent( char* aText ) throw( PARSE_ERROR, boost::bad_pointer );
+    COMPONENT* loadComponent( char* aText );
 
     /**
      * Function loadFootprintFilters
@@ -241,7 +240,7 @@ class LEGACY_NETLIST_READER : public NETLIST_READER
      * @throw IO_ERROR if a file IO error occurs.
      * @throw PARSE_ERROR if an error occurs while parsing the file.
      */
-    void loadFootprintFilters() throw( IO_ERROR, PARSE_ERROR );
+    void loadFootprintFilters();
 
     /**
      * Function loadNet
@@ -251,7 +250,7 @@ class LEGACY_NETLIST_READER : public NETLIST_READER
      * @param aComponent is the component to add the net to.
      * @throw PARSE_ERROR if a error occurs reading \a aText.
      */
-    void loadNet( char* aText, COMPONENT* aComponent ) throw( PARSE_ERROR );
+    void loadNet( char* aText, COMPONENT* aComponent );
 
 public:
 
@@ -283,7 +282,7 @@ public:
      * @throw IO_ERROR if a file IO error occurs.
      * @throw PARSE_ERROR if an error occurs while parsing the file.
      */
-    virtual void LoadNetlist() throw ( IO_ERROR, PARSE_ERROR, boost::bad_pointer ) override;
+    virtual void LoadNetlist() override;
 };
 
 
@@ -303,7 +302,7 @@ private:
      * Skip the current token level, i.e
      * search for the RIGHT parenthesis which closes the current description
      */
-    void skipCurrent() throw( IO_ERROR, PARSE_ERROR );
+    void skipCurrent();
 
     /**
      * Function parseComponent
@@ -315,7 +314,7 @@ private:
      * (sheetpath (names /) (tstamps /))
      * (tstamp 3256759C))
      */
-    void parseComponent() throw( IO_ERROR, PARSE_ERROR, boost::bad_pointer );
+    void parseComponent();
 
     /**
      * Function parseNet
@@ -327,7 +326,7 @@ private:
      *
      * and set the corresponding pads netnames
      */
-    void parseNet() throw( IO_ERROR, PARSE_ERROR );
+    void parseNet();
 
     /**
      * Function parseLibPartList
@@ -351,7 +350,7 @@ private:
      *  <p>This section is used by CvPcb, and is not useful in Pcbnew,
      *  therefore it it not always read </p>
      */
-    void parseLibPartList() throw( IO_ERROR, PARSE_ERROR );
+    void parseLibPartList();
 
 
 public:
@@ -365,7 +364,7 @@ public:
      * Function Parse
      * parse the full netlist
      */
-    void Parse() throw( IO_ERROR, PARSE_ERROR, boost::bad_pointer );
+    void Parse();
 
     // Useful for debug only:
     const char* getTokenName( NL_T::T aTok )
@@ -397,7 +396,7 @@ public:
         delete m_parser;
     }
 
-    virtual void LoadNetlist() throw ( IO_ERROR, PARSE_ERROR, boost::bad_pointer ) override;
+    virtual void LoadNetlist() override;
 };
 
 
diff --git a/pcbnew/pcb_parser.cpp b/pcbnew/pcb_parser.cpp
index 543ff91567..e0dff88231 100644
--- a/pcbnew/pcb_parser.cpp
+++ b/pcbnew/pcb_parser.cpp
@@ -121,7 +121,7 @@ void PCB_PARSER::pushValueIntoMap( int aIndex, int aValue )
     m_netCodes[aIndex] = aValue;
 }
 
-double PCB_PARSER::parseDouble() throw( IO_ERROR )
+double PCB_PARSER::parseDouble()
 {
     char* tmp;
 
@@ -151,7 +151,7 @@ double PCB_PARSER::parseDouble() throw( IO_ERROR )
 }
 
 
-bool PCB_PARSER::parseBool() throw( PARSE_ERROR )
+bool PCB_PARSER::parseBool()
 {
     T token = NextTok();
 
@@ -166,7 +166,7 @@ bool PCB_PARSER::parseBool() throw( PARSE_ERROR )
 }
 
 
-int PCB_PARSER::parseVersion() throw( IO_ERROR, PARSE_ERROR )
+int PCB_PARSER::parseVersion()
 {
     if( NextTok() != T_version )
         Expecting( GetTokenText( T_version ) );
@@ -203,7 +203,7 @@ wxString PCB_PARSER::GetRequiredVersion()
 }
 
 
-wxPoint PCB_PARSER::parseXY() throw( PARSE_ERROR, IO_ERROR )
+wxPoint PCB_PARSER::parseXY()
 {
     if( CurTok() != T_LEFT )
         NeedLEFT();
@@ -223,7 +223,7 @@ wxPoint PCB_PARSER::parseXY() throw( PARSE_ERROR, IO_ERROR )
 }
 
 
-void PCB_PARSER::parseXY( int* aX, int* aY ) throw( PARSE_ERROR, IO_ERROR )
+void PCB_PARSER::parseXY( int* aX, int* aY )
 {
     wxPoint pt = parseXY();
 
@@ -235,7 +235,7 @@ void PCB_PARSER::parseXY( int* aX, int* aY ) throw( PARSE_ERROR, IO_ERROR )
 }
 
 
-void PCB_PARSER::parseEDA_TEXT( EDA_TEXT* aText ) throw( PARSE_ERROR, IO_ERROR )
+void PCB_PARSER::parseEDA_TEXT( EDA_TEXT* aText )
 {
     wxCHECK_RET( CurTok() == T_effects,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as EDA_TEXT." ) );
@@ -332,7 +332,7 @@ void PCB_PARSER::parseEDA_TEXT( EDA_TEXT* aText ) throw( PARSE_ERROR, IO_ERROR )
 }
 
 
-S3D_INFO* PCB_PARSER::parse3DModel() throw( PARSE_ERROR, IO_ERROR )
+S3D_INFO* PCB_PARSER::parse3DModel()
 {
     wxCHECK_MSG( CurTok() == T_model, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as S3D_INFO." ) );
@@ -402,7 +402,7 @@ S3D_INFO* PCB_PARSER::parse3DModel() throw( PARSE_ERROR, IO_ERROR )
 }
 
 
-BOARD_ITEM* PCB_PARSER::Parse() throw( IO_ERROR, PARSE_ERROR )
+BOARD_ITEM* PCB_PARSER::Parse()
 {
     T               token;
     BOARD_ITEM*     item;
@@ -441,7 +441,7 @@ BOARD_ITEM* PCB_PARSER::Parse() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-BOARD* PCB_PARSER::parseBOARD() throw( IO_ERROR, PARSE_ERROR, FUTURE_FORMAT_ERROR )
+BOARD* PCB_PARSER::parseBOARD()
 {
     try
     {
@@ -457,7 +457,7 @@ BOARD* PCB_PARSER::parseBOARD() throw( IO_ERROR, PARSE_ERROR, FUTURE_FORMAT_ERRO
 }
 
 
-BOARD* PCB_PARSER::parseBOARD_unchecked() throw( IO_ERROR, PARSE_ERROR )
+BOARD* PCB_PARSER::parseBOARD_unchecked()
 {
     T token;
 
@@ -547,7 +547,7 @@ BOARD* PCB_PARSER::parseBOARD_unchecked() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void PCB_PARSER::parseHeader() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseHeader()
 {
     wxCHECK_RET( CurTok() == T_kicad_pcb,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as a header." ) );
@@ -583,7 +583,7 @@ void PCB_PARSER::parseHeader() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void PCB_PARSER::parseGeneralSection() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseGeneralSection()
 {
      wxCHECK_RET( CurTok() == T_general,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) +
@@ -628,7 +628,7 @@ void PCB_PARSER::parseGeneralSection() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void PCB_PARSER::parsePAGE_INFO() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parsePAGE_INFO()
 {
     wxCHECK_RET( CurTok() == T_page,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as a PAGE_INFO." ) );
@@ -684,7 +684,7 @@ void PCB_PARSER::parsePAGE_INFO() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void PCB_PARSER::parseTITLE_BLOCK() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseTITLE_BLOCK()
 {
     wxCHECK_RET( CurTok() == T_title_block,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) +
@@ -767,7 +767,7 @@ void PCB_PARSER::parseTITLE_BLOCK() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void PCB_PARSER::parseLayer( LAYER* aLayer ) throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseLayer( LAYER* aLayer )
 {
     T           token;
 
@@ -809,7 +809,7 @@ void PCB_PARSER::parseLayer( LAYER* aLayer ) throw( IO_ERROR, PARSE_ERROR )
 
 
 
-void PCB_PARSER::parseLayers() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseLayers()
 {
     wxCHECK_RET( CurTok() == T_layers,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as layers." ) );
@@ -922,7 +922,7 @@ void PCB_PARSER::parseLayers() throw( IO_ERROR, PARSE_ERROR )
 
 
 template<class T, class M>
-T PCB_PARSER::lookUpLayer( const M& aMap ) throw( PARSE_ERROR, IO_ERROR )
+T PCB_PARSER::lookUpLayer( const M& aMap )
 {
     // avoid constructing another std::string, use lexer's directly
     typename M::const_iterator it = aMap.find( curText );
@@ -955,7 +955,7 @@ T PCB_PARSER::lookUpLayer( const M& aMap ) throw( PARSE_ERROR, IO_ERROR )
 }
 
 
-PCB_LAYER_ID PCB_PARSER::parseBoardItemLayer() throw( PARSE_ERROR, IO_ERROR )
+PCB_LAYER_ID PCB_PARSER::parseBoardItemLayer()
 {
     wxCHECK_MSG( CurTok() == T_layer, UNDEFINED_LAYER,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as layer." ) );
@@ -970,7 +970,7 @@ PCB_LAYER_ID PCB_PARSER::parseBoardItemLayer() throw( PARSE_ERROR, IO_ERROR )
 }
 
 
-LSET PCB_PARSER::parseBoardItemLayersAsMask() throw( PARSE_ERROR, IO_ERROR )
+LSET PCB_PARSER::parseBoardItemLayersAsMask()
 {
     wxCHECK_MSG( CurTok() == T_layers, LSET(),
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) +
@@ -988,7 +988,7 @@ LSET PCB_PARSER::parseBoardItemLayersAsMask() throw( PARSE_ERROR, IO_ERROR )
 }
 
 
-void PCB_PARSER::parseSetup() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseSetup()
 {
     wxCHECK_RET( CurTok() == T_setup,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as setup." ) );
@@ -1223,7 +1223,7 @@ void PCB_PARSER::parseSetup() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void PCB_PARSER::parseNETINFO_ITEM() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseNETINFO_ITEM()
 {
     wxCHECK_RET( CurTok() == T_net,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as net." ) );
@@ -1249,7 +1249,7 @@ void PCB_PARSER::parseNETINFO_ITEM() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void PCB_PARSER::parseNETCLASS() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseNETCLASS()
 {
     wxCHECK_RET( CurTok() == T_net_class,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as net class." ) );
@@ -1332,7 +1332,7 @@ void PCB_PARSER::parseNETCLASS() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-DRAWSEGMENT* PCB_PARSER::parseDRAWSEGMENT() throw( IO_ERROR, PARSE_ERROR )
+DRAWSEGMENT* PCB_PARSER::parseDRAWSEGMENT()
 {
     wxCHECK_MSG( CurTok() == T_gr_arc || CurTok() == T_gr_circle || CurTok() == T_gr_curve ||
                  CurTok() == T_gr_line || CurTok() == T_gr_poly, NULL,
@@ -1494,7 +1494,7 @@ DRAWSEGMENT* PCB_PARSER::parseDRAWSEGMENT() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-TEXTE_PCB* PCB_PARSER::parseTEXTE_PCB() throw( IO_ERROR, PARSE_ERROR )
+TEXTE_PCB* PCB_PARSER::parseTEXTE_PCB()
 {
     wxCHECK_MSG( CurTok() == T_gr_text, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as TEXTE_PCB." ) );
@@ -1562,7 +1562,7 @@ TEXTE_PCB* PCB_PARSER::parseTEXTE_PCB() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-DIMENSION* PCB_PARSER::parseDIMENSION() throw( IO_ERROR, PARSE_ERROR )
+DIMENSION* PCB_PARSER::parseDIMENSION()
 {
     wxCHECK_MSG( CurTok() == T_dimension, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as DIMENSION." ) );
@@ -1715,7 +1715,6 @@ DIMENSION* PCB_PARSER::parseDIMENSION() throw( IO_ERROR, PARSE_ERROR )
 
 
 MODULE* PCB_PARSER::parseMODULE( wxArrayString* aInitialComments )
-        throw( IO_ERROR, PARSE_ERROR, FUTURE_FORMAT_ERROR )
 {
     try
     {
@@ -1732,7 +1731,6 @@ MODULE* PCB_PARSER::parseMODULE( wxArrayString* aInitialComments )
 
 
 MODULE* PCB_PARSER::parseMODULE_unchecked( wxArrayString* aInitialComments )
-        throw( IO_ERROR, PARSE_ERROR )
 {
     wxCHECK_MSG( CurTok() == T_module, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as MODULE." ) );
@@ -1983,7 +1981,7 @@ MODULE* PCB_PARSER::parseMODULE_unchecked( wxArrayString* aInitialComments )
 }
 
 
-TEXTE_MODULE* PCB_PARSER::parseTEXTE_MODULE() throw( IO_ERROR, PARSE_ERROR )
+TEXTE_MODULE* PCB_PARSER::parseTEXTE_MODULE()
 {
     wxCHECK_MSG( CurTok() == T_fp_text, NULL,
                  wxString::Format( wxT( "Cannot parse %s as TEXTE_MODULE at line %d, offset %d." ),
@@ -2068,7 +2066,7 @@ TEXTE_MODULE* PCB_PARSER::parseTEXTE_MODULE() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-EDGE_MODULE* PCB_PARSER::parseEDGE_MODULE() throw( IO_ERROR, PARSE_ERROR )
+EDGE_MODULE* PCB_PARSER::parseEDGE_MODULE()
 {
     wxCHECK_MSG( CurTok() == T_fp_arc || CurTok() == T_fp_circle || CurTok() == T_fp_curve ||
                  CurTok() == T_fp_line || CurTok() == T_fp_poly, NULL,
@@ -2235,7 +2233,7 @@ EDGE_MODULE* PCB_PARSER::parseEDGE_MODULE() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-D_PAD* PCB_PARSER::parseD_PAD( MODULE* aParent ) throw( IO_ERROR, PARSE_ERROR )
+D_PAD* PCB_PARSER::parseD_PAD( MODULE* aParent )
 {
     wxCHECK_MSG( CurTok() == T_pad, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as D_PAD." ) );
@@ -2489,7 +2487,7 @@ D_PAD* PCB_PARSER::parseD_PAD( MODULE* aParent ) throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-TRACK* PCB_PARSER::parseTRACK() throw( IO_ERROR, PARSE_ERROR )
+TRACK* PCB_PARSER::parseTRACK()
 {
     wxCHECK_MSG( CurTok() == T_segment, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as TRACK." ) );
@@ -2555,7 +2553,7 @@ TRACK* PCB_PARSER::parseTRACK() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-VIA* PCB_PARSER::parseVIA() throw( IO_ERROR, PARSE_ERROR )
+VIA* PCB_PARSER::parseVIA()
 {
     wxCHECK_MSG( CurTok() == T_via, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as VIA." ) );
@@ -2638,7 +2636,7 @@ VIA* PCB_PARSER::parseVIA() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER() throw( IO_ERROR, PARSE_ERROR )
+ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER()
 {
     wxCHECK_MSG( CurTok() == T_zone, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) +
@@ -3008,7 +3006,7 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-PCB_TARGET* PCB_PARSER::parsePCB_TARGET() throw( IO_ERROR, PARSE_ERROR )
+PCB_TARGET* PCB_PARSER::parsePCB_TARGET()
 {
     wxCHECK_MSG( CurTok() == T_target, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as PCB_TARGET." ) );
diff --git a/pcbnew/pcb_parser.h b/pcbnew/pcb_parser.h
index 068669ddb8..86e5b52ef5 100644
--- a/pcbnew/pcb_parser.h
+++ b/pcbnew/pcb_parser.h
@@ -102,21 +102,21 @@ class PCB_PARSER : public PCB_LEXER
      */
     void init();
 
-    void parseHeader() throw( IO_ERROR, PARSE_ERROR );
-    void parseGeneralSection() throw( IO_ERROR, PARSE_ERROR );
-    void parsePAGE_INFO() throw( IO_ERROR, PARSE_ERROR );
-    void parseTITLE_BLOCK() throw( IO_ERROR, PARSE_ERROR );
+    void parseHeader();
+    void parseGeneralSection();
+    void parsePAGE_INFO();
+    void parseTITLE_BLOCK();
 
-    void parseLayers() throw( IO_ERROR, PARSE_ERROR );
-    void parseLayer( LAYER* aLayer ) throw( IO_ERROR, PARSE_ERROR );
+    void parseLayers();
+    void parseLayer( LAYER* aLayer );
 
-    void parseSetup() throw( IO_ERROR, PARSE_ERROR );
-    void parseNETINFO_ITEM() throw( IO_ERROR, PARSE_ERROR );
-    void parseNETCLASS() throw( IO_ERROR, PARSE_ERROR );
+    void parseSetup();
+    void parseNETINFO_ITEM();
+    void parseNETCLASS();
 
-    DRAWSEGMENT*    parseDRAWSEGMENT() throw( IO_ERROR, PARSE_ERROR );
-    TEXTE_PCB*      parseTEXTE_PCB() throw( IO_ERROR, PARSE_ERROR );
-    DIMENSION*      parseDIMENSION() throw( IO_ERROR, PARSE_ERROR );
+    DRAWSEGMENT*    parseDRAWSEGMENT();
+    TEXTE_PCB*      parseTEXTE_PCB();
+    DIMENSION*      parseDIMENSION();
 
     /**
      * Function parseMODULE
@@ -124,29 +124,27 @@ class PCB_PARSER : public PCB_LEXER
      *   or NULL.  If not NULL, then caller has given ownership of a wxArrayString to
      *   this function and care must be taken to delete it even on exception.
      */
-    MODULE*         parseMODULE( wxArrayString* aInitialComments = 0 )
-                        throw( IO_ERROR, PARSE_ERROR, FUTURE_FORMAT_ERROR );
+    MODULE*         parseMODULE( wxArrayString* aInitialComments = 0 );
 
     /**
      * Function parseMODULE_unchecked
      * Parse a module, but do not replace PARSE_ERROR with FUTURE_FORMAT_ERROR automatically.
      */
-    MODULE*         parseMODULE_unchecked( wxArrayString* aInitialComments = 0 )
-                        throw( IO_ERROR, PARSE_ERROR );
-    TEXTE_MODULE*   parseTEXTE_MODULE() throw( IO_ERROR, PARSE_ERROR );
-    EDGE_MODULE*    parseEDGE_MODULE() throw( IO_ERROR, PARSE_ERROR );
-    D_PAD*          parseD_PAD( MODULE* aParent = NULL ) throw( IO_ERROR, PARSE_ERROR );
-    TRACK*          parseTRACK() throw( IO_ERROR, PARSE_ERROR );
-    VIA*            parseVIA() throw( IO_ERROR, PARSE_ERROR );
-    ZONE_CONTAINER* parseZONE_CONTAINER() throw( IO_ERROR, PARSE_ERROR );
-    PCB_TARGET*     parsePCB_TARGET() throw( IO_ERROR, PARSE_ERROR );
-    BOARD*          parseBOARD() throw( IO_ERROR, PARSE_ERROR, FUTURE_FORMAT_ERROR );
+    MODULE*         parseMODULE_unchecked( wxArrayString* aInitialComments = 0 );
+    TEXTE_MODULE*   parseTEXTE_MODULE();
+    EDGE_MODULE*    parseEDGE_MODULE();
+    D_PAD*          parseD_PAD( MODULE* aParent = NULL );
+    TRACK*          parseTRACK();
+    VIA*            parseVIA();
+    ZONE_CONTAINER* parseZONE_CONTAINER();
+    PCB_TARGET*     parsePCB_TARGET();
+    BOARD*          parseBOARD();
 
     /**
      * Function parseBOARD_unchecked
      * Parse a module, but do not replace PARSE_ERROR with FUTURE_FORMAT_ERROR automatically.
      */
-    BOARD*          parseBOARD_unchecked() throw( IO_ERROR, PARSE_ERROR );
+    BOARD*          parseBOARD_unchecked();
 
 
     /**
@@ -160,7 +158,7 @@ class PCB_PARSER : public PCB_LEXER
      * @return int - The result of the parsed #BOARD_ITEM layer or set designator.
      */
     template<class T, class M>
-    T lookUpLayer( const M& aMap ) throw( PARSE_ERROR, IO_ERROR );
+    T lookUpLayer( const M& aMap );
 
     /**
      * Function parseBoardItemLayer
@@ -170,7 +168,7 @@ class PCB_PARSER : public PCB_LEXER
      * @throw PARSE_ERROR if the layer syntax is incorrect.
      * @return The index the parsed #BOARD_ITEM layer.
      */
-    PCB_LAYER_ID parseBoardItemLayer() throw( IO_ERROR, PARSE_ERROR );
+    PCB_LAYER_ID parseBoardItemLayer();
 
     /**
      * Function parseBoardItemLayersAsMask
@@ -180,7 +178,7 @@ class PCB_PARSER : public PCB_LEXER
      * @throw PARSE_ERROR if the layers syntax is incorrect.
      * @return The mask of layers the parsed #BOARD_ITEM is on.
      */
-    LSET parseBoardItemLayersAsMask() throw( PARSE_ERROR, IO_ERROR );
+    LSET parseBoardItemLayersAsMask();
 
     /**
      * Function parseXY
@@ -193,9 +191,9 @@ class PCB_PARSER : public PCB_LEXER
      * @throw PARSE_ERROR if the coordinate pair syntax is incorrect.
      * @return A wxPoint object containing the coordinate pair.
      */
-    wxPoint parseXY() throw( PARSE_ERROR, IO_ERROR );
+    wxPoint parseXY();
 
-    void parseXY( int* aX, int* aY ) throw( PARSE_ERROR, IO_ERROR );
+    void parseXY( int* aX, int* aY );
 
     /**
      * Function parseEDA_TEXT
@@ -204,9 +202,9 @@ class PCB_PARSER : public PCB_LEXER
      * @throw PARSE_ERROR if the text syntax is not valid.
      * @param aText A point to the #EDA_TEXT object to save the parsed settings into.
      */
-    void parseEDA_TEXT( EDA_TEXT* aText ) throw( PARSE_ERROR, IO_ERROR );
+    void parseEDA_TEXT( EDA_TEXT* aText );
 
-    S3D_INFO* parse3DModel() throw( PARSE_ERROR, IO_ERROR );
+    S3D_INFO* parse3DModel();
 
     /**
      * Function parseDouble
@@ -216,20 +214,20 @@ class PCB_PARSER : public PCB_LEXER
      * @throw IO_ERROR if an error occurs attempting to convert the current token.
      * @return The result of the parsed token.
      */
-    double parseDouble() throw( IO_ERROR );
+    double parseDouble();
 
-    inline double parseDouble( const char* aExpected ) throw( IO_ERROR )
+    inline double parseDouble( const char* aExpected )
     {
         NeedNUMBER( aExpected );
         return parseDouble();
     }
 
-    inline double parseDouble( PCB_KEYS_T::T aToken ) throw( IO_ERROR )
+    inline double parseDouble( PCB_KEYS_T::T aToken )
     {
         return parseDouble( GetTokenText( aToken ) );
     }
 
-    inline int parseBoardUnits() throw( IO_ERROR )
+    inline int parseBoardUnits()
     {
         // There should be no major rounding issues here, since the values in
         // the file are in mm and get converted to nano-meters.
@@ -240,7 +238,7 @@ class PCB_PARSER : public PCB_LEXER
         return KiROUND( parseDouble() * IU_PER_MM );
     }
 
-    inline int parseBoardUnits( const char* aExpected ) throw( PARSE_ERROR, IO_ERROR )
+    inline int parseBoardUnits( const char* aExpected )
     {
         // Use here KiROUND, not KIROUND (see comments about them)
         // when having a function as argument, because it will be called twice
@@ -248,35 +246,35 @@ class PCB_PARSER : public PCB_LEXER
         return KiROUND( parseDouble( aExpected ) * IU_PER_MM );
     }
 
-    inline int parseBoardUnits( PCB_KEYS_T::T aToken ) throw( PARSE_ERROR, IO_ERROR )
+    inline int parseBoardUnits( PCB_KEYS_T::T aToken )
     {
         return parseBoardUnits( GetTokenText( aToken ) );
     }
 
-    inline int parseInt() throw( PARSE_ERROR )
+    inline int parseInt()
     {
         return (int)strtol( CurText(), NULL, 10 );
     }
 
-    inline int parseInt( const char* aExpected ) throw( PARSE_ERROR )
+    inline int parseInt( const char* aExpected )
     {
         NeedNUMBER( aExpected );
         return parseInt();
     }
 
-    inline long parseHex() throw( PARSE_ERROR )
+    inline long parseHex()
     {
         NextTok();
         return strtol( CurText(), NULL, 16 );
     }
 
-    bool parseBool() throw( PARSE_ERROR );
+    bool parseBool();
 
     /**
      * Parse a format version tag like (version 20160417) return the version.
      * Expects to start on 'version', and eats the closing paren.
      */
-    int parseVersion() throw( IO_ERROR, PARSE_ERROR );
+    int parseVersion();
 
 public:
 
@@ -308,7 +306,7 @@ public:
         m_board = aBoard;
     }
 
-    BOARD_ITEM* Parse() throw( IO_ERROR, PARSE_ERROR );
+    BOARD_ITEM* Parse();
 
     /**
      * Return whether a version number, if any was parsed, was too recent
diff --git a/pcbnew/pcb_plot_params.cpp b/pcbnew/pcb_plot_params.cpp
index 32f9436680..0431042c1c 100644
--- a/pcbnew/pcb_plot_params.cpp
+++ b/pcbnew/pcb_plot_params.cpp
@@ -135,7 +135,7 @@ void PCB_PLOT_PARAMS::SetGerberPrecision( int aPrecision )
 
 // PLEASE NOTE: only plot dialog options are processed
 void PCB_PLOT_PARAMS::Format( OUTPUTFORMATTER* aFormatter,
-                              int aNestLevel, int aControl ) const throw( IO_ERROR )
+                              int aNestLevel, int aControl ) const
 {
     const char* falseStr = getTokenName( T_false );
     const char* trueStr = getTokenName( T_true );
@@ -215,7 +215,6 @@ void PCB_PLOT_PARAMS::Format( OUTPUTFORMATTER* aFormatter,
 
 
 void PCB_PLOT_PARAMS::Parse( PCB_PLOT_PARAMS_PARSER* aParser )
-                      throw( PARSE_ERROR, IO_ERROR )
 {
     aParser->Parse( this );
 }
@@ -337,7 +336,6 @@ PCB_PLOT_PARAMS_PARSER::PCB_PLOT_PARAMS_PARSER( char* aLine, const wxString& aSo
 
 
 void PCB_PLOT_PARAMS_PARSER::Parse( PCB_PLOT_PARAMS* aPcbPlotParams )
-                             throw( PARSE_ERROR, IO_ERROR )
 {
     T   token;
 
@@ -559,7 +557,7 @@ double PCB_PLOT_PARAMS_PARSER::parseDouble()
     return val;
 }
 
-void PCB_PLOT_PARAMS_PARSER::skipCurrent() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PLOT_PARAMS_PARSER::skipCurrent()
 {
     int curr_level = 0;
     T token;
diff --git a/pcbnew/pcb_plot_params.h b/pcbnew/pcb_plot_params.h
index 6900356e19..5f44bce561 100644
--- a/pcbnew/pcb_plot_params.h
+++ b/pcbnew/pcb_plot_params.h
@@ -165,9 +165,8 @@ public:
     void        SetSkipPlotNPTH_Pads( bool aSkip ) { m_skipNPTH_Pads = aSkip; }
     bool        GetSkipPlotNPTH_Pads() const { return m_skipNPTH_Pads; }
 
-    void        Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControl=0 )
-                        const throw( IO_ERROR );
-    void        Parse( PCB_PLOT_PARAMS_PARSER* aParser ) throw( PARSE_ERROR, IO_ERROR );
+    void        Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControl=0 ) const;
+    void        Parse( PCB_PLOT_PARAMS_PARSER* aParser );
 
     bool        operator==( const PCB_PLOT_PARAMS &aPcbPlotParams ) const;
     bool        operator!=( const PCB_PLOT_PARAMS &aPcbPlotParams ) const;
diff --git a/pcbnew/pcb_plot_params_parser.h b/pcbnew/pcb_plot_params_parser.h
index cc3137ea98..ed52129f7e 100644
--- a/pcbnew/pcb_plot_params_parser.h
+++ b/pcbnew/pcb_plot_params_parser.h
@@ -41,7 +41,7 @@ public:
 
     LINE_READER* GetReader() { return reader; };
 
-    void Parse( PCB_PLOT_PARAMS* aPcbPlotParams ) throw( PARSE_ERROR, IO_ERROR );
+    void Parse( PCB_PLOT_PARAMS* aPcbPlotParams );
 
 private:
     bool parseBool();
@@ -67,7 +67,7 @@ private:
      * Skip the current token level, i.e
      * search for the RIGHT parenthesis which closes the current description
      */
-    void skipCurrent() throw( IO_ERROR, PARSE_ERROR );
+    void skipCurrent();
 };
 
 #endif // PCB_PLOT_PARAMS_PARSER_H_
diff --git a/pcbnew/specctra.cpp b/pcbnew/specctra.cpp
index e016af6a94..6bcd060988 100644
--- a/pcbnew/specctra.cpp
+++ b/pcbnew/specctra.cpp
@@ -131,7 +131,7 @@ int SPECCTRA_DB::findLayerName( const std::string& aLayerName ) const
     return -1;
 }
 
-void SPECCTRA_DB::readCOMPnPIN( std::string* component_id, std::string* pin_id ) throw( IO_ERROR )
+void SPECCTRA_DB::readCOMPnPIN( std::string* component_id, std::string* pin_id )
 {
     T      tok;
 
@@ -174,7 +174,7 @@ void SPECCTRA_DB::readCOMPnPIN( std::string* component_id, std::string* pin_id )
 }
 
 
-void SPECCTRA_DB::readTIME( time_t* time_stamp ) throw( IO_ERROR )
+void SPECCTRA_DB::readTIME( time_t* time_stamp )
 {
     T     tok;
 
@@ -240,7 +240,7 @@ void SPECCTRA_DB::readTIME( time_t* time_stamp ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::LoadPCB( const wxString& aFilename ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::LoadPCB( const wxString& aFilename )
 {
     FILE_LINE_READER curr_reader( aFilename );
 
@@ -259,7 +259,7 @@ void SPECCTRA_DB::LoadPCB( const wxString& aFilename ) throw( IO_ERROR, boost::b
 }
 
 
-void SPECCTRA_DB::LoadSESSION( const wxString& aFilename ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::LoadSESSION( const wxString& aFilename )
 {
     FILE_LINE_READER curr_reader( aFilename );
 
@@ -279,7 +279,7 @@ void SPECCTRA_DB::LoadSESSION( const wxString& aFilename ) throw( IO_ERROR, boos
 }
 
 
-void SPECCTRA_DB::doPCB( PCB* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doPCB( PCB* growth )
 {
     T     tok;
 
@@ -384,7 +384,7 @@ void SPECCTRA_DB::doPCB( PCB* growth ) throw( IO_ERROR, boost::bad_pointer )
 }
 
 
-void SPECCTRA_DB::doPARSER( PARSER* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doPARSER( PARSER* growth )
 {
     T           tok;
     std::string const1;
@@ -523,7 +523,7 @@ void SPECCTRA_DB::doPARSER( PARSER* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doRESOLUTION( UNIT_RES* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doRESOLUTION( UNIT_RES* growth )
 {
     T       tok = NextTok();
 
@@ -550,7 +550,7 @@ void SPECCTRA_DB::doRESOLUTION( UNIT_RES* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doUNIT( UNIT_RES* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doUNIT( UNIT_RES* growth )
 {
     T       tok = NextTok();
 
@@ -571,7 +571,7 @@ void SPECCTRA_DB::doUNIT( UNIT_RES* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doSPECCTRA_LAYER_PAIR( SPECCTRA_LAYER_PAIR* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doSPECCTRA_LAYER_PAIR( SPECCTRA_LAYER_PAIR* growth )
 {
     NeedSYMBOL();
     growth->layer_id0 = CurText();
@@ -588,7 +588,7 @@ void SPECCTRA_DB::doSPECCTRA_LAYER_PAIR( SPECCTRA_LAYER_PAIR* growth ) throw( IO
 
 
 void SPECCTRA_DB::doLAYER_NOISE_WEIGHT( LAYER_NOISE_WEIGHT* growth )
-    throw( IO_ERROR, boost::bad_pointer )
+
 {
     T       tok;
 
@@ -607,7 +607,7 @@ void SPECCTRA_DB::doLAYER_NOISE_WEIGHT( LAYER_NOISE_WEIGHT* growth )
 }
 
 
-void SPECCTRA_DB::doSTRUCTURE( STRUCTURE* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doSTRUCTURE( STRUCTURE* growth )
 {
     T       tok;
 
@@ -741,7 +741,7 @@ L_place:
 }
 
 
-void SPECCTRA_DB::doSTRUCTURE_OUT( STRUCTURE_OUT* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doSTRUCTURE_OUT( STRUCTURE_OUT* growth )
 {
     /*
     <structure_out_descriptor >::=
@@ -784,7 +784,7 @@ void SPECCTRA_DB::doSTRUCTURE_OUT( STRUCTURE_OUT* growth ) throw( IO_ERROR, boos
 }
 
 
-void SPECCTRA_DB::doKEEPOUT( KEEPOUT* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doKEEPOUT( KEEPOUT* growth )
 {
     T       tok = NextTok();
 
@@ -873,7 +873,7 @@ void SPECCTRA_DB::doKEEPOUT( KEEPOUT* growth ) throw( IO_ERROR, boost::bad_point
 }
 
 
-void SPECCTRA_DB::doCONNECT( CONNECT* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doCONNECT( CONNECT* growth )
 {
     /*  from page 143 of specctra spec:
 
@@ -908,7 +908,7 @@ void SPECCTRA_DB::doCONNECT( CONNECT* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doWINDOW( WINDOW* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doWINDOW( WINDOW* growth )
 {
     T       tok = NextTok();
 
@@ -960,7 +960,7 @@ void SPECCTRA_DB::doWINDOW( WINDOW* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doBOUNDARY( BOUNDARY* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doBOUNDARY( BOUNDARY* growth )
 {
     T       tok = NextTok();
 
@@ -987,7 +987,7 @@ void SPECCTRA_DB::doBOUNDARY( BOUNDARY* growth ) throw( IO_ERROR, boost::bad_poi
             if( tok != T_path )
                 Expecting( T_path );
 
-            PATH* path = new PATH( growth, T_path ) ;
+            PATH* path = new PATH( growth, T_path );
             growth->paths.push_back( path );
 
             doPATH( path );
@@ -1007,7 +1007,7 @@ void SPECCTRA_DB::doBOUNDARY( BOUNDARY* growth ) throw( IO_ERROR, boost::bad_poi
 }
 
 
-void SPECCTRA_DB::doPATH( PATH* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doPATH( PATH* growth )
 {
     T tok = NextTok();
 
@@ -1055,7 +1055,7 @@ void SPECCTRA_DB::doPATH( PATH* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doRECTANGLE( RECTANGLE* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doRECTANGLE( RECTANGLE* growth )
 {
     NeedSYMBOL();
     growth->layer_id = CurText();
@@ -1080,7 +1080,7 @@ void SPECCTRA_DB::doRECTANGLE( RECTANGLE* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doCIRCLE( CIRCLE* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doCIRCLE( CIRCLE* growth )
 {
     T       tok;
 
@@ -1108,7 +1108,7 @@ void SPECCTRA_DB::doCIRCLE( CIRCLE* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doQARC( QARC* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doQARC( QARC* growth )
 {
     NeedSYMBOL();
     growth->layer_id = CurText();
@@ -1132,7 +1132,7 @@ void SPECCTRA_DB::doQARC( QARC* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doSTRINGPROP( STRINGPROP* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doSTRINGPROP( STRINGPROP* growth )
 {
     NeedSYMBOL();
     growth->value = CurText();
@@ -1140,7 +1140,7 @@ void SPECCTRA_DB::doSTRINGPROP( STRINGPROP* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doTOKPROP( TOKPROP* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doTOKPROP( TOKPROP* growth )
 {
     T     tok = NextTok();
 
@@ -1153,7 +1153,7 @@ void SPECCTRA_DB::doTOKPROP( TOKPROP* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doVIA( VIA* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doVIA( VIA* growth )
 {
     T       tok;
 
@@ -1182,7 +1182,7 @@ void SPECCTRA_DB::doVIA( VIA* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doCONTROL( CONTROL* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doCONTROL( CONTROL* growth )
 {
     T       tok;
 
@@ -1217,7 +1217,7 @@ void SPECCTRA_DB::doCONTROL( CONTROL* growth ) throw( IO_ERROR, boost::bad_point
         case T_microvia:
         case T_reroute_order_viols:
             TOKPROP* tokprop;
-            tokprop = new TOKPROP( growth, tok ) ;
+            tokprop = new TOKPROP( growth, tok );
             growth->Append( tokprop );
             doTOKPROP( tokprop );
             break;
@@ -1229,7 +1229,7 @@ void SPECCTRA_DB::doCONTROL( CONTROL* growth ) throw( IO_ERROR, boost::bad_point
 }
 
 
-void SPECCTRA_DB::doPROPERTIES( PROPERTIES* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doPROPERTIES( PROPERTIES* growth )
 {
     T           tok;
     PROPERTY    property;  // construct it once here, append multiple times.
@@ -1252,7 +1252,7 @@ void SPECCTRA_DB::doPROPERTIES( PROPERTIES* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doLAYER( LAYER* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doLAYER( LAYER* growth )
 {
     T       tok = NextTok();
 
@@ -1374,7 +1374,7 @@ void SPECCTRA_DB::doLAYER( LAYER* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doRULE( RULE* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doRULE( RULE* growth )
 {
     std::string     builder;
     int             bracketNesting = 1; // we already saw the opening T_LEFT
@@ -1420,7 +1420,7 @@ void SPECCTRA_DB::doRULE( RULE* growth ) throw( IO_ERROR )
 
 
 #if 0
-void SPECCTRA_DB::doPLACE_RULE( PLACE_RULE* growth, bool expect_object_type ) throw( IO_ERROR )
+void SPECCTRA_DB::doPLACE_RULE( PLACE_RULE* growth, bool expect_object_type )
 {
     /*   (place_rule [<structure_place_rule_object> ]
          {[<spacing_descriptor> |
@@ -1506,7 +1506,7 @@ void SPECCTRA_DB::doPLACE_RULE( PLACE_RULE* growth, bool expect_object_type ) th
 #endif
 
 
-void SPECCTRA_DB::doREGION( REGION* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doREGION( REGION* growth )
 {
     T     tok = NextTok();
 
@@ -1575,7 +1575,7 @@ void SPECCTRA_DB::doREGION( REGION* growth ) throw( IO_ERROR, boost::bad_pointer
 }
 
 
-void SPECCTRA_DB::doCLASS_CLASS( CLASS_CLASS* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doCLASS_CLASS( CLASS_CLASS* growth )
 {
     T       tok = NextTok();
 
@@ -1620,7 +1620,7 @@ void SPECCTRA_DB::doCLASS_CLASS( CLASS_CLASS* growth ) throw( IO_ERROR, boost::b
 }
 
 
-void SPECCTRA_DB::doCLASSES( CLASSES* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doCLASSES( CLASSES* growth )
 {
     T       tok = NextTok();
 
@@ -1643,7 +1643,7 @@ void SPECCTRA_DB::doCLASSES( CLASSES* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doGRID( GRID* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doGRID( GRID* growth )
 {
     T       tok = NextTok();
 
@@ -1708,7 +1708,7 @@ void SPECCTRA_DB::doGRID( GRID* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doLAYER_RULE( LAYER_RULE* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doLAYER_RULE( LAYER_RULE* growth )
 {
     T       tok;
 
@@ -1733,7 +1733,7 @@ void SPECCTRA_DB::doLAYER_RULE( LAYER_RULE* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doPLACE( PLACE* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doPLACE( PLACE* growth )
 {
     T       tok = NextTok();
 
@@ -1848,7 +1848,7 @@ void SPECCTRA_DB::doPLACE( PLACE* growth ) throw( IO_ERROR, boost::bad_pointer )
 }
 
 
-void SPECCTRA_DB::doCOMPONENT( COMPONENT* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doCOMPONENT( COMPONENT* growth )
 {
     T       tok = NextTok();
 
@@ -1878,7 +1878,7 @@ void SPECCTRA_DB::doCOMPONENT( COMPONENT* growth ) throw( IO_ERROR, boost::bad_p
 }
 
 
-void SPECCTRA_DB::doPLACEMENT( PLACEMENT* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doPLACEMENT( PLACEMENT* growth )
 {
     T       tok;
 
@@ -1933,7 +1933,7 @@ void SPECCTRA_DB::doPLACEMENT( PLACEMENT* growth ) throw( IO_ERROR, boost::bad_p
 }
 
 
-void SPECCTRA_DB::doPADSTACK( PADSTACK* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doPADSTACK( PADSTACK* growth )
 {
     T       tok = NextTok();
 
@@ -2033,7 +2033,7 @@ void SPECCTRA_DB::doPADSTACK( PADSTACK* growth ) throw( IO_ERROR, boost::bad_poi
 }
 
 
-void SPECCTRA_DB::doSHAPE( SHAPE* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doSHAPE( SHAPE* growth )
 {
     T       tok;
 
@@ -2117,7 +2117,7 @@ L_done_that:
 }
 
 
-void SPECCTRA_DB::doIMAGE( IMAGE* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doIMAGE( IMAGE* growth )
 {
     T       tok = NextTok();
 
@@ -2213,7 +2213,7 @@ void SPECCTRA_DB::doIMAGE( IMAGE* growth ) throw( IO_ERROR, boost::bad_pointer )
 }
 
 
-void SPECCTRA_DB::doPIN( PIN* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doPIN( PIN* growth )
 {
     T       tok = NextTok();
 
@@ -2260,7 +2260,7 @@ void SPECCTRA_DB::doPIN( PIN* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doLIBRARY( LIBRARY* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doLIBRARY( LIBRARY* growth )
 {
     T       tok;
 
@@ -2314,7 +2314,7 @@ void SPECCTRA_DB::doLIBRARY( LIBRARY* growth ) throw( IO_ERROR, boost::bad_point
 }
 
 
-void SPECCTRA_DB::doNET( NET* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doNET( NET* growth )
 {
     T           tok = NextTok();
     PIN_REFS*   pin_refs;
@@ -2454,7 +2454,7 @@ L_pins:
 }
 
 
-void SPECCTRA_DB::doTOPOLOGY( TOPOLOGY* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doTOPOLOGY( TOPOLOGY* growth )
 {
     T       tok;
 
@@ -2492,7 +2492,7 @@ void SPECCTRA_DB::doTOPOLOGY( TOPOLOGY* growth ) throw( IO_ERROR, boost::bad_poi
 }
 
 
-void SPECCTRA_DB::doCLASS( CLASS* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doCLASS( CLASS* growth )
 {
     T       tok;
 
@@ -2602,7 +2602,7 @@ void SPECCTRA_DB::doCLASS( CLASS* growth ) throw( IO_ERROR, boost::bad_pointer )
 }
 
 
-void SPECCTRA_DB::doNETWORK( NETWORK* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doNETWORK( NETWORK* growth )
 {
     T       tok;
 
@@ -2647,7 +2647,7 @@ void SPECCTRA_DB::doNETWORK( NETWORK* growth ) throw( IO_ERROR, boost::bad_point
 }
 
 
-void SPECCTRA_DB::doCOMP_ORDER( COMP_ORDER* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doCOMP_ORDER( COMP_ORDER* growth )
 {
     T       tok;
 
@@ -2665,7 +2665,7 @@ void SPECCTRA_DB::doCOMP_ORDER( COMP_ORDER* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doFROMTO( FROMTO* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doFROMTO( FROMTO* growth )
 {
     T       tok;
 
@@ -2751,7 +2751,7 @@ void SPECCTRA_DB::doFROMTO( FROMTO* growth ) throw( IO_ERROR, boost::bad_pointer
 }
 
 
-void SPECCTRA_DB::doWIRE( WIRE* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doWIRE( WIRE* growth )
 {
     T       tok;
 
@@ -2872,7 +2872,7 @@ void SPECCTRA_DB::doWIRE( WIRE* growth ) throw( IO_ERROR, boost::bad_pointer )
 }
 
 
-void SPECCTRA_DB::doWIRE_VIA( WIRE_VIA* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doWIRE_VIA( WIRE_VIA* growth )
 {
     T       tok;
     POINT   point;
@@ -2976,7 +2976,7 @@ void SPECCTRA_DB::doWIRE_VIA( WIRE_VIA* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doWIRING( WIRING* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doWIRING( WIRING* growth )
 {
     T       tok;
 
@@ -3032,7 +3032,7 @@ void SPECCTRA_DB::doWIRING( WIRING* growth ) throw( IO_ERROR, boost::bad_pointer
 }
 
 
-void SPECCTRA_DB::doANCESTOR( ANCESTOR* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doANCESTOR( ANCESTOR* growth )
 {
     T       tok;
 
@@ -3070,7 +3070,7 @@ void SPECCTRA_DB::doANCESTOR( ANCESTOR* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doHISTORY( HISTORY* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doHISTORY( HISTORY* growth )
 {
     T       tok;
 
@@ -3126,7 +3126,7 @@ void SPECCTRA_DB::doHISTORY( HISTORY* growth ) throw( IO_ERROR, boost::bad_point
 }
 
 
-void SPECCTRA_DB::doSESSION( SESSION* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doSESSION( SESSION* growth )
 {
     T       tok;
 
@@ -3203,7 +3203,7 @@ void SPECCTRA_DB::doSESSION( SESSION* growth ) throw( IO_ERROR, boost::bad_point
 }
 
 
-void SPECCTRA_DB::doWAS_IS( WAS_IS* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doWAS_IS( WAS_IS* growth )
 {
     T           tok;
     PIN_PAIR    empty( growth );
@@ -3244,7 +3244,7 @@ void SPECCTRA_DB::doWAS_IS( WAS_IS* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doROUTE( ROUTE* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doROUTE( ROUTE* growth )
 {
     T       tok;
 
@@ -3327,7 +3327,7 @@ void SPECCTRA_DB::doROUTE( ROUTE* growth ) throw( IO_ERROR, boost::bad_pointer )
 }
 
 
-void SPECCTRA_DB::doNET_OUT( NET_OUT* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doNET_OUT( NET_OUT* growth )
 {
     T       tok;
 
@@ -3395,7 +3395,7 @@ void SPECCTRA_DB::doNET_OUT( NET_OUT* growth ) throw( IO_ERROR, boost::bad_point
 }
 
 
-void SPECCTRA_DB::doSUPPLY_PIN( SUPPLY_PIN* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doSUPPLY_PIN( SUPPLY_PIN* growth )
 {
     T       tok;
     PIN_REF empty(growth);
@@ -3431,7 +3431,7 @@ void SPECCTRA_DB::doSUPPLY_PIN( SUPPLY_PIN* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::ExportPCB( wxString aFilename, bool aNameChange ) throw( IO_ERROR )
+void SPECCTRA_DB::ExportPCB( wxString aFilename, bool aNameChange )
 {
     if( pcb )
     {
@@ -3508,7 +3508,7 @@ UNIT_RES* ELEM::GetUnits() const
 }
 
 
-void ELEM::Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+void ELEM::Format( OUTPUTFORMATTER* out, int nestLevel )
 {
     out->Print( nestLevel, "(%s\n", Name() );
 
@@ -3518,7 +3518,7 @@ void ELEM::Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
 }
 
 
-void ELEM_HOLDER::FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+void ELEM_HOLDER::FormatContents( OUTPUTFORMATTER* out, int nestLevel )
 {
     for( int i=0;  i<Length();  ++i )
     {
@@ -3631,7 +3631,7 @@ PARSER::PARSER( ELEM* aParent ) :
 }
 
 
-void PARSER::FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+void PARSER::FormatContents( OUTPUTFORMATTER* out, int nestLevel )
 {
     out->Print( nestLevel, "(string_quote %c)\n", string_quote );
     out->Print( nestLevel, "(space_in_quoted_tokens %s)\n", space_in_quoted_tokens ? "on" : "off" );
@@ -3667,7 +3667,7 @@ void PARSER::FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERR
 }
 
 
-void PLACE::Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+void PLACE::Format( OUTPUTFORMATTER* out, int nestLevel )
 {
     bool        useMultiLine;
 
diff --git a/pcbnew/specctra.h b/pcbnew/specctra.h
index cb814a8762..9b0340a2d7 100644
--- a/pcbnew/specctra.h
+++ b/pcbnew/specctra.h
@@ -149,7 +149,7 @@ struct POINT
      * @param nestLevel A multiple of the number of spaces to preceed the output with.
      * @throw IO_ERROR if a system error writing the output, such as a full disk.
      */
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR )
+    void Format( OUTPUTFORMATTER* out, int nestLevel ) const
     {
         out->Print( nestLevel, " %.6g %.6g", x, y );
     }
@@ -171,7 +171,7 @@ struct PROPERTY
      * @param nestLevel A multiple of the number of spaces to preceed the output with.
      * @throw IO_ERROR if a system error writing the output, such as a full disk.
      */
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR )
+    void Format( OUTPUTFORMATTER* out, int nestLevel ) const
     {
         const char* quoteName  = out->GetQuoteChar( name.c_str() );
         const char* quoteValue = out->GetQuoteChar( value.c_str() );
@@ -249,7 +249,7 @@ public:
      * @param nestLevel A multiple of the number of spaces to preceed the output with.
      * @throw IO_ERROR if a system error writing the output, such as a full disk.
      */
-    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR );
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel );
 
 
     /**
@@ -261,7 +261,7 @@ public:
      * @param nestLevel A multiple of the number of spaces to preceed the output with.
      * @throw IO_ERROR if a system error writing the output, such as a full disk.
      */
-    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel )
     {
         // overridden in ELEM_HOLDER
     }
@@ -293,7 +293,7 @@ public:
     {
     }
 
-    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override;
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override;
 
 
     //-----< list operations >--------------------------------------------
@@ -389,7 +389,7 @@ public:
 
     PARSER( ELEM* aParent );
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override;
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override;
 };
 
 
@@ -423,7 +423,7 @@ public:
     DSN_T   GetEngUnits() const  { return units; }
     int     GetValue() const  { return value; }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( type == T_unit )
             out->Print( nestLevel, "(%s %s)\n", Name(),
@@ -469,7 +469,7 @@ public:
     POINT GetOrigin() { return point0; }
     POINT GetEnd() { return point1; }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* newline = nestLevel ? "\n" : "";
 
@@ -502,7 +502,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s", Name() );
 
@@ -548,7 +548,7 @@ public:
         delete rule;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s", Name() );
 
@@ -609,7 +609,7 @@ public:
         aperture_width = aWidth;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* newline = nestLevel ? "\n" : "";
 
@@ -702,7 +702,7 @@ public:
     }
 
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s\n", Name() );
 
@@ -735,7 +735,7 @@ public:
         diameter = 0.0;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* newline = nestLevel ? "\n" : "";
 
@@ -782,7 +782,7 @@ public:
         aperture_width = 0.0;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* newline = nestLevel ? "\n" : "";
 
@@ -864,7 +864,7 @@ public:
         }
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s ", Name() );
 
@@ -947,7 +947,7 @@ public:
         windows.push_back( aWindow );
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* newline = "\n";
 
@@ -1024,7 +1024,7 @@ public:
         padstacks.push_back( aViaName );
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const int RIGHTMARGIN = 80;
         int perLine = out->Print( nestLevel, "(%s", Name() );
@@ -1078,7 +1078,7 @@ public:
     {
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         for( STRINGS::iterator i=class_ids.begin();  i!=class_ids.end();  ++i )
         {
@@ -1117,7 +1117,7 @@ public:
         delete classes;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( classes )
             classes->Format( out, nestLevel );
@@ -1147,7 +1147,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s\n", Name() );
 
@@ -1202,7 +1202,7 @@ public:
         delete rules;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( name.c_str() );
 
@@ -1276,7 +1276,7 @@ public:
         layer_weight = 0.0;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote0 = out->GetQuoteChar( layer_id0.c_str() );
         const char* quote1 = out->GetQuoteChar( layer_id1.c_str() );
@@ -1303,7 +1303,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s\n", Name() );
 
@@ -1351,7 +1351,7 @@ public:
         value = T_NONE;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s %s)\n", Name(),
                    GetTokenText( value ) );
@@ -1377,7 +1377,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( value.c_str() );
 
@@ -1420,7 +1420,7 @@ public:
         delete rules;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( region_id.size() )
         {
@@ -1464,7 +1464,7 @@ public:
         image_type= T_NONE;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s %s %.6g",
                    Name(),
@@ -1508,7 +1508,7 @@ public:
         delete rules;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         for( LAYERS::iterator i=layers.begin();  i!=layers.end();  ++i )
             i->Format( out, nestLevel );
@@ -1592,7 +1592,7 @@ public:
             place_boundary->SetParent( this );
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -1724,7 +1724,7 @@ public:
         rotation = aRotation;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override;
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override;
 };
 typedef boost::ptr_vector<PLACE>    PLACES;
 
@@ -1761,7 +1761,7 @@ public:
      */
 //    static int Compare( IMAGE* lhs, IMAGE* rhs );
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( image_id.c_str() );
         out->Print( nestLevel, "(%s %s%s%s\n", Name(),
@@ -1772,7 +1772,7 @@ public:
         out->Print( nestLevel, ")\n" );
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         for( PLACES::iterator i=places.begin();  i!=places.end();  ++i )
             i->Format( out, nestLevel );
@@ -1825,7 +1825,7 @@ public:
         return added;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -1891,7 +1891,7 @@ public:
         connect = aConnect;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s ", Name() );
 
@@ -1950,7 +1950,7 @@ public:
         vertex.FixNegativeZero();
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( padstack_id.c_str() );
         if( isRotated )
@@ -2035,7 +2035,7 @@ public:
         return image_id;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         std::string imageId = GetImageId();
 
@@ -2050,7 +2050,7 @@ public:
     }
 
     // this is here for makeHash()
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( side != T_both )
             out->Print( 0, " (side %s)", GetTokenText( side ) );
@@ -2150,7 +2150,7 @@ public:
         padstack_id = aPadstackId;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( padstack_id.c_str() );
 
@@ -2164,7 +2164,7 @@ public:
 
 
     // this factored out for use by Compare()
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -2393,7 +2393,7 @@ public:
         return NULL;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -2438,7 +2438,7 @@ struct PIN_REF : public ELEM
      * is like Format() but is not virual and returns the number of characters
      * that were output.
      */
-    int FormatIt( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    int FormatIt( OUTPUTFORMATTER* out, int nestLevel )
     {
         // only print the newline if there is a nest level, and make
         // the quotes unconditional on this one.
@@ -2482,7 +2482,7 @@ public:
         delete rules;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         // no quoting on these two, the lexer preserved the quotes on input
         out->Print( nestLevel, "(%s %s %s ",
@@ -2540,7 +2540,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s", Name() );
 
@@ -2623,7 +2623,7 @@ public:
         return -1;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( net_id.c_str() );
         const char* space = " ";
@@ -2700,7 +2700,7 @@ public:
     {
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         for( FROMTOS::iterator i=fromtos.begin();  i!=fromtos.end();  ++i )
             i->Format( out, nestLevel );
@@ -2747,7 +2747,7 @@ public:
     }
 
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( class_id.c_str() );
 
@@ -2816,7 +2816,7 @@ public:
     {
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         for( NETS::iterator i=nets.begin();  i!=nets.end();  ++i )
             i->Format( out, nestLevel );
@@ -2897,7 +2897,7 @@ public:
         }
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s ", Name() );
 
@@ -2981,7 +2981,7 @@ public:
         return padstack_id;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( padstack_id.c_str() );
 
@@ -3107,7 +3107,7 @@ public:
         delete unit;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -3170,7 +3170,7 @@ public:
         delete wiring;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( pcbname.c_str() );
 
@@ -3233,7 +3233,7 @@ public:
         time_stamp = time(NULL);
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         char    temp[80];
         struct  tm* tmp;
@@ -3277,7 +3277,7 @@ public:
         time_stamp = time(NULL);
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         for( ANCESTORS::iterator i=ancestors.begin();  i!=ancestors.end();  ++i )
             i->Format( out, nestLevel );
@@ -3320,7 +3320,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         bool singleLine = pin_refs.size() <= 1;
         out->Print( nestLevel, "(%s", Name() );
@@ -3379,7 +3379,7 @@ public:
         delete rules;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( net_id.c_str() );
 
@@ -3446,7 +3446,7 @@ public:
         return ELEM::GetUnits();
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( resolution )
             resolution->Format( out, nestLevel );
@@ -3509,7 +3509,7 @@ public:
     {
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         for( PIN_PAIRS::iterator i=pin_pairs.begin();  i!=pin_pairs.end();  ++i )
         {
@@ -3566,7 +3566,7 @@ public:
         delete route;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( session_id.c_str() );
         out->Print( nestLevel, "(%s %s%s%s\n", Name(),
@@ -3676,7 +3676,7 @@ class SPECCTRA_DB : public SPECCTRA_LEXER
      * @throw IO_ERROR, if the next token or two do no make up a pin_reference,
      * or there is an error reading from the input stream.
      */
-    void readCOMPnPIN( std::string* component_id, std::string* pid_id ) throw( IO_ERROR );
+    void readCOMPnPIN( std::string* component_id, std::string* pid_id );
 
     /**
      * Function readTIME
@@ -3692,60 +3692,60 @@ class SPECCTRA_DB : public SPECCTRA_LEXER
      * @throw IO_ERROR, if the next token or 8 do no make up a time stamp,
      * or there is an error reading from the input stream.
      */
-    void readTIME( time_t* time_stamp ) throw( IO_ERROR );
+    void readTIME( time_t* time_stamp );
 
-    void doPCB( PCB* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doPARSER( PARSER* growth ) throw( IO_ERROR );
-    void doRESOLUTION( UNIT_RES* growth ) throw( IO_ERROR );
-    void doUNIT( UNIT_RES* growth ) throw( IO_ERROR );
-    void doSTRUCTURE( STRUCTURE* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doSTRUCTURE_OUT( STRUCTURE_OUT* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doLAYER_NOISE_WEIGHT( LAYER_NOISE_WEIGHT* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doSPECCTRA_LAYER_PAIR( SPECCTRA_LAYER_PAIR* growth ) throw( IO_ERROR );
-    void doBOUNDARY( BOUNDARY* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doRECTANGLE( RECTANGLE* growth ) throw( IO_ERROR );
-    void doPATH( PATH* growth ) throw( IO_ERROR );
-    void doSTRINGPROP( STRINGPROP* growth ) throw( IO_ERROR );
-    void doTOKPROP( TOKPROP* growth ) throw( IO_ERROR );
-    void doVIA( VIA* growth ) throw( IO_ERROR );
-    void doCONTROL( CONTROL* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doLAYER( LAYER* growth ) throw( IO_ERROR );
-    void doRULE( RULE* growth ) throw( IO_ERROR );
-    void doKEEPOUT( KEEPOUT* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doCIRCLE( CIRCLE* growth ) throw( IO_ERROR );
-    void doQARC( QARC* growth ) throw( IO_ERROR );
-    void doWINDOW( WINDOW* growth ) throw( IO_ERROR );
-    void doCONNECT( CONNECT* growth ) throw( IO_ERROR );
-    void doREGION( REGION* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doCLASS_CLASS( CLASS_CLASS* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doLAYER_RULE( LAYER_RULE* growth ) throw( IO_ERROR );
-    void doCLASSES( CLASSES* growth ) throw( IO_ERROR );
-    void doGRID( GRID* growth ) throw( IO_ERROR );
-    void doPLACE( PLACE* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doCOMPONENT( COMPONENT* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doPLACEMENT( PLACEMENT* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doPROPERTIES( PROPERTIES* growth ) throw( IO_ERROR );
-    void doPADSTACK( PADSTACK* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doSHAPE( SHAPE* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doIMAGE( IMAGE* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doLIBRARY( LIBRARY* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doPIN( PIN* growth ) throw( IO_ERROR );
-    void doNET( NET* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doNETWORK( NETWORK* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doCLASS( CLASS* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doTOPOLOGY( TOPOLOGY* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doFROMTO( FROMTO* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doCOMP_ORDER( COMP_ORDER* growth ) throw( IO_ERROR );
-    void doWIRE( WIRE* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doWIRE_VIA( WIRE_VIA* growth ) throw( IO_ERROR );
-    void doWIRING( WIRING* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doSESSION( SESSION* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doANCESTOR( ANCESTOR* growth ) throw( IO_ERROR );
-    void doHISTORY( HISTORY* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doROUTE( ROUTE* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doWAS_IS( WAS_IS* growth ) throw( IO_ERROR );
-    void doNET_OUT( NET_OUT* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doSUPPLY_PIN( SUPPLY_PIN* growth ) throw( IO_ERROR );
+    void doPCB( PCB* growth );
+    void doPARSER( PARSER* growth );
+    void doRESOLUTION( UNIT_RES* growth );
+    void doUNIT( UNIT_RES* growth );
+    void doSTRUCTURE( STRUCTURE* growth );
+    void doSTRUCTURE_OUT( STRUCTURE_OUT* growth );
+    void doLAYER_NOISE_WEIGHT( LAYER_NOISE_WEIGHT* growth );
+    void doSPECCTRA_LAYER_PAIR( SPECCTRA_LAYER_PAIR* growth );
+    void doBOUNDARY( BOUNDARY* growth );
+    void doRECTANGLE( RECTANGLE* growth );
+    void doPATH( PATH* growth );
+    void doSTRINGPROP( STRINGPROP* growth );
+    void doTOKPROP( TOKPROP* growth );
+    void doVIA( VIA* growth );
+    void doCONTROL( CONTROL* growth );
+    void doLAYER( LAYER* growth );
+    void doRULE( RULE* growth );
+    void doKEEPOUT( KEEPOUT* growth );
+    void doCIRCLE( CIRCLE* growth );
+    void doQARC( QARC* growth );
+    void doWINDOW( WINDOW* growth );
+    void doCONNECT( CONNECT* growth );
+    void doREGION( REGION* growth );
+    void doCLASS_CLASS( CLASS_CLASS* growth );
+    void doLAYER_RULE( LAYER_RULE* growth );
+    void doCLASSES( CLASSES* growth );
+    void doGRID( GRID* growth );
+    void doPLACE( PLACE* growth );
+    void doCOMPONENT( COMPONENT* growth );
+    void doPLACEMENT( PLACEMENT* growth );
+    void doPROPERTIES( PROPERTIES* growth );
+    void doPADSTACK( PADSTACK* growth );
+    void doSHAPE( SHAPE* growth );
+    void doIMAGE( IMAGE* growth );
+    void doLIBRARY( LIBRARY* growth );
+    void doPIN( PIN* growth );
+    void doNET( NET* growth );
+    void doNETWORK( NETWORK* growth );
+    void doCLASS( CLASS* growth );
+    void doTOPOLOGY( TOPOLOGY* growth );
+    void doFROMTO( FROMTO* growth );
+    void doCOMP_ORDER( COMP_ORDER* growth );
+    void doWIRE( WIRE* growth );
+    void doWIRE_VIA( WIRE_VIA* growth );
+    void doWIRING( WIRING* growth );
+    void doSESSION( SESSION* growth );
+    void doANCESTOR( ANCESTOR* growth );
+    void doHISTORY( HISTORY* growth );
+    void doROUTE( ROUTE* growth );
+    void doWAS_IS( WAS_IS* growth );
+    void doNET_OUT( NET_OUT* growth );
+    void doSUPPLY_PIN( SUPPLY_PIN* growth );
 
     //-----<FromBOARD>-------------------------------------------------------
 
@@ -3756,7 +3756,7 @@ class SPECCTRA_DB : public SPECCTRA_LEXER
      * @param aBoard The BOARD to get information from in order to make the BOUNDARY.
      * @param aBoundary The empty BOUNDARY to fill in.
      */
-    void fillBOUNDARY( BOARD* aBoard, BOUNDARY* aBoundary ) throw( IO_ERROR, boost::bad_pointer );
+    void fillBOUNDARY( BOARD* aBoard, BOUNDARY* aBoundary );
 
     /**
      * Function makeIMAGE
@@ -3826,15 +3826,14 @@ class SPECCTRA_DB : public SPECCTRA_LEXER
      * Function makeTRACK
      * creates a TRACK form the PATH and BOARD info.
      */
-    TRACK* makeTRACK( PATH* aPath, int aPointIndex, int aNetcode ) throw( IO_ERROR );
+    TRACK* makeTRACK( PATH* aPath, int aPointIndex, int aNetcode );
 
     /**
      * Function makeVIA
      * instantiates a KiCad VIA on the heap and initializes it with internal
      * values consistent with the given PADSTACK, POINT, and netcode.
      */
-    ::VIA* makeVIA( PADSTACK* aPadstack, const POINT& aPoint, int aNetCode, int aViaDrillDefault )
-        throw( IO_ERROR );
+    ::VIA* makeVIA( PADSTACK* aPadstack, const POINT& aPoint, int aNetCode, int aViaDrillDefault );
 
     //-----</FromSESSION>----------------------------------------------------
 
@@ -3906,7 +3905,7 @@ public:
      * @param aFilename The name of the dsn file to load.
      * @throw IO_ERROR if there is a lexer or parser error.
      */
-    void LoadPCB( const wxString& aFilename ) throw( IO_ERROR, boost::bad_pointer );
+    void LoadPCB( const wxString& aFilename );
 
     /**
      * Function LoadSESSION
@@ -3918,7 +3917,7 @@ public:
      * @param aFilename The name of the dsn file to load.
      * @throw IO_ERROR if there is a lexer or parser error.
      */
-    void LoadSESSION( const wxString& aFilename ) throw( IO_ERROR, boost::bad_pointer );
+    void LoadSESSION( const wxString& aFilename );
 
     /**
      * Function ExportPCB
@@ -3929,7 +3928,7 @@ public:
      *          and also to to be changed in the output file.
      * @throw IO_ERROR, if an i/o error occurs saving the file.
      */
-    void ExportPCB( wxString aFilename,  bool aNameChange=false ) throw( IO_ERROR );
+    void ExportPCB( wxString aFilename,  bool aNameChange=false );
 
     /**
      * Function FromBOARD
@@ -3942,7 +3941,7 @@ public:
      *
      * @param aBoard The BOARD to convert to a PCB.
      */
-    void FromBOARD( BOARD* aBoard ) throw( IO_ERROR, boost::bad_ptr_container_operation );
+    void FromBOARD( BOARD* aBoard );
 
     /**
      * Function FromSESSION
@@ -3952,7 +3951,7 @@ public:
      *
      * @param aBoard The BOARD to merge the SESSION information into.
      */
-    void FromSESSION( BOARD* aBoard ) throw( IO_ERROR );
+    void FromSESSION( BOARD* aBoard );
 
     /**
      * Function ExportSESSION
diff --git a/pcbnew/specctra_export.cpp b/pcbnew/specctra_export.cpp
index 662fcafe10..0618598f47 100644
--- a/pcbnew/specctra_export.cpp
+++ b/pcbnew/specctra_export.cpp
@@ -729,7 +729,6 @@ PADSTACK* SPECCTRA_DB::makeVia( const ::VIA* aVia )
 
 
 void SPECCTRA_DB::fillBOUNDARY( BOARD* aBoard, BOUNDARY* boundary )
-    throw( IO_ERROR, boost::bad_pointer )
 {
     wxString errMessage;
     SHAPE_POLY_SET outlines;
@@ -789,7 +788,6 @@ typedef std::pair<STRINGSET::iterator, bool>    STRINGSET_PAIR;
 
 
 void SPECCTRA_DB::FromBOARD( BOARD* aBoard )
-    throw( IO_ERROR, boost::bad_ptr_container_operation )
 {
     PCB_TYPE_COLLECTOR     items;
 
diff --git a/pcbnew/specctra_import.cpp b/pcbnew/specctra_import.cpp
index 09a39f9a77..2d8da4b77b 100644
--- a/pcbnew/specctra_import.cpp
+++ b/pcbnew/specctra_import.cpp
@@ -197,7 +197,7 @@ static wxPoint mapPt( const POINT& aPoint, UNIT_RES* aResolution )
 }
 
 
-TRACK* SPECCTRA_DB::makeTRACK( PATH* aPath, int aPointIndex, int aNetcode ) throw( IO_ERROR )
+TRACK* SPECCTRA_DB::makeTRACK( PATH* aPath, int aPointIndex, int aNetcode )
 {
     int layerNdx = findLayerName( aPath->layer_id );
 
@@ -222,7 +222,6 @@ TRACK* SPECCTRA_DB::makeTRACK( PATH* aPath, int aPointIndex, int aNetcode ) thro
 
 ::VIA* SPECCTRA_DB::makeVIA( PADSTACK* aPadstack, const POINT& aPoint,
             int aNetCode, int aViaDrillDefault )
-    throw( IO_ERROR )
 {
     ::VIA*  via = 0;
     SHAPE*  shape;
@@ -358,7 +357,7 @@ TRACK* SPECCTRA_DB::makeTRACK( PATH* aPath, int aPointIndex, int aNetcode ) thro
 // no UI code in this function, throw exception to report problems to the
 // UI handler: void PCB_EDIT_FRAME::ImportSpecctraSession( wxCommandEvent& event )
 
-void SPECCTRA_DB::FromSESSION( BOARD* aBoard ) throw( IO_ERROR )
+void SPECCTRA_DB::FromSESSION( BOARD* aBoard )
 {
     sessionBoard = aBoard;      // not owned here
 
diff --git a/tools/io_benchmark/stdstream_line_reader.cpp b/tools/io_benchmark/stdstream_line_reader.cpp
index a45131b864..8fe530db75 100644
--- a/tools/io_benchmark/stdstream_line_reader.cpp
+++ b/tools/io_benchmark/stdstream_line_reader.cpp
@@ -41,7 +41,7 @@ STDISTREAM_LINE_READER::~STDISTREAM_LINE_READER()
 }
 
 
-char* STDISTREAM_LINE_READER::ReadLine() throw( IO_ERROR )
+char* STDISTREAM_LINE_READER::ReadLine()
 {
     getline( *m_stream, m_buffer );
 
@@ -67,7 +67,7 @@ void STDISTREAM_LINE_READER::setStream( std::istream& aStream )
 }
 
 
-IFSTREAM_LINE_READER::IFSTREAM_LINE_READER( const wxFileName& aFileName ) throw( IO_ERROR ) :
+IFSTREAM_LINE_READER::IFSTREAM_LINE_READER( const wxFileName& aFileName )  :
         m_fStream( aFileName.GetFullName().ToUTF8() )
 {
     if( !m_fStream.is_open() )
diff --git a/tools/io_benchmark/stdstream_line_reader.h b/tools/io_benchmark/stdstream_line_reader.h
index 2cee6090c4..5ccf86f3cc 100644
--- a/tools/io_benchmark/stdstream_line_reader.h
+++ b/tools/io_benchmark/stdstream_line_reader.h
@@ -42,7 +42,7 @@ public:
 
     ~STDISTREAM_LINE_READER();
 
-    char* ReadLine() throw( IO_ERROR ) override;
+    char* ReadLine()  override;
 
 protected:
 
@@ -61,7 +61,7 @@ class IFSTREAM_LINE_READER : public STDISTREAM_LINE_READER
 {
 public:
 
-    IFSTREAM_LINE_READER( const wxFileName& aFileName ) throw( IO_ERROR );
+    IFSTREAM_LINE_READER( const wxFileName& aFileName );
 
     void Rewind();