diff --git a/include/tinycrypt/ecc.h b/include/tinycrypt/ecc.h
index 55e450e..74c0960 100644
--- a/include/tinycrypt/ecc.h
+++ b/include/tinycrypt/ecc.h
@@ -410,7 +410,7 @@
  * @return borrow
  */
 uECC_word_t uECC_vli_sub(uECC_word_t *result, const uECC_word_t *left,
-			 const uECC_word_t *right, wordcount_t num_words);
+			 const uECC_word_t *right);
 
 /*
  * @brief Constant-time comparison function(secure way to compare long ints)
diff --git a/tinycrypt/ecc.c b/tinycrypt/ecc.c
index 0b7b41a..47acf2a 100644
--- a/tinycrypt/ecc.c
+++ b/tinycrypt/ecc.c
@@ -196,11 +196,11 @@
 /* Computes result = left - right, returning borrow, in constant time.
  * Can modify in place. */
 uECC_word_t uECC_vli_sub(uECC_word_t *result, const uECC_word_t *left,
-			 const uECC_word_t *right, wordcount_t num_words)
+			 const uECC_word_t *right)
 {
 	uECC_word_t borrow = 0;
 	wordcount_t i;
-	for (i = 0; i < num_words; ++i) {
+	for (i = 0; i < NUM_ECC_WORDS; ++i) {
 		uECC_word_t diff = left[i] - right[i] - borrow;
 		uECC_word_t val = (diff > left[i]);
 		borrow = cond_set(val, borrow, (diff != left[i]));
@@ -230,8 +230,9 @@
 			 wordcount_t num_words)
 {
 	uECC_word_t tmp[NUM_ECC_WORDS];
-	uECC_word_t neg = !!uECC_vli_sub(tmp, left, right, num_words);
+	uECC_word_t neg = !!uECC_vli_sub(tmp, left, right);
 	uECC_word_t equal = uECC_vli_isZero(tmp);
+	(void) num_words;
 	return (!equal - 2 * neg);
 }
 
@@ -425,10 +426,11 @@
 		     wordcount_t num_words)
 {
 	uECC_word_t carry = uECC_vli_add(result, left, right);
+	(void) num_words;
 	if (carry || uECC_vli_cmp_unsafe(mod, result) != 1) {
 	/* result > mod (result = mod + remainder), so subtract mod to get
 	 * remainder. */
-		uECC_vli_sub(result, result, mod, num_words);
+		uECC_vli_sub(result, result, mod);
 	}
 }
 
@@ -436,7 +438,8 @@
 		     const uECC_word_t *right, const uECC_word_t *mod,
 		     wordcount_t num_words)
 {
-	uECC_word_t l_borrow = uECC_vli_sub(result, left, right, num_words);
+	uECC_word_t l_borrow = uECC_vli_sub(result, left, right);
+	(void) num_words;
 	if (l_borrow) {
 		/* In this case, result == -diff == (max int) - diff. Since -x % d == d - x,
 		 * we can get the correct result from result + mod (with overflow). */
@@ -557,20 +560,20 @@
 			uECC_vli_rshift1(b, num_words);
 			vli_modInv_update(v, mod, num_words);
 		} else if (cmpResult > 0) {
-			uECC_vli_sub(a, a, b, num_words);
+			uECC_vli_sub(a, a, b);
 			uECC_vli_rshift1(a, num_words);
 			if (uECC_vli_cmp_unsafe(u, v) < 0) {
         			uECC_vli_add(u, u, mod);
       			}
-      			uECC_vli_sub(u, u, v, num_words);
+      			uECC_vli_sub(u, u, v);
       			vli_modInv_update(u, mod, num_words);
     		} else {
-      			uECC_vli_sub(b, b, a, num_words);
+      			uECC_vli_sub(b, b, a);
       			uECC_vli_rshift1(b, num_words);
       			if (uECC_vli_cmp_unsafe(v, u) < 0) {
         			uECC_vli_add(v, v, mod);
       			}
-      			uECC_vli_sub(v, v, u, num_words);
+      			uECC_vli_sub(v, v, u);
       			vli_modInv_update(v, mod, num_words);
     		}
   	}
@@ -699,7 +702,7 @@
 	tmp[3] = tmp[4] = tmp[5] = 0;
 	tmp[6] = product[8];
 	tmp[7] = product[10];
-	carry -= uECC_vli_sub(result, result, tmp, NUM_ECC_WORDS);
+	carry -= uECC_vli_sub(result, result, tmp);
 
 	/* d2 */
 	tmp[0] = product[12];
@@ -709,7 +712,7 @@
 	tmp[4] = tmp[5] = 0;
 	tmp[6] = product[9];
 	tmp[7] = product[11];
-	carry -= uECC_vli_sub(result, result, tmp, NUM_ECC_WORDS);
+	carry -= uECC_vli_sub(result, result, tmp);
 
 	/* d3 */
 	tmp[0] = product[13];
@@ -720,7 +723,7 @@
 	tmp[5] = product[10];
 	tmp[6] = 0;
 	tmp[7] = product[12];
-	carry -= uECC_vli_sub(result, result, tmp, NUM_ECC_WORDS);
+	carry -= uECC_vli_sub(result, result, tmp);
 
 	/* d4 */
 	tmp[0] = product[14];
@@ -731,7 +734,7 @@
 	tmp[5] = product[11];
 	tmp[6] = 0;
 	tmp[7] = product[13];
-	carry -= uECC_vli_sub(result, result, tmp, NUM_ECC_WORDS);
+	carry -= uECC_vli_sub(result, result, tmp);
 
 	if (carry < 0) {
 		do {
@@ -741,7 +744,7 @@
 	} else  {
 		while (carry || 
 		       uECC_vli_cmp_unsafe(curve_secp256r1.p, result) != 1) {
-			carry -= uECC_vli_sub(result, result, curve_secp256r1.p, NUM_ECC_WORDS);
+			carry -= uECC_vli_sub(result, result, curve_secp256r1.p);
 		}
 	}
 }
diff --git a/tinycrypt/ecc_dsa.c b/tinycrypt/ecc_dsa.c
index 6a93705..1685c20 100644
--- a/tinycrypt/ecc_dsa.c
+++ b/tinycrypt/ecc_dsa.c
@@ -103,7 +103,7 @@
 
 	/* Reduce mod curve_n */
 	if (uECC_vli_cmp_unsafe(curve->n, native) != 1) {
-		uECC_vli_sub(native, native, curve->n, num_n_words);
+		uECC_vli_sub(native, native, curve->n);
 	}
 }
 
@@ -294,7 +294,7 @@
 
 	/* v = x1 (mod n) */
 	if (uECC_vli_cmp_unsafe(curve->n, rx) != 1) {
-		uECC_vli_sub(rx, rx, curve->n, num_n_words);
+		uECC_vli_sub(rx, rx, curve->n);
 	}
 
 	/* Accept only if v == r. */
