diff --git a/tinycrypt/ecc.c b/tinycrypt/ecc.c
index cbc024a..60b565e 100644
--- a/tinycrypt/ecc.c
+++ b/tinycrypt/ecc.c
@@ -152,12 +152,11 @@
 	return (((bitcount_t)(num_digits - 1) << uECC_WORD_BITS_SHIFT) + i);
 }
 
-void uECC_vli_set(uECC_word_t *dest, const uECC_word_t *src,
-		  wordcount_t num_words)
+void uECC_vli_set(uECC_word_t *dest, const uECC_word_t *src)
 {
 	wordcount_t i;
 
-	for (i = 0; i < num_words; ++i) {
+	for (i = 0; i < NUM_ECC_WORDS; ++i) {
 		dest[i] = src[i];
   	}
 }
@@ -470,7 +469,7 @@
 			carry = mod[index] >> (uECC_WORD_BITS - bit_shift);
 		}
 	} else {
-		uECC_vli_set(mod_multiple + word_shift, mod, num_words);
+		uECC_vli_set(mod_multiple + word_shift, mod);
 	}
 
 	for (index = 1; shift >= 0; --shift) {
@@ -490,7 +489,7 @@
 					       (uECC_WORD_BITS - 1);
 		uECC_vli_rshift1(mod_multiple + num_words, num_words);
 	}
-	uECC_vli_set(result, v[index], num_words);
+	uECC_vli_set(result, v[index]);
 }
 
 void uECC_vli_modMult(uECC_word_t *result, const uECC_word_t *left,
@@ -547,8 +546,8 @@
 		return;
 	}
 
-	uECC_vli_set(a, input, num_words);
-	uECC_vli_set(b, mod, num_words);
+	uECC_vli_set(a, input);
+	uECC_vli_set(b, mod);
 	uECC_vli_clear(u);
 	u[0] = 1;
 	uECC_vli_clear(v);
@@ -577,7 +576,7 @@
       			vli_modInv_update(v, mod, num_words);
     		}
   	}
-  	uECC_vli_set(result, u, num_words);
+  	uECC_vli_set(result, u);
 }
 
 /* ------ Point operations ------ */
@@ -624,9 +623,9 @@
 	/* t4 = B * (A - x3) - y1^4 = y3: */
 	uECC_vli_modSub(t4, X1, t4, curve->p, num_words);
 
