Merge branch 'release/2.21'
diff --git a/pom.xml b/pom.xml
index 0d50d10..c7d4a88 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
 
   <groupId>edu.psu.swe.scim</groupId>
   <artifactId>scim-parent</artifactId>
-  <version>2.20</version>
+  <version>2.21</version>
   <packaging>pom</packaging>
   <name>SCIM - Parent</name>
   <description>Penn State's Open Source JavaEE implmentation of the SCIM version 2.0 specification (RFC7642, RFC7643 and RFC7644)</description>
diff --git a/scim-client/pom.xml b/scim-client/pom.xml
index 7350ac9..37d6851 100644
--- a/scim-client/pom.xml
+++ b/scim-client/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-parent</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
   <artifactId>scim-client</artifactId>
   <name>SCIM - Client</name>
diff --git a/scim-client/src/main/java/edu/psu/swe/scim/client/rest/BaseScimClient.java b/scim-client/src/main/java/edu/psu/swe/scim/client/rest/BaseScimClient.java
index 4f04314..b9e216b 100644
--- a/scim-client/src/main/java/edu/psu/swe/scim/client/rest/BaseScimClient.java
+++ b/scim-client/src/main/java/edu/psu/swe/scim/client/rest/BaseScimClient.java
@@ -3,6 +3,7 @@
 import java.util.Optional;
 import java.util.function.Function;
 
+import javax.ws.rs.ProcessingException;
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.Invocation;
@@ -166,6 +167,9 @@
 
         throw new ScimException(errorResponse, status);
       }
+    } catch (ProcessingException e) {
+      ErrorResponse er = new ErrorResponse(Status.INTERNAL_SERVER_ERROR, e.getMessage());
+      throw new ScimException(er, Status.INTERNAL_SERVER_ERROR);
     } finally {
       RestClientUtil.close(response);
     }
diff --git a/scim-common/pom.xml b/scim-common/pom.xml
index db7b255..332954e 100644
--- a/scim-common/pom.xml
+++ b/scim-common/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-parent</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-common</artifactId>
@@ -14,12 +14,12 @@
     <dependency>
       <groupId>edu.psu.swe.scim</groupId>
       <artifactId>scim-spec-protocol</artifactId>
-      <version>2.20</version>
+      <version>2.21</version>
     </dependency>
     <dependency>
       <groupId>edu.psu.swe.scim</groupId>
       <artifactId>scim-spec-schema</artifactId>
-      <version>2.20</version>
+      <version>2.21</version>
     </dependency>
   </dependencies>
 
diff --git a/scim-compliance/pom.xml b/scim-compliance/pom.xml
index 98c32d1..9df4eb3 100644
--- a/scim-compliance/pom.xml
+++ b/scim-compliance/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-parent</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-compliance</artifactId>
diff --git a/scim-compliance/scim-compliance-client/pom.xml b/scim-compliance/scim-compliance-client/pom.xml
index c253cec..4fd7d53 100644
--- a/scim-compliance/scim-compliance-client/pom.xml
+++ b/scim-compliance/scim-compliance-client/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-compliance</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-compliance-client</artifactId>
diff --git a/scim-compliance/scim-compliance-server/pom.xml b/scim-compliance/scim-compliance-server/pom.xml
index ad07c92..a32ff05 100644
--- a/scim-compliance/scim-compliance-server/pom.xml
+++ b/scim-compliance/scim-compliance-server/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-compliance</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-compliance-server</artifactId>
diff --git a/scim-errai/pom.xml b/scim-errai/pom.xml
index eb5e5eb..004e19f 100644
--- a/scim-errai/pom.xml
+++ b/scim-errai/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-parent</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-errai</artifactId>
diff --git a/scim-server/pom.xml b/scim-server/pom.xml
index 7005c8c..eea5713 100644
--- a/scim-server/pom.xml
+++ b/scim-server/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-parent</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-server</artifactId>
diff --git a/scim-server/scim-server-common/pom.xml b/scim-server/scim-server-common/pom.xml
index c53ee8f..7cb3adb 100644
--- a/scim-server/scim-server-common/pom.xml
+++ b/scim-server/scim-server-common/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-server</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-server-common</artifactId>
diff --git a/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/rest/BaseResourceTypeResourceImpl.java b/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/rest/BaseResourceTypeResourceImpl.java
index d66577d..d27d85c 100644
--- a/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/rest/BaseResourceTypeResourceImpl.java
+++ b/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/rest/BaseResourceTypeResourceImpl.java
@@ -459,6 +459,8 @@
         updated = provider.update(updateRequest);
       } catch (UnableToUpdateResourceException e1) {
         return createGenericExceptionResponse(e1, e1.getStatus());
+      } catch (Exception e1) {
+        return createGenericExceptionResponse(e1, Status.INTERNAL_SERVER_ERROR);
       }
 
       // Process Attributes
