diff --git a/library/bignum_mod.c b/library/bignum_mod.c
index 63f9172..c424854 100644
--- a/library/bignum_mod.c
+++ b/library/bignum_mod.c
@@ -88,10 +88,12 @@
     switch( m->int_rep )
     {
         case MBEDTLS_MPI_MOD_REP_MONTGOMERY:
-            mbedtls_free( m->rep.mont ); break;
+            mbedtls_free( m->rep.mont );
+            break;
         case MBEDTLS_MPI_MOD_REP_OPT_RED:
-            mbedtls_free( m->rep.ored ); break;
-        default:
+            mbedtls_free( m->rep.ored );
+            break;
+        case MBEDTLS_MPI_MOD_REP_INVALID:
             break;
     }
 
@@ -105,8 +107,8 @@
 int mbedtls_mpi_mod_modulus_setup( mbedtls_mpi_mod_modulus *m,
                                    mbedtls_mpi_uint *p,
                                    size_t pn,
-                                   int ext_rep,
-                                   int int_rep )
+                                   mbedtls_mpi_mod_ext_rep ext_rep,
+                                   mbedtls_mpi_mod_rep_selector int_rep )
 {
     int ret = 0;
 
@@ -121,7 +123,8 @@
     {
         case MBEDTLS_MPI_MOD_EXT_REP_LE:
         case MBEDTLS_MPI_MOD_EXT_REP_BE:
-            m->ext_rep = ext_rep; break;
+            m->ext_rep = ext_rep;
+            break;
         default:
             ret = MBEDTLS_ERR_MPI_BAD_INPUT_DATA;
             goto exit;
@@ -131,10 +134,12 @@
     {
         case MBEDTLS_MPI_MOD_REP_MONTGOMERY:
             m->int_rep = int_rep;
-            m->rep.mont = NULL; break;
+            m->rep.mont = NULL;
+            break;
         case MBEDTLS_MPI_MOD_REP_OPT_RED:
             m->int_rep = int_rep;
-            m->rep.ored = NULL; break;
+            m->rep.ored = NULL;
+            break;
         default:
             ret = MBEDTLS_ERR_MPI_BAD_INPUT_DATA;
             goto exit;
diff --git a/library/bignum_mod.h b/library/bignum_mod.h
index 254a744..7950f09 100644
--- a/library/bignum_mod.h
+++ b/library/bignum_mod.h
@@ -26,6 +26,22 @@
 #include "mbedtls/bignum.h"
 #endif
 
+/* Skip 1 as it is slightly easier to accidentally pass to functions. */
+typedef enum
+{
+    MBEDTLS_MPI_MOD_REP_INVALID    = 0,
+    MBEDTLS_MPI_MOD_REP_MONTGOMERY = 2,
+    MBEDTLS_MPI_MOD_REP_OPT_RED
+} mbedtls_mpi_mod_rep_selector;
+
+/* Make mbedtls_mpi_mod_rep_selector and mbedtls_mpi_mod_ext_rep disjoint to
+ * make it easier to catch when they are accidentally swapped. */
+typedef enum
+{
+    MBEDTLS_MPI_MOD_EXT_REP_INVALID = 0,
+    MBEDTLS_MPI_MOD_EXT_REP_LE      = 8,
+    MBEDTLS_MPI_MOD_EXT_REP_BE
+} mbedtls_mpi_mod_ext_rep;
 
 typedef struct
 {
@@ -38,10 +54,10 @@
 
 typedef struct {
     mbedtls_mpi_uint *p;
-    size_t n;       // number of limbs
-    size_t plen;    // bitlen of p
-    int ext_rep;    // signals external representation (eg. byte order)
-    int int_rep;    // selector to signal the active member of the union
+    size_t n;                                // number of limbs
+    size_t plen;                             // bitlen of p
+    mbedtls_mpi_mod_ext_rep ext_rep;         // signals external representation (eg. byte order)
+    mbedtls_mpi_mod_rep_selector int_rep;    // selector to signal the active member of the union
     union rep
     {
         mbedtls_mpi_mont_struct mont;
@@ -49,21 +65,6 @@
     } rep;
 } mbedtls_mpi_mod_modulus;
 
-typedef enum
-{
-    MBEDTLS_MPI_MOD_REP_INVALID    = 0,
-    MBEDTLS_MPI_MOD_REP_MONTGOMERY,
-    MBEDTLS_MPI_MOD_REP_OPT_RED
-} mbedtls_mpi_mod_rep_selector;
-
-typedef enum
-{
-    MBEDTLS_MPI_MOD_EXT_REP_INVALID    = 0,
-    MBEDTLS_MPI_MOD_EXT_REP_LE,
-    MBEDTLS_MPI_MOD_EXT_REP_BE
-} mbedtls_mpi_mod_ext_rep;
-
-
 /** Setup a residue structure.
  *
  * \param r     The address of residue to setup. The size is determined by \p m.
@@ -124,8 +125,8 @@
 int mbedtls_mpi_mod_modulus_setup( mbedtls_mpi_mod_modulus *m,
                                    mbedtls_mpi_uint *p,
                                    size_t pn,
-                                   int ext_rep,
-                                   int int_rep );
+                                   mbedtls_mpi_mod_ext_rep ext_rep,
+                                   mbedtls_mpi_mod_rep_selector int_rep );
 
 /** Free elements of a modulus structure.
  *
diff --git a/library/bignum_mod_raw.c b/library/bignum_mod_raw.c
index 305cec1..d3cd770 100644
--- a/library/bignum_mod_raw.c
+++ b/library/bignum_mod_raw.c
@@ -48,13 +48,17 @@
 {
     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
 
-    if( m->ext_rep == MBEDTLS_MPI_MOD_EXT_REP_LE )
-        ret = mbedtls_mpi_core_read_le( X, m->n, buf, buflen );
-
-    else if( m->ext_rep == MBEDTLS_MPI_MOD_EXT_REP_BE )
-        ret = mbedtls_mpi_core_read_be( X, m->n, buf, buflen );
-    else
-        return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA );
+    switch( m->ext_rep )
+    {
+        case MBEDTLS_MPI_MOD_EXT_REP_LE:
+            ret = mbedtls_mpi_core_read_le( X, m->n, buf, buflen );
+            break;
+        case MBEDTLS_MPI_MOD_EXT_REP_BE:
+            ret = mbedtls_mpi_core_read_be( X, m->n, buf, buflen );
+            break;
+        default:
+            return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA );
+    }
 
     if( ret != 0 )
         goto cleanup;
@@ -75,16 +79,15 @@
                                unsigned char *buf,
                                size_t buflen )
 {
-    if( m->ext_rep == MBEDTLS_MPI_MOD_EXT_REP_LE )
-        return mbedtls_mpi_core_write_le( X, m->n, buf, buflen );
-
-    else if( m->ext_rep == MBEDTLS_MPI_MOD_EXT_REP_BE )
-        return mbedtls_mpi_core_write_be( X, m->n, buf, buflen );
-
-    else
-        return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA );
-
-    return( 0 );
+    switch( m->ext_rep )
+    {
+        case MBEDTLS_MPI_MOD_EXT_REP_LE:
+            return mbedtls_mpi_core_write_le( X, m->n, buf, buflen );
+        case MBEDTLS_MPI_MOD_EXT_REP_BE:
+            return mbedtls_mpi_core_write_be( X, m->n, buf, buflen );
+        default:
+            return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA );
+    }
 }
 
 #endif /* MBEDTLS_BIGNUM_C */
