diff --git a/js/encoding/BinaryXMLCodec.js b/js/encoding/BinaryXMLCodec.js
index b1befdd..e6b8fef 100644
--- a/js/encoding/BinaryXMLCodec.js
+++ b/js/encoding/BinaryXMLCodec.js
@@ -61,14 +61,14 @@
 	offset) {
 	
 	if ((type > XML_UDATA) || (type < 0) || (val < 0)) {
-		throw new Exception("Tag and value must be positive, and tag valid.");
+		throw new Error("Tag and value must be positive, and tag valid.");
 	}
 	
 	// Encode backwards. Calculate how many bytes we need:
 	var/*int*/ numEncodingBytes = numEncodingBytes(val);
 	
 	if ((offset + numEncodingBytes) > buf.length) {
-		throw new Exception("Buffer space of " + (buf.length-offset) + 
+		throw new Error("Buffer space of " + (buf.length-offset) + 
 											" bytes insufficient to hold " + 
 											numEncodingBytes + " of encoded type and value.");
 	}
@@ -104,7 +104,7 @@
 		offset) {
 	
 	if ((type > XML_UDATA) || (type < 0) || (val < 0)) {
-		throw new Exception("Tag and value must be positive, and tag valid.");
+		throw new Error("Tag and value must be positive, and tag valid.");
 	}
 	
 	// Encode backwards. Calculate how many bytes we need:
@@ -112,7 +112,7 @@
 	var numEncodingBytes = numEncodingBytes(val);
 	
 	if ((offset + numEncodingBytes) > buf.length) {
-		throw new Exception("Buffer space of " + (buf.length-offset) + 
+		throw new Error("Buffer space of " + (buf.length-offset) + 
 											" bytes insufficient to hold " + 
 											numEncodingBytes + " of encoded type and value.");
 	}
@@ -137,7 +137,7 @@
 		--i;
 	}
 	if (val != 0) {
-		throw new Exception( "This should not happen: miscalculated encoding");
+		throw new Error( "This should not happen: miscalculated encoding");
 		//Log.warning(Log.FAC_ENCODING, "This should not happen: miscalculated encoding length, have " + val + " left.");
 	}
 	
diff --git a/js/encoding/BinaryXMLDecoder.js b/js/encoding/BinaryXMLDecoder.js
index c41d549..41a4e45 100644
--- a/js/encoding/BinaryXMLDecoder.js
+++ b/js/encoding/BinaryXMLDecoder.js
@@ -86,7 +86,7 @@
 		tv = this.decodeTypeAndVal(this.istream);
 
 		if (null == tv) {
-			throw new Exception("Expected start element: " + startTag + " got something not a tag.");
+			throw new Error("Expected start element: " + startTag + " got something not a tag.");
 		}
 		
 		//String 
@@ -101,7 +101,7 @@
 		}
 		
 		if ((null ==  decodedTag) || decodedTag != startTag) {
-			throw new Exception("Expected start element: " + startTag + " got: " + decodedTag + "(" + tv.val() + ")");
+			throw new Error("Expected start element: " + startTag + " got: " + decodedTag + "(" + tv.val() + ")");
 		}
 		
 		if (null != attributes) {
@@ -109,7 +109,7 @@
 		}
 		
 	} catch (e) {
-		throw new Exception("readStartElement", e);
+		throw new Error("readStartElement", e);
 	}
 };
 
@@ -189,7 +189,7 @@
 			tv = this.decodeTypeAndVal(this.istream);
 			
 			if (null == tv) {
-				throw new Exception("Expected start element: " + startTag + " got something not a tag.");
+				throw new Error("Expected start element: " + startTag + " got something not a tag.");
 			}
 			
 			//String 
@@ -227,7 +227,7 @@
 			
 			if ((null ==  decodedTag) || decodedTag != startTag ) {
 				console.log('expecting '+ startag + ' but got '+ decodedTag);
-				throw new Exception("Expected start element: " + startTag + " got: " + decodedTag + "(" + tv.val() + ")");
+				throw new Error("Expected start element: " + startTag + " got: " + decodedTag + "(" + tv.val() + ")");
 			}
 			
 			// DKS: does not read attributes out of stream if caller doesn't
@@ -239,7 +239,7 @@
 			
 		//} catch ( e) {
 			//console.log(e);
-			//throw new Exception("readStartElement", e);
+			//throw new Error("readStartElement", e);
 		//}
 	}
 	
@@ -281,7 +281,7 @@
 				// DKS TODO are attributes same or different dictionary?
 				attributeName = tagToString(thisTV.val());
 				if (null == attributeName) {
-					throw new Exception("Unknown DATTR value" + thisTV.val());
+					throw new Error("Unknown DATTR value" + thisTV.val());
 				}
 			}
 			// Attribute values are always UDATA
@@ -296,7 +296,7 @@
 
 	} catch ( e) {
 		Log.logStackTrace(Log.FAC_ENCODING, Level.WARNING, e);
-		throw new Exception("readStartElement", e);
+		throw new Error("readStartElement", e);
 	}
 };
 
@@ -371,7 +371,7 @@
 		return false;
 	}
 	else{
-		throw new Exception("SHOULD BE STRING OR NUMBER");
+		throw new Error("SHOULD BE STRING OR NUMBER");
 	}
 }
 //returns Long
@@ -425,7 +425,7 @@
 				this.offset = previousOffset;
 			} catch ( e) {
 				Log.logStackTrace(Log.FAC_ENCODING, Level.WARNING, e);
-				throw new Exception("Cannot reset stream! " + e.getMessage(), e);
+				throw new Error("Cannot reset stream! " + e.getMessage(), e);
 			}
 		}
 		return decodedTag;
@@ -767,7 +767,7 @@
 
 	//}
 	//catch (e) {
-		//throw new Exception("Cannot parse " + startTag + ": " + strVal);
+		//throw new Error("Cannot parse " + startTag + ": " + strVal);
 	//}
 	
 	return parseInt(strVal);
diff --git a/js/encoding/BinaryXMLEncoder.js b/js/encoding/BinaryXMLEncoder.js
index 16759b1..7404802 100644
--- a/js/encoding/BinaryXMLEncoder.js
+++ b/js/encoding/BinaryXMLEncoder.js
@@ -207,14 +207,14 @@
 	if(LOG>4) console.log('OFFSET IS ' + this.offset );
 	
 	if ((type > XML_UDATA) || (type < 0) || (val < 0)) {
-		throw new Exception("Tag and value must be positive, and tag valid.");
+		throw new Error("Tag and value must be positive, and tag valid.");
 	}
 	
 	// Encode backwards. Calculate how many bytes we need:
 	var numEncodingBytes = this.numEncodingBytes(val);
 	
 	if ((this.offset + numEncodingBytes) > buf.length) {
-		throw new Exception("Buffer space of " + (buf.length-this.offset) + 
+		throw new Error("Buffer space of " + (buf.length-this.offset) + 
 											" bytes insufficient to hold " + 
 											numEncodingBytes + " of encoded type and value.");
 	}
@@ -239,7 +239,7 @@
 		--i;
 	}
 	if (val != 0) {
-		throw new Exception( "This should not happen: miscalculated encoding");
+		throw new Error( "This should not happen: miscalculated encoding");
 		//Log.warning(Log.FAC_ENCODING, "This should not happen: miscalculated encoding length, have " + val + " left.");
 	}
 	this.offset+= numEncodingBytes;