@@ -556,6 +558,8 @@
         updated = provider.update(updateRequest);
       } catch (UnableToUpdateResourceException e1) {
         return createGenericExceptionResponse(e1, e1.getStatus());
+      } catch (Exception e1) {
+        return createGenericExceptionResponse(e1, Status.INTERNAL_SERVER_ERROR);
       }
 
       // Process Attributes
diff --git a/scim-server/scim-server-example/pom.xml b/scim-server/scim-server-example/pom.xml
index 38f1380..897bbda 100644
--- a/scim-server/scim-server-example/pom.xml
+++ b/scim-server/scim-server-example/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-server</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-server-examples</artifactId>
diff --git a/scim-server/scim-server-example/scim-server-couchdb/pom.xml b/scim-server/scim-server-example/scim-server-couchdb/pom.xml
index 33a89b6..88af26a 100644
--- a/scim-server/scim-server-example/scim-server-couchdb/pom.xml
+++ b/scim-server/scim-server-example/scim-server-couchdb/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-server-examples</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-server-couchdb</artifactId>
diff --git a/scim-server/scim-server-example/scim-server-memory/pom.xml b/scim-server/scim-server-example/scim-server-memory/pom.xml
index 58e3a90..4322dfb 100644
--- a/scim-server/scim-server-example/scim-server-memory/pom.xml
+++ b/scim-server/scim-server-example/scim-server-memory/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-server-examples</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-server-memory</artifactId>
diff --git a/scim-server/scim-server-example/scim-server-rdbms/pom.xml b/scim-server/scim-server-example/scim-server-rdbms/pom.xml
index 1f3cea8..820e0d9 100644
--- a/scim-server/scim-server-example/scim-server-rdbms/pom.xml
+++ b/scim-server/scim-server-example/scim-server-rdbms/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-server-examples</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-server-rdbms</artifactId>
diff --git a/scim-spec/pom.xml b/scim-spec/pom.xml
index bd19178..c7e39b6 100644
--- a/scim-spec/pom.xml
+++ b/scim-spec/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-parent</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-spec</artifactId>
diff --git a/scim-spec/scim-spec-protocol/pom.xml b/scim-spec/scim-spec-protocol/pom.xml
index 71d0eff..2414c2f 100644
--- a/scim-spec/scim-spec-protocol/pom.xml
+++ b/scim-spec/scim-spec-protocol/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-spec</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-spec-protocol</artifactId>
diff --git a/scim-spec/scim-spec-schema/pom.xml b/scim-spec/scim-spec-schema/pom.xml
index a1d371b..6ff0e70 100644
--- a/scim-spec/scim-spec-schema/pom.xml
+++ b/scim-spec/scim-spec-schema/pom.xml
@@ -4,7 +4,7 @@
 	<parent>
 		<groupId>edu.psu.swe.scim</groupId>
 		<artifactId>scim-spec</artifactId>
-		<version>2.20</version>
+		<version>2.21</version>
 	</parent>
 
 	<artifactId>scim-spec-schema</artifactId>
diff --git a/scim-spec/scim-spec-schema/src/main/java/edu/psu/swe/scim/spec/resources/PhoneNumber.java b/scim-spec/scim-spec-schema/src/main/java/edu/psu/swe/scim/spec/resources/PhoneNumber.java
index e6a2e95..e81b532 100644
--- a/scim-spec/scim-spec-schema/src/main/java/edu/psu/swe/scim/spec/resources/PhoneNumber.java
+++ b/scim-spec/scim-spec-schema/src/main/java/edu/psu/swe/scim/spec/resources/PhoneNumber.java
@@ -48,6 +48,10 @@
 
   private static final String VISUAL_SEPARATORS = "[\\(\\)\\-\\.]";
 
+  @Getter
+  @Setter
+  private static boolean strict = true;
+  
   @ScimAttribute(description = "Phone number of the User")
   String value;
 
@@ -119,35 +123,39 @@
       throw new PhoneNumberParseException("null values are illegal for phone numbers");
     }
 