-	uECC_vli_set(X1, Z1, num_words);
-	uECC_vli_set(Z1, Y1, num_words);
-	uECC_vli_set(Y1, t4, num_words);
+	uECC_vli_set(X1, Z1);
+	uECC_vli_set(Z1, Y1);
+	uECC_vli_set(Y1, t4);
 }
 
 void x_side_default(uECC_word_t *result,
@@ -654,7 +653,7 @@
 	int carry;
 
 	/* t */
-	uECC_vli_set(result, product, NUM_ECC_WORDS);
+	uECC_vli_set(result, product);
 
 	/* s1 */
 	tmp[0] = tmp[1] = tmp[2] = 0;
@@ -772,16 +771,15 @@
 				uECC_Curve curve)
 {
 	uECC_word_t z[NUM_ECC_WORDS];
-	wordcount_t num_words = curve->num_words;
 	if (initial_Z) {
-		uECC_vli_set(z, initial_Z, num_words);
+		uECC_vli_set(z, initial_Z);
 	} else {
 		uECC_vli_clear(z);
 		z[0] = 1;
 	}
 
-	uECC_vli_set(X2, X1, num_words);
-	uECC_vli_set(Y2, Y1, num_words);
+	uECC_vli_set(X2, X1);
+	uECC_vli_set(Y2, Y1);
 
 	apply_z(X1, Y1, z);
 	curve->double_jacobian(X1, Y1, z, curve);
@@ -812,7 +810,7 @@
 	uECC_vli_modMult_rnd(Y2, Y2, X2, s); /* t4 = (y2 - y1)*(B - x3) */
 	uECC_vli_modSub(Y2, Y2, Y1, curve->p, num_words); /* t4 = y3 */
 
-	uECC_vli_set(X2, t5, num_words);
+	uECC_vli_set(X2, t5);
 }
 
 void XYcZ_add(uECC_word_t * X1, uECC_word_t * Y1,
@@ -863,7 +861,7 @@
 	/* t2 = (y2+y1)*(x3' - B) - E = y3': */
 	uECC_vli_modSub(Y1, t6, Y1, curve->p, num_words);
 
-	uECC_vli_set(X1, t7, num_words);
+	uECC_vli_set(X1, t7);
 }
 
 static void EccPoint_mult(uECC_word_t * result, const uECC_word_t * point,
@@ -882,8 +880,8 @@
 	ecc_wait_state_t wait_state;
 	ecc_wait_state_t * const ws = g_rng_function ? &wait_state : NULL;
 
-	uECC_vli_set(Rx[1], point, num_words);
-  	uECC_vli_set(Ry[1], point + num_words, num_words);
+	uECC_vli_set(Rx[1], point);
+  	uECC_vli_set(Ry[1], point + num_words);
 
 	XYcZ_initial_double(Rx[1], Ry[1], Rx[0], Ry[0], initial_Z, curve);
 
@@ -912,8 +910,8 @@
 	XYcZ_add_rnd(Rx[nb], Ry[nb], Rx[1 - nb], Ry[1 - nb], ws);
 	apply_z(Rx[0], Ry[0], z);
 
-	uECC_vli_set(result, Rx[0], num_words);
-	uECC_vli_set(result + num_words, Ry[0], num_words);
+	uECC_vli_set(result, Rx[0]);
+	uECC_vli_set(result + num_words, Ry[0]);
 }
 
 static uECC_word_t regularize_k(const uECC_word_t * const k, uECC_word_t *k0,
diff --git a/tinycrypt/ecc_dsa.c b/tinycrypt/ecc_dsa.c
index 4fe4343..e302e04 100644
--- a/tinycrypt/ecc_dsa.c
+++ b/tinycrypt/ecc_dsa.c
@@ -115,7 +115,6 @@
 	uECC_word_t tmp[NUM_ECC_WORDS];
 	uECC_word_t s[NUM_ECC_WORDS];
 	uECC_word_t p[NUM_ECC_WORDS * 2];
-	wordcount_t num_words = curve->num_words;
 	wordcount_t num_n_words = BITS_TO_WORDS(curve->num_n_bits);
 	int r;
 
@@ -153,7 +152,7 @@
 	uECC_vli_bytesToNative(tmp, private_key, BITS_TO_BYTES(curve->num_n_bits));
 
 	s[num_n_words - 1] = 0;
-	uECC_vli_set(s, p, num_words);
+	uECC_vli_set(s, p);
 	uECC_vli_modMult(s, tmp, s, curve->n, num_n_words); /* s = r*d */
 
 	bits2int(tmp, message_hash, hash_size, curve);
@@ -250,10 +249,10 @@
 	uECC_vli_modMult(u2, r, z, curve->n, num_n_words); /* u2 = r/s */
 
 	/* Calculate sum = G + Q. */
-	uECC_vli_set(sum, _public, num_words);
-	uECC_vli_set(sum + num_words, _public + num_words, num_words);
-	uECC_vli_set(tx, curve->G, num_words);
-	uECC_vli_set(ty, curve->G + num_words, num_words);
+	uECC_vli_set(sum, _public);
+	uECC_vli_set(sum + num_words, _public + num_words);
+	uECC_vli_set(tx, curve->G);
+	uECC_vli_set(ty, curve->G + num_words);
 	uECC_vli_modSub(z, sum, tx, curve->p, num_words); /* z = x2 - x1 */
 	XYcZ_add(tx, ty, sum, sum + num_words, curve);
 	uECC_vli_modInv(z, z, curve->p, num_words); /* z = 1/z */
@@ -269,8 +268,8 @@
 
 	point = points[(!!uECC_vli_testBit(u1, num_bits - 1)) |
                        ((!!uECC_vli_testBit(u2, num_bits - 1)) << 1)];
-	uECC_vli_set(rx, point, num_words);
-	uECC_vli_set(ry, point + num_words, num_words);
+	uECC_vli_set(rx, point);
+	uECC_vli_set(ry, point + num_words);
 	uECC_vli_clear(z);
 	z[0] = 1;
 
@@ -281,8 +280,8 @@
 		index = (!!uECC_vli_testBit(u1, i)) | ((!!uECC_vli_testBit(u2, i)) << 1);
 		point = points[index];
 		if (point) {
-			uECC_vli_set(tx, point, num_words);
-			uECC_vli_set(ty, point + num_words, num_words);
+			uECC_vli_set(tx, point);
+			uECC_vli_set(ty, point + num_words);
 			apply_z(tx, ty, z);
 			uECC_vli_modSub(tz, rx, tx, curve->p, num_words); /* Z = x2 - x1 */
 			XYcZ_add(tx, ty, rx, ry, curve);
