diff --git a/gracedb/alerts/fields.py b/gracedb/alerts/fields.py
index 4fd85a1175672ac5c6d5e01c19c8a856b67984dd..57cac85ed51bbaad084439fc9802b5dc1e1a8c83 100644
--- a/gracedb/alerts/fields.py
+++ b/gracedb/alerts/fields.py
@@ -1,7 +1,34 @@
+import phonenumbers
+
 from django.db import models
 
 from .validators import validate_phone
 
 
+PHONE_NUMBER_FORMATS = ['E164', 'NATIONAL', 'INTERNATIONAL', 'RFC3966']
+
+
 class PhoneNumberField(models.CharField):
     validators = [validate_phone]
+
+    def __init__(self, *args, **kwargs):
+        # Get format and check values
+        self.format = kwargs.pop('format', 'E164')
+        if self.format not in PHONE_NUMBER_FORMATS:
+            raise ValueError('Phone number format must be one of {fmt}'.format(
+                fmt=", ".join(PHONE_NUMBER_FORMATS)))
+
+        # super __init__
+        super(PhoneNumberField, self).__init__(*args, **kwargs)
+
+    def get_prep_value(self, value):
+        value = super(PhoneNumberField, self).get_prep_value(value)
+
+        # Handle blank values
+        if value is None or value == '':
+            return value
+
+        # Return phone number as a formatted string
+        phone = phonenumbers.parse(value, 'US')
+        return phonenumbers.format_number(phone,
+            getattr(phonenumbers.PhoneNumberFormat, self.format))
diff --git a/gracedb/alerts/validators.py b/gracedb/alerts/validators.py
index 267c1ca2dbdaa9b07a22655566614bcb2e89ae08..8c877d0dcf89b37faad592563bccbcb77877c64f 100644
--- a/gracedb/alerts/validators.py
+++ b/gracedb/alerts/validators.py
@@ -13,7 +13,3 @@ def validate_phone(value):
     # Validate phone number
     if not phonenumbers.is_valid_number(phone):
         raise ValidationError('Not a valid phone number: {0}'.format(value))
-
-    # Return phone number as a formatted string
-    return phonenumbers.format_number(phone,
-        phonenumbers.PhoneNumberFormat.E164)