-    PhoneNumberLexer phoneNumberLexer = new PhoneNumberLexer(new ANTLRInputStream(value));
-    PhoneNumberParser p = new PhoneNumberParser(new CommonTokenStream(phoneNumberLexer));
-    p.setBuildParseTree(true);
-
-    p.addErrorListener(new BaseErrorListener() {
-      @Override
-      public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) {
-        throw new IllegalStateException("failed to parse at line " + line + " due to " + msg, e);
+    if (strict) {
+      PhoneNumberLexer phoneNumberLexer = new PhoneNumberLexer(new ANTLRInputStream(value));
+      PhoneNumberParser p = new PhoneNumberParser(new CommonTokenStream(phoneNumberLexer));
+      p.setBuildParseTree(true);
+  
+      p.addErrorListener(new BaseErrorListener() {
+        @Override
+        public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) {
+          throw new IllegalStateException("failed to parse at line " + line + " due to " + msg, e);
+        }
+      });
+  
+      PhoneNumberParseTreeListener tpl = new PhoneNumberParseTreeListener();
+      try {
+        ParseTree tree = p.phoneNumber();
+        ParseTreeWalker.DEFAULT.walk(tpl, tree);
+      } catch (IllegalStateException e) {
+        throw new PhoneNumberParseException(e);
       }
-    });
-
-    PhoneNumberParseTreeListener tpl = new PhoneNumberParseTreeListener();
-    try {
-      ParseTree tree = p.phoneNumber();
-      ParseTreeWalker.DEFAULT.walk(tpl, tree);
-    } catch (IllegalStateException e) {
-      throw new PhoneNumberParseException(e);
+  
+      PhoneNumber parsedPhoneNumber = tpl.getPhoneNumber();
+  
+      this.value = parsedPhoneNumber.getValue();
+      this.number = parsedPhoneNumber.getNumber();
+      this.extension = parsedPhoneNumber.getExtension();
+      this.subAddress = parsedPhoneNumber.getSubAddress();
+      this.phoneContext = parsedPhoneNumber.getPhoneContext();
+      this.params = parsedPhoneNumber.getParams();
+      this.isGlobalNumber = parsedPhoneNumber.isGlobalNumber();
+      this.isDomainPhoneContext = parsedPhoneNumber.isDomainPhoneContext();
+    } else {
+      this.value = value;
     }
-
-    PhoneNumber parsedPhoneNumber = tpl.getPhoneNumber();
-
-    this.value = parsedPhoneNumber.getValue();
-    this.number = parsedPhoneNumber.getNumber();
-    this.extension = parsedPhoneNumber.getExtension();
-    this.subAddress = parsedPhoneNumber.getSubAddress();
-    this.phoneContext = parsedPhoneNumber.getPhoneContext();
-    this.params = parsedPhoneNumber.getParams();
-    this.isGlobalNumber = parsedPhoneNumber.isGlobalNumber();
-    this.isDomainPhoneContext = parsedPhoneNumber.isDomainPhoneContext();
   }
 
   /*
diff --git a/scim-tools/pom.xml b/scim-tools/pom.xml
index 189c907..25742ce 100644
--- a/scim-tools/pom.xml
+++ b/scim-tools/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-parent</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-tools</artifactId>
diff --git a/scim-tools/scim-tools-cli/pom.xml b/scim-tools/scim-tools-cli/pom.xml
index 1fa7fd8..4f7c3bc 100644
--- a/scim-tools/scim-tools-cli/pom.xml
+++ b/scim-tools/scim-tools-cli/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-tools</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-tools-cli</artifactId>
diff --git a/scim-tools/scim-tools-common/pom.xml b/scim-tools/scim-tools-common/pom.xml
index 3cc4d08..64127fd 100644
--- a/scim-tools/scim-tools-common/pom.xml
+++ b/scim-tools/scim-tools-common/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-tools</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-tools-common</artifactId>
diff --git a/scim-tools/scim-tools-studio/pom.xml b/scim-tools/scim-tools-studio/pom.xml
index 480acb0..7a0134a 100644
--- a/scim-tools/scim-tools-studio/pom.xml
+++ b/scim-tools/scim-tools-studio/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>edu.psu.swe.scim</groupId>
     <artifactId>scim-tools</artifactId>
-    <version>2.20</version>
+    <version>2.21</version>
   </parent>
 
   <artifactId>scim-tools-studio</artifactId>