diff --git a/version3/c/amcl.h b/version3/c/amcl.h
index f72557d..a976e9f 100644
--- a/version3/c/amcl.h
+++ b/version3/c/amcl.h
@@ -57,11 +57,11 @@
 #define D_TYPE 0
 #define M_TYPE 1
 
-#define FP_ZERO 0
-#define FP_UNITY 1
-#define FP_SPARSER 2
-#define FP_SPARSE 3
-#define FP_DENSE 4
+#define AMCL_FP_ZERO 0
+#define AMCL_FP_UNITY 1
+#define AMCL_AMCL_FP_SPARSER 2
+#define AMCL_FP_SPARSE 3
+#define AMCL_FP_DENSE 4
 
 
 /**
diff --git a/version3/c/big.c b/version3/c/big.c
index 664cccf..3af1912 100644
--- a/version3/c/big.c
+++ b/version3/c/big.c
@@ -143,7 +143,7 @@
     int i;
     BIG_XXX c;
     BIG_XXX_copy(c,a);
-	BIG_XXX_norm(c);
+    BIG_XXX_norm(c);
     for (i=MODBYTES_XXX-1; i>=0; i--)
     {
         b[i]=c[0]&0xff;
@@ -371,8 +371,8 @@
 void BIG_XXX_or(BIG_XXX c,BIG_XXX a,BIG_XXX b)
 {
     int i;
-	BIG_XXX_norm(a);
-	BIG_XXX_norm(b);
+    BIG_XXX_norm(a);
+    BIG_XXX_norm(b);
     for (i=0; i<NLEN_XXX; i++)
         c[i]=a[i]|b[i];
 #ifdef DEBUG_NORM
@@ -876,28 +876,28 @@
 /* Fast combined shift, subtract and norm. Return sign of result */
 int BIG_XXX_ssn(BIG_XXX r,BIG_XXX a,BIG_XXX m)
 {
-	int i,n=NLEN_XXX-1;
-	chunk carry;
-	m[0]=(m[0]>>1)|((m[1]<<(BASEBITS_XXX-1))&BMASK_XXX);
-	r[0]=a[0]-m[0];
+    int i,n=NLEN_XXX-1;
+    chunk carry;
+    m[0]=(m[0]>>1)|((m[1]<<(BASEBITS_XXX-1))&BMASK_XXX);
+    r[0]=a[0]-m[0];
     carry=r[0]>>BASEBITS_XXX;
     r[0]&=BMASK_XXX;
-    
-	for (i=1;i<n;i++)
-	{
-		m[i]=(m[i]>>1)|((m[i+1]<<(BASEBITS_XXX-1))&BMASK_XXX);
-		r[i]=a[i]-m[i]+carry;
-		carry=r[i]>>BASEBITS_XXX;
-		r[i]&=BMASK_XXX;
-	}
-	
-	m[n]>>=1;
-	r[n]=a[n]-m[n]+carry;
+
+    for (i=1; i<n; i++)
+    {
+        m[i]=(m[i]>>1)|((m[i+1]<<(BASEBITS_XXX-1))&BMASK_XXX);
+        r[i]=a[i]-m[i]+carry;
+        carry=r[i]>>BASEBITS_XXX;
+        r[i]&=BMASK_XXX;
+    }
+
+    m[n]>>=1;
+    r[n]=a[n]-m[n]+carry;
 #ifdef DEBUG_NORM
     r[MPV_XXX]=1;
     r[MNV_XXX]=0;
 #endif
-	return ((r[n]>>(CHUNK-1))&1);
+    return ((r[n]>>(CHUNK-1))&1);
 }
 
 /* Faster shift right of a by k bits. Return shifted out part */
@@ -1040,9 +1040,9 @@
 int BIG_XXX_nbits(BIG_XXX a)
 {
     int bts,k=NLEN_XXX-1;
-	BIG_XXX t;
+    BIG_XXX t;
     chunk c;
-	BIG_XXX_copy(t,a);
+    BIG_XXX_copy(t,a);
     BIG_XXX_norm(t);
     while (k>=0 && t[k]==0) k--;
     if (k<0) return 0;
@@ -1060,9 +1060,9 @@
 int BIG_XXX_dnbits(DBIG_XXX a)
 {
     int bts,k=DNLEN_XXX-1;
-	DBIG_XXX t;
+    DBIG_XXX t;
     chunk c;
-	BIG_XXX_dcopy(t,a);
+    BIG_XXX_dcopy(t,a);
     BIG_XXX_dnorm(t);
     while (k>=0 && t[k]==0) k--;
     if (k<0) return 0;
@@ -1083,8 +1083,8 @@
 {
     int k=0;
     BIG_XXX r; /**/
-	BIG_XXX c;
-	BIG_XXX_copy(c,c1);
+    BIG_XXX c;
+    BIG_XXX_copy(c,c1);
 
     BIG_XXX_norm(b);
     if (BIG_XXX_comp(b,c)<0)
@@ -1300,9 +1300,9 @@
 void BIG_XXX_modmul(BIG_XXX r,BIG_XXX a1,BIG_XXX b1,BIG_XXX m)
 {
     DBIG_XXX d;
-	BIG_XXX a,b;
-	BIG_XXX_copy(a,a1);
-	BIG_XXX_copy(b,b1);
+    BIG_XXX a,b;
+    BIG_XXX_copy(a,a1);
+    BIG_XXX_copy(b,b1);
     BIG_XXX_mod(a,m);
     BIG_XXX_mod(b,m);
 
@@ -1315,8 +1315,8 @@
 void BIG_XXX_modsqr(BIG_XXX r,BIG_XXX a1,BIG_XXX m)
 {
     DBIG_XXX d;
-	BIG_XXX a;
-	BIG_XXX_copy(a,a1);
+    BIG_XXX a;
+    BIG_XXX_copy(a,a1);
     BIG_XXX_mod(a,m);
     BIG_XXX_sqr(d,a);
     BIG_XXX_dmod(r,d,m);
@@ -1326,8 +1326,8 @@
 /* SU= 16 */
 void BIG_XXX_modneg(BIG_XXX r,BIG_XXX a1,BIG_XXX m)
 {
-	BIG_XXX a;
-	BIG_XXX_copy(a,a1);
+    BIG_XXX a;
+    BIG_XXX_copy(a,a1);
     BIG_XXX_mod(a,m);
     BIG_XXX_sub(r,m,a);
 }
@@ -1338,9 +1338,9 @@
 {
     DBIG_XXX d;
     BIG_XXX z;
-	BIG_XXX a,b;
-	BIG_XXX_copy(a,a1);
-	BIG_XXX_copy(b,b1);
+    BIG_XXX a,b;
+    BIG_XXX_copy(a,a1);
+    BIG_XXX_copy(b,b1);
 
     BIG_XXX_mod(a,m);
     BIG_XXX_invmodp(z,b,m);
diff --git a/version3/c/big.h b/version3/c/big.h
index 7874450..7e89b36 100644
--- a/version3/c/big.h
+++ b/version3/c/big.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file big.h
+ * @file big_XXX.h
  * @author Mike Scott
  * @brief BIG Header File
  *
diff --git a/version3/c/config_big.h b/version3/c/config_big.h
index 76822ed..4640b21 100644
--- a/version3/c/config_big.h
+++ b/version3/c/config_big.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file config_big.h
+ * @file config_big_XXX.h
  * @author Mike Scott
  * @brief Config BIG  Header File
  *
diff --git a/version3/c/config_ff.h b/version3/c/config_ff.h
index 173dab7..65595da 100644
--- a/version3/c/config_ff.h
+++ b/version3/c/config_ff.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file config_ff.h
+ * @file config_ff_WWW.h
  * @author Mike Scott
  * @brief COnfig FF Header File
  *
diff --git a/version3/c/ecdh.c b/version3/c/ecdh.c
index 953685d..216c509 100644
--- a/version3/c/ecdh.c
+++ b/version3/c/ecdh.c
@@ -33,11 +33,11 @@
  * otherwise it is generated randomly internally */
 int ECP_ZZZ_KEY_PAIR_GENERATE(csprng *RNG,octet* S,octet *W)
 {
-    BIG_XXX r,gx,gy,s;
+    BIG_XXX r,s;
     ECP_ZZZ G;
     int res=0;
 
-	ECP_ZZZ_generator(&G);
+    ECP_ZZZ_generator(&G);
 
     BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
     if (RNG!=NULL)
@@ -59,7 +59,7 @@
 
     ECP_ZZZ_mul(&G,s);
 
-	ECP_ZZZ_toOctet(W,&G,false);  /* To use point compression on public keys, change to true */
+    ECP_ZZZ_toOctet(W,&G,false);  /* To use point compression on public keys, change to true */
 
     return res;
 }
@@ -67,7 +67,7 @@
 /* Validate public key */
 int ECP_ZZZ_PUBLIC_KEY_VALIDATE(octet *W)
 {
-    BIG_XXX q,r,wx,k;
+    BIG_XXX q,r,k;
     ECP_ZZZ WP;
     int valid,nb;
     int res=0;
@@ -75,11 +75,12 @@
     BIG_XXX_rcopy(q,Modulus_YYY);
     BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
 
-	valid=ECP_ZZZ_fromOctet(&WP,W);
-	if (!valid) res=ECDH_INVALID_PUBLIC_KEY;
+    valid=ECP_ZZZ_fromOctet(&WP,W);
+    if (!valid) res=ECDH_INVALID_PUBLIC_KEY;
 
     if (res==0)
-    { /* Check point is not in wrong group */
+    {
+        /* Check point is not in wrong group */
         nb=BIG_XXX_nbits(q);
         BIG_XXX_one(k);
         BIG_XXX_shl(k,(nb+4)/2);
@@ -109,7 +110,7 @@
 
     BIG_XXX_fromBytes(s,S->val);
 
-	valid=ECP_ZZZ_fromOctet(&W,WD);
+    valid=ECP_ZZZ_fromOctet(&W,WD);
 
     if (!valid) res=ECDH_ERROR;
     if (res==0)
@@ -141,12 +142,12 @@
     char h[128];
     octet H= {0,sizeof(h),h};
 
-    BIG_XXX gx,gy,r,s,f,c,d,u,vx,w;
+    BIG_XXX r,s,f,c,d,u,vx,w;
     ECP_ZZZ G,V;
 
     ehashit(sha,F,-1,NULL,&H,sha);
 
-	ECP_ZZZ_generator(&G);
+    ECP_ZZZ_generator(&G);
 
     BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
 
@@ -156,41 +157,42 @@
     if (H.len>MODBYTES_XXX) hlen=MODBYTES_XXX;
     BIG_XXX_fromBytesLen(f,H.val,hlen);
 
-	if (RNG!=NULL)
-	{
-		do
-		{
+    if (RNG!=NULL)
+    {
+        do
+        {
             BIG_XXX_randomnum(u,r,RNG);
             BIG_XXX_randomnum(w,r,RNG); /* side channel masking */
 
 #ifdef AES_S
-			BIG_XXX_mod2m(u,2*AES_S);
+            BIG_XXX_mod2m(u,2*AES_S);
 #endif
-			ECP_ZZZ_copy(&V,&G);
-			ECP_ZZZ_mul(&V,u);
+            ECP_ZZZ_copy(&V,&G);
+            ECP_ZZZ_mul(&V,u);
 
-			ECP_ZZZ_get(vx,vx,&V);
+            ECP_ZZZ_get(vx,vx,&V);
 
-			BIG_XXX_copy(c,vx);
-			BIG_XXX_mod(c,r);
-			if (BIG_XXX_iszilch(c)) continue;
-			
+            BIG_XXX_copy(c,vx);
+            BIG_XXX_mod(c,r);
+            if (BIG_XXX_iszilch(c)) continue;
+
             BIG_XXX_modmul(u,u,w,r);
 
-			BIG_XXX_invmodp(u,u,r);
-			BIG_XXX_modmul(d,s,c,r);
+            BIG_XXX_invmodp(u,u,r);
+            BIG_XXX_modmul(d,s,c,r);
 
-			BIG_XXX_add(d,f,d);
-			
+            BIG_XXX_add(d,f,d);
+
             BIG_XXX_modmul(d,d,w,r);
 
-			BIG_XXX_modmul(d,u,d,r);
-		} while (BIG_XXX_iszilch(d));
-	}
-	else
-	{
-		BIG_XXX_fromBytes(u,K->val);
-		BIG_XXX_mod(u,r);
+            BIG_XXX_modmul(d,u,d,r);
+        }
+        while (BIG_XXX_iszilch(d));
+    }
+    else
+    {
+        BIG_XXX_fromBytes(u,K->val);
+        BIG_XXX_mod(u,r);
 
 #ifdef AES_S
         BIG_XXX_mod2m(u,2*AES_S);
@@ -203,7 +205,7 @@
         BIG_XXX_copy(c,vx);
         BIG_XXX_mod(c,r);
         if (BIG_XXX_iszilch(c)) return ECDH_ERROR;
- 
+
 
         BIG_XXX_invmodp(u,u,r);
         BIG_XXX_modmul(d,s,c,r);
@@ -228,14 +230,14 @@
     char h[128];
     octet H= {0,sizeof(h),h};
 
-    BIG_XXX r,gx,gy,wx,wy,f,c,d,h2;
+    BIG_XXX r,f,c,d,h2;
     int res=0;
     ECP_ZZZ G,WP;
     int valid;
 
     ehashit(sha,F,-1,NULL,&H,sha);
 
-	ECP_ZZZ_generator(&G);
+    ECP_ZZZ_generator(&G);
 
     BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
 
@@ -261,7 +263,7 @@
         BIG_XXX_modmul(f,f,d,r);
         BIG_XXX_modmul(h2,c,d,r);
 
-		valid=ECP_ZZZ_fromOctet(&WP,W);
+        valid=ECP_ZZZ_fromOctet(&WP,W);
 
         if (!valid) res=ECDH_ERROR;
         else
diff --git a/version3/c/ecdh.h b/version3/c/ecdh.h
index 10a1828..cbeae6a 100644
--- a/version3/c/ecdh.h
+++ b/version3/c/ecdh.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file ecdh.h
+ * @file ecdh_ZZZ.h
  * @author Mike Scott
  * @brief ECDH Header file for implementation of standard EC protocols
  *
diff --git a/version3/c/ecp.c b/version3/c/ecp.c
index 60eddaa..f0ae94e 100644
--- a/version3/c/ecp.c
+++ b/version3/c/ecp.c
@@ -191,7 +191,7 @@
 
     FP_YYY_mul(&t,v,&t);
     FP_YYY_sub(&t,&t,&one);
-	FP_YYY_norm(&t);
+    FP_YYY_norm(&t);
     if (CURVE_A_ZZZ==1) FP_YYY_sub(v,v,&one);
 
     if (CURVE_A_ZZZ==-1)
@@ -200,10 +200,10 @@
         FP_YYY_norm(v);
         FP_YYY_neg(v,v);
     }
-	FP_YYY_norm(v);
-	FP_YYY_inv(&t,&t);
-	FP_YYY_mul(v,v,&t);
-	FP_YYY_reduce(v);
+    FP_YYY_norm(v);
+    FP_YYY_inv(&t,&t);
+    FP_YYY_mul(v,v,&t);
+    FP_YYY_reduce(v);
 #endif
 
 #if CURVETYPE_ZZZ==MONTGOMERY
@@ -239,7 +239,7 @@
         ECP_ZZZ_inf(P);
         return 0;
     }
- 
+
     FP_YYY_nres(&(P->x),x);
     FP_YYY_one(&(P->z));
     return 1;
@@ -248,11 +248,11 @@
 /* Extract x coordinate as BIG */
 int ECP_ZZZ_get(BIG_XXX x,ECP_ZZZ *P)
 {
-	ECP_ZZZ W;
-	ECP_ZZZ_copy(&W,P);
-	ECP_ZZZ_affine(&W);
+    ECP_ZZZ W;
+    ECP_ZZZ_copy(&W,P);
+    ECP_ZZZ_affine(&W);
     if (ECP_ZZZ_isinf(&W)) return -1;
-    FP_YYY_redc(x,&(Wx));
+    FP_YYY_redc(x,&(W));
     return 0;
 }
 
@@ -262,10 +262,10 @@
 /* SU=16 */
 int ECP_ZZZ_get(BIG_XXX x,BIG_XXX y,ECP_ZZZ *P)
 {
-	ECP_ZZZ W;
+    ECP_ZZZ W;
     int s;
-	ECP_ZZZ_copy(&W,P);
-	ECP_ZZZ_affine(&W);
+    ECP_ZZZ_copy(&W,P);
+    ECP_ZZZ_affine(&W);
 
     if (ECP_ZZZ_isinf(&W)) return -1;
 
@@ -336,26 +336,27 @@
 #endif
 
 void ECP_ZZZ_cfp(ECP_ZZZ *P)
-{ /* multiply point by curves cofactor */
-	BIG_XXX c;
-	int cf=CURVE_Cof_I_ZZZ;
-	if (cf==1) return;
-	if (cf==4)
-	{
-		ECP_ZZZ_dbl(P);
-		ECP_ZZZ_dbl(P);
-		return;
-	}
-	if (cf==8)
-	{
-		ECP_ZZZ_dbl(P);
-		ECP_ZZZ_dbl(P);
-		ECP_ZZZ_dbl(P);
-		return;
-	}
-	BIG_XXX_rcopy(c,CURVE_Cof_ZZZ);
-	ECP_ZZZ_mul(P,c);
-	return;
+{
+    /* multiply point by curves cofactor */
+    BIG_XXX c;
+    int cf=CURVE_Cof_I_ZZZ;
+    if (cf==1) return;
+    if (cf==4)
+    {
+        ECP_ZZZ_dbl(P);
+        ECP_ZZZ_dbl(P);
+        return;
+    }
+    if (cf==8)
+    {
+        ECP_ZZZ_dbl(P);
+        ECP_ZZZ_dbl(P);
+        ECP_ZZZ_dbl(P);
+        return;
+    }
+    BIG_XXX_rcopy(c,CURVE_Cof_ZZZ);
+    ECP_ZZZ_mul(P,c);
+    return;
 }
 
 /* map BIG to point on curve of correct order */
@@ -364,25 +365,26 @@
 void ECP_ZZZ_mapit(ECP_ZZZ *P,octet *W)
 {
     BIG_XXX q,x;
-	BIG_XXX_fromBytes(x,W->val);
+    BIG_XXX_fromBytes(x,W->val);
     BIG_XXX_rcopy(q,Modulus_YYY);
     BIG_XXX_mod(x,q);
 
-	for (;;)
-	{
-		for (;;)
-		{
+    for (;;)
+    {
+        for (;;)
+        {
 #if CURVETYPE_ZZZ!=MONTGOMERY
-			ECP_ZZZ_setx(P,x,0);
+            ECP_ZZZ_setx(P,x,0);
 #else
-			ECP_ZZZ_set(P,x);
+            ECP_ZZZ_set(P,x);
 #endif
-			BIG_XXX_inc(x,1); BIG_XXX_norm(x);
-			if (!ECP_ZZZ_isinf(P)) break;
-		}
-		ECP_ZZZ_cfp(P);
-		if (!ECP_ZZZ_isinf(P)) break;
-	}
+            BIG_XXX_inc(x,1);
+            BIG_XXX_norm(x);
+            if (!ECP_ZZZ_isinf(P)) break;
+        }
+        ECP_ZZZ_cfp(P);
+        if (!ECP_ZZZ_isinf(P)) break;
+    }
 }
 
 /* Convert P to Affine, from (x,y,z) to (x,y) */
@@ -390,12 +392,11 @@
 void ECP_ZZZ_affine(ECP_ZZZ *P)
 {
     FP_YYY one,iz;
-    BIG_XXX b;
     if (ECP_ZZZ_isinf(P)) return;
     FP_YYY_one(&one);
     if (FP_YYY_equals(&(P->z),&one)) return;
 
-	FP_YYY_inv(&iz,&(P->z));
+    FP_YYY_inv(&iz,&(P->z));
     FP_YYY_mul(&(P->x),&(P->x),&iz);
 
 #if CURVETYPE_ZZZ==EDWARDS || CURVETYPE_ZZZ==WEIERSTRASS
@@ -514,20 +515,20 @@
 #else
     BIG_XXX x,y;
     ECP_ZZZ_get(x,y,P);
-	if (compress)
-	{
-		W->val[0]=0x02;
-		if (BIG_XXX_parity(y)==1) W->val[0]=0x03;
-		W->len=MODBYTES_XXX+1;
-		BIG_XXX_toBytes(&(W->val[1]),x);
-	}
-	else
-	{
-		W->val[0]=4;
-		W->len=2*MODBYTES_XXX+1;
-		BIG_XXX_toBytes(&(W->val[1]),x);
-		BIG_XXX_toBytes(&(W->val[MODBYTES_XXX+1]),y);
-	}
+    if (compress)
+    {
+        W->val[0]=0x02;
+        if (BIG_XXX_parity(y)==1) W->val[0]=0x03;
+        W->len=MODBYTES_XXX+1;
+        BIG_XXX_toBytes(&(W->val[1]),x);
+    }
+    else
+    {
+        W->val[0]=4;
+        W->len=2*MODBYTES_XXX+1;
+        BIG_XXX_toBytes(&(W->val[1]),x);
+        BIG_XXX_toBytes(&(W->val[MODBYTES_XXX+1]),y);
+    }
 #endif
 }
 
@@ -542,17 +543,17 @@
     return 0;
 #else
     BIG_XXX x,y;
-	int typ=W->val[0];
-	BIG_XXX_fromBytes(x,&(W->val[1]));
-	if (typ==0x04)
-	{
-		BIG_XXX_fromBytes(y,&(W->val[MODBYTES_XXX+1]));
-		if (ECP_ZZZ_set(P,x,y)) return 1;
-	}
-	if (typ==0x02 || typ==0x03)
-	{
-		if (ECP_ZZZ_setx(P,x,typ&1)) return 1;
-	}
+    int typ=W->val[0];
+    BIG_XXX_fromBytes(x,&(W->val[1]));
+    if (typ==0x04)
+    {
+        BIG_XXX_fromBytes(y,&(W->val[MODBYTES_XXX+1]));
+        if (ECP_ZZZ_set(P,x,y)) return 1;
+    }
+    if (typ==0x02 || typ==0x03)
+    {
+        if (ECP_ZZZ_setx(P,x,typ&1)) return 1;
+    }
     return 0;
 #endif
 }
@@ -591,7 +592,7 @@
         FP_YYY_mul(&y3,&y3,&t0);				//y3.mul(t0);
         FP_YYY_add(&y3,&y3,&x3);				//y3.add(x3);
         FP_YYY_mul(&t1,&(P->x),&(P->y));			//t1.mul(y);
-       
+
         FP_YYY_norm(&t0);					//x.norm();
         FP_YYY_mul(&(P->x),&t0,&t1);		//x.mul(t1);
         FP_YYY_add(&(P->x),&(P->x),&(P->x));	//x.add(x);
@@ -780,7 +781,7 @@
         FP_YYY_mul(&t2,&(P->z),&(Q->z));		//t2.mul(Q.z);
         FP_YYY_add(&t3,&(P->x),&(P->y));		//t3.add(y);
         FP_YYY_norm(&t3);					//t3.norm();
- 
+
         FP_YYY_add(&t4,&(Q->x),&(Q->y));		//t4.add(Q.y);
         FP_YYY_norm(&t4);					//t4.norm();
         FP_YYY_mul(&t3,&t3,&t4);			//t3.mul(t4);
@@ -847,7 +848,7 @@
         FP_YYY_add(&t4,&(Q->x),&(Q->y));		//t4.add(Q.y);
         FP_YYY_norm(&t4);					//t4.norm();//5
         FP_YYY_mul(&t3,&t3,&t4);			//t3.mul(t4);//6
-    
+
         FP_YYY_add(&t4,&t0,&t1);			//t4.add(t1); //t4.norm(); //7
         FP_YYY_sub(&t3,&t3,&t4);			//t3.sub(t4);
         FP_YYY_norm(&t3);					//t3.norm(); //8
@@ -914,7 +915,7 @@
         FP_YYY_mul(&x3,&x3,&t3);			//x3.mul(t3);//39
         FP_YYY_sub(&(P->x),&x3,&t1);			//x3.sub(t1);//40
         FP_YYY_mul(&z3,&z3,&t4);			//z3.mul(t4);//41
- 
+
         FP_YYY_mul(&t1,&t3,&t0);			//t1.mul(t0);//42
         FP_YYY_add(&(P->z),&z3,&t1);			//z3.add(t1);
         FP_YYY_norm(&(P->x));				//x.norm();
@@ -981,9 +982,9 @@
 /* SU=16 */
 void  ECP_ZZZ_sub(ECP_ZZZ *P,ECP_ZZZ *Q)
 {
-	ECP_ZZZ NQ;
-	ECP_ZZZ_copy(&NQ,Q);
-	ECP_ZZZ_neg(&NQ);
+    ECP_ZZZ NQ;
+    ECP_ZZZ_copy(&NQ,Q);
+    ECP_ZZZ_neg(&NQ);
     ECP_ZZZ_add(P,&NQ);
 }
 
@@ -1219,13 +1220,13 @@
 
 void ECP_ZZZ_generator(ECP_ZZZ *G)
 {
-	BIG_XXX x,y;
-	BIG_XXX_rcopy(x,CURVE_Gx_ZZZ);
+    BIG_XXX x,y;
+    BIG_XXX_rcopy(x,CURVE_Gx_ZZZ);
 #if CURVETYPE_ZZZ!=MONTGOMERY
-	BIG_XXX_rcopy(y,CURVE_Gy_ZZZ);
+    BIG_XXX_rcopy(y,CURVE_Gy_ZZZ);
     ECP_ZZZ_set(G,x,y);
 #else
-	ECP_ZZZ_set(G,x);
+    ECP_ZZZ_set(G,x);
 #endif
 }
 
diff --git a/version3/c/ecp.h b/version3/c/ecp.h
index 01dac7c..f07230b 100644
--- a/version3/c/ecp.h
+++ b/version3/c/ecp.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file ecp.h
+ * @file ecp_ZZZ.h
  * @author Mike Scott
  * @brief ECP Header File
  *
diff --git a/version3/c/ecp2.c b/version3/c/ecp2.c
index 5463c37..4a6f937 100644
--- a/version3/c/ecp2.c
+++ b/version3/c/ecp2.c
@@ -128,9 +128,9 @@
 /* SU= 16 */
 int ECP2_ZZZ_get(FP2_YYY *x,FP2_YYY *y,ECP2_ZZZ *P)
 {
-	ECP2_ZZZ W;
-	ECP2_ZZZ_copy(&W,P);
-	ECP2_ZZZ_affine(&W);
+    ECP2_ZZZ W;
+    ECP2_ZZZ_copy(&W,P);
+    ECP2_ZZZ_affine(&W);
     if (ECP2_ZZZ_isinf(&W)) return -1;
     FP2_YYY_copy(y,&(W.y));
     FP2_YYY_copy(x,&(W.x));
@@ -259,7 +259,7 @@
 
     if (!FP2_YYY_equals(&y2,&rhs))
     {
-		ECP2_ZZZ_inf(P);
+        ECP2_ZZZ_inf(P);
         return 0;
     }
 
@@ -279,7 +279,7 @@
 
     if (!FP2_YYY_sqrt(&y,&y))
     {
-		ECP2_ZZZ_inf(P);
+        ECP2_ZZZ_inf(P);
         return 0;
     }
 
@@ -444,9 +444,9 @@
 /* SU= 16 */
 void ECP2_ZZZ_sub(ECP2_ZZZ *P,ECP2_ZZZ *Q)
 {
-	ECP2_ZZZ NQ;
-	ECP2_ZZZ_copy(&NQ,Q);
-	ECP2_ZZZ_neg(&NQ);
+    ECP2_ZZZ NQ;
+    ECP2_ZZZ_copy(&NQ,Q);
+    ECP2_ZZZ_neg(&NQ);
     ECP2_ZZZ_add(P,&NQ);
 }
 
@@ -534,15 +534,15 @@
 
 // Bos & Costello https://eprint.iacr.org/2013/458.pdf
 // Faz-Hernandez & Longa & Sanchez  https://eprint.iacr.org/2013/158.pdf
-// Side channel attack secure 
+// Side channel attack secure
 
 void ECP2_ZZZ_mul4(ECP2_ZZZ *P,ECP2_ZZZ Q[4],BIG_XXX u[4])
 {
     int i,j,k,nb,pb,bt;
-	ECP2_ZZZ T[8],W;
+    ECP2_ZZZ T[8],W;
     BIG_XXX t[4],mt;
-	sign8 w[NLEN_XXX*BASEBITS_XXX+1];
-	sign8 s[NLEN_XXX*BASEBITS_XXX+1];
+    sign8 w[NLEN_XXX*BASEBITS_XXX+1];
+    sign8 s[NLEN_XXX*BASEBITS_XXX+1];
 
     for (i=0; i<4; i++)
     {
@@ -552,24 +552,24 @@
 // Precomputed table
     ECP2_ZZZ_copy(&T[0],&Q[0]); // Q[0]
     ECP2_ZZZ_copy(&T[1],&T[0]);
-	ECP2_ZZZ_add(&T[1],&Q[1]);	// Q[0]+Q[1]
+    ECP2_ZZZ_add(&T[1],&Q[1]);	// Q[0]+Q[1]
     ECP2_ZZZ_copy(&T[2],&T[0]);
-	ECP2_ZZZ_add(&T[2],&Q[2]);	// Q[0]+Q[2]
-	ECP2_ZZZ_copy(&T[3],&T[1]);
-	ECP2_ZZZ_add(&T[3],&Q[2]);	// Q[0]+Q[1]+Q[2]
-	ECP2_ZZZ_copy(&T[4],&T[0]);
-	ECP2_ZZZ_add(&T[4],&Q[3]);  // Q[0]+Q[3]
-	ECP2_ZZZ_copy(&T[5],&T[1]);
-	ECP2_ZZZ_add(&T[5],&Q[3]);	// Q[0]+Q[1]+Q[3]
-	ECP2_ZZZ_copy(&T[6],&T[2]);
-	ECP2_ZZZ_add(&T[6],&Q[3]);	// Q[0]+Q[2]+Q[3]
-	ECP2_ZZZ_copy(&T[7],&T[3]);
-	ECP2_ZZZ_add(&T[7],&Q[3]);	// Q[0]+Q[1]+Q[2]+Q[3]
+    ECP2_ZZZ_add(&T[2],&Q[2]);	// Q[0]+Q[2]
+    ECP2_ZZZ_copy(&T[3],&T[1]);
+    ECP2_ZZZ_add(&T[3],&Q[2]);	// Q[0]+Q[1]+Q[2]
+    ECP2_ZZZ_copy(&T[4],&T[0]);
+    ECP2_ZZZ_add(&T[4],&Q[3]);  // Q[0]+Q[3]
+    ECP2_ZZZ_copy(&T[5],&T[1]);
+    ECP2_ZZZ_add(&T[5],&Q[3]);	// Q[0]+Q[1]+Q[3]
+    ECP2_ZZZ_copy(&T[6],&T[2]);
+    ECP2_ZZZ_add(&T[6],&Q[3]);	// Q[0]+Q[2]+Q[3]
+    ECP2_ZZZ_copy(&T[7],&T[3]);
+    ECP2_ZZZ_add(&T[7],&Q[3]);	// Q[0]+Q[1]+Q[2]+Q[3]
 
 // Make it odd
-	pb=1-BIG_XXX_parity(t[0]);
-	BIG_XXX_inc(t[0],pb);
-	BIG_XXX_norm(t[0]);
+    pb=1-BIG_XXX_parity(t[0]);
+    BIG_XXX_inc(t[0],pb);
+    BIG_XXX_norm(t[0]);
 
 // Number of bits
     BIG_XXX_zero(mt);
@@ -579,33 +579,33 @@
     }
     nb=1+BIG_XXX_nbits(mt);
 
-// Sign pivot 
-	s[nb-1]=1;
-	for (i=0;i<nb-1;i++)
-	{
+// Sign pivot
+    s[nb-1]=1;
+    for (i=0; i<nb-1; i++)
+    {
         BIG_XXX_fshr(t[0],1);
-		s[i]=2*BIG_XXX_parity(t[0])-1;
-	}
+        s[i]=2*BIG_XXX_parity(t[0])-1;
+    }
 
 // Recoded exponent
     for (i=0; i<nb; i++)
     {
-		w[i]=0;
-		k=1;
-		for (j=1; j<4; j++)
-		{
-			bt=s[i]*BIG_XXX_parity(t[j]);
-			BIG_XXX_fshr(t[j],1);
+        w[i]=0;
+        k=1;
+        for (j=1; j<4; j++)
+        {
+            bt=s[i]*BIG_XXX_parity(t[j]);
+            BIG_XXX_fshr(t[j],1);
 
-			BIG_XXX_dec(t[j],(bt>>1));
-			BIG_XXX_norm(t[j]);
-			w[i]+=bt*k;
-			k*=2;
+            BIG_XXX_dec(t[j],(bt>>1));
+            BIG_XXX_norm(t[j]);
+            w[i]+=bt*k;
+            k*=2;
         }
-    }		
+    }
 
 // Main loop
-	ECP2_ZZZ_select(P,T,2*w[nb-1]+1);
+    ECP2_ZZZ_select(P,T,2*w[nb-1]+1);
     for (i=nb-2; i>=0; i--)
     {
         ECP2_ZZZ_select(&W,T,2*w[i]+s[i]);
@@ -614,9 +614,9 @@
     }
 
 // apply correction
-	ECP2_ZZZ_copy(&W,P);   
-	ECP2_ZZZ_sub(&W,&Q[0]);
-	ECP2_ZZZ_cmove(P,&W,pb);
+    ECP2_ZZZ_copy(&W,P);
+    ECP2_ZZZ_sub(&W,&Q[0]);
+    ECP2_ZZZ_cmove(P,&W,pb);
 
     ECP2_ZZZ_affine(P);
 }
@@ -713,12 +713,12 @@
 
 void ECP2_ZZZ_generator(ECP2_ZZZ *G)
 {
-	FP2_YYY wx,wy;
+    FP2_YYY wx,wy;
 
-    FP_YYY_rcopy(&(wx.a),CURVE_Pxa_ZZZ); 
-    FP_YYY_rcopy(&(wx.b),CURVE_Pxb_ZZZ); 
-    FP_YYY_rcopy(&(wy.a),CURVE_Pya_ZZZ); 
-    FP_YYY_rcopy(&(wy.b),CURVE_Pyb_ZZZ);     
+    FP_YYY_rcopy(&(wx.a),CURVE_Pxa_ZZZ);
+    FP_YYY_rcopy(&(wx.b),CURVE_Pxb_ZZZ);
+    FP_YYY_rcopy(&(wy.a),CURVE_Pya_ZZZ);
+    FP_YYY_rcopy(&(wy.b),CURVE_Pyb_ZZZ);
 
-	ECP2_ZZZ_set(G,&wx,&wy);
+    ECP2_ZZZ_set(G,&wx,&wy);
 }
diff --git a/version3/c/ecp2.h b/version3/c/ecp2.h
index 32c0420..046953a 100644
--- a/version3/c/ecp2.h
+++ b/version3/c/ecp2.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file ecp2.h
+ * @file ecp2_ZZZ.h
  * @author Mike Scott
  * @brief ECP2 Header File
  *
diff --git a/version3/c/ecp4.c b/version3/c/ecp4.c
index e8148c4..3f95f7a 100644
--- a/version3/c/ecp4.c
+++ b/version3/c/ecp4.c
@@ -23,7 +23,7 @@
 
 int ECP4_ZZZ_isinf(ECP4_ZZZ *P)
 {
-	return (FP4_YYY_iszilch(&(P->x)) & FP4_YYY_iszilch(&(P->z)));
+    return (FP4_YYY_iszilch(&(P->x)) & FP4_YYY_iszilch(&(P->z)));
 }
 
 /* Set P=Q */
@@ -31,7 +31,7 @@
 {
     FP4_YYY_copy(&(P->x),&(Q->x));
     FP4_YYY_copy(&(P->y),&(Q->y));
-	FP4_YYY_copy(&(P->z),&(Q->z));
+    FP4_YYY_copy(&(P->z),&(Q->z));
 }
 
 /* set P to Infinity */
@@ -125,9 +125,9 @@
 /* extract x, y from point P */
 int ECP4_ZZZ_get(FP4_YYY *x,FP4_YYY *y,ECP4_ZZZ *P)
 {
-	ECP4_ZZZ W;
-	ECP4_ZZZ_copy(&W,P);
-	ECP4_ZZZ_affine(&W);
+    ECP4_ZZZ W;
+    ECP4_ZZZ_copy(&W,P);
+    ECP4_ZZZ_affine(&W);
     if (ECP4_ZZZ_isinf(&W)) return -1;
     FP4_YYY_copy(y,&(W.y));
     FP4_YYY_copy(x,&(W.x));
@@ -154,16 +154,16 @@
 /* Convert Q to octet string */
 void ECP4_ZZZ_toOctet(octet *W,ECP4_ZZZ *Q)
 {
-	BIG_XXX b;
-	FP4_YYY qx,qy;
-	FP2_YYY pa,pb;
+    BIG_XXX b;
+    FP4_YYY qx,qy;
+    FP2_YYY pa,pb;
 
     ECP4_ZZZ_get(&qx,&qy,Q);
 
-	FP2_YYY_copy(&pa,&(qx.a));
-	FP2_YYY_copy(&pb,&(qx.b));
+    FP2_YYY_copy(&pa,&(qx.a));
+    FP2_YYY_copy(&pb,&(qx.b));
 
-	FP_YYY_redc(b,&(pa.a));
+    FP_YYY_redc(b,&(pa.a));
     BIG_XXX_toBytes(&(W->val[0]),b);
     FP_YYY_redc(b,&(pa.b));
     BIG_XXX_toBytes(&(W->val[MODBYTES_XXX]),b);
@@ -172,10 +172,10 @@
     FP_YYY_redc(b,&(pb.b));
     BIG_XXX_toBytes(&(W->val[3*MODBYTES_XXX]),b);
 
-	FP2_YYY_copy(&pa,&(qy.a));
-	FP2_YYY_copy(&pb,&(qy.b));
-	
-	FP_YYY_redc(b,&(pa.a));
+    FP2_YYY_copy(&pa,&(qy.a));
+    FP2_YYY_copy(&pb,&(qy.b));
+
+    FP_YYY_redc(b,&(pa.a));
     BIG_XXX_toBytes(&(W->val[4*MODBYTES_XXX]),b);
     FP_YYY_redc(b,&(pa.b));
     BIG_XXX_toBytes(&(W->val[5*MODBYTES_XXX]),b);
@@ -190,12 +190,12 @@
 /* restore Q from octet string */
 int ECP4_ZZZ_fromOctet(ECP4_ZZZ *Q,octet *W)
 {
-	BIG_XXX b;
+    BIG_XXX b;
     FP4_YYY qx,qy;
-	FP2_YYY pa,pb;
+    FP2_YYY pa,pb;
 
     BIG_XXX_fromBytes(b,&(W->val[0]));
-	FP_YYY_nres(&(pa.a),b);
+    FP_YYY_nres(&(pa.a),b);
     BIG_XXX_fromBytes(b,&(W->val[MODBYTES_XXX]));
     FP_YYY_nres(&(pa.b),b);
     BIG_XXX_fromBytes(b,&(W->val[2*MODBYTES_XXX]));
@@ -203,11 +203,11 @@
     BIG_XXX_fromBytes(b,&(W->val[3*MODBYTES_XXX]));
     FP_YYY_nres(&(pb.b),b);
 
-	FP2_YYY_copy(&(qx.a),&pa);
-	FP2_YYY_copy(&(qx.b),&pb);
+    FP2_YYY_copy(&(qx.a),&pa);
+    FP2_YYY_copy(&(qx.b),&pb);
 
     BIG_XXX_fromBytes(b,&(W->val[4*MODBYTES_XXX]));
-	FP_YYY_nres(&(pa.a),b);
+    FP_YYY_nres(&(pa.a),b);
     BIG_XXX_fromBytes(b,&(W->val[5*MODBYTES_XXX]));
     FP_YYY_nres(&(pa.b),b);
     BIG_XXX_fromBytes(b,&(W->val[6*MODBYTES_XXX]));
@@ -215,8 +215,8 @@
     BIG_XXX_fromBytes(b,&(W->val[7*MODBYTES_XXX]));
     FP_YYY_nres(&(pb.b),b);
 
-	FP2_YYY_copy(&(qy.a),&pa);
-	FP2_YYY_copy(&(qy.b),&pb);
+    FP2_YYY_copy(&(qy.a),&pa);
+    FP2_YYY_copy(&(qy.b),&pb);
 
 
     if (ECP4_ZZZ_set(Q,&qx,&qy)) return 1;
@@ -228,7 +228,7 @@
 {
     /* calculate RHS of elliptic curve equation */
     FP4_YYY t;
-	FP2_YYY t2;
+    FP2_YYY t2;
     BIG_XXX b;
     FP4_YYY_sqr(&t,x);
 
@@ -239,13 +239,13 @@
     BIG_XXX_rcopy(b,CURVE_B_ZZZ);
 
     FP2_YYY_from_BIG(&t2,b);
-	FP4_YYY_from_FP2(&t,&t2);
+    FP4_YYY_from_FP2(&t,&t2);
 
-#if SEXTIC_TWIST_ZZZ == D_TYPE	
+#if SEXTIC_TWIST_ZZZ == D_TYPE
     FP4_YYY_div_i(&t);   /* IMPORTANT - here we use the correct SEXTIC twist of the curve */
 #endif
 
-#if SEXTIC_TWIST_ZZZ == M_TYPE	
+#if SEXTIC_TWIST_ZZZ == M_TYPE
     FP4_YYY_times_i(&t);   /* IMPORTANT - here we use the correct SEXTIC twist of the curve */
 #endif
 
@@ -264,11 +264,11 @@
 
     if (!FP4_YYY_equals(&y2,&rhs))
     {
-		ECP4_ZZZ_inf(P);
+        ECP4_ZZZ_inf(P);
         return 0;
     }
 
- //   P->inf=0;
+//   P->inf=0;
     FP4_YYY_copy(&(P->x),x);
     FP4_YYY_copy(&(P->y),y);
 
@@ -300,7 +300,7 @@
 /* SU= 8 */
 void ECP4_ZZZ_neg(ECP4_ZZZ *P)
 {
-	FP4_YYY_norm(&(P->y));
+    FP4_YYY_norm(&(P->y));
     FP4_YYY_neg(&(P->y),&(P->y));
     FP4_YYY_norm(&(P->y));
 }
@@ -310,55 +310,55 @@
 /* return -1 for Infinity, 0 for addition, 1 for doubling */
 int ECP4_ZZZ_dbl(ECP4_ZZZ *P)
 {
-    FP4_YYY t0,t1,t2,t3,iy,x3,y3;
+    FP4_YYY t0,t1,t2,iy,x3,y3;
 
-	FP4_YYY_copy(&iy,&(P->y));		//FP4_YYY iy=new FP4_YYY(y);
+    FP4_YYY_copy(&iy,&(P->y));		//FP4_YYY iy=new FP4_YYY(y);
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-	FP4_YYY_times_i(&iy);			//iy.mul_ip(); 
+    FP4_YYY_times_i(&iy);			//iy.mul_ip();
 #endif
 
-	FP4_YYY_sqr(&t0,&(P->y));			//t0.sqr();   
+    FP4_YYY_sqr(&t0,&(P->y));			//t0.sqr();
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-	FP4_YYY_times_i(&t0);			//t0.mul_ip(); 
+    FP4_YYY_times_i(&t0);			//t0.mul_ip();
 #endif
 
-	FP4_YYY_mul(&t1,&iy,&(P->z));	//t1.mul(z);
-	FP4_YYY_sqr(&t2,&(P->z));				//t2.sqr();
+    FP4_YYY_mul(&t1,&iy,&(P->z));	//t1.mul(z);
+    FP4_YYY_sqr(&t2,&(P->z));				//t2.sqr();
 
-	FP4_YYY_add(&(P->z),&t0,&t0);	//z.add(t0); 
-	FP4_YYY_norm(&(P->z));				//z.norm(); 
-	FP4_YYY_add(&(P->z),&(P->z),&(P->z));	//z.add(z); 
-	FP4_YYY_add(&(P->z),&(P->z),&(P->z));	//z.add(z); 
-	FP4_YYY_norm(&(P->z));			//z.norm();  
+    FP4_YYY_add(&(P->z),&t0,&t0);	//z.add(t0);
+    FP4_YYY_norm(&(P->z));				//z.norm();
+    FP4_YYY_add(&(P->z),&(P->z),&(P->z));	//z.add(z);
+    FP4_YYY_add(&(P->z),&(P->z),&(P->z));	//z.add(z);
+    FP4_YYY_norm(&(P->z));			//z.norm();
 
-	FP4_YYY_imul(&t2,&t2,3*CURVE_B_I_ZZZ);	//t2.imul(3*ROM.CURVE_B_I); 
+    FP4_YYY_imul(&t2,&t2,3*CURVE_B_I_ZZZ);	//t2.imul(3*ROM.CURVE_B_I);
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-	FP4_YYY_times_i(&t2);
+    FP4_YYY_times_i(&t2);
 #endif
 
-	FP4_YYY_mul(&x3,&t2,&(P->z));	//x3.mul(z); 
+    FP4_YYY_mul(&x3,&t2,&(P->z));	//x3.mul(z);
 
-	FP4_YYY_add(&y3,&t0,&t2);		//y3.add(t2); 
-	FP4_YYY_norm(&y3);				//y3.norm();
-	FP4_YYY_mul(&(P->z),&(P->z),&t1);	//z.mul(t1);
+    FP4_YYY_add(&y3,&t0,&t2);		//y3.add(t2);
+    FP4_YYY_norm(&y3);				//y3.norm();
+    FP4_YYY_mul(&(P->z),&(P->z),&t1);	//z.mul(t1);
 
-	FP4_YYY_add(&t1,&t2,&t2);		//t1.add(t2); 
-	FP4_YYY_add(&t2,&t2,&t1);		//t2.add(t1); 
-	FP4_YYY_norm(&t2);				//t2.norm();  
-	FP4_YYY_sub(&t0,&t0,&t2);		//t0.sub(t2); 
-	FP4_YYY_norm(&t0);				//t0.norm();                           //y^2-9bz^2
-	FP4_YYY_mul(&y3,&y3,&t0);		//y3.mul(t0); 
-	FP4_YYY_add(&(P->y),&y3,&x3);		//y3.add(x3);                          //(y^2+3z*2)(y^2-9z^2)+3b.z^2.8y^2
+    FP4_YYY_add(&t1,&t2,&t2);		//t1.add(t2);
+    FP4_YYY_add(&t2,&t2,&t1);		//t2.add(t1);
+    FP4_YYY_norm(&t2);				//t2.norm();
+    FP4_YYY_sub(&t0,&t0,&t2);		//t0.sub(t2);
+    FP4_YYY_norm(&t0);				//t0.norm();                           //y^2-9bz^2
+    FP4_YYY_mul(&y3,&y3,&t0);		//y3.mul(t0);
+    FP4_YYY_add(&(P->y),&y3,&x3);		//y3.add(x3);                          //(y^2+3z*2)(y^2-9z^2)+3b.z^2.8y^2
 
-	FP4_YYY_mul(&t1,&(P->x),&iy);		//t1.mul(iy);						//
+    FP4_YYY_mul(&t1,&(P->x),&iy);		//t1.mul(iy);						//
 
-	FP4_YYY_norm(&t0);				//x.norm(); 
-	FP4_YYY_mul(&(P->x),&t0,&t1);	//x.mul(t1); 
-	FP4_YYY_add(&(P->x),&(P->x),&(P->x));	//x.add(x);       //(y^2-9bz^2)xy2
+    FP4_YYY_norm(&t0);				//x.norm();
+    FP4_YYY_mul(&(P->x),&t0,&t1);	//x.mul(t1);
+    FP4_YYY_add(&(P->x),&(P->x),&(P->x));	//x.add(x);       //(y^2-9bz^2)xy2
 
-	FP4_YYY_norm(&(P->x));			//x.norm(); 
+    FP4_YYY_norm(&(P->x));			//x.norm();
 
-	FP4_YYY_norm(&(P->y));			//y.norm();
+    FP4_YYY_norm(&(P->y));			//y.norm();
 
     return 1;
 }
@@ -368,88 +368,88 @@
 int ECP4_ZZZ_add(ECP4_ZZZ *P,ECP4_ZZZ *Q)
 {
     FP4_YYY t0,t1,t2,t3,t4,x3,y3,z3;
-	int b3=3*CURVE_B_I_ZZZ;
+    int b3=3*CURVE_B_I_ZZZ;
 
-	FP4_YYY_mul(&t0,&(P->x),&(Q->x));	//t0.mul(Q.x);         // x.Q.x
-	FP4_YYY_mul(&t1,&(P->y),&(Q->y));	//t1.mul(Q.y);		 // y.Q.y
+    FP4_YYY_mul(&t0,&(P->x),&(Q->x));	//t0.mul(Q.x);         // x.Q.x
+    FP4_YYY_mul(&t1,&(P->y),&(Q->y));	//t1.mul(Q.y);		 // y.Q.y
 
-	FP4_YYY_mul(&t2,&(P->z),&(Q->z));	//t2.mul(Q.z);
-	FP4_YYY_add(&t3,&(P->x),&(P->y));	//t3.add(y); 
-	FP4_YYY_norm(&t3);				//t3.norm();          //t3=X1+Y1         
-	FP4_YYY_add(&t4,&(Q->x),&(Q->y));	//t4.add(Q.y); 
-	FP4_YYY_norm(&t4);				//t4.norm();			//t4=X2+Y2
-	FP4_YYY_mul(&t3,&t3,&t4);		//t3.mul(t4);						//t3=(X1+Y1)(X2+Y2)
-	FP4_YYY_add(&t4,&t0,&t1);		//t4.add(t1);		//t4=X1.X2+Y1.Y2
+    FP4_YYY_mul(&t2,&(P->z),&(Q->z));	//t2.mul(Q.z);
+    FP4_YYY_add(&t3,&(P->x),&(P->y));	//t3.add(y);
+    FP4_YYY_norm(&t3);				//t3.norm();          //t3=X1+Y1
+    FP4_YYY_add(&t4,&(Q->x),&(Q->y));	//t4.add(Q.y);
+    FP4_YYY_norm(&t4);				//t4.norm();			//t4=X2+Y2
+    FP4_YYY_mul(&t3,&t3,&t4);		//t3.mul(t4);						//t3=(X1+Y1)(X2+Y2)
+    FP4_YYY_add(&t4,&t0,&t1);		//t4.add(t1);		//t4=X1.X2+Y1.Y2
 
-	FP4_YYY_sub(&t3,&t3,&t4);		//t3.sub(t4); 
-	FP4_YYY_norm(&t3);				//t3.norm(); 
+    FP4_YYY_sub(&t3,&t3,&t4);		//t3.sub(t4);
+    FP4_YYY_norm(&t3);				//t3.norm();
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-	FP4_YYY_times_i(&t3);			//t3.mul_ip();  //t3=(X1+Y1)(X2+Y2)-(X1.X2+Y1.Y2) = X1.Y2+X2.Y1      
-#endif
-                   
-	FP4_YYY_add(&t4,&(P->y),&(P->z));	//t4.add(z); 
-	FP4_YYY_norm(&t4);				//t4.norm();			//t4=Y1+Z1
-
-	FP4_YYY_add(&x3,&(Q->y),&(Q->z));	//x3.add(Q.z); 
-	FP4_YYY_norm(&x3);				//x3.norm();			//x3=Y2+Z2
-
-	FP4_YYY_mul(&t4,&t4,&x3);		//t4.mul(x3);						//t4=(Y1+Z1)(Y2+Z2)
-
-	FP4_YYY_add(&x3,&t1,&t2);		//x3.add(t2);						//X3=Y1.Y2+Z1.Z2
-	
-	FP4_YYY_sub(&t4,&t4,&x3);		//t4.sub(x3); 
-	FP4_YYY_norm(&t4);				//t4.norm(); 
-#if SEXTIC_TWIST_ZZZ==D_TYPE
-	FP4_YYY_times_i(&t4);			//t4.mul_ip(); //t4=(Y1+Z1)(Y2+Z2) - (Y1.Y2+Z1.Z2) = Y1.Z2+Y2.Z1      
+    FP4_YYY_times_i(&t3);			//t3.mul_ip();  //t3=(X1+Y1)(X2+Y2)-(X1.X2+Y1.Y2) = X1.Y2+X2.Y1
 #endif
 
-	FP4_YYY_add(&x3,&(P->x),&(P->z));	//x3.add(z); 
-	FP4_YYY_norm(&x3);				//x3.norm();	// x3=X1+Z1
-		
-	FP4_YYY_add(&y3,&(Q->x),&(Q->z));	//y3.add(Q.z); 
-	FP4_YYY_norm(&y3);				//y3.norm();				// y3=X2+Z2
-	FP4_YYY_mul(&x3,&x3,&y3);		//x3.mul(y3);							// x3=(X1+Z1)(X2+Z2)
+    FP4_YYY_add(&t4,&(P->y),&(P->z));	//t4.add(z);
+    FP4_YYY_norm(&t4);				//t4.norm();			//t4=Y1+Z1
 
-	FP4_YYY_add(&y3,&t0,&t2);		//y3.add(t2);							// y3=X1.X2+Z1+Z2
-	FP4_YYY_sub(&y3,&x3,&y3);		//y3.rsub(x3); 
-	FP4_YYY_norm(&y3);				//y3.norm();				// y3=(X1+Z1)(X2+Z2) - (X1.X2+Z1.Z2) = X1.Z2+X2.Z1
+    FP4_YYY_add(&x3,&(Q->y),&(Q->z));	//x3.add(Q.z);
+    FP4_YYY_norm(&x3);				//x3.norm();			//x3=Y2+Z2
+
+    FP4_YYY_mul(&t4,&t4,&x3);		//t4.mul(x3);						//t4=(Y1+Z1)(Y2+Z2)
+
+    FP4_YYY_add(&x3,&t1,&t2);		//x3.add(t2);						//X3=Y1.Y2+Z1.Z2
+
+    FP4_YYY_sub(&t4,&t4,&x3);		//t4.sub(x3);
+    FP4_YYY_norm(&t4);				//t4.norm();
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-	FP4_YYY_times_i(&t0);			//t0.mul_ip(); 
-	FP4_YYY_times_i(&t1);			//t1.mul_ip(); 
+    FP4_YYY_times_i(&t4);			//t4.mul_ip(); //t4=(Y1+Z1)(Y2+Z2) - (Y1.Y2+Z1.Z2) = Y1.Z2+Y2.Z1
 #endif
 
-	FP4_YYY_add(&x3,&t0,&t0);		//x3.add(t0); 
-	FP4_YYY_add(&t0,&t0,&x3);		//t0.add(x3); 
-	FP4_YYY_norm(&t0);				//t0.norm();
-	FP4_YYY_imul(&t2,&t2,b3);		//t2.imul(b); 	
+    FP4_YYY_add(&x3,&(P->x),&(P->z));	//x3.add(z);
+    FP4_YYY_norm(&x3);				//x3.norm();	// x3=X1+Z1
+
+    FP4_YYY_add(&y3,&(Q->x),&(Q->z));	//y3.add(Q.z);
+    FP4_YYY_norm(&y3);				//y3.norm();				// y3=X2+Z2
+    FP4_YYY_mul(&x3,&x3,&y3);		//x3.mul(y3);							// x3=(X1+Z1)(X2+Z2)
+
+    FP4_YYY_add(&y3,&t0,&t2);		//y3.add(t2);							// y3=X1.X2+Z1+Z2
+    FP4_YYY_sub(&y3,&x3,&y3);		//y3.rsub(x3);
+    FP4_YYY_norm(&y3);				//y3.norm();				// y3=(X1+Z1)(X2+Z2) - (X1.X2+Z1.Z2) = X1.Z2+X2.Z1
+#if SEXTIC_TWIST_ZZZ==D_TYPE
+    FP4_YYY_times_i(&t0);			//t0.mul_ip();
+    FP4_YYY_times_i(&t1);			//t1.mul_ip();
+#endif
+
+    FP4_YYY_add(&x3,&t0,&t0);		//x3.add(t0);
+    FP4_YYY_add(&t0,&t0,&x3);		//t0.add(x3);
+    FP4_YYY_norm(&t0);				//t0.norm();
+    FP4_YYY_imul(&t2,&t2,b3);		//t2.imul(b);
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-	FP4_YYY_times_i(&t2);
+    FP4_YYY_times_i(&t2);
 #endif
 
-	FP4_YYY_add(&z3,&t1,&t2);		//z3.add(t2); 
-	FP4_YYY_norm(&z3);				//z3.norm();
-	FP4_YYY_sub(&t1,&t1,&t2);		//t1.sub(t2); 
-	FP4_YYY_norm(&t1);				//t1.norm(); 
-	FP4_YYY_imul(&y3,&y3,b3);		//y3.imul(b); 
+    FP4_YYY_add(&z3,&t1,&t2);		//z3.add(t2);
+    FP4_YYY_norm(&z3);				//z3.norm();
+    FP4_YYY_sub(&t1,&t1,&t2);		//t1.sub(t2);
+    FP4_YYY_norm(&t1);				//t1.norm();
+    FP4_YYY_imul(&y3,&y3,b3);		//y3.imul(b);
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-	FP4_YYY_times_i(&y3);
+    FP4_YYY_times_i(&y3);
 #endif
 
-	FP4_YYY_mul(&x3,&y3,&t4);		//x3.mul(t4); 
+    FP4_YYY_mul(&x3,&y3,&t4);		//x3.mul(t4);
 
-	FP4_YYY_mul(&t2,&t3,&t1);		//t2.mul(t1); 
-	FP4_YYY_sub(&(P->x),&t2,&x3);		//x3.rsub(t2);
-	FP4_YYY_mul(&y3,&y3,&t0);		//y3.mul(t0); 
-	FP4_YYY_mul(&t1,&t1,&z3);		//t1.mul(z3); 
-	FP4_YYY_add(&(P->y),&y3,&t1);		//y3.add(t1);
-	FP4_YYY_mul(&t0,&t0,&t3);		//t0.mul(t3); 
-	FP4_YYY_mul(&z3,&z3,&t4);		//z3.mul(t4); 
-	FP4_YYY_add(&(P->z),&z3,&t0);		//z3.add(t0);
+    FP4_YYY_mul(&t2,&t3,&t1);		//t2.mul(t1);
+    FP4_YYY_sub(&(P->x),&t2,&x3);		//x3.rsub(t2);
+    FP4_YYY_mul(&y3,&y3,&t0);		//y3.mul(t0);
+    FP4_YYY_mul(&t1,&t1,&z3);		//t1.mul(z3);
+    FP4_YYY_add(&(P->y),&y3,&t1);		//y3.add(t1);
+    FP4_YYY_mul(&t0,&t0,&t3);		//t0.mul(t3);
+    FP4_YYY_mul(&z3,&z3,&t4);		//z3.mul(t4);
+    FP4_YYY_add(&(P->z),&z3,&t0);		//z3.add(t0);
 
 
-	FP4_YYY_norm(&(P->x));			//x.norm(); 
-	FP4_YYY_norm(&(P->y));			//y.norm();
-	FP4_YYY_norm(&(P->z));			//z.norm();
+    FP4_YYY_norm(&(P->x));			//x.norm();
+    FP4_YYY_norm(&(P->y));			//y.norm();
+    FP4_YYY_norm(&(P->z));			//z.norm();
 
     return 0;
 }
@@ -458,18 +458,18 @@
 /* SU= 16 */
 void ECP4_ZZZ_sub(ECP4_ZZZ *P,ECP4_ZZZ *Q)
 {
-	ECP4_ZZZ NQ;
-	ECP4_ZZZ_copy(&NQ,Q);
-	ECP4_ZZZ_neg(&NQ);
+    ECP4_ZZZ NQ;
+    ECP4_ZZZ_copy(&NQ,Q);
+    ECP4_ZZZ_neg(&NQ);
     ECP4_ZZZ_add(P,&NQ);
 }
 
 
 void ECP4_ZZZ_reduce(ECP4_ZZZ *P)
 {
-	FP4_YYY_reduce(&(P->x));
-	FP4_YYY_reduce(&(P->y));
-	FP4_YYY_reduce(&(P->z));
+    FP4_YYY_reduce(&(P->x));
+    FP4_YYY_reduce(&(P->y));
+    FP4_YYY_reduce(&(P->z));
 }
 
 /* P*=e */
@@ -532,65 +532,65 @@
         ECP4_ZZZ_add(P,&Q);
     }
     ECP4_ZZZ_sub(P,&C); /* apply correction */
-	ECP4_ZZZ_affine(P);
+    ECP4_ZZZ_affine(P);
 }
 
-// calculate frobenius constants 
+// calculate frobenius constants
 void ECP4_ZZZ_frob_constants(FP2_YYY F[3])
 {
     FP_YYY fx,fy;
-	FP2_YYY X;
+    FP2_YYY X;
 
     FP_YYY_rcopy(&fx,Fra_YYY);
     FP_YYY_rcopy(&fy,Frb_YYY);
     FP2_YYY_from_FPs(&X,&fx,&fy);
 
-	FP2_YYY_sqr(&F[0],&X);		// FF=F^2=(1+i)^(p-7)/6
-	FP2_YYY_copy(&F[2],&F[0]);
-	FP2_YYY_mul_ip(&F[2]);		// W=(1+i)^6/6.(1+i)^(p-7)/6 = (1+i)^(p-1)/6
-	FP2_YYY_norm(&F[2]);
-	FP2_YYY_sqr(&F[1],&F[2]);
-	FP2_YYY_mul(&F[2],&F[2],&F[1]);  // W=(1+i)^(p-1)/2
+    FP2_YYY_sqr(&F[0],&X);		// FF=F^2=(1+i)^(p-7)/6
+    FP2_YYY_copy(&F[2],&F[0]);
+    FP2_YYY_mul_ip(&F[2]);		// W=(1+i)^6/6.(1+i)^(p-7)/6 = (1+i)^(p-1)/6
+    FP2_YYY_norm(&F[2]);
+    FP2_YYY_sqr(&F[1],&F[2]);
+    FP2_YYY_mul(&F[2],&F[2],&F[1]);  // W=(1+i)^(p-1)/2
 
-	FP2_YYY_copy(&F[1],&X);
+    FP2_YYY_copy(&F[1],&X);
 
-#if SEXTIC_TWIST_ZZZ == M_TYPE	
-	FP2_YYY_mul_ip(&F[1]);		// (1+i)^12/12.(1+i)^(p-7)/12 = (1+i)^(p+5)/12
-	FP2_YYY_inv(&F[1],&F[1]);		// (1+i)^-(p+5)/12
-	FP2_YYY_sqr(&F[0],&F[1]);		// (1+i)^-(p+5)/6
+#if SEXTIC_TWIST_ZZZ == M_TYPE
+    FP2_YYY_mul_ip(&F[1]);		// (1+i)^12/12.(1+i)^(p-7)/12 = (1+i)^(p+5)/12
+    FP2_YYY_inv(&F[1],&F[1]);		// (1+i)^-(p+5)/12
+    FP2_YYY_sqr(&F[0],&F[1]);		// (1+i)^-(p+5)/6
 #endif
 
-	FP2_YYY_mul_ip(&F[0]);		// FF=(1+i)^(p-7)/6.(1+i) = (1+i)^(p-1)/6					// (1+i)^6/6.(1+i)^-(p+5)/6 = (1+i)^-(p-1)/6
-	FP2_YYY_norm(&F[0]);
-	FP2_YYY_mul(&F[1],&F[1],&F[0]);  // FFF = (1+i)^(p-7)/12 . (1+i)^(p-1)/6 = (1+i)^(p-3)/4	// (1+i)^-(p+5)/12 . (1+i)^-(p-1)/6 = (1+i)^-(p+1)/4
+    FP2_YYY_mul_ip(&F[0]);		// FF=(1+i)^(p-7)/6.(1+i) = (1+i)^(p-1)/6					// (1+i)^6/6.(1+i)^-(p+5)/6 = (1+i)^-(p-1)/6
+    FP2_YYY_norm(&F[0]);
+    FP2_YYY_mul(&F[1],&F[1],&F[0]);  // FFF = (1+i)^(p-7)/12 . (1+i)^(p-1)/6 = (1+i)^(p-3)/4	// (1+i)^-(p+5)/12 . (1+i)^-(p-1)/6 = (1+i)^-(p+1)/4
 
 }
 
 /* Calculates q^n.P using Frobenius constants */
 void ECP4_ZZZ_frob(ECP4_ZZZ *P,FP2_YYY F[3],int n)
 {
-	int i;
-	FP4_YYY X,Y,Z;
+    int i;
+    FP4_YYY X,Y,Z;
 
-	FP4_YYY_copy(&X,&(P->x));
-	FP4_YYY_copy(&Y,&(P->y));
-	FP4_YYY_copy(&Z,&(P->z));
+    FP4_YYY_copy(&X,&(P->x));
+    FP4_YYY_copy(&Y,&(P->y));
+    FP4_YYY_copy(&Z,&(P->z));
 
-	for (i=0;i<n;i++)
-	{
-		FP4_YYY_frob(&X,&F[2]);		// X^p
-		FP4_YYY_pmul(&X,&X,&F[0]);	// X^p.(1+i)^(p-1)/6									// X^p.(1+i)^-(p-1)/6
-		
-		FP4_YYY_frob(&Y,&F[2]);		// Y^p
-		FP4_YYY_pmul(&Y,&Y,&F[1]);
-		FP4_YYY_times_i(&Y);		// Y.p.(1+i)^(p-3)/4.(1+i)^(2/4) = Y^p.(1+i)^(p-1)/4	// (1+i)^-(p+1)/4 .(1+i)^2/4 = Y^p.(1+i)^-(p-1)/4
+    for (i=0; i<n; i++)
+    {
+        FP4_YYY_frob(&X,&F[2]);		// X^p
+        FP4_YYY_pmul(&X,&X,&F[0]);	// X^p.(1+i)^(p-1)/6									// X^p.(1+i)^-(p-1)/6
 
-		FP4_YYY_frob(&Z,&F[2]);
-	}
+        FP4_YYY_frob(&Y,&F[2]);		// Y^p
+        FP4_YYY_pmul(&Y,&Y,&F[1]);
+        FP4_YYY_times_i(&Y);		// Y.p.(1+i)^(p-3)/4.(1+i)^(2/4) = Y^p.(1+i)^(p-1)/4	// (1+i)^-(p+1)/4 .(1+i)^2/4 = Y^p.(1+i)^-(p-1)/4
 
-	FP4_YYY_copy(&(P->x),&X);
-	FP4_YYY_copy(&(P->y),&Y);
-	FP4_YYY_copy(&(P->z),&Z);
+        FP4_YYY_frob(&Z,&F[2]);
+    }
+
+    FP4_YYY_copy(&(P->x),&X);
+    FP4_YYY_copy(&(P->y),&Y);
+    FP4_YYY_copy(&(P->z),&Z);
 }
 
 /* Side channel attack secure */
@@ -600,54 +600,54 @@
 void ECP4_ZZZ_mul8(ECP4_ZZZ *P,ECP4_ZZZ Q[8],BIG_XXX u[8])
 {
     int i,j,k,nb,pb1,pb2,bt;
-	ECP4_ZZZ T1[8],T2[8],W;
+    ECP4_ZZZ T1[8],T2[8],W;
     BIG_XXX mt,t[8];
     sign8 w1[NLEN_XXX*BASEBITS_XXX+1];
     sign8 s1[NLEN_XXX*BASEBITS_XXX+1];
     sign8 w2[NLEN_XXX*BASEBITS_XXX+1];
-    sign8 s2[NLEN_XXX*BASEBITS_XXX+1];	
-	FP2_YYY X[3];
+    sign8 s2[NLEN_XXX*BASEBITS_XXX+1];
+    FP2_YYY X[3];
 
-	ECP4_ZZZ_frob_constants(X);
+    ECP4_ZZZ_frob_constants(X);
 
     for (i=0; i<8; i++)
-	{
+    {
         BIG_XXX_copy(t[i],u[i]);
-	}
+    }
 
 // Precomputed table
     ECP4_ZZZ_copy(&T1[0],&Q[0]); // Q[0]
     ECP4_ZZZ_copy(&T1[1],&T1[0]);
-	ECP4_ZZZ_add(&T1[1],&Q[1]);	// Q[0]+Q[1]
+    ECP4_ZZZ_add(&T1[1],&Q[1]);	// Q[0]+Q[1]
     ECP4_ZZZ_copy(&T1[2],&T1[0]);
-	ECP4_ZZZ_add(&T1[2],&Q[2]);	// Q[0]+Q[2]
-	ECP4_ZZZ_copy(&T1[3],&T1[1]);
-	ECP4_ZZZ_add(&T1[3],&Q[2]);	// Q[0]+Q[1]+Q[2]
-	ECP4_ZZZ_copy(&T1[4],&T1[0]);
-	ECP4_ZZZ_add(&T1[4],&Q[3]);  // Q[0]+Q[3]
-	ECP4_ZZZ_copy(&T1[5],&T1[1]);
-	ECP4_ZZZ_add(&T1[5],&Q[3]);	// Q[0]+Q[1]+Q[3]
-	ECP4_ZZZ_copy(&T1[6],&T1[2]);
-	ECP4_ZZZ_add(&T1[6],&Q[3]);	// Q[0]+Q[2]+Q[3]
-	ECP4_ZZZ_copy(&T1[7],&T1[3]);
-	ECP4_ZZZ_add(&T1[7],&Q[3]);	// Q[0]+Q[1]+Q[2]+Q[3]
+    ECP4_ZZZ_add(&T1[2],&Q[2]);	// Q[0]+Q[2]
+    ECP4_ZZZ_copy(&T1[3],&T1[1]);
+    ECP4_ZZZ_add(&T1[3],&Q[2]);	// Q[0]+Q[1]+Q[2]
+    ECP4_ZZZ_copy(&T1[4],&T1[0]);
+    ECP4_ZZZ_add(&T1[4],&Q[3]);  // Q[0]+Q[3]
+    ECP4_ZZZ_copy(&T1[5],&T1[1]);
+    ECP4_ZZZ_add(&T1[5],&Q[3]);	// Q[0]+Q[1]+Q[3]
+    ECP4_ZZZ_copy(&T1[6],&T1[2]);
+    ECP4_ZZZ_add(&T1[6],&Q[3]);	// Q[0]+Q[2]+Q[3]
+    ECP4_ZZZ_copy(&T1[7],&T1[3]);
+    ECP4_ZZZ_add(&T1[7],&Q[3]);	// Q[0]+Q[1]+Q[2]+Q[3]
 
-//  Use Frobenius 
+//  Use Frobenius
 
-	for (i=0;i<8;i++)
-	{
-		ECP4_ZZZ_copy(&T2[i],&T1[i]);
-		ECP4_ZZZ_frob(&T2[i],X,4);
-	}
+    for (i=0; i<8; i++)
+    {
+        ECP4_ZZZ_copy(&T2[i],&T1[i]);
+        ECP4_ZZZ_frob(&T2[i],X,4);
+    }
 
 // Make them odd
-	pb1=1-BIG_XXX_parity(t[0]);
-	BIG_XXX_inc(t[0],pb1);
-	BIG_XXX_norm(t[0]);
+    pb1=1-BIG_XXX_parity(t[0]);
+    BIG_XXX_inc(t[0],pb1);
+    BIG_XXX_norm(t[0]);
 
-	pb2=1-BIG_XXX_parity(t[4]);
-	BIG_XXX_inc(t[4],pb2);
-	BIG_XXX_norm(t[4]);
+    pb2=1-BIG_XXX_parity(t[4]);
+    BIG_XXX_inc(t[4],pb2);
+    BIG_XXX_norm(t[4]);
 
 // Number of bits
     BIG_XXX_zero(mt);
@@ -657,52 +657,52 @@
     }
     nb=1+BIG_XXX_nbits(mt);
 
-// Sign pivot 
-	s1[nb-1]=1;
-	s2[nb-1]=1;
-	for (i=0;i<nb-1;i++)
-	{
+// Sign pivot
+    s1[nb-1]=1;
+    s2[nb-1]=1;
+    for (i=0; i<nb-1; i++)
+    {
         BIG_XXX_fshr(t[0],1);
-		s1[i]=2*BIG_XXX_parity(t[0])-1;
+        s1[i]=2*BIG_XXX_parity(t[0])-1;
         BIG_XXX_fshr(t[4],1);
-		s2[i]=2*BIG_XXX_parity(t[4])-1;
-	}
+        s2[i]=2*BIG_XXX_parity(t[4])-1;
+    }
 
 
 // Recoded exponents
     for (i=0; i<nb; i++)
     {
-		w1[i]=0;
-		k=1;
-		for (j=1; j<4; j++)
-		{
-			bt=s1[i]*BIG_XXX_parity(t[j]);
-			BIG_XXX_fshr(t[j],1);
+        w1[i]=0;
+        k=1;
+        for (j=1; j<4; j++)
+        {
+            bt=s1[i]*BIG_XXX_parity(t[j]);
+            BIG_XXX_fshr(t[j],1);
 
-			BIG_XXX_dec(t[j],(bt>>1));
-			BIG_XXX_norm(t[j]);
-			w1[i]+=bt*k;
-			k*=2;
+            BIG_XXX_dec(t[j],(bt>>1));
+            BIG_XXX_norm(t[j]);
+            w1[i]+=bt*k;
+            k*=2;
         }
 
-		w2[i]=0;
-		k=1;
-		for (j=5; j<8; j++)
-		{
-			bt=s2[i]*BIG_XXX_parity(t[j]);
-			BIG_XXX_fshr(t[j],1);
+        w2[i]=0;
+        k=1;
+        for (j=5; j<8; j++)
+        {
+            bt=s2[i]*BIG_XXX_parity(t[j]);
+            BIG_XXX_fshr(t[j],1);
 
-			BIG_XXX_dec(t[j],(bt>>1));
-			BIG_XXX_norm(t[j]);
-			w2[i]+=bt*k;
-			k*=2;
+            BIG_XXX_dec(t[j],(bt>>1));
+            BIG_XXX_norm(t[j]);
+            w2[i]+=bt*k;
+            k*=2;
         }
-    }	
+    }
 
 // Main loop
-	ECP4_ZZZ_select(P,T1,2*w1[nb-1]+1);
-	ECP4_ZZZ_select(&W,T2,2*w2[nb-1]+1);
-	ECP4_ZZZ_add(P,&W);
+    ECP4_ZZZ_select(P,T1,2*w1[nb-1]+1);
+    ECP4_ZZZ_select(&W,T2,2*w2[nb-1]+1);
+    ECP4_ZZZ_add(P,&W);
     for (i=nb-2; i>=0; i--)
     {
         ECP4_ZZZ_dbl(P);
@@ -713,14 +713,14 @@
     }
 
 // apply corrections
-	ECP4_ZZZ_copy(&W,P);   
-	ECP4_ZZZ_sub(&W,&Q[0]);
-	ECP4_ZZZ_cmove(P,&W,pb1);
-	ECP4_ZZZ_copy(&W,P);   
-	ECP4_ZZZ_sub(&W,&Q[4]);
-	ECP4_ZZZ_cmove(P,&W,pb2);
+    ECP4_ZZZ_copy(&W,P);
+    ECP4_ZZZ_sub(&W,&Q[0]);
+    ECP4_ZZZ_cmove(P,&W,pb1);
+    ECP4_ZZZ_copy(&W,P);
+    ECP4_ZZZ_sub(&W,&Q[4]);
+    ECP4_ZZZ_cmove(P,&W,pb2);
 
-	ECP4_ZZZ_affine(P);
+    ECP4_ZZZ_affine(P);
 }
 
 /* Map to hash value to point on G2 from random BIG_XXX */
@@ -729,11 +729,11 @@
 {
     BIG_XXX q,one,x,hv;
     FP2_YYY X[3],T;
-	FP4_YYY X4,Y4;
+    FP4_YYY X4;
 
     ECP4_ZZZ xQ, x2Q, x3Q, x4Q;
 
-	BIG_XXX_fromBytes(hv,W->val);
+    BIG_XXX_fromBytes(hv,W->val);
     BIG_XXX_rcopy(q,Modulus_YYY);
     BIG_XXX_one(one);
     BIG_XXX_mod(hv,q);
@@ -741,53 +741,53 @@
     for (;;)
     {
         FP2_YYY_from_BIGs(&T,one,hv);  /*******/
-		FP4_YYY_from_FP2(&X4,&T);
+        FP4_YYY_from_FP2(&X4,&T);
         if (ECP4_ZZZ_setx(Q,&X4)) break;
         BIG_XXX_inc(hv,1);
     }
 
-	ECP4_ZZZ_frob_constants(X);
+    ECP4_ZZZ_frob_constants(X);
 
     BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
 
-    // Efficient hash maps to G2 on BLS24 curves - Budroni, Pintore 
-	// Q -> x4Q -x3Q -Q + F(x3Q-x2Q) + F(F(x2Q-xQ)) + F(F(F(xQ-Q))) +F(F(F(F(2Q))))
+    // Efficient hash maps to G2 on BLS24 curves - Budroni, Pintore
+    // Q -> x4Q -x3Q -Q + F(x3Q-x2Q) + F(F(x2Q-xQ)) + F(F(F(xQ-Q))) +F(F(F(F(2Q))))
 
-	ECP4_ZZZ_copy(&xQ,Q);
-	ECP4_ZZZ_mul(&xQ,x);
-	ECP4_ZZZ_copy(&x2Q,&xQ);
-	ECP4_ZZZ_mul(&x2Q,x);
-	ECP4_ZZZ_copy(&x3Q,&x2Q);
-	ECP4_ZZZ_mul(&x3Q,x);
-	ECP4_ZZZ_copy(&x4Q,&x3Q);
-	ECP4_ZZZ_mul(&x4Q,x);
+    ECP4_ZZZ_copy(&xQ,Q);
+    ECP4_ZZZ_mul(&xQ,x);
+    ECP4_ZZZ_copy(&x2Q,&xQ);
+    ECP4_ZZZ_mul(&x2Q,x);
+    ECP4_ZZZ_copy(&x3Q,&x2Q);
+    ECP4_ZZZ_mul(&x3Q,x);
+    ECP4_ZZZ_copy(&x4Q,&x3Q);
+    ECP4_ZZZ_mul(&x4Q,x);
 
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	ECP4_ZZZ_neg(&xQ);
-	ECP4_ZZZ_neg(&x3Q);
+    ECP4_ZZZ_neg(&xQ);
+    ECP4_ZZZ_neg(&x3Q);
 #endif
 
-	ECP4_ZZZ_sub(&x4Q,&x3Q);
-	ECP4_ZZZ_sub(&x4Q,Q);
+    ECP4_ZZZ_sub(&x4Q,&x3Q);
+    ECP4_ZZZ_sub(&x4Q,Q);
 
-	ECP4_ZZZ_sub(&x3Q,&x2Q);
-	ECP4_ZZZ_frob(&x3Q,X,1);
+    ECP4_ZZZ_sub(&x3Q,&x2Q);
+    ECP4_ZZZ_frob(&x3Q,X,1);
 
-	ECP4_ZZZ_sub(&x2Q,&xQ);
-	ECP4_ZZZ_frob(&x2Q,X,2);
+    ECP4_ZZZ_sub(&x2Q,&xQ);
+    ECP4_ZZZ_frob(&x2Q,X,2);
 
-	ECP4_ZZZ_sub(&xQ,Q);
-	ECP4_ZZZ_frob(&xQ,X,3);
+    ECP4_ZZZ_sub(&xQ,Q);
+    ECP4_ZZZ_frob(&xQ,X,3);
 
-	ECP4_ZZZ_dbl(Q);
-	ECP4_ZZZ_frob(Q,X,4);
+    ECP4_ZZZ_dbl(Q);
+    ECP4_ZZZ_frob(Q,X,4);
 
-	ECP4_ZZZ_add(Q,&x4Q);
-	ECP4_ZZZ_add(Q,&x3Q);
-	ECP4_ZZZ_add(Q,&x2Q);
-	ECP4_ZZZ_add(Q,&xQ);
+    ECP4_ZZZ_add(Q,&x4Q);
+    ECP4_ZZZ_add(Q,&x3Q);
+    ECP4_ZZZ_add(Q,&x2Q);
+    ECP4_ZZZ_add(Q,&xQ);
 
-	ECP4_ZZZ_affine(Q);
+    ECP4_ZZZ_affine(Q);
 
 }
 
@@ -795,30 +795,30 @@
 
 void ECP4_ZZZ_generator(ECP4_ZZZ *G)
 {
-	BIG_XXX a,b;
-	FP2_YYY Aa,Bb;
-	FP4_YYY X,Y;
+    BIG_XXX a,b;
+    FP2_YYY Aa,Bb;
+    FP4_YYY X,Y;
 
-	BIG_XXX_rcopy(a,CURVE_Pxaa_ZZZ);
-	BIG_XXX_rcopy(b,CURVE_Pxab_ZZZ);
-	FP2_YYY_from_BIGs(&Aa,a,b);
+    BIG_XXX_rcopy(a,CURVE_Pxaa_ZZZ);
+    BIG_XXX_rcopy(b,CURVE_Pxab_ZZZ);
+    FP2_YYY_from_BIGs(&Aa,a,b);
 
-	BIG_XXX_rcopy(a,CURVE_Pxba_ZZZ);
-	BIG_XXX_rcopy(b,CURVE_Pxbb_ZZZ);
-	FP2_YYY_from_BIGs(&Bb,a,b);
+    BIG_XXX_rcopy(a,CURVE_Pxba_ZZZ);
+    BIG_XXX_rcopy(b,CURVE_Pxbb_ZZZ);
+    FP2_YYY_from_BIGs(&Bb,a,b);
 
-	FP4_YYY_from_FP2s(&X,&Aa,&Bb);
+    FP4_YYY_from_FP2s(&X,&Aa,&Bb);
 
-	BIG_XXX_rcopy(a,CURVE_Pyaa_ZZZ);
-	BIG_XXX_rcopy(b,CURVE_Pyab_ZZZ);
-	FP2_YYY_from_BIGs(&Aa,a,b);
+    BIG_XXX_rcopy(a,CURVE_Pyaa_ZZZ);
+    BIG_XXX_rcopy(b,CURVE_Pyab_ZZZ);
+    FP2_YYY_from_BIGs(&Aa,a,b);
 
-	BIG_XXX_rcopy(a,CURVE_Pyba_ZZZ);
-	BIG_XXX_rcopy(b,CURVE_Pybb_ZZZ);
-	FP2_YYY_from_BIGs(&Bb,a,b);
+    BIG_XXX_rcopy(a,CURVE_Pyba_ZZZ);
+    BIG_XXX_rcopy(b,CURVE_Pybb_ZZZ);
+    FP2_YYY_from_BIGs(&Bb,a,b);
 
-	FP4_YYY_from_FP2s(&Y,&Aa,&Bb);
+    FP4_YYY_from_FP2s(&Y,&Aa,&Bb);
 
-	ECP4_ZZZ_set(G,&X,&Y);
+    ECP4_ZZZ_set(G,&X,&Y);
 }
 
diff --git a/version3/c/ecp4.h b/version3/c/ecp4.h
index 8e022c9..5a0b756 100644
--- a/version3/c/ecp4.h
+++ b/version3/c/ecp4.h
@@ -11,10 +11,10 @@
 
 typedef struct
 {
- //   int inf; /**< Infinity Flag */
+//   int inf; /**< Infinity Flag */
     FP4_YYY x;   /**< x-coordinate of point */
     FP4_YYY y;   /**< y-coordinate of point */
-	FP4_YYY z;
+    FP4_YYY z;
 } ECP4_ZZZ;
 
 
diff --git a/version3/c/ecp8.c b/version3/c/ecp8.c
index dff3594..f807da2 100644
--- a/version3/c/ecp8.c
+++ b/version3/c/ecp8.c
@@ -25,7 +25,7 @@
 
 int ECP8_ZZZ_isinf(ECP8_ZZZ *P)
 {
-	return (FP8_YYY_iszilch(&(P->x)) & FP8_YYY_iszilch(&(P->z)));
+    return (FP8_YYY_iszilch(&(P->x)) & FP8_YYY_iszilch(&(P->z)));
 }
 
 /* Set P=Q */
@@ -41,7 +41,7 @@
 {
     FP8_YYY_zero(&(P->x));
     FP8_YYY_one(&(P->y));
-	FP8_YYY_zero(&(P->z));
+    FP8_YYY_zero(&(P->z));
 }
 
 /* Conditional move Q to P dependant on d */
@@ -125,9 +125,9 @@
 /* extract x, y from point P */
 int ECP8_ZZZ_get(FP8_YYY *x,FP8_YYY *y,ECP8_ZZZ *P)
 {
-	ECP8_ZZZ W;
-	ECP8_ZZZ_copy(&W,P);
-	ECP8_ZZZ_affine(&W);
+    ECP8_ZZZ W;
+    ECP8_ZZZ_copy(&W,P);
+    ECP8_ZZZ_affine(&W);
     if (ECP8_ZZZ_isinf(&W)) return -1;
     FP8_YYY_copy(y,&(W.y));
     FP8_YYY_copy(x,&(W.x));
@@ -154,20 +154,20 @@
 /* Convert Q to octet string */
 void ECP8_ZZZ_toOctet(octet *W,ECP8_ZZZ *Q)
 {
-	BIG_XXX b;
-	FP8_YYY qx,qy;
-	FP4_YYY qa,qb;
-	FP2_YYY pa,pb;
+    BIG_XXX b;
+    FP8_YYY qx,qy;
+    FP4_YYY qa,qb;
+    FP2_YYY pa,pb;
 
     ECP8_ZZZ_get(&qx,&qy,Q);
 
-	FP4_YYY_copy(&qa,&(qx.a));
-	FP4_YYY_copy(&qb,&(qx.b));
+    FP4_YYY_copy(&qa,&(qx.a));
+    FP4_YYY_copy(&qb,&(qx.b));
 
-	FP2_YYY_copy(&pa,&(qa.a));
-	FP2_YYY_copy(&pb,&(qa.b));
+    FP2_YYY_copy(&pa,&(qa.a));
+    FP2_YYY_copy(&pb,&(qa.b));
 
-	FP_YYY_redc(b,&(pa.a));
+    FP_YYY_redc(b,&(pa.a));
     BIG_XXX_toBytes(&(W->val[0]),b);
     FP_YYY_redc(b,&(pa.b));
     BIG_XXX_toBytes(&(W->val[MODBYTES_XXX]),b);
@@ -176,10 +176,10 @@
     FP_YYY_redc(b,&(pb.b));
     BIG_XXX_toBytes(&(W->val[3*MODBYTES_XXX]),b);
 
-	FP2_YYY_copy(&pa,&(qb.a));
-	FP2_YYY_copy(&pb,&(qb.b));
+    FP2_YYY_copy(&pa,&(qb.a));
+    FP2_YYY_copy(&pb,&(qb.b));
 
-	FP_YYY_redc(b,&(pa.a));
+    FP_YYY_redc(b,&(pa.a));
     BIG_XXX_toBytes(&(W->val[4*MODBYTES_XXX]),b);
     FP_YYY_redc(b,&(pa.b));
     BIG_XXX_toBytes(&(W->val[5*MODBYTES_XXX]),b);
@@ -189,13 +189,13 @@
     BIG_XXX_toBytes(&(W->val[7*MODBYTES_XXX]),b);
 
 
-	FP4_YYY_copy(&qa,&(qy.a));
-	FP4_YYY_copy(&qb,&(qy.b));
+    FP4_YYY_copy(&qa,&(qy.a));
+    FP4_YYY_copy(&qb,&(qy.b));
 
-	FP2_YYY_copy(&pa,&(qa.a));
-	FP2_YYY_copy(&pb,&(qa.b));
+    FP2_YYY_copy(&pa,&(qa.a));
+    FP2_YYY_copy(&pb,&(qa.b));
 
-	FP_YYY_redc(b,&(pa.a));
+    FP_YYY_redc(b,&(pa.a));
     BIG_XXX_toBytes(&(W->val[8*MODBYTES_XXX]),b);
     FP_YYY_redc(b,&(pa.b));
     BIG_XXX_toBytes(&(W->val[9*MODBYTES_XXX]),b);
@@ -204,10 +204,10 @@
     FP_YYY_redc(b,&(pb.b));
     BIG_XXX_toBytes(&(W->val[11*MODBYTES_XXX]),b);
 
-	FP2_YYY_copy(&pa,&(qb.a));
-	FP2_YYY_copy(&pb,&(qb.b));
+    FP2_YYY_copy(&pa,&(qb.a));
+    FP2_YYY_copy(&pb,&(qb.b));
 
-	FP_YYY_redc(b,&(pa.a));
+    FP_YYY_redc(b,&(pa.a));
     BIG_XXX_toBytes(&(W->val[12*MODBYTES_XXX]),b);
     FP_YYY_redc(b,&(pa.b));
     BIG_XXX_toBytes(&(W->val[13*MODBYTES_XXX]),b);
@@ -223,13 +223,13 @@
 /* restore Q from octet string */
 int ECP8_ZZZ_fromOctet(ECP8_ZZZ *Q,octet *W)
 {
-	BIG_XXX b;
+    BIG_XXX b;
     FP8_YYY qx,qy;
-	FP4_YYY qa,qb;
-	FP2_YYY pa,pb;
+    FP4_YYY qa,qb;
+    FP2_YYY pa,pb;
 
     BIG_XXX_fromBytes(b,&(W->val[0]));
-	FP_YYY_nres(&(pa.a),b);
+    FP_YYY_nres(&(pa.a),b);
     BIG_XXX_fromBytes(b,&(W->val[MODBYTES_XXX]));
     FP_YYY_nres(&(pa.b),b);
     BIG_XXX_fromBytes(b,&(W->val[2*MODBYTES_XXX]));
@@ -237,11 +237,11 @@
     BIG_XXX_fromBytes(b,&(W->val[3*MODBYTES_XXX]));
     FP_YYY_nres(&(pb.b),b);
 
-	FP2_YYY_copy(&(qa.a),&pa);
-	FP2_YYY_copy(&(qa.b),&pb);
+    FP2_YYY_copy(&(qa.a),&pa);
+    FP2_YYY_copy(&(qa.b),&pb);
 
     BIG_XXX_fromBytes(b,&(W->val[4*MODBYTES_XXX]));
-	FP_YYY_nres(&(pa.a),b);
+    FP_YYY_nres(&(pa.a),b);
     BIG_XXX_fromBytes(b,&(W->val[5*MODBYTES_XXX]));
     FP_YYY_nres(&(pa.b),b);
     BIG_XXX_fromBytes(b,&(W->val[6*MODBYTES_XXX]));
@@ -249,15 +249,15 @@
     BIG_XXX_fromBytes(b,&(W->val[7*MODBYTES_XXX]));
     FP_YYY_nres(&(pb.b),b);
 
-	FP2_YYY_copy(&(qb.a),&pa);
-	FP2_YYY_copy(&(qb.b),&pb);
+    FP2_YYY_copy(&(qb.a),&pa);
+    FP2_YYY_copy(&(qb.b),&pb);
 
-	FP4_YYY_copy(&(qx.a),&qa);
-	FP4_YYY_copy(&(qx.b),&qb);
+    FP4_YYY_copy(&(qx.a),&qa);
+    FP4_YYY_copy(&(qx.b),&qb);
 
 
     BIG_XXX_fromBytes(b,&(W->val[8*MODBYTES_XXX]));
-	FP_YYY_nres(&(pa.a),b);
+    FP_YYY_nres(&(pa.a),b);
     BIG_XXX_fromBytes(b,&(W->val[9*MODBYTES_XXX]));
     FP_YYY_nres(&(pa.b),b);
     BIG_XXX_fromBytes(b,&(W->val[10*MODBYTES_XXX]));
@@ -265,11 +265,11 @@
     BIG_XXX_fromBytes(b,&(W->val[11*MODBYTES_XXX]));
     FP_YYY_nres(&(pb.b),b);
 
-	FP2_YYY_copy(&(qa.a),&pa);
-	FP2_YYY_copy(&(qa.b),&pb);
+    FP2_YYY_copy(&(qa.a),&pa);
+    FP2_YYY_copy(&(qa.b),&pb);
 
     BIG_XXX_fromBytes(b,&(W->val[12*MODBYTES_XXX]));
-	FP_YYY_nres(&(pa.a),b);
+    FP_YYY_nres(&(pa.a),b);
     BIG_XXX_fromBytes(b,&(W->val[13*MODBYTES_XXX]));
     FP_YYY_nres(&(pa.b),b);
     BIG_XXX_fromBytes(b,&(W->val[14*MODBYTES_XXX]));
@@ -277,11 +277,11 @@
     BIG_XXX_fromBytes(b,&(W->val[15*MODBYTES_XXX]));
     FP_YYY_nres(&(pb.b),b);
 
-	FP2_YYY_copy(&(qb.a),&pa);
-	FP2_YYY_copy(&(qb.b),&pb);
+    FP2_YYY_copy(&(qb.a),&pa);
+    FP2_YYY_copy(&(qb.b),&pb);
 
-	FP4_YYY_copy(&(qy.a),&qa);
-	FP4_YYY_copy(&(qy.b),&qb);
+    FP4_YYY_copy(&(qy.a),&qa);
+    FP4_YYY_copy(&(qy.b),&qb);
 
 
     if (ECP8_ZZZ_set(Q,&qx,&qy)) return 1;
@@ -293,8 +293,8 @@
 {
     /* calculate RHS of elliptic curve equation */
     FP8_YYY t;
-	FP4_YYY t4;
-	FP2_YYY t2;
+    FP4_YYY t4;
+    FP2_YYY t2;
     BIG_XXX b;
     FP8_YYY_sqr(&t,x);
 
@@ -305,14 +305,14 @@
     BIG_XXX_rcopy(b,CURVE_B_ZZZ);
 
     FP2_YYY_from_BIG(&t2,b);
-	FP4_YYY_from_FP2(&t4,&t2);
-	FP8_YYY_from_FP4(&t,&t4);
+    FP4_YYY_from_FP2(&t4,&t2);
+    FP8_YYY_from_FP4(&t,&t4);
 
-#if SEXTIC_TWIST_ZZZ == D_TYPE	
+#if SEXTIC_TWIST_ZZZ == D_TYPE
     FP8_YYY_div_i(&t);   /* IMPORTANT - here we use the correct SEXTIC twist of the curve */
 #endif
 
-#if SEXTIC_TWIST_ZZZ == M_TYPE	
+#if SEXTIC_TWIST_ZZZ == M_TYPE
     FP8_YYY_times_i(&t);   /* IMPORTANT - here we use the correct SEXTIC twist of the curve */
 #endif
 
@@ -331,7 +331,7 @@
 
     if (!FP8_YYY_equals(&y2,&rhs))
     {
-		ECP8_ZZZ_inf(P);
+        ECP8_ZZZ_inf(P);
         return 0;
     }
 
@@ -351,7 +351,7 @@
 
     if (!FP8_YYY_sqrt(&y,&y))
     {
-		ECP8_ZZZ_inf(P);
+        ECP8_ZZZ_inf(P);
         return 0;
     }
 
@@ -365,7 +365,7 @@
 /* SU= 8 */
 void ECP8_ZZZ_neg(ECP8_ZZZ *P)
 {
-	FP8_YYY_norm(&(P->y));
+    FP8_YYY_norm(&(P->y));
     FP8_YYY_neg(&(P->y),&(P->y));
     FP8_YYY_norm(&(P->y));
 }
@@ -376,55 +376,55 @@
 /* return -1 for Infinity, 0 for addition, 1 for doubling */
 int ECP8_ZZZ_dbl(ECP8_ZZZ *P)
 {
-    FP8_YYY t0,t1,t2,t3,iy,x3,y3;
+    FP8_YYY t0,t1,t2,iy,x3,y3;
 
-	FP8_YYY_copy(&iy,&(P->y));		//FP8_YYY iy=new FP8_YYY(y);
+    FP8_YYY_copy(&iy,&(P->y));		//FP8_YYY iy=new FP8_YYY(y);
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-	FP8_YYY_times_i(&iy);			//iy.mul_ip(); 
+    FP8_YYY_times_i(&iy);			//iy.mul_ip();
 #endif
 
-	FP8_YYY_sqr(&t0,&(P->y));			//t0.sqr();   
+    FP8_YYY_sqr(&t0,&(P->y));			//t0.sqr();
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-	FP8_YYY_times_i(&t0);			//t0.mul_ip(); 
+    FP8_YYY_times_i(&t0);			//t0.mul_ip();
 #endif
 
-	FP8_YYY_mul(&t1,&iy,&(P->z));	//t1.mul(z);
-	FP8_YYY_sqr(&t2,&(P->z));				//t2.sqr();
+    FP8_YYY_mul(&t1,&iy,&(P->z));	//t1.mul(z);
+    FP8_YYY_sqr(&t2,&(P->z));				//t2.sqr();
 
-	FP8_YYY_add(&(P->z),&t0,&t0);	//z.add(t0); 
-	FP8_YYY_norm(&(P->z));				//z.norm(); 
-	FP8_YYY_add(&(P->z),&(P->z),&(P->z));	//z.add(z); 
-	FP8_YYY_add(&(P->z),&(P->z),&(P->z));	//z.add(z); 
-	FP8_YYY_norm(&(P->z));			//z.norm();  
+    FP8_YYY_add(&(P->z),&t0,&t0);	//z.add(t0);
+    FP8_YYY_norm(&(P->z));				//z.norm();
+    FP8_YYY_add(&(P->z),&(P->z),&(P->z));	//z.add(z);
+    FP8_YYY_add(&(P->z),&(P->z),&(P->z));	//z.add(z);
+    FP8_YYY_norm(&(P->z));			//z.norm();
 
-	FP8_YYY_imul(&t2,&t2,3*CURVE_B_I_ZZZ);	//t2.imul(3*ROM.CURVE_B_I); 
+    FP8_YYY_imul(&t2,&t2,3*CURVE_B_I_ZZZ);	//t2.imul(3*ROM.CURVE_B_I);
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-	FP8_YYY_times_i(&t2);
+    FP8_YYY_times_i(&t2);
 #endif
 
-	FP8_YYY_mul(&x3,&t2,&(P->z));	//x3.mul(z); 
+    FP8_YYY_mul(&x3,&t2,&(P->z));	//x3.mul(z);
 
-	FP8_YYY_add(&y3,&t0,&t2);		//y3.add(t2); 
-	FP8_YYY_norm(&y3);				//y3.norm();
-	FP8_YYY_mul(&(P->z),&(P->z),&t1);	//z.mul(t1);
+    FP8_YYY_add(&y3,&t0,&t2);		//y3.add(t2);
+    FP8_YYY_norm(&y3);				//y3.norm();
+    FP8_YYY_mul(&(P->z),&(P->z),&t1);	//z.mul(t1);
 
-	FP8_YYY_add(&t1,&t2,&t2);		//t1.add(t2); 
-	FP8_YYY_add(&t2,&t2,&t1);		//t2.add(t1); 
-	FP8_YYY_norm(&t2);				//t2.norm();  
-	FP8_YYY_sub(&t0,&t0,&t2);		//t0.sub(t2); 
-	FP8_YYY_norm(&t0);				//t0.norm();                           //y^2-9bz^2
-	FP8_YYY_mul(&y3,&y3,&t0);		//y3.mul(t0); 
-	FP8_YYY_add(&(P->y),&y3,&x3);		//y3.add(x3);                          //(y^2+3z*2)(y^2-9z^2)+3b.z^2.8y^2
+    FP8_YYY_add(&t1,&t2,&t2);		//t1.add(t2);
+    FP8_YYY_add(&t2,&t2,&t1);		//t2.add(t1);
+    FP8_YYY_norm(&t2);				//t2.norm();
+    FP8_YYY_sub(&t0,&t0,&t2);		//t0.sub(t2);
+    FP8_YYY_norm(&t0);				//t0.norm();                           //y^2-9bz^2
+    FP8_YYY_mul(&y3,&y3,&t0);		//y3.mul(t0);
+    FP8_YYY_add(&(P->y),&y3,&x3);		//y3.add(x3);                          //(y^2+3z*2)(y^2-9z^2)+3b.z^2.8y^2
 
-	FP8_YYY_mul(&t1,&(P->x),&iy);		//t1.mul(iy);						//
+    FP8_YYY_mul(&t1,&(P->x),&iy);		//t1.mul(iy);						//
 
-	FP8_YYY_norm(&t0);			//x.norm(); 
-	FP8_YYY_mul(&(P->x),&t0,&t1);	//x.mul(t1); 
-	FP8_YYY_add(&(P->x),&(P->x),&(P->x));	//x.add(x);       //(y^2-9bz^2)xy2
+    FP8_YYY_norm(&t0);			//x.norm();
+    FP8_YYY_mul(&(P->x),&t0,&t1);	//x.mul(t1);
+    FP8_YYY_add(&(P->x),&(P->x),&(P->x));	//x.add(x);       //(y^2-9bz^2)xy2
 
-	FP8_YYY_norm(&(P->x));			//x.norm(); 
+    FP8_YYY_norm(&(P->x));			//x.norm();
 
-	FP8_YYY_norm(&(P->y));			//y.norm();
+    FP8_YYY_norm(&(P->y));			//y.norm();
 
     return 1;
 }
@@ -434,88 +434,88 @@
 int ECP8_ZZZ_add(ECP8_ZZZ *P,ECP8_ZZZ *Q)
 {
     FP8_YYY t0,t1,t2,t3,t4,x3,y3,z3;
-	int b3=3*CURVE_B_I_ZZZ;
+    int b3=3*CURVE_B_I_ZZZ;
 
-	FP8_YYY_mul(&t0,&(P->x),&(Q->x));	//t0.mul(Q.x);         // x.Q.x
-	FP8_YYY_mul(&t1,&(P->y),&(Q->y));	//t1.mul(Q.y);		 // y.Q.y
+    FP8_YYY_mul(&t0,&(P->x),&(Q->x));	//t0.mul(Q.x);         // x.Q.x
+    FP8_YYY_mul(&t1,&(P->y),&(Q->y));	//t1.mul(Q.y);		 // y.Q.y
 
-	FP8_YYY_mul(&t2,&(P->z),&(Q->z));	//t2.mul(Q.z);
-	FP8_YYY_add(&t3,&(P->x),&(P->y));	//t3.add(y); 
-	FP8_YYY_norm(&t3);				//t3.norm();          //t3=X1+Y1         
-	FP8_YYY_add(&t4,&(Q->x),&(Q->y));	//t4.add(Q.y); 
-	FP8_YYY_norm(&t4);				//t4.norm();			//t4=X2+Y2
-	FP8_YYY_mul(&t3,&t3,&t4);		//t3.mul(t4);						//t3=(X1+Y1)(X2+Y2)
-	FP8_YYY_add(&t4,&t0,&t1);		//t4.add(t1);		//t4=X1.X2+Y1.Y2
+    FP8_YYY_mul(&t2,&(P->z),&(Q->z));	//t2.mul(Q.z);
+    FP8_YYY_add(&t3,&(P->x),&(P->y));	//t3.add(y);
+    FP8_YYY_norm(&t3);				//t3.norm();          //t3=X1+Y1
+    FP8_YYY_add(&t4,&(Q->x),&(Q->y));	//t4.add(Q.y);
+    FP8_YYY_norm(&t4);				//t4.norm();			//t4=X2+Y2
+    FP8_YYY_mul(&t3,&t3,&t4);		//t3.mul(t4);						//t3=(X1+Y1)(X2+Y2)
+    FP8_YYY_add(&t4,&t0,&t1);		//t4.add(t1);		//t4=X1.X2+Y1.Y2
 
-	FP8_YYY_sub(&t3,&t3,&t4);		//t3.sub(t4); 
-	FP8_YYY_norm(&t3);				//t3.norm(); 
+    FP8_YYY_sub(&t3,&t3,&t4);		//t3.sub(t4);
+    FP8_YYY_norm(&t3);				//t3.norm();
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-	FP8_YYY_times_i(&t3);			//t3.mul_ip();  //t3=(X1+Y1)(X2+Y2)-(X1.X2+Y1.Y2) = X1.Y2+X2.Y1     
-#endif
-                   
-	FP8_YYY_add(&t4,&(P->y),&(P->z));	//t4.add(z); 
-	FP8_YYY_norm(&t4);				//t4.norm();			//t4=Y1+Z1
-
-	FP8_YYY_add(&x3,&(Q->y),&(Q->z));	//x3.add(Q.z); 
-	FP8_YYY_norm(&x3);				//x3.norm();			//x3=Y2+Z2
-
-	FP8_YYY_mul(&t4,&t4,&x3);		//t4.mul(x3);						//t4=(Y1+Z1)(Y2+Z2)
-
-	FP8_YYY_add(&x3,&t1,&t2);		//x3.add(t2);						//X3=Y1.Y2+Z1.Z2
-	
-	FP8_YYY_sub(&t4,&t4,&x3);		//t4.sub(x3); 
-	FP8_YYY_norm(&t4);				//t4.norm(); 
-#if SEXTIC_TWIST_ZZZ==D_TYPE
-	FP8_YYY_times_i(&t4);			//t4.mul_ip(); //t4=(Y1+Z1)(Y2+Z2) - (Y1.Y2+Z1.Z2) = Y1.Z2+Y2.Z1     
+    FP8_YYY_times_i(&t3);			//t3.mul_ip();  //t3=(X1+Y1)(X2+Y2)-(X1.X2+Y1.Y2) = X1.Y2+X2.Y1
 #endif
 
-	FP8_YYY_add(&x3,&(P->x),&(P->z));	//x3.add(z); 
-	FP8_YYY_norm(&x3);				//x3.norm();	// x3=X1+Z1
-		
-	FP8_YYY_add(&y3,&(Q->x),&(Q->z));	//y3.add(Q.z); 
-	FP8_YYY_norm(&y3);				//y3.norm();				// y3=X2+Z2
-	FP8_YYY_mul(&x3,&x3,&y3);		//x3.mul(y3);							// x3=(X1+Z1)(X2+Z2)
+    FP8_YYY_add(&t4,&(P->y),&(P->z));	//t4.add(z);
+    FP8_YYY_norm(&t4);				//t4.norm();			//t4=Y1+Z1
 
-	FP8_YYY_add(&y3,&t0,&t2);		//y3.add(t2);							// y3=X1.X2+Z1+Z2
-	FP8_YYY_sub(&y3,&x3,&y3);		//y3.rsub(x3); 
-	FP8_YYY_norm(&y3);				//y3.norm();				// y3=(X1+Z1)(X2+Z2) - (X1.X2+Z1.Z2) = X1.Z2+X2.Z1
+    FP8_YYY_add(&x3,&(Q->y),&(Q->z));	//x3.add(Q.z);
+    FP8_YYY_norm(&x3);				//x3.norm();			//x3=Y2+Z2
+
+    FP8_YYY_mul(&t4,&t4,&x3);		//t4.mul(x3);						//t4=(Y1+Z1)(Y2+Z2)
+
+    FP8_YYY_add(&x3,&t1,&t2);		//x3.add(t2);						//X3=Y1.Y2+Z1.Z2
+
+    FP8_YYY_sub(&t4,&t4,&x3);		//t4.sub(x3);
+    FP8_YYY_norm(&t4);				//t4.norm();
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-	FP8_YYY_times_i(&t0);			//t0.mul_ip(); 
-	FP8_YYY_times_i(&t1);			//t1.mul_ip(); 
+    FP8_YYY_times_i(&t4);			//t4.mul_ip(); //t4=(Y1+Z1)(Y2+Z2) - (Y1.Y2+Z1.Z2) = Y1.Z2+Y2.Z1
 #endif
 
-	FP8_YYY_add(&x3,&t0,&t0);		//x3.add(t0); 
-	FP8_YYY_add(&t0,&t0,&x3);		//t0.add(x3); 
-	FP8_YYY_norm(&t0);				//t0.norm();
-	FP8_YYY_imul(&t2,&t2,b3);		//t2.imul(b); 	
+    FP8_YYY_add(&x3,&(P->x),&(P->z));	//x3.add(z);
+    FP8_YYY_norm(&x3);				//x3.norm();	// x3=X1+Z1
+
+    FP8_YYY_add(&y3,&(Q->x),&(Q->z));	//y3.add(Q.z);
+    FP8_YYY_norm(&y3);				//y3.norm();				// y3=X2+Z2
+    FP8_YYY_mul(&x3,&x3,&y3);		//x3.mul(y3);							// x3=(X1+Z1)(X2+Z2)
+
+    FP8_YYY_add(&y3,&t0,&t2);		//y3.add(t2);							// y3=X1.X2+Z1+Z2
+    FP8_YYY_sub(&y3,&x3,&y3);		//y3.rsub(x3);
+    FP8_YYY_norm(&y3);				//y3.norm();				// y3=(X1+Z1)(X2+Z2) - (X1.X2+Z1.Z2) = X1.Z2+X2.Z1
+#if SEXTIC_TWIST_ZZZ==D_TYPE
+    FP8_YYY_times_i(&t0);			//t0.mul_ip();
+    FP8_YYY_times_i(&t1);			//t1.mul_ip();
+#endif
+
+    FP8_YYY_add(&x3,&t0,&t0);		//x3.add(t0);
+    FP8_YYY_add(&t0,&t0,&x3);		//t0.add(x3);
+    FP8_YYY_norm(&t0);				//t0.norm();
+    FP8_YYY_imul(&t2,&t2,b3);		//t2.imul(b);
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-	FP8_YYY_times_i(&t2);
+    FP8_YYY_times_i(&t2);
 #endif
 
-	FP8_YYY_add(&z3,&t1,&t2);		//z3.add(t2); 
-	FP8_YYY_norm(&z3);				//z3.norm();
-	FP8_YYY_sub(&t1,&t1,&t2);		//t1.sub(t2); 
-	FP8_YYY_norm(&t1);				//t1.norm(); 
-	FP8_YYY_imul(&y3,&y3,b3);		//y3.imul(b); 
+    FP8_YYY_add(&z3,&t1,&t2);		//z3.add(t2);
+    FP8_YYY_norm(&z3);				//z3.norm();
+    FP8_YYY_sub(&t1,&t1,&t2);		//t1.sub(t2);
+    FP8_YYY_norm(&t1);				//t1.norm();
+    FP8_YYY_imul(&y3,&y3,b3);		//y3.imul(b);
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-	FP8_YYY_times_i(&y3);
+    FP8_YYY_times_i(&y3);
 #endif
 
-	FP8_YYY_mul(&x3,&y3,&t4);		//x3.mul(t4); 
+    FP8_YYY_mul(&x3,&y3,&t4);		//x3.mul(t4);
 
-	FP8_YYY_mul(&t2,&t3,&t1);		//t2.mul(t1); 
-	FP8_YYY_sub(&(P->x),&t2,&x3);		//x3.rsub(t2);
-	FP8_YYY_mul(&y3,&y3,&t0);		//y3.mul(t0); 
-	FP8_YYY_mul(&t1,&t1,&z3);		//t1.mul(z3); 
-	FP8_YYY_add(&(P->y),&y3,&t1);		//y3.add(t1);
-	FP8_YYY_mul(&t0,&t0,&t3);		//t0.mul(t3); 
-	FP8_YYY_mul(&z3,&z3,&t4);		//z3.mul(t4); 
-	FP8_YYY_add(&(P->z),&z3,&t0);		//z3.add(t0);
+    FP8_YYY_mul(&t2,&t3,&t1);		//t2.mul(t1);
+    FP8_YYY_sub(&(P->x),&t2,&x3);		//x3.rsub(t2);
+    FP8_YYY_mul(&y3,&y3,&t0);		//y3.mul(t0);
+    FP8_YYY_mul(&t1,&t1,&z3);		//t1.mul(z3);
+    FP8_YYY_add(&(P->y),&y3,&t1);		//y3.add(t1);
+    FP8_YYY_mul(&t0,&t0,&t3);		//t0.mul(t3);
+    FP8_YYY_mul(&z3,&z3,&t4);		//z3.mul(t4);
+    FP8_YYY_add(&(P->z),&z3,&t0);		//z3.add(t0);
 
 
-	FP8_YYY_norm(&(P->x));			//x.norm(); 
-	FP8_YYY_norm(&(P->y));			//y.norm();
-	FP8_YYY_norm(&(P->z));			//z.norm();
+    FP8_YYY_norm(&(P->x));			//x.norm();
+    FP8_YYY_norm(&(P->y));			//y.norm();
+    FP8_YYY_norm(&(P->z));			//z.norm();
 
     return 0;
 }
@@ -524,18 +524,18 @@
 /* SU= 16 */
 void ECP8_ZZZ_sub(ECP8_ZZZ *P,ECP8_ZZZ *Q)
 {
-	ECP8_ZZZ NQ;
-	ECP8_ZZZ_copy(&NQ,Q);
-	ECP8_ZZZ_neg(&NQ);
+    ECP8_ZZZ NQ;
+    ECP8_ZZZ_copy(&NQ,Q);
+    ECP8_ZZZ_neg(&NQ);
     ECP8_ZZZ_add(P,&NQ);
 }
 
 
 void ECP8_ZZZ_reduce(ECP8_ZZZ *P)
 {
-	FP8_YYY_reduce(&(P->x));
-	FP8_YYY_reduce(&(P->y));
-	FP8_YYY_reduce(&(P->z));
+    FP8_YYY_reduce(&(P->x));
+    FP8_YYY_reduce(&(P->y));
+    FP8_YYY_reduce(&(P->z));
 }
 
 /* P*=e */
@@ -549,7 +549,7 @@
     sign8 w[1+(NLEN_XXX*BASEBITS_XXX+3)/4];
 
     if (ECP8_ZZZ_isinf(P)) return;
-    
+
     /* precompute table */
 
     ECP8_ZZZ_copy(&Q,P);
@@ -598,80 +598,82 @@
         ECP8_ZZZ_add(P,&Q);
     }
     ECP8_ZZZ_sub(P,&C); /* apply correction */
-	ECP8_ZZZ_affine(P);
+    ECP8_ZZZ_affine(P);
 }
 
 void ECP8_ZZZ_frob_constants(FP2_YYY F[3])
 {
     FP_YYY fx,fy;
-	FP2_YYY X;
+    FP2_YYY X;
 
     FP_YYY_rcopy(&fx,Fra_YYY);
     FP_YYY_rcopy(&fy,Frb_YYY);
     FP2_YYY_from_FPs(&X,&fx,&fy);
 
 
-	FP2_YYY_sqr(&F[0],&X);			// FF=F^2=(1+i)^(p-19)/12
-	FP2_YYY_copy(&F[2],&F[0]);
-	FP2_YYY_mul_ip(&F[2]);			// W=(1+i)^12/12.(1+i)^(p-19)/12 = (1+i)^(p-7)/12
-	FP2_YYY_norm(&F[2]);
-	FP2_YYY_sqr(&F[1],&F[2]);
-	FP2_YYY_mul(&F[2],&F[2],&F[1]);	// W=(1+i)^(p-7)/4
+    FP2_YYY_sqr(&F[0],&X);			// FF=F^2=(1+i)^(p-19)/12
+    FP2_YYY_copy(&F[2],&F[0]);
+    FP2_YYY_mul_ip(&F[2]);			// W=(1+i)^12/12.(1+i)^(p-19)/12 = (1+i)^(p-7)/12
+    FP2_YYY_norm(&F[2]);
+    FP2_YYY_sqr(&F[1],&F[2]);
+    FP2_YYY_mul(&F[2],&F[2],&F[1]);	// W=(1+i)^(p-7)/4
 
-	FP2_YYY_mul_ip(&F[2]);			// W=(1+i)^4/4.W=(1+i)^(p-7)/4 = (1+i)^(p-3)/4
-	FP2_YYY_norm(&F[2]);
+    FP2_YYY_mul_ip(&F[2]);			// W=(1+i)^4/4.W=(1+i)^(p-7)/4 = (1+i)^(p-3)/4
+    FP2_YYY_norm(&F[2]);
 
-	FP2_YYY_copy(&F[1],&X);
+    FP2_YYY_copy(&F[1],&X);
 
-#if SEXTIC_TWIST_ZZZ == M_TYPE	
-	FP2_YYY_mul_ip(&F[1]);		// (1+i)^24/24.(1+i)^(p-19)/24 = (1+i)^(p+5)/24
-	FP2_YYY_inv(&F[1],&F[1]);		// (1+i)^-(p+5)/24
-	FP2_YYY_sqr(&F[0],&F[1]);		// (1+i)^-(p+5)/12
+#if SEXTIC_TWIST_ZZZ == M_TYPE
+    FP2_YYY_mul_ip(&F[1]);		// (1+i)^24/24.(1+i)^(p-19)/24 = (1+i)^(p+5)/24
+    FP2_YYY_inv(&F[1],&F[1]);		// (1+i)^-(p+5)/24
+    FP2_YYY_sqr(&F[0],&F[1]);		// (1+i)^-(p+5)/12
 #endif
 
 
-	FP2_YYY_mul_ip(&F[0]);		// FF=(1+i)^(p-19)/12.(1+i)^12/12 = (1+i)^(p-7)/12					// FF=(1+i)^12/12.(1+i)^-(p+5)/12 = (1+i)^-(p-7)/12
-	FP2_YYY_norm(&F[0]);
+    FP2_YYY_mul_ip(&F[0]);		// FF=(1+i)^(p-19)/12.(1+i)^12/12 = (1+i)^(p-7)/12					// FF=(1+i)^12/12.(1+i)^-(p+5)/12 = (1+i)^-(p-7)/12
+    FP2_YYY_norm(&F[0]);
 
-	FP2_YYY_mul(&F[1],&F[1],&F[0]);  // (1+i)^(p-7)/12 . (1+i)^(p-19)/24 = (1+i)^(p-11)/8				// (1+i)^-(p-7)/12 . (1+i)^-(p+5)/24 = (1+i)^-(p-3)/8
+    FP2_YYY_mul(&F[1],&F[1],&F[0]);  // (1+i)^(p-7)/12 . (1+i)^(p-19)/24 = (1+i)^(p-11)/8				// (1+i)^-(p-7)/12 . (1+i)^-(p+5)/24 = (1+i)^-(p-3)/8
 
 }
 
 /* Calculates q^n.P using Frobenius constant X */
 void ECP8_ZZZ_frob(ECP8_ZZZ *P,FP2_YYY F[3],int n)
 {
-	int i;
-	FP8_YYY X,Y,Z;
+    int i;
+    FP8_YYY X,Y,Z;
 
-	FP8_YYY_copy(&X,&(P->x));
-	FP8_YYY_copy(&Y,&(P->y));
-	FP8_YYY_copy(&Z,&(P->z));
+    FP8_YYY_copy(&X,&(P->x));
+    FP8_YYY_copy(&Y,&(P->y));
+    FP8_YYY_copy(&Z,&(P->z));
 
-	for (i=0;i<n;i++)
-	{
-		FP8_YYY_frob(&X,&F[2]);		// X^p		
-		FP8_YYY_qmul(&X,&X,&F[0]); 
-#if SEXTIC_TWIST_ZZZ == M_TYPE			
-		FP8_YYY_div_i2(&X);			// X^p.(1+i)^-(p-1)/12
-#endif
-#if SEXTIC_TWIST_ZZZ == D_TYPE			
-		FP8_YYY_times_i2(&X);		// X^p.(1+i)^(p-1)/12
-#endif
-
-		FP8_YYY_frob(&Y,&F[2]);		// Y^p
-		FP8_YYY_qmul(&Y,&Y,&F[1]); 
-#if SEXTIC_TWIST_ZZZ == M_TYPE		
-		FP8_YYY_div_i(&Y);			// Y^p.(1+i)^-(p-1)/8
+    for (i=0; i<n; i++)
+    {
+        FP8_YYY_frob(&X,&F[2]);		// X^p
+        FP8_YYY_qmul(&X,&X,&F[0]);
+#if SEXTIC_TWIST_ZZZ == M_TYPE
+        FP8_YYY_div_i2(&X);			// X^p.(1+i)^-(p-1)/12
 #endif
 #if SEXTIC_TWIST_ZZZ == D_TYPE
-		FP8_YYY_times_i2(&Y); FP8_YYY_times_i2(&Y); FP8_YYY_times_i(&Y);  // Y^p.(1+i)^(p-1)/8
+        FP8_YYY_times_i2(&X);		// X^p.(1+i)^(p-1)/12
 #endif
-		FP8_YYY_frob(&Z,&F[2]);
-	}
 
-	FP8_YYY_copy(&(P->x),&X);
-	FP8_YYY_copy(&(P->y),&Y);
-	FP8_YYY_copy(&(P->z),&Z);
+        FP8_YYY_frob(&Y,&F[2]);		// Y^p
+        FP8_YYY_qmul(&Y,&Y,&F[1]);
+#if SEXTIC_TWIST_ZZZ == M_TYPE
+        FP8_YYY_div_i(&Y);			// Y^p.(1+i)^-(p-1)/8
+#endif
+#if SEXTIC_TWIST_ZZZ == D_TYPE
+        FP8_YYY_times_i2(&Y);
+        FP8_YYY_times_i2(&Y);
+        FP8_YYY_times_i(&Y);  // Y^p.(1+i)^(p-1)/8
+#endif
+        FP8_YYY_frob(&Z,&F[2]);
+    }
+
+    FP8_YYY_copy(&(P->x),&X);
+    FP8_YYY_copy(&(P->y),&Y);
+    FP8_YYY_copy(&(P->z),&Z);
 }
 
 /* Side channel attack secure */
@@ -681,71 +683,71 @@
 void ECP8_ZZZ_mul16(ECP8_ZZZ *P,ECP8_ZZZ Q[16],BIG_XXX u[16])
 {
     int i,j,k,nb,pb1,pb2,pb3,pb4,bt;
-	ECP8_ZZZ T1[8],T2[8],T3[8],T4[8],W;
+    ECP8_ZZZ T1[8],T2[8],T3[8],T4[8],W;
     BIG_XXX mt,t[16];
     sign8 w1[NLEN_XXX*BASEBITS_XXX+1];
     sign8 s1[NLEN_XXX*BASEBITS_XXX+1];
     sign8 w2[NLEN_XXX*BASEBITS_XXX+1];
-    sign8 s2[NLEN_XXX*BASEBITS_XXX+1];	
+    sign8 s2[NLEN_XXX*BASEBITS_XXX+1];
     sign8 w3[NLEN_XXX*BASEBITS_XXX+1];
     sign8 s3[NLEN_XXX*BASEBITS_XXX+1];
     sign8 w4[NLEN_XXX*BASEBITS_XXX+1];
-    sign8 s4[NLEN_XXX*BASEBITS_XXX+1];	
+    sign8 s4[NLEN_XXX*BASEBITS_XXX+1];
 
-	FP2_YYY X[3];
-	ECP8_ZZZ_frob_constants(X);
+    FP2_YYY X[3];
+    ECP8_ZZZ_frob_constants(X);
 
     for (i=0; i<16; i++)
-	{
+    {
         BIG_XXX_copy(t[i],u[i]);
-	}
+    }
 // Precomputed table
     ECP8_ZZZ_copy(&T1[0],&Q[0]); // Q[0]
     ECP8_ZZZ_copy(&T1[1],&T1[0]);
-	ECP8_ZZZ_add(&T1[1],&Q[1]);	// Q[0]+Q[1]
+    ECP8_ZZZ_add(&T1[1],&Q[1]);	// Q[0]+Q[1]
     ECP8_ZZZ_copy(&T1[2],&T1[0]);
-	ECP8_ZZZ_add(&T1[2],&Q[2]);	// Q[0]+Q[2]
-	ECP8_ZZZ_copy(&T1[3],&T1[1]);
-	ECP8_ZZZ_add(&T1[3],&Q[2]);	// Q[0]+Q[1]+Q[2]
-	ECP8_ZZZ_copy(&T1[4],&T1[0]);
-	ECP8_ZZZ_add(&T1[4],&Q[3]);  // Q[0]+Q[3]
-	ECP8_ZZZ_copy(&T1[5],&T1[1]);
-	ECP8_ZZZ_add(&T1[5],&Q[3]);	// Q[0]+Q[1]+Q[3]
-	ECP8_ZZZ_copy(&T1[6],&T1[2]);
-	ECP8_ZZZ_add(&T1[6],&Q[3]);	// Q[0]+Q[2]+Q[3]
-	ECP8_ZZZ_copy(&T1[7],&T1[3]);
-	ECP8_ZZZ_add(&T1[7],&Q[3]);	// Q[0]+Q[1]+Q[2]+Q[3]
+    ECP8_ZZZ_add(&T1[2],&Q[2]);	// Q[0]+Q[2]
+    ECP8_ZZZ_copy(&T1[3],&T1[1]);
+    ECP8_ZZZ_add(&T1[3],&Q[2]);	// Q[0]+Q[1]+Q[2]
+    ECP8_ZZZ_copy(&T1[4],&T1[0]);
+    ECP8_ZZZ_add(&T1[4],&Q[3]);  // Q[0]+Q[3]
+    ECP8_ZZZ_copy(&T1[5],&T1[1]);
+    ECP8_ZZZ_add(&T1[5],&Q[3]);	// Q[0]+Q[1]+Q[3]
+    ECP8_ZZZ_copy(&T1[6],&T1[2]);
+    ECP8_ZZZ_add(&T1[6],&Q[3]);	// Q[0]+Q[2]+Q[3]
+    ECP8_ZZZ_copy(&T1[7],&T1[3]);
+    ECP8_ZZZ_add(&T1[7],&Q[3]);	// Q[0]+Q[1]+Q[2]+Q[3]
 
-//  Use Frobenius 
+//  Use Frobenius
 
-	for (i=0;i<8;i++)
-	{
-		ECP8_ZZZ_copy(&T2[i],&T1[i]);
-		ECP8_ZZZ_frob(&T2[i],X,4);
+    for (i=0; i<8; i++)
+    {
+        ECP8_ZZZ_copy(&T2[i],&T1[i]);
+        ECP8_ZZZ_frob(&T2[i],X,4);
 
-		ECP8_ZZZ_copy(&T3[i],&T2[i]);
-		ECP8_ZZZ_frob(&T3[i],X,4);
+        ECP8_ZZZ_copy(&T3[i],&T2[i]);
+        ECP8_ZZZ_frob(&T3[i],X,4);
 
-		ECP8_ZZZ_copy(&T4[i],&T3[i]);
-		ECP8_ZZZ_frob(&T4[i],X,4);
-	}
+        ECP8_ZZZ_copy(&T4[i],&T3[i]);
+        ECP8_ZZZ_frob(&T4[i],X,4);
+    }
 
 // Make them odd
-	pb1=1-BIG_XXX_parity(t[0]);
-	BIG_XXX_inc(t[0],pb1);
-	BIG_XXX_norm(t[0]);
+    pb1=1-BIG_XXX_parity(t[0]);
+    BIG_XXX_inc(t[0],pb1);
+    BIG_XXX_norm(t[0]);
 
-	pb2=1-BIG_XXX_parity(t[4]);
-	BIG_XXX_inc(t[4],pb2);
-	BIG_XXX_norm(t[4]);
+    pb2=1-BIG_XXX_parity(t[4]);
+    BIG_XXX_inc(t[4],pb2);
+    BIG_XXX_norm(t[4]);
 
-	pb3=1-BIG_XXX_parity(t[8]);
-	BIG_XXX_inc(t[8],pb3);
-	BIG_XXX_norm(t[8]);
+    pb3=1-BIG_XXX_parity(t[8]);
+    BIG_XXX_inc(t[8],pb3);
+    BIG_XXX_norm(t[8]);
 
-	pb4=1-BIG_XXX_parity(t[12]);
-	BIG_XXX_inc(t[12],pb4);
-	BIG_XXX_norm(t[12]);
+    pb4=1-BIG_XXX_parity(t[12]);
+    BIG_XXX_inc(t[12],pb4);
+    BIG_XXX_norm(t[12]);
 
 // Number of bits
     BIG_XXX_zero(mt);
@@ -755,88 +757,88 @@
     }
     nb=1+BIG_XXX_nbits(mt);
 
-// Sign pivot 
-	s1[nb-1]=1;
-	s2[nb-1]=1;
-	s3[nb-1]=1;
-	s4[nb-1]=1;
-	for (i=0;i<nb-1;i++)
-	{
+// Sign pivot
+    s1[nb-1]=1;
+    s2[nb-1]=1;
+    s3[nb-1]=1;
+    s4[nb-1]=1;
+    for (i=0; i<nb-1; i++)
+    {
         BIG_XXX_fshr(t[0],1);
-		s1[i]=2*BIG_XXX_parity(t[0])-1;
+        s1[i]=2*BIG_XXX_parity(t[0])-1;
         BIG_XXX_fshr(t[4],1);
-		s2[i]=2*BIG_XXX_parity(t[4])-1;
+        s2[i]=2*BIG_XXX_parity(t[4])-1;
         BIG_XXX_fshr(t[8],1);
-		s3[i]=2*BIG_XXX_parity(t[8])-1;
+        s3[i]=2*BIG_XXX_parity(t[8])-1;
         BIG_XXX_fshr(t[12],1);
-		s4[i]=2*BIG_XXX_parity(t[12])-1;
-	}
+        s4[i]=2*BIG_XXX_parity(t[12])-1;
+    }
 
 
 // Recoded exponents
     for (i=0; i<nb; i++)
     {
-		w1[i]=0;
-		k=1;
-		for (j=1; j<4; j++)
-		{
-			bt=s1[i]*BIG_XXX_parity(t[j]);
-			BIG_XXX_fshr(t[j],1);
+        w1[i]=0;
+        k=1;
+        for (j=1; j<4; j++)
+        {
+            bt=s1[i]*BIG_XXX_parity(t[j]);
+            BIG_XXX_fshr(t[j],1);
 
-			BIG_XXX_dec(t[j],(bt>>1));
-			BIG_XXX_norm(t[j]);
-			w1[i]+=bt*k;
-			k*=2;
+            BIG_XXX_dec(t[j],(bt>>1));
+            BIG_XXX_norm(t[j]);
+            w1[i]+=bt*k;
+            k*=2;
         }
 
-		w2[i]=0;
-		k=1;
-		for (j=5; j<8; j++)
-		{
-			bt=s2[i]*BIG_XXX_parity(t[j]);
-			BIG_XXX_fshr(t[j],1);
+        w2[i]=0;
+        k=1;
+        for (j=5; j<8; j++)
+        {
+            bt=s2[i]*BIG_XXX_parity(t[j]);
+            BIG_XXX_fshr(t[j],1);
 
-			BIG_XXX_dec(t[j],(bt>>1));
-			BIG_XXX_norm(t[j]);
-			w2[i]+=bt*k;
-			k*=2;
+            BIG_XXX_dec(t[j],(bt>>1));
+            BIG_XXX_norm(t[j]);
+            w2[i]+=bt*k;
+            k*=2;
         }
 
-		w3[i]=0;
-		k=1;
-		for (j=9; j<12; j++)
-		{
-			bt=s3[i]*BIG_XXX_parity(t[j]);
-			BIG_XXX_fshr(t[j],1);
+        w3[i]=0;
+        k=1;
+        for (j=9; j<12; j++)
+        {
+            bt=s3[i]*BIG_XXX_parity(t[j]);
+            BIG_XXX_fshr(t[j],1);
 
-			BIG_XXX_dec(t[j],(bt>>1));
-			BIG_XXX_norm(t[j]);
-			w3[i]+=bt*k;
-			k*=2;
+            BIG_XXX_dec(t[j],(bt>>1));
+            BIG_XXX_norm(t[j]);
+            w3[i]+=bt*k;
+            k*=2;
         }
 
-		w4[i]=0;
-		k=1;
-		for (j=13; j<16; j++)
-		{
-			bt=s4[i]*BIG_XXX_parity(t[j]);
-			BIG_XXX_fshr(t[j],1);
+        w4[i]=0;
+        k=1;
+        for (j=13; j<16; j++)
+        {
+            bt=s4[i]*BIG_XXX_parity(t[j]);
+            BIG_XXX_fshr(t[j],1);
 
-			BIG_XXX_dec(t[j],(bt>>1));
-			BIG_XXX_norm(t[j]);
-			w4[i]+=bt*k;
-			k*=2;
+            BIG_XXX_dec(t[j],(bt>>1));
+            BIG_XXX_norm(t[j]);
+            w4[i]+=bt*k;
+            k*=2;
         }
-    }	
+    }
 
 // Main loop
-	ECP8_ZZZ_select(P,T1,2*w1[nb-1]+1);
-	ECP8_ZZZ_select(&W,T2,2*w2[nb-1]+1);
-	ECP8_ZZZ_add(P,&W);
-	ECP8_ZZZ_select(&W,T3,2*w3[nb-1]+1);
-	ECP8_ZZZ_add(P,&W);
-	ECP8_ZZZ_select(&W,T4,2*w4[nb-1]+1);
-	ECP8_ZZZ_add(P,&W);
+    ECP8_ZZZ_select(P,T1,2*w1[nb-1]+1);
+    ECP8_ZZZ_select(&W,T2,2*w2[nb-1]+1);
+    ECP8_ZZZ_add(P,&W);
+    ECP8_ZZZ_select(&W,T3,2*w3[nb-1]+1);
+    ECP8_ZZZ_add(P,&W);
+    ECP8_ZZZ_select(&W,T4,2*w4[nb-1]+1);
+    ECP8_ZZZ_add(P,&W);
 
     for (i=nb-2; i>=0; i--)
     {
@@ -852,20 +854,20 @@
     }
 
 // apply corrections
-	ECP8_ZZZ_copy(&W,P);   
-	ECP8_ZZZ_sub(&W,&Q[0]);
-	ECP8_ZZZ_cmove(P,&W,pb1);
-	ECP8_ZZZ_copy(&W,P);   
-	ECP8_ZZZ_sub(&W,&Q[4]);
-	ECP8_ZZZ_cmove(P,&W,pb2);
+    ECP8_ZZZ_copy(&W,P);
+    ECP8_ZZZ_sub(&W,&Q[0]);
+    ECP8_ZZZ_cmove(P,&W,pb1);
+    ECP8_ZZZ_copy(&W,P);
+    ECP8_ZZZ_sub(&W,&Q[4]);
+    ECP8_ZZZ_cmove(P,&W,pb2);
 
-	ECP8_ZZZ_copy(&W,P);   
-	ECP8_ZZZ_sub(&W,&Q[8]);
-	ECP8_ZZZ_cmove(P,&W,pb3);
-	ECP8_ZZZ_copy(&W,P);   
-	ECP8_ZZZ_sub(&W,&Q[12]);
-	ECP8_ZZZ_cmove(P,&W,pb4);
-	ECP8_ZZZ_affine(P);
+    ECP8_ZZZ_copy(&W,P);
+    ECP8_ZZZ_sub(&W,&Q[8]);
+    ECP8_ZZZ_cmove(P,&W,pb3);
+    ECP8_ZZZ_copy(&W,P);
+    ECP8_ZZZ_sub(&W,&Q[12]);
+    ECP8_ZZZ_cmove(P,&W,pb4);
+    ECP8_ZZZ_affine(P);
 }
 
 /* Map to hash value to point on G2 from random BIG_XXX */
@@ -873,14 +875,13 @@
 void ECP8_ZZZ_mapit(ECP8_ZZZ *Q,octet *W)
 {
     BIG_XXX q,one,x,hv;
-	FP_YYY Fx,Fy;
     FP2_YYY T,X[3];
-	FP4_YYY X4;
-	FP8_YYY X8;
+    FP4_YYY X4;
+    FP8_YYY X8;
 
-    ECP8_ZZZ xQ, x2Q, x3Q, x4Q , x5Q, x6Q, x7Q, x8Q;
+    ECP8_ZZZ xQ, x2Q, x3Q, x4Q, x5Q, x6Q, x7Q, x8Q;
 
-	BIG_XXX_fromBytes(hv,W->val);
+    BIG_XXX_fromBytes(hv,W->val);
     BIG_XXX_rcopy(q,Modulus_YYY);
     BIG_XXX_one(one);
     BIG_XXX_mod(hv,q);
@@ -888,83 +889,83 @@
     for (;;)
     {
         FP2_YYY_from_BIGs(&T,one,hv);  /*******/
-		FP4_YYY_from_FP2(&X4,&T);
-		FP8_YYY_from_FP4(&X8,&X4);
+        FP4_YYY_from_FP2(&X4,&T);
+        FP8_YYY_from_FP4(&X8,&X4);
         if (ECP8_ZZZ_setx(Q,&X8)) break;
         BIG_XXX_inc(hv,1);
     }
 
-	ECP8_ZZZ_frob_constants(X);
+    ECP8_ZZZ_frob_constants(X);
 
     BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
 
-    // Efficient hash maps to G2 on BLS48 curves - Budroni, Pintore 
-	// Q -> x8Q -x7Q -Q +  F(x7Q-x6Q) + F(F(x6Q-x5Q)) +F(F(F(x5Q-x4Q))) +F(F(F(F(x4Q-x3Q)))) + F(F(F(F(F(x3Q-x2Q))))) + F(F(F(F(F(F(x2Q-xQ)))))) + F(F(F(F(F(F(F(xQ-Q))))))) +F(F(F(F(F(F(F(F(2Q))))))))
+    // Efficient hash maps to G2 on BLS48 curves - Budroni, Pintore
+    // Q -> x8Q -x7Q -Q +  F(x7Q-x6Q) + F(F(x6Q-x5Q)) +F(F(F(x5Q-x4Q))) +F(F(F(F(x4Q-x3Q)))) + F(F(F(F(F(x3Q-x2Q))))) + F(F(F(F(F(F(x2Q-xQ)))))) + F(F(F(F(F(F(F(xQ-Q))))))) +F(F(F(F(F(F(F(F(2Q))))))))
 
-	ECP8_ZZZ_copy(&xQ,Q);
-	ECP8_ZZZ_mul(&xQ,x);
-	ECP8_ZZZ_copy(&x2Q,&xQ);
-	ECP8_ZZZ_mul(&x2Q,x);
-	ECP8_ZZZ_copy(&x3Q,&x2Q);
-	ECP8_ZZZ_mul(&x3Q,x);
-	ECP8_ZZZ_copy(&x4Q,&x3Q);
+    ECP8_ZZZ_copy(&xQ,Q);
+    ECP8_ZZZ_mul(&xQ,x);
+    ECP8_ZZZ_copy(&x2Q,&xQ);
+    ECP8_ZZZ_mul(&x2Q,x);
+    ECP8_ZZZ_copy(&x3Q,&x2Q);
+    ECP8_ZZZ_mul(&x3Q,x);
+    ECP8_ZZZ_copy(&x4Q,&x3Q);
 
-	ECP8_ZZZ_mul(&x4Q,x);
-	ECP8_ZZZ_copy(&x5Q,&x4Q);
-	ECP8_ZZZ_mul(&x5Q,x);
-	ECP8_ZZZ_copy(&x6Q,&x5Q);
-	ECP8_ZZZ_mul(&x6Q,x);
-	ECP8_ZZZ_copy(&x7Q,&x6Q);
-	ECP8_ZZZ_mul(&x7Q,x);
-	ECP8_ZZZ_copy(&x8Q,&x7Q);
-	ECP8_ZZZ_mul(&x8Q,x);
+    ECP8_ZZZ_mul(&x4Q,x);
+    ECP8_ZZZ_copy(&x5Q,&x4Q);
+    ECP8_ZZZ_mul(&x5Q,x);
+    ECP8_ZZZ_copy(&x6Q,&x5Q);
+    ECP8_ZZZ_mul(&x6Q,x);
+    ECP8_ZZZ_copy(&x7Q,&x6Q);
+    ECP8_ZZZ_mul(&x7Q,x);
+    ECP8_ZZZ_copy(&x8Q,&x7Q);
+    ECP8_ZZZ_mul(&x8Q,x);
 
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	ECP8_ZZZ_neg(&xQ);
-	ECP8_ZZZ_neg(&x3Q);
-	ECP8_ZZZ_neg(&x5Q);
-	ECP8_ZZZ_neg(&x7Q);
+    ECP8_ZZZ_neg(&xQ);
+    ECP8_ZZZ_neg(&x3Q);
+    ECP8_ZZZ_neg(&x5Q);
+    ECP8_ZZZ_neg(&x7Q);
 #endif
 
-	ECP8_ZZZ_sub(&x8Q,&x7Q);
-	ECP8_ZZZ_sub(&x8Q,Q);
+    ECP8_ZZZ_sub(&x8Q,&x7Q);
+    ECP8_ZZZ_sub(&x8Q,Q);
 
-	ECP8_ZZZ_sub(&x7Q,&x6Q);
-	ECP8_ZZZ_frob(&x7Q,X,1);
+    ECP8_ZZZ_sub(&x7Q,&x6Q);
+    ECP8_ZZZ_frob(&x7Q,X,1);
 
-	ECP8_ZZZ_sub(&x6Q,&x5Q);
-	ECP8_ZZZ_frob(&x6Q,X,2);
-	
-	ECP8_ZZZ_sub(&x5Q,&x4Q);
-	ECP8_ZZZ_frob(&x5Q,X,3);
-	
-	ECP8_ZZZ_sub(&x4Q,&x3Q);
-	ECP8_ZZZ_frob(&x4Q,X,4);
+    ECP8_ZZZ_sub(&x6Q,&x5Q);
+    ECP8_ZZZ_frob(&x6Q,X,2);
 
-	ECP8_ZZZ_sub(&x3Q,&x2Q);
-	ECP8_ZZZ_frob(&x3Q,X,5);
+    ECP8_ZZZ_sub(&x5Q,&x4Q);
+    ECP8_ZZZ_frob(&x5Q,X,3);
 
-	ECP8_ZZZ_sub(&x2Q,&xQ);
-	ECP8_ZZZ_frob(&x2Q,X,6);
+    ECP8_ZZZ_sub(&x4Q,&x3Q);
+    ECP8_ZZZ_frob(&x4Q,X,4);
 
-	ECP8_ZZZ_sub(&xQ,Q);
-	ECP8_ZZZ_frob(&xQ,X,7);
+    ECP8_ZZZ_sub(&x3Q,&x2Q);
+    ECP8_ZZZ_frob(&x3Q,X,5);
 
-	ECP8_ZZZ_dbl(Q);
-	ECP8_ZZZ_frob(Q,X,8);
+    ECP8_ZZZ_sub(&x2Q,&xQ);
+    ECP8_ZZZ_frob(&x2Q,X,6);
+
+    ECP8_ZZZ_sub(&xQ,Q);
+    ECP8_ZZZ_frob(&xQ,X,7);
+
+    ECP8_ZZZ_dbl(Q);
+    ECP8_ZZZ_frob(Q,X,8);
 
 
-	ECP8_ZZZ_add(Q,&x8Q);
-	ECP8_ZZZ_add(Q,&x7Q);
-	ECP8_ZZZ_add(Q,&x6Q);
-	ECP8_ZZZ_add(Q,&x5Q);
+    ECP8_ZZZ_add(Q,&x8Q);
+    ECP8_ZZZ_add(Q,&x7Q);
+    ECP8_ZZZ_add(Q,&x6Q);
+    ECP8_ZZZ_add(Q,&x5Q);
 
-	ECP8_ZZZ_add(Q,&x4Q);
-	ECP8_ZZZ_add(Q,&x3Q);
-	ECP8_ZZZ_add(Q,&x2Q);
-	ECP8_ZZZ_add(Q,&xQ);
+    ECP8_ZZZ_add(Q,&x4Q);
+    ECP8_ZZZ_add(Q,&x3Q);
+    ECP8_ZZZ_add(Q,&x2Q);
+    ECP8_ZZZ_add(Q,&xQ);
 
-	ECP8_ZZZ_affine(Q);
+    ECP8_ZZZ_affine(Q);
 
 }
 
@@ -972,54 +973,54 @@
 
 void ECP8_ZZZ_generator(ECP8_ZZZ *G)
 {
-	BIG_XXX a,b;
-	FP2_YYY Aa,Bb;
-	FP4_YYY A,B;
-	FP8_YYY X,Y;
+    BIG_XXX a,b;
+    FP2_YYY Aa,Bb;
+    FP4_YYY A,B;
+    FP8_YYY X,Y;
 
-	BIG_XXX_rcopy(a,CURVE_Pxaaa_ZZZ);
-	BIG_XXX_rcopy(b,CURVE_Pxaab_ZZZ);
-	FP2_YYY_from_BIGs(&Aa,a,b);
+    BIG_XXX_rcopy(a,CURVE_Pxaaa_ZZZ);
+    BIG_XXX_rcopy(b,CURVE_Pxaab_ZZZ);
+    FP2_YYY_from_BIGs(&Aa,a,b);
 
-	BIG_XXX_rcopy(a,CURVE_Pxaba_ZZZ);
-	BIG_XXX_rcopy(b,CURVE_Pxabb_ZZZ);
-	FP2_YYY_from_BIGs(&Bb,a,b);
+    BIG_XXX_rcopy(a,CURVE_Pxaba_ZZZ);
+    BIG_XXX_rcopy(b,CURVE_Pxabb_ZZZ);
+    FP2_YYY_from_BIGs(&Bb,a,b);
 
-	FP4_YYY_from_FP2s(&A,&Aa,&Bb);
+    FP4_YYY_from_FP2s(&A,&Aa,&Bb);
 
-	BIG_XXX_rcopy(a,CURVE_Pxbaa_ZZZ);
-	BIG_XXX_rcopy(b,CURVE_Pxbab_ZZZ);
-	FP2_YYY_from_BIGs(&Aa,a,b);
+    BIG_XXX_rcopy(a,CURVE_Pxbaa_ZZZ);
+    BIG_XXX_rcopy(b,CURVE_Pxbab_ZZZ);
+    FP2_YYY_from_BIGs(&Aa,a,b);
 
-	BIG_XXX_rcopy(a,CURVE_Pxbba_ZZZ);
-	BIG_XXX_rcopy(b,CURVE_Pxbbb_ZZZ);
-	FP2_YYY_from_BIGs(&Bb,a,b);
+    BIG_XXX_rcopy(a,CURVE_Pxbba_ZZZ);
+    BIG_XXX_rcopy(b,CURVE_Pxbbb_ZZZ);
+    FP2_YYY_from_BIGs(&Bb,a,b);
 
-	FP4_YYY_from_FP2s(&B,&Aa,&Bb);
+    FP4_YYY_from_FP2s(&B,&Aa,&Bb);
 
-	FP8_YYY_from_FP4s(&X,&A,&B);
+    FP8_YYY_from_FP4s(&X,&A,&B);
 
-	BIG_XXX_rcopy(a,CURVE_Pyaaa_ZZZ);
-	BIG_XXX_rcopy(b,CURVE_Pyaab_ZZZ);
-	FP2_YYY_from_BIGs(&Aa,a,b);
+    BIG_XXX_rcopy(a,CURVE_Pyaaa_ZZZ);
+    BIG_XXX_rcopy(b,CURVE_Pyaab_ZZZ);
+    FP2_YYY_from_BIGs(&Aa,a,b);
 
-	BIG_XXX_rcopy(a,CURVE_Pyaba_ZZZ);
-	BIG_XXX_rcopy(b,CURVE_Pyabb_ZZZ);
-	FP2_YYY_from_BIGs(&Bb,a,b);
+    BIG_XXX_rcopy(a,CURVE_Pyaba_ZZZ);
+    BIG_XXX_rcopy(b,CURVE_Pyabb_ZZZ);
+    FP2_YYY_from_BIGs(&Bb,a,b);
 
-	FP4_YYY_from_FP2s(&A,&Aa,&Bb);
+    FP4_YYY_from_FP2s(&A,&Aa,&Bb);
 
-	BIG_XXX_rcopy(a,CURVE_Pybaa_ZZZ);
-	BIG_XXX_rcopy(b,CURVE_Pybab_ZZZ);
-	FP2_YYY_from_BIGs(&Aa,a,b);
+    BIG_XXX_rcopy(a,CURVE_Pybaa_ZZZ);
+    BIG_XXX_rcopy(b,CURVE_Pybab_ZZZ);
+    FP2_YYY_from_BIGs(&Aa,a,b);
 
-	BIG_XXX_rcopy(a,CURVE_Pybba_ZZZ);
-	BIG_XXX_rcopy(b,CURVE_Pybbb_ZZZ);
-	FP2_YYY_from_BIGs(&Bb,a,b);
+    BIG_XXX_rcopy(a,CURVE_Pybba_ZZZ);
+    BIG_XXX_rcopy(b,CURVE_Pybbb_ZZZ);
+    FP2_YYY_from_BIGs(&Bb,a,b);
 
-	FP4_YYY_from_FP2s(&B,&Aa,&Bb);
+    FP4_YYY_from_FP2s(&B,&Aa,&Bb);
 
-	FP8_YYY_from_FP4s(&Y,&A,&B);
+    FP8_YYY_from_FP4s(&Y,&A,&B);
 
-	ECP8_ZZZ_set(G,&X,&Y);
+    ECP8_ZZZ_set(G,&X,&Y);
 }
diff --git a/version3/c/ecp8.h b/version3/c/ecp8.h
index 13aff45..2e3a786 100644
--- a/version3/c/ecp8.h
+++ b/version3/c/ecp8.h
@@ -18,7 +18,7 @@
 //    int inf; /**< Infinity Flag */
     FP8_YYY x;   /**< x-coordinate of point */
     FP8_YYY y;   /**< y-coordinate of point */
-	FP8_YYY z;	/**< z-coordinate of point */
+    FP8_YYY z;	/**< z-coordinate of point */
 } ECP8_ZZZ;
 
 
diff --git a/version3/c/ff.h b/version3/c/ff.h
index a50e653..c3be699 100644
--- a/version3/c/ff.h
+++ b/version3/c/ff.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file ff.h
+ * @file ff_WWW.h
  * @author Mike Scott
  * @brief FF Header File
  *
diff --git a/version3/c/fp.c b/version3/c/fp.c
index 02a8521..ec1ab9a 100644
--- a/version3/c/fp.c
+++ b/version3/c/fp.c
@@ -208,7 +208,7 @@
 {
     BIG_XXX m,t;
     BIG_XXX_rcopy(m,Modulus_YYY);
-	BIG_XXX_copy(t,x->g);
+    BIG_XXX_copy(t,x->g);
     BIG_XXX_mod(t,m);
     return BIG_XXX_iszilch(t);
 }
@@ -256,9 +256,9 @@
 
 int FP_YYY_equals(FP_YYY *x,FP_YYY *y)
 {
-	FP_YYY xg,yg;
-	FP_YYY_copy(&xg,x);
-	FP_YYY_copy(&yg,y);
+    FP_YYY xg,yg;
+    FP_YYY_copy(&xg,x);
+    FP_YYY_copy(&yg,y);
     FP_YYY_reduce(&xg);
     FP_YYY_reduce(&yg);
     if (BIG_XXX_comp(xg.g,yg.g)==0) return 1;
@@ -348,12 +348,12 @@
         // don't want to do this - only a problem for Montgomery modulus and larger constants
         BIG_XXX_zero(k);
         BIG_XXX_inc(k,c);
-		BIG_XXX_norm(k);
+        BIG_XXX_norm(k);
         FP_YYY_nres(&f,k);
         FP_YYY_mul(r,a,&f);
     }
 #endif
- 
+
     if (s)
     {
         FP_YYY_neg(r,r);
@@ -427,21 +427,21 @@
 // Note that MAXXES is bounded to be 2-bits less than half a word
 static int quo(BIG_XXX n,BIG_XXX m)
 {
-	int sh;
-	chunk num,den;
-	int hb=CHUNK/2;
-	if (TBITS_YYY<hb)
-	{
-		sh=hb-TBITS_YYY;
-		num=(n[NLEN_XXX-1]<<sh)|(n[NLEN_XXX-2]>>(BASEBITS_XXX-sh));
-		den=(m[NLEN_XXX-1]<<sh)|(m[NLEN_XXX-2]>>(BASEBITS_XXX-sh));
-	}
-	else
-	{
-		num=n[NLEN_XXX-1];
-		den=m[NLEN_XXX-1];
-	}
-	return (int)(num/(den+1));
+    int sh;
+    chunk num,den;
+    int hb=CHUNK/2;
+    if (TBITS_YYY<hb)
+    {
+        sh=hb-TBITS_YYY;
+        num=(n[NLEN_XXX-1]<<sh)|(n[NLEN_XXX-2]>>(BASEBITS_XXX-sh));
+        den=(m[NLEN_XXX-1]<<sh)|(m[NLEN_XXX-2]>>(BASEBITS_XXX-sh));
+    }
+    else
+    {
+        num=n[NLEN_XXX-1];
+        den=m[NLEN_XXX-1];
+    }
+    return (int)(num/(den+1));
 }
 
 /* SU= 48 */
@@ -449,33 +449,33 @@
 void FP_YYY_reduce(FP_YYY *a)
 {
     BIG_XXX m,r;
-	int sr,sb,q;
-	chunk carry;
+    int sr,sb,q;
+    chunk carry;
 
     BIG_XXX_rcopy(m,Modulus_YYY);
 
-	BIG_XXX_norm(a->g);
+    BIG_XXX_norm(a->g);
 
-	if (a->XES>16)
-	{
-		q=quo(a->g,m);
-		carry=BIG_XXX_pmul(r,m,q);
-		r[NLEN_XXX-1]+=(carry<<BASEBITS_XXX); // correction - put any carry out back in again
-		BIG_XXX_sub(a->g,a->g,r);
-		BIG_XXX_norm(a->g);
-		sb=2;
-	}
-	else sb=logb2(a->XES-1);  // sb does not depend on the actual data
+    if (a->XES>16)
+    {
+        q=quo(a->g,m);
+        carry=BIG_XXX_pmul(r,m,q);
+        r[NLEN_XXX-1]+=(carry<<BASEBITS_XXX); // correction - put any carry out back in again
+        BIG_XXX_sub(a->g,a->g,r);
+        BIG_XXX_norm(a->g);
+        sb=2;
+    }
+    else sb=logb2(a->XES-1);  // sb does not depend on the actual data
 
-	BIG_XXX_fshl(m,sb);
+    BIG_XXX_fshl(m,sb);
 
-	while (sb>0)
-	{
+    while (sb>0)
+    {
 // constant time...
-		sr=BIG_XXX_ssn(r,a->g,m);  // optimized combined shift, subtract and norm
-		BIG_XXX_cmove(a->g,r,1-sr);
-		sb--;
-	}
+        sr=BIG_XXX_ssn(r,a->g,m);  // optimized combined shift, subtract and norm
+        BIG_XXX_cmove(a->g,r,1-sr);
+        sb--;
+    }
 
     //BIG_XXX_mod(a->g,m);
     a->XES=1;
@@ -538,134 +538,148 @@
 
 static void FP_YYY_fpow(FP_YYY *r,FP_YYY *x)
 {
-	int i,j,k,bw,w,c,nw,lo,m,n;
-	FP_YYY xp[11],t,key;
-	const int ac[]={1,2,3,6,12,15,30,60,120,240,255};
+    int i,j,k,bw,w,c,nw,lo,m,n;
+    FP_YYY xp[11],t,key;
+    const int ac[]= {1,2,3,6,12,15,30,60,120,240,255};
 // phase 1
-	FP_YYY_copy(&xp[0],x);	// 1 
-	FP_YYY_sqr(&xp[1],x); // 2
-	FP_YYY_mul(&xp[2],&xp[1],x);  //3
-	FP_YYY_sqr(&xp[3],&xp[2]);  // 6 
-	FP_YYY_sqr(&xp[4],&xp[3]); // 12
-	FP_YYY_mul(&xp[5],&xp[4],&xp[2]); // 15
-	FP_YYY_sqr(&xp[6],&xp[5]); // 30
-	FP_YYY_sqr(&xp[7],&xp[6]); // 60
-	FP_YYY_sqr(&xp[8],&xp[7]); // 120
-	FP_YYY_sqr(&xp[9],&xp[8]); // 240
-	FP_YYY_mul(&xp[10],&xp[9],&xp[5]); // 255
+    FP_YYY_copy(&xp[0],x);	// 1
+    FP_YYY_sqr(&xp[1],x); // 2
+    FP_YYY_mul(&xp[2],&xp[1],x);  //3
+    FP_YYY_sqr(&xp[3],&xp[2]);  // 6
+    FP_YYY_sqr(&xp[4],&xp[3]); // 12
+    FP_YYY_mul(&xp[5],&xp[4],&xp[2]); // 15
+    FP_YYY_sqr(&xp[6],&xp[5]); // 30
+    FP_YYY_sqr(&xp[7],&xp[6]); // 60
+    FP_YYY_sqr(&xp[8],&xp[7]); // 120
+    FP_YYY_sqr(&xp[9],&xp[8]); // 240
+    FP_YYY_mul(&xp[10],&xp[9],&xp[5]); // 255
 
-#if MODTYPE_YYY==PSEUDO_MERSENNE 
-	n=MODBITS_YYY;
+#if MODTYPE_YYY==PSEUDO_MERSENNE
+    n=MODBITS_YYY;
 #endif
 #if MODTYPE_YYY==GENERALISED_MERSENNE  // Goldilocks ONLY
-	n=MODBITS_YYY/2;
+    n=MODBITS_YYY/2;
 #endif
 
-	if (MOD8_YYY==5)
+    if (MOD8_YYY==5)
     {
-		n-=3;
-		c=(MConst_YYY+5)/8;
-	} else {
-		n-=2;
-		c=(MConst_YYY+3)/4;
-	}
+        n-=3;
+        c=(MConst_YYY+5)/8;
+    }
+    else
+    {
+        n-=2;
+        c=(MConst_YYY+3)/4;
+    }
 
-	bw=0; w=1; while (w<c) {w*=2; bw+=1;}
-	k=w-c;
+    bw=0;
+    w=1;
+    while (w<c)
+    {
+        w*=2;
+        bw+=1;
+    }
+    k=w-c;
 
-	if (k!=0)
-	{
-		i=10; while (ac[i]>k) i--;
-		FP_YYY_copy(&key,&xp[i]); 
-		k-=ac[i];
-	}
-	while (k!=0)
-	{
-		i--;
-		if (ac[i]>k) continue;
-		FP_YYY_mul(&key,&key,&xp[i]);
-		k-=ac[i]; 
-	}
+    if (k!=0)
+    {
+        i=10;
+        while (ac[i]>k) i--;
+        FP_YYY_copy(&key,&xp[i]);
+        k-=ac[i];
+    }
+    while (k!=0)
+    {
+        i--;
+        if (ac[i]>k) continue;
+        FP_YYY_mul(&key,&key,&xp[i]);
+        k-=ac[i];
+    }
 
-// phase 2 
-	FP_YYY_copy(&xp[1],&xp[2]);
-	FP_YYY_copy(&xp[2],&xp[5]);
-	FP_YYY_copy(&xp[3],&xp[10]);
+// phase 2
+    FP_YYY_copy(&xp[1],&xp[2]);
+    FP_YYY_copy(&xp[2],&xp[5]);
+    FP_YYY_copy(&xp[3],&xp[10]);
 
-	j=3; m=8;
-	nw=n-bw;
-	while (2*m<nw)
-	{
-		FP_YYY_copy(&t,&xp[j++]);
-		for (i=0;i<m;i++)
-			FP_YYY_sqr(&t,&t); 
-		FP_YYY_mul(&xp[j],&xp[j-1],&t); 
-		m*=2;
-	}
+    j=3;
+    m=8;
+    nw=n-bw;
+    while (2*m<nw)
+    {
+        FP_YYY_copy(&t,&xp[j++]);
+        for (i=0; i<m; i++)
+            FP_YYY_sqr(&t,&t);
+        FP_YYY_mul(&xp[j],&xp[j-1],&t);
+        m*=2;
+    }
 
-	lo=nw-m;
-	FP_YYY_copy(r,&xp[j]);
+    lo=nw-m;
+    FP_YYY_copy(r,&xp[j]);
 
-	while (lo!=0)
-	{
-		m/=2; j--;
-		if (lo<m) continue;
-		lo-=m;
-		FP_YYY_copy(&t,r);
-		for (i=0;i<m;i++)
-			FP_YYY_sqr(&t,&t);
-		FP_YYY_mul(r,&t,&xp[j]);
-	}
+    while (lo!=0)
+    {
+        m/=2;
+        j--;
+        if (lo<m) continue;
+        lo-=m;
+        FP_YYY_copy(&t,r);
+        for (i=0; i<m; i++)
+            FP_YYY_sqr(&t,&t);
+        FP_YYY_mul(r,&t,&xp[j]);
+    }
 // phase 3
 
-	if (bw!=0)
-	{
-		for (i=0;i<bw;i++ )
-			FP_YYY_sqr(r,r);
-		FP_YYY_mul(r,r,&key);
-	}
+    if (bw!=0)
+    {
+        for (i=0; i<bw; i++ )
+            FP_YYY_sqr(r,r);
+        FP_YYY_mul(r,r,&key);
+    }
 #if MODTYPE_YYY==GENERALISED_MERSENNE  // Goldilocks ONLY
-	FP_YYY_copy(&key,r);
-	FP_YYY_sqr(&t,&key);
-	FP_YYY_mul(r,&t,x);
-	for (i=0;i<n+1;i++)
-		FP_YYY_sqr(r,r);
-	FP_YYY_mul(r,r,&key);
+    FP_YYY_copy(&key,r);
+    FP_YYY_sqr(&t,&key);
+    FP_YYY_mul(r,&t,x);
+    for (i=0; i<n+1; i++)
+        FP_YYY_sqr(r,r);
+    FP_YYY_mul(r,r,&key);
 #endif
 }
 
 void FP_YYY_inv(FP_YYY *r,FP_YYY *x)
 {
-	FP_YYY y,t;
-	FP_YYY_fpow(&y,x);
+    FP_YYY y,t;
+    FP_YYY_fpow(&y,x);
     if (MOD8_YYY==5)
-    { // r=x^3.y^8
-		FP_YYY_sqr(&t,x);
-		FP_YYY_mul(&t,&t,x);
-		FP_YYY_sqr(&y,&y);
-		FP_YYY_sqr(&y,&y);
-		FP_YYY_sqr(&y,&y);
-		FP_YYY_mul(r,&t,&y);
-	} else {
-		FP_YYY_sqr(&y,&y);
-		FP_YYY_sqr(&y,&y);
-		FP_YYY_mul(r,&y,x);
-	}
+    {
+        // r=x^3.y^8
+        FP_YYY_sqr(&t,x);
+        FP_YYY_mul(&t,&t,x);
+        FP_YYY_sqr(&y,&y);
+        FP_YYY_sqr(&y,&y);
+        FP_YYY_sqr(&y,&y);
+        FP_YYY_mul(r,&t,&y);
+    }
+    else
+    {
+        FP_YYY_sqr(&y,&y);
+        FP_YYY_sqr(&y,&y);
+        FP_YYY_mul(r,&y,x);
+    }
 }
 
 #else
 
 void FP_YYY_pow(FP_YYY *r,FP_YYY *a,BIG_XXX b)
 {
-	sign8 w[1+(NLEN_XXX*BASEBITS_XXX+3)/4];
-	FP_YYY tb[16];
-	BIG_XXX t;
-	int i,nb;
+    sign8 w[1+(NLEN_XXX*BASEBITS_XXX+3)/4];
+    FP_YYY tb[16];
+    BIG_XXX t;
+    int i,nb;
 
-	FP_YYY_norm(a);
+    FP_YYY_norm(a);
     BIG_XXX_norm(b);
-	BIG_XXX_copy(t,b);
-	nb=1+(BIG_XXX_nbits(t)+3)/4;
+    BIG_XXX_copy(t,b);
+    nb=1+(BIG_XXX_nbits(t)+3)/4;
     /* convert exponent to 4-bit window */
     for (i=0; i<nb; i++)
     {
@@ -673,22 +687,22 @@
         BIG_XXX_dec(t,w[i]);
         BIG_XXX_norm(t);
         BIG_XXX_fshr(t,4);
-    }	
+    }
 
-	FP_YYY_one(&tb[0]);
-	FP_YYY_copy(&tb[1],a);
-	for (i=2;i<16;i++)
-		FP_YYY_mul(&tb[i],&tb[i-1],a);
-	
-	FP_YYY_copy(r,&tb[w[nb-1]]);
+    FP_YYY_one(&tb[0]);
+    FP_YYY_copy(&tb[1],a);
+    for (i=2; i<16; i++)
+        FP_YYY_mul(&tb[i],&tb[i-1],a);
+
+    FP_YYY_copy(r,&tb[w[nb-1]]);
     for (i=nb-2; i>=0; i--)
     {
-		FP_YYY_sqr(r,r);
-		FP_YYY_sqr(r,r);
-		FP_YYY_sqr(r,r);
-		FP_YYY_sqr(r,r);
-		FP_YYY_mul(r,r,&tb[w[i]]);
-	}
+        FP_YYY_sqr(r,r);
+        FP_YYY_sqr(r,r);
+        FP_YYY_sqr(r,r);
+        FP_YYY_sqr(r,r);
+        FP_YYY_mul(r,r,&tb[w[i]]);
+    }
     FP_YYY_reduce(r);
 }
 
@@ -696,11 +710,11 @@
 void FP_YYY_inv(FP_YYY *w,FP_YYY *x)
 {
 
-	BIG_XXX m2;
-	BIG_XXX_rcopy(m2,Modulus_YYY);
-	BIG_XXX_dec(m2,2);
-	BIG_XXX_norm(m2);
-	FP_YYY_pow(w,x,m2);
+    BIG_XXX m2;
+    BIG_XXX_rcopy(m2,Modulus_YYY);
+    BIG_XXX_dec(m2,2);
+    BIG_XXX_norm(m2);
+    FP_YYY_pow(w,x,m2);
 }
 #endif
 
@@ -743,25 +757,25 @@
         FP_YYY_copy(&i,a); // i=x
         BIG_XXX_fshl(i.g,1); // i=2x
 #if MODTYPE_YYY == PSEUDO_MERSENNE   || MODTYPE_YYY==GENERALISED_MERSENNE
-		FP_YYY_fpow(&v,&i);
+        FP_YYY_fpow(&v,&i);
 #else
         BIG_XXX_dec(b,5);
         BIG_XXX_norm(b);
-        BIG_XXX_fshr(b,3); // (p-5)/8 
+        BIG_XXX_fshr(b,3); // (p-5)/8
         FP_YYY_pow(&v,&i,b); // v=(2x)^(p-5)/8
 #endif
         FP_YYY_mul(&i,&i,&v); // i=(2x)^(p+3)/8
         FP_YYY_mul(&i,&i,&v); // i=(2x)^(p-1)/4
         BIG_XXX_dec(i.g,1);  // i=(2x)^(p-1)/4 - 1
-        FP_YYY_mul(r,a,&v);  
+        FP_YYY_mul(r,a,&v);
         FP_YYY_mul(r,r,&i);
         FP_YYY_reduce(r);
     }
     if (MOD8_YYY==3 || MOD8_YYY==7)
     {
 #if MODTYPE_YYY == PSEUDO_MERSENNE   || MODTYPE_YYY==GENERALISED_MERSENNE
-		FP_YYY_fpow(r,a);
-		FP_YYY_mul(r,r,a);
+        FP_YYY_fpow(r,a);
+        FP_YYY_mul(r,r,a);
 #else
         BIG_XXX_inc(b,1);
         BIG_XXX_norm(b);
diff --git a/version3/c/fp.h b/version3/c/fp.h
index a7883f2..245e6e5 100644
--- a/version3/c/fp.h
+++ b/version3/c/fp.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file fp.h
+ * @file fp_YYY.h
  * @author Mike Scott
  * @brief FP Header File
  *
diff --git a/version3/c/fp12.c b/version3/c/fp12.c
index 726e9ec..04d39ac 100644
--- a/version3/c/fp12.c
+++ b/version3/c/fp12.c
@@ -82,7 +82,7 @@
     FP4_YYY_copy(&(w->a),&(x->a));
     FP4_YYY_copy(&(w->b),&(x->b));
     FP4_YYY_copy(&(w->c),&(x->c));
-	w->type=x->type;
+    w->type=x->type;
 }
 
 /* FP12 w=1 */
@@ -92,7 +92,7 @@
     FP4_YYY_one(&(w->a));
     FP4_YYY_zero(&(w->b));
     FP4_YYY_zero(&(w->c));
-	w->type=FP_UNITY;
+    w->type=AMCL_FP_UNITY;
 }
 
 void FP12_YYY_zero(FP12_YYY *w)
@@ -100,7 +100,7 @@
     FP4_YYY_zero(&(w->a));
     FP4_YYY_zero(&(w->b));
     FP4_YYY_zero(&(w->c));
-	w->type=FP_ZERO;
+    w->type=AMCL_FP_ZERO;
 }
 
 /* return 1 if x==y, else 0 */
@@ -129,7 +129,7 @@
     FP4_YYY_copy(&(w->a),a);
     FP4_YYY_zero(&(w->b));
     FP4_YYY_zero(&(w->c));
-	w->type=FP_SPARSER;
+    w->type=AMCL_AMCL_FP_SPARSER;
 }
 
 /* Create FP12 from 3 FP4's */
@@ -139,7 +139,7 @@
     FP4_YYY_copy(&(w->a),a);
     FP4_YYY_copy(&(w->b),b);
     FP4_YYY_copy(&(w->c),c);
-	w->type=FP_DENSE;
+    w->type=AMCL_FP_DENSE;
 }
 
 /* Granger-Scott Unitary Squaring. This does not benefit from lazy reduction */
@@ -180,7 +180,7 @@
     FP4_YYY_add(&(w->b),&B,&(w->b));
     FP4_YYY_add(&(w->c),&C,&(w->c));
 
-	w->type=FP_DENSE;
+    w->type=AMCL_FP_DENSE;
     FP12_YYY_reduce(w);	    /* reduce here as in pow function repeated squarings would trigger multiple reductions */
 }
 
@@ -192,11 +192,11 @@
 
     FP4_YYY A,B,C,D;
 
-	if (x->type<=FP_UNITY)
-	{
-		FP12_YYY_copy(w,x);
-		return;
-	}
+    if (x->type<=AMCL_FP_UNITY)
+    {
+        FP12_YYY_copy(w,x);
+        return;
+    }
 
     FP4_YYY_sqr(&A,&(x->a));
     FP4_YYY_mul(&B,&(x->b),&(x->c));
@@ -229,10 +229,10 @@
     FP4_YYY_add(&(w->b),&C,&D);
     FP4_YYY_add(&(w->c),&(w->c),&A);
 
-	if (x->type==FP_SPARSER)
-		w->type=FP_SPARSE;
-	else
-		w->type=FP_DENSE;
+    if (x->type==AMCL_AMCL_FP_SPARSER)
+        w->type=AMCL_FP_SPARSE;
+    else
+        w->type=AMCL_FP_DENSE;
 
     FP12_YYY_norm(w);
 }
@@ -292,7 +292,7 @@
     FP4_YYY_times_i(&z3);
     FP4_YYY_add(&(w->a),&z0,&z3);
 
-	w->type=FP_DENSE;
+    w->type=AMCL_FP_DENSE;
     FP12_YYY_norm(w);
 }
 
@@ -301,278 +301,280 @@
 /* Usually w is denser than y */
 void FP12_YYY_ssmul(FP12_YYY *w,FP12_YYY *y)
 {
-	FP4_YYY z0,z1,z2,z3,t0,t1;
-	if (w->type==FP_UNITY)
-	{
-		FP12_YYY_copy(w,y);
-		return;
-	}
-	if (y->type==FP_UNITY)
-		return;
+    FP4_YYY z0,z1,z2,z3,t0,t1;
+    if (w->type==AMCL_FP_UNITY)
+    {
+        FP12_YYY_copy(w,y);
+        return;
+    }
+    if (y->type==AMCL_FP_UNITY)
+        return;
 
-	if (y->type >= FP_SPARSE)
-	{
-		FP4_YYY_mul(&z0,&(w->a),&(y->a));  // xa.ya   always 11x11
+    if (y->type >= AMCL_FP_SPARSE)
+    {
+        FP4_YYY_mul(&z0,&(w->a),&(y->a));  // xa.ya   always 11x11
 
 #if SEXTIC_TWIST_ZZZ == M_TYPE
-		if (y->type==FP_SPARSE || w->type==FP_SPARSE)
-		{
-			FP2_YYY_mul(&z2.b,&(w->b).b,&(y->b).b);
-			FP2_YYY_zero(&z2.a);
-			if (y->type!=FP_SPARSE)
-				FP2_YYY_mul(&z2.a,&(w->b).b,&(y->b).a);
-			if (w->type!=FP_SPARSE)
-				FP2_YYY_mul(&z2.a,&(w->b).a,&(y->b).b);
-			FP4_YYY_times_i(&z2);
-		}
-		else
+        if (y->type==AMCL_FP_SPARSE || w->type==AMCL_FP_SPARSE)
+        {
+            FP2_YYY_mul(&z2.b,&(w->b).b,&(y->b).b);
+            FP2_YYY_zero(&z2.a);
+            if (y->type!=AMCL_FP_SPARSE)
+                FP2_YYY_mul(&z2.a,&(w->b).b,&(y->b).a);
+            if (w->type!=AMCL_FP_SPARSE)
+                FP2_YYY_mul(&z2.a,&(w->b).a,&(y->b).b);
+            FP4_YYY_times_i(&z2);
+        }
+        else
 #endif
-			FP4_YYY_mul(&z2,&(w->b),&(y->b));  // xb.yb  could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11 
+            FP4_YYY_mul(&z2,&(w->b),&(y->b));  // xb.yb  could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11
 
-		FP4_YYY_add(&t0,&(w->a),&(w->b));  // (xa+xb)
-		FP4_YYY_add(&t1,&(y->a),&(y->b));  // (ya+yb)
+        FP4_YYY_add(&t0,&(w->a),&(w->b));  // (xa+xb)
+        FP4_YYY_add(&t1,&(y->a),&(y->b));  // (ya+yb)
 
-		FP4_YYY_norm(&t0);
-		FP4_YYY_norm(&t1);
+        FP4_YYY_norm(&t0);
+        FP4_YYY_norm(&t1);
 
-		FP4_YYY_mul(&z1,&t0,&t1); // (xa+xb)(ya+yb)  always 11x11
-		FP4_YYY_add(&t0,&(w->b),&(w->c));  // (xb+xc)
-		FP4_YYY_add(&t1,&(y->b),&(y->c));  // (yb+yc)
+        FP4_YYY_mul(&z1,&t0,&t1); // (xa+xb)(ya+yb)  always 11x11
+        FP4_YYY_add(&t0,&(w->b),&(w->c));  // (xb+xc)
+        FP4_YYY_add(&t1,&(y->b),&(y->c));  // (yb+yc)
 
-		FP4_YYY_norm(&t0);
-		FP4_YYY_norm(&t1);
+        FP4_YYY_norm(&t0);
+        FP4_YYY_norm(&t1);
 
-		FP4_YYY_mul(&z3,&t0,&t1);	// (xb+xc)(yb+yc)   could be anything...
-		FP4_YYY_neg(&t0,&z0);		// -(xa.ya)
-		FP4_YYY_neg(&t1,&z2);		// -(xb.yb)
+        FP4_YYY_mul(&z3,&t0,&t1);	// (xb+xc)(yb+yc)   could be anything...
+        FP4_YYY_neg(&t0,&z0);		// -(xa.ya)
+        FP4_YYY_neg(&t1,&z2);		// -(xb.yb)
 
-		FP4_YYY_add(&z1,&z1,&t0);  
-		FP4_YYY_add(&(w->b),&z1,&t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb)						= xa.yb + xb.ya
+        FP4_YYY_add(&z1,&z1,&t0);
+        FP4_YYY_add(&(w->b),&z1,&t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb)						= xa.yb + xb.ya
 
-		FP4_YYY_add(&z3,&z3,&t1);        // (xb+xc)(yb+yc) -(xb.yb)
-		FP4_YYY_add(&z2,&z2,&t0);        // (xb.yb) - (xa.ya)
+        FP4_YYY_add(&z3,&z3,&t1);        // (xb+xc)(yb+yc) -(xb.yb)
+        FP4_YYY_add(&z2,&z2,&t0);        // (xb.yb) - (xa.ya)
 
-		FP4_YYY_add(&t0,&(w->a),&(w->c));  // (xa+xc)
-		FP4_YYY_add(&t1,&(y->a),&(y->c));  // (ya+yc)
+        FP4_YYY_add(&t0,&(w->a),&(w->c));  // (xa+xc)
+        FP4_YYY_add(&t1,&(y->a),&(y->c));  // (ya+yc)
 
-		FP4_YYY_norm(&t0);
-		FP4_YYY_norm(&t1);
+        FP4_YYY_norm(&t0);
+        FP4_YYY_norm(&t1);
 
-		FP4_YYY_mul(&t0,&t1,&t0);	// (xa+xc)(ya+yc)    always 11x11
-		FP4_YYY_add(&z2,&z2,&t0);	// (xb.yb) - (xa.ya) + (xa+xc)(ya+yc)
+        FP4_YYY_mul(&t0,&t1,&t0);	// (xa+xc)(ya+yc)    always 11x11
+        FP4_YYY_add(&z2,&z2,&t0);	// (xb.yb) - (xa.ya) + (xa+xc)(ya+yc)
 
 #if SEXTIC_TWIST_ZZZ == D_TYPE
-		if (y->type==FP_SPARSE || w->type==FP_SPARSE)
-		{
-			FP2_YYY_mul(&t0.a,&(w->c).a,&(y->c).a);
-			FP2_YYY_zero(&t0.b);
-			if (y->type!=FP_SPARSE)
-				FP2_YYY_mul(&t0.b,&(w->c).a,&(y->c).b);
-			if (w->type!=FP_SPARSE)
-				FP2_YYY_mul(&t0.b,&(w->c).b,&(y->c).a);
-		}
-		else
+        if (y->type==AMCL_FP_SPARSE || w->type==AMCL_FP_SPARSE)
+        {
+            FP2_YYY_mul(&t0.a,&(w->c).a,&(y->c).a);
+            FP2_YYY_zero(&t0.b);
+            if (y->type!=AMCL_FP_SPARSE)
+                FP2_YYY_mul(&t0.b,&(w->c).a,&(y->c).b);
+            if (w->type!=AMCL_FP_SPARSE)
+                FP2_YYY_mul(&t0.b,&(w->c).b,&(y->c).a);
+        }
+        else
 #endif
-			FP4_YYY_mul(&t0,&(w->c),&(y->c)); // (xc.yc)  could be anything
-			
-		FP4_YYY_neg(&t1,&t0);			  // -(xc.yc) 
+            FP4_YYY_mul(&t0,&(w->c),&(y->c)); // (xc.yc)  could be anything
 
-		FP4_YYY_add(&(w->c),&z2,&t1);		// wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc)	=  xb.yb + xc.ya + xa.yc
-		FP4_YYY_add(&z3,&z3,&t1);			// (xb+xc)(yb+yc) -(xb.yb) - (xc.yc)					=  xb.yc + xc.yb
-		FP4_YYY_times_i(&t0);				// i.(xc.yc)
-		FP4_YYY_add(&(w->b),&(w->b),&t0);   // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc)
-		FP4_YYY_norm(&z3);
-		FP4_YYY_times_i(&z3);				// i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)]					= i(xb.yc + xc.yb)
-		FP4_YYY_add(&(w->a),&z0,&z3);		// wa = xa.ya + i(xb.yc + xc.yb)
-	} else {
-		if (w->type==FP_SPARSER)
-		{
-			FP12_YYY_smul(w,y);
-			return;
-		}
- // dense by sparser - 13m 
+        FP4_YYY_neg(&t1,&t0);			  // -(xc.yc)
+
+        FP4_YYY_add(&(w->c),&z2,&t1);		// wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc)	=  xb.yb + xc.ya + xa.yc
+        FP4_YYY_add(&z3,&z3,&t1);			// (xb+xc)(yb+yc) -(xb.yb) - (xc.yc)					=  xb.yc + xc.yb
+        FP4_YYY_times_i(&t0);				// i.(xc.yc)
+        FP4_YYY_add(&(w->b),&(w->b),&t0);   // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc)
+        FP4_YYY_norm(&z3);
+        FP4_YYY_times_i(&z3);				// i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)]					= i(xb.yc + xc.yb)
+        FP4_YYY_add(&(w->a),&z0,&z3);		// wa = xa.ya + i(xb.yc + xc.yb)
+    }
+    else
+    {
+        if (w->type==AMCL_AMCL_FP_SPARSER)
+        {
+            FP12_YYY_smul(w,y);
+            return;
+        }
+// dense by sparser - 13m
 #if SEXTIC_TWIST_ZZZ == D_TYPE
-		FP4_YYY_copy(&z3,&(w->b));
-		FP4_YYY_mul(&z0,&(w->a),&(y->a));
+        FP4_YYY_copy(&z3,&(w->b));
+        FP4_YYY_mul(&z0,&(w->a),&(y->a));
 
-		FP4_YYY_pmul(&z2,&(w->b),&(y->b).a);
-		FP4_YYY_add(&(w->b),&(w->a),&(w->b));
-		FP4_YYY_copy(&t1,&(y->a));
-		FP2_YYY_add(&t1.a,&t1.a,&(y->b).a);
+        FP4_YYY_pmul(&z2,&(w->b),&(y->b).a);
+        FP4_YYY_add(&(w->b),&(w->a),&(w->b));
+        FP4_YYY_copy(&t1,&(y->a));
+        FP2_YYY_add(&t1.a,&t1.a,&(y->b).a);
 
-		FP4_YYY_norm(&t1);
-		FP4_YYY_norm(&(w->b));
+        FP4_YYY_norm(&t1);
+        FP4_YYY_norm(&(w->b));
 
-		FP4_YYY_mul(&(w->b),&(w->b),&t1);
-		FP4_YYY_add(&z3,&z3,&(w->c));
-		FP4_YYY_norm(&z3);
-		FP4_YYY_pmul(&z3,&z3,&(y->b).a);
-		FP4_YYY_neg(&t0,&z0);
-		FP4_YYY_neg(&t1,&z2);
+        FP4_YYY_mul(&(w->b),&(w->b),&t1);
+        FP4_YYY_add(&z3,&z3,&(w->c));
+        FP4_YYY_norm(&z3);
+        FP4_YYY_pmul(&z3,&z3,&(y->b).a);
+        FP4_YYY_neg(&t0,&z0);
+        FP4_YYY_neg(&t1,&z2);
 
-		FP4_YYY_add(&(w->b),&(w->b),&t0);   // z1=z1-z0
-		FP4_YYY_add(&(w->b),&(w->b),&t1);   // z1=z1-z2
+        FP4_YYY_add(&(w->b),&(w->b),&t0);   // z1=z1-z0
+        FP4_YYY_add(&(w->b),&(w->b),&t1);   // z1=z1-z2
 
-		FP4_YYY_add(&z3,&z3,&t1);        // z3=z3-z2
-		FP4_YYY_add(&z2,&z2,&t0);        // z2=z2-z0
+        FP4_YYY_add(&z3,&z3,&t1);        // z3=z3-z2
+        FP4_YYY_add(&z2,&z2,&t0);        // z2=z2-z0
 
-		FP4_YYY_add(&t0,&(w->a),&(w->c));
-		FP4_YYY_norm(&t0);
-		FP4_YYY_norm(&z3);
+        FP4_YYY_add(&t0,&(w->a),&(w->c));
+        FP4_YYY_norm(&t0);
+        FP4_YYY_norm(&z3);
 
-		FP4_YYY_mul(&t0,&(y->a),&t0);
-		FP4_YYY_add(&(w->c),&z2,&t0);
+        FP4_YYY_mul(&t0,&(y->a),&t0);
+        FP4_YYY_add(&(w->c),&z2,&t0);
 
-		FP4_YYY_times_i(&z3);
-		FP4_YYY_add(&(w->a),&z0,&z3);
+        FP4_YYY_times_i(&z3);
+        FP4_YYY_add(&(w->a),&z0,&z3);
 #endif
 #if SEXTIC_TWIST_ZZZ == M_TYPE
-		FP4_YYY_mul(&z0,&(w->a),&(y->a));
-		FP4_YYY_add(&t0,&(w->a),&(w->b));
-		FP4_YYY_norm(&t0);
+        FP4_YYY_mul(&z0,&(w->a),&(y->a));
+        FP4_YYY_add(&t0,&(w->a),&(w->b));
+        FP4_YYY_norm(&t0);
 
-		FP4_YYY_mul(&z1,&t0,&(y->a));
-		FP4_YYY_add(&t0,&(w->b),&(w->c));
-		FP4_YYY_norm(&t0);
+        FP4_YYY_mul(&z1,&t0,&(y->a));
+        FP4_YYY_add(&t0,&(w->b),&(w->c));
+        FP4_YYY_norm(&t0);
 
-		FP4_YYY_pmul(&z3,&t0,&(y->c).b);
-		FP4_YYY_times_i(&z3);
+        FP4_YYY_pmul(&z3,&t0,&(y->c).b);
+        FP4_YYY_times_i(&z3);
 
-		FP4_YYY_neg(&t0,&z0);
-		FP4_YYY_add(&z1,&z1,&t0);   // z1=z1-z0
+        FP4_YYY_neg(&t0,&z0);
+        FP4_YYY_add(&z1,&z1,&t0);   // z1=z1-z0
 
-		FP4_YYY_copy(&(w->b),&z1);
-		FP4_YYY_copy(&z2,&t0);
+        FP4_YYY_copy(&(w->b),&z1);
+        FP4_YYY_copy(&z2,&t0);
 
-		FP4_YYY_add(&t0,&(w->a),&(w->c));
-		FP4_YYY_add(&t1,&(y->a),&(y->c));
+        FP4_YYY_add(&t0,&(w->a),&(w->c));
+        FP4_YYY_add(&t1,&(y->a),&(y->c));
 
-		FP4_YYY_norm(&t0);
-		FP4_YYY_norm(&t1);
+        FP4_YYY_norm(&t0);
+        FP4_YYY_norm(&t1);
 
-		FP4_YYY_mul(&t0,&t1,&t0);
-		FP4_YYY_add(&z2,&z2,&t0);
+        FP4_YYY_mul(&t0,&t1,&t0);
+        FP4_YYY_add(&z2,&z2,&t0);
 
-		FP4_YYY_pmul(&t0,&(w->c),&(y->c).b);
-		FP4_YYY_times_i(&t0);
-		FP4_YYY_neg(&t1,&t0);
-		FP4_YYY_times_i(&t0);
+        FP4_YYY_pmul(&t0,&(w->c),&(y->c).b);
+        FP4_YYY_times_i(&t0);
+        FP4_YYY_neg(&t1,&t0);
+        FP4_YYY_times_i(&t0);
 
-		FP4_YYY_add(&(w->c),&z2,&t1);
-		FP4_YYY_add(&z3,&z3,&t1);
+        FP4_YYY_add(&(w->c),&z2,&t1);
+        FP4_YYY_add(&z3,&z3,&t1);
 
-		FP4_YYY_add(&(w->b),&(w->b),&t0);
-		FP4_YYY_norm(&z3);
-		FP4_YYY_times_i(&z3);
-		FP4_YYY_add(&(w->a),&z0,&z3);
+        FP4_YYY_add(&(w->b),&(w->b),&t0);
+        FP4_YYY_norm(&z3);
+        FP4_YYY_times_i(&z3);
+        FP4_YYY_add(&(w->a),&z0,&z3);
 
 #endif
-	}
-	w->type=FP_DENSE;
+    }
+    w->type=AMCL_FP_DENSE;
     FP12_YYY_norm(w);
 }
 
 /* FP12 multiplication w=w*y */
 /* catering for special case that arises from special form of ATE pairing line function */
-/* w and y are both sparser line functions - cost = 6m */ 
+/* w and y are both sparser line functions - cost = 6m */
 void FP12_YYY_smul(FP12_YYY *w,FP12_YYY *y)
 {
-	FP2_YYY w1,w2,w3,ta,tb,tc,td,te,t;
+    FP2_YYY w1,w2,w3,ta,tb,tc,td,te,t;
 
 //	if (type==D_TYPE)
-//	{ 
+//	{
 #if SEXTIC_TWIST_ZZZ == D_TYPE
-	FP2_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
-	FP2_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
-	FP2_YYY_mul(&w3,&(w->b).a,&(y->b).a); // C1.C2
+    FP2_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
+    FP2_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
+    FP2_YYY_mul(&w3,&(w->b).a,&(y->b).a); // C1.C2
 
-	FP2_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
-	FP2_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
-	FP2_YYY_norm(&ta);
-	FP2_YYY_norm(&tb);
-	FP2_YYY_mul(&tc,&ta,&tb);			// (A1+B1)(A2+B2)
-	FP2_YYY_add(&t,&w1,&w2);
-	FP2_YYY_neg(&t,&t);
-	FP2_YYY_add(&tc,&tc,&t);			// (A1+B1)(A2+B2)-A1.A2-B1*B2 =  (A1.B2+A2.B1)		
-				
-	FP2_YYY_add(&ta,&(w->a).a,&(w->b).a); // A1+C1
-	FP2_YYY_add(&tb,&(y->a).a,&(y->b).a); // A2+C2
-	FP2_YYY_norm(&ta);
-	FP2_YYY_norm(&tb);
-	FP2_YYY_mul(&td,&ta,&tb);			// (A1+C1)(A2+C2)
-	FP2_YYY_add(&t,&w1,&w3);
-	FP2_YYY_neg(&t,&t);
-	FP2_YYY_add(&td,&td,&t);			// (A1+C1)(A2+C2)-A1.A2-C1*C2 =  (A1.C2+A2.C1)		
+    FP2_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
+    FP2_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
+    FP2_YYY_norm(&ta);
+    FP2_YYY_norm(&tb);
+    FP2_YYY_mul(&tc,&ta,&tb);			// (A1+B1)(A2+B2)
+    FP2_YYY_add(&t,&w1,&w2);
+    FP2_YYY_neg(&t,&t);
+    FP2_YYY_add(&tc,&tc,&t);			// (A1+B1)(A2+B2)-A1.A2-B1*B2 =  (A1.B2+A2.B1)
 
-	FP2_YYY_add(&ta,&(w->a).b,&(w->b).a); // B1+C1
-	FP2_YYY_add(&tb,&(y->a).b,&(y->b).a); // B2+C2
-	FP2_YYY_norm(&ta);
-	FP2_YYY_norm(&tb);
-	FP2_YYY_mul(&te,&ta,&tb);			// (B1+C1)(B2+C2)
-	FP2_YYY_add(&t,&w2,&w3);
-	FP2_YYY_neg(&t,&t);
-	FP2_YYY_add(&te,&te,&t);			// (B1+C1)(B2+C2)-B1.B2-C1*C2 =  (B1.C2+B2.C1)		
+    FP2_YYY_add(&ta,&(w->a).a,&(w->b).a); // A1+C1
+    FP2_YYY_add(&tb,&(y->a).a,&(y->b).a); // A2+C2
+    FP2_YYY_norm(&ta);
+    FP2_YYY_norm(&tb);
+    FP2_YYY_mul(&td,&ta,&tb);			// (A1+C1)(A2+C2)
+    FP2_YYY_add(&t,&w1,&w3);
+    FP2_YYY_neg(&t,&t);
+    FP2_YYY_add(&td,&td,&t);			// (A1+C1)(A2+C2)-A1.A2-C1*C2 =  (A1.C2+A2.C1)
 
-	FP2_YYY_mul_ip(&w2);
-	FP2_YYY_add(&w1,&w1,&w2);
-	FP4_YYY_from_FP2s(&(w->a),&w1,&tc);
-	FP4_YYY_from_FP2s(&(w->b),&td,&te); // only norm these 2
-	FP4_YYY_from_FP2(&(w->c),&w3);
+    FP2_YYY_add(&ta,&(w->a).b,&(w->b).a); // B1+C1
+    FP2_YYY_add(&tb,&(y->a).b,&(y->b).a); // B2+C2
+    FP2_YYY_norm(&ta);
+    FP2_YYY_norm(&tb);
+    FP2_YYY_mul(&te,&ta,&tb);			// (B1+C1)(B2+C2)
+    FP2_YYY_add(&t,&w2,&w3);
+    FP2_YYY_neg(&t,&t);
+    FP2_YYY_add(&te,&te,&t);			// (B1+C1)(B2+C2)-B1.B2-C1*C2 =  (B1.C2+B2.C1)
 
-	FP4_YYY_norm(&(w->a));
-	FP4_YYY_norm(&(w->b));
+    FP2_YYY_mul_ip(&w2);
+    FP2_YYY_add(&w1,&w1,&w2);
+    FP4_YYY_from_FP2s(&(w->a),&w1,&tc);
+    FP4_YYY_from_FP2s(&(w->b),&td,&te); // only norm these 2
+    FP4_YYY_from_FP2(&(w->c),&w3);
+
+    FP4_YYY_norm(&(w->a));
+    FP4_YYY_norm(&(w->b));
 #endif
-//	} else { 
+//	} else {
 #if SEXTIC_TWIST_ZZZ == M_TYPE
-	FP2_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
-	FP2_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
-	FP2_YYY_mul(&w3,&(w->c).b,&(y->c).b); // F1.F2
+    FP2_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
+    FP2_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
+    FP2_YYY_mul(&w3,&(w->c).b,&(y->c).b); // F1.F2
 
-	FP2_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
-	FP2_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
-	FP2_YYY_norm(&ta);
-	FP2_YYY_norm(&tb);
-	FP2_YYY_mul(&tc,&ta,&tb);			// (A1+B1)(A2+B2)
-	FP2_YYY_add(&t,&w1,&w2);
-	FP2_YYY_neg(&t,&t);
-	FP2_YYY_add(&tc,&tc,&t);			// (A1+B1)(A2+B2)-A1.A2-B1*B2 =  (A1.B2+A2.B1)		
-				
-	FP2_YYY_add(&ta,&(w->a).a,&(w->c).b); // A1+F1
-	FP2_YYY_add(&tb,&(y->a).a,&(y->c).b); // A2+F2
-	FP2_YYY_norm(&ta);
-	FP2_YYY_norm(&tb);
-	FP2_YYY_mul(&td,&ta,&tb);			// (A1+F1)(A2+F2)
-	FP2_YYY_add(&t,&w1,&w3);
-	FP2_YYY_neg(&t,&t);
-	FP2_YYY_add(&td,&td,&t);			// (A1+F1)(A2+F2)-A1.A2-F1*F2 =  (A1.F2+A2.F1)		
+    FP2_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
+    FP2_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
+    FP2_YYY_norm(&ta);
+    FP2_YYY_norm(&tb);
+    FP2_YYY_mul(&tc,&ta,&tb);			// (A1+B1)(A2+B2)
+    FP2_YYY_add(&t,&w1,&w2);
+    FP2_YYY_neg(&t,&t);
+    FP2_YYY_add(&tc,&tc,&t);			// (A1+B1)(A2+B2)-A1.A2-B1*B2 =  (A1.B2+A2.B1)
 
-	FP2_YYY_add(&ta,&(w->a).b,&(w->c).b); // B1+F1
-	FP2_YYY_add(&tb,&(y->a).b,&(y->c).b); // B2+F2
-	FP2_YYY_norm(&ta);
-	FP2_YYY_norm(&tb);
-	FP2_YYY_mul(&te,&ta,&tb);			// (B1+F1)(B2+F2)
-	FP2_YYY_add(&t,&w2,&w3);
-	FP2_YYY_neg(&t,&t);
-	FP2_YYY_add(&te,&te,&t);			// (B1+F1)(B2+F2)-B1.B2-F1*F2 =  (B1.F2+B2.F1)	
+    FP2_YYY_add(&ta,&(w->a).a,&(w->c).b); // A1+F1
+    FP2_YYY_add(&tb,&(y->a).a,&(y->c).b); // A2+F2
+    FP2_YYY_norm(&ta);
+    FP2_YYY_norm(&tb);
+    FP2_YYY_mul(&td,&ta,&tb);			// (A1+F1)(A2+F2)
+    FP2_YYY_add(&t,&w1,&w3);
+    FP2_YYY_neg(&t,&t);
+    FP2_YYY_add(&td,&td,&t);			// (A1+F1)(A2+F2)-A1.A2-F1*F2 =  (A1.F2+A2.F1)
 
-	FP2_YYY_mul_ip(&w2);
-	FP2_YYY_add(&w1,&w1,&w2);
-	FP4_YYY_from_FP2s(&(w->a),&w1,&tc);
+    FP2_YYY_add(&ta,&(w->a).b,&(w->c).b); // B1+F1
+    FP2_YYY_add(&tb,&(y->a).b,&(y->c).b); // B2+F2
+    FP2_YYY_norm(&ta);
+    FP2_YYY_norm(&tb);
+    FP2_YYY_mul(&te,&ta,&tb);			// (B1+F1)(B2+F2)
+    FP2_YYY_add(&t,&w2,&w3);
+    FP2_YYY_neg(&t,&t);
+    FP2_YYY_add(&te,&te,&t);			// (B1+F1)(B2+F2)-B1.B2-F1*F2 =  (B1.F2+B2.F1)
 
-	FP2_YYY_mul_ip(&w3);
-	FP2_YYY_norm(&w3);
-	FP4_YYY_from_FP2H(&(w->b),&w3);
+    FP2_YYY_mul_ip(&w2);
+    FP2_YYY_add(&w1,&w1,&w2);
+    FP4_YYY_from_FP2s(&(w->a),&w1,&tc);
 
-	FP2_YYY_norm(&te);
-	FP2_YYY_mul_ip(&te);
-	FP4_YYY_from_FP2s(&(w->c),&te,&td);
+    FP2_YYY_mul_ip(&w3);
+    FP2_YYY_norm(&w3);
+    FP4_YYY_from_FP2H(&(w->b),&w3);
 
-	FP4_YYY_norm(&(w->a));
-	FP4_YYY_norm(&(w->c));
+    FP2_YYY_norm(&te);
+    FP2_YYY_mul_ip(&te);
+    FP4_YYY_from_FP2s(&(w->c),&te,&td);
+
+    FP4_YYY_norm(&(w->a));
+    FP4_YYY_norm(&(w->c));
 #endif
 
 //	}
-	w->type=FP_SPARSE;
+    w->type=AMCL_FP_SPARSE;
 }
 
 /* Set w=1/x */
@@ -613,7 +615,7 @@
     FP4_YYY_mul(&(w->a),&f0,&f3);
     FP4_YYY_mul(&(w->b),&f1,&f3);
     FP4_YYY_mul(&(w->c),&f2,&f3);
-	w->type=FP_DENSE;
+    w->type=AMCL_FP_DENSE;
 }
 
 /* constant time powering by small integer of max length bts */
@@ -692,13 +694,13 @@
     FP12_YYY w,sf;
     BIG_XXX b1,b3;
     int i,nb,bt;
-	BIG_XXX_copy(b1,b);
+    BIG_XXX_copy(b1,b);
     BIG_XXX_norm(b1);
     BIG_XXX_pmul(b3,b1,3);
     BIG_XXX_norm(b3);
 
-	FP12_YYY_copy(&sf,a);
-	FP12_YYY_norm(&sf);
+    FP12_YYY_copy(&sf,a);
+    FP12_YYY_norm(&sf);
     FP12_YYY_copy(&w,&sf);
 
 
@@ -729,8 +731,8 @@
 void FP12_YYY_pow4(FP12_YYY *p,FP12_YYY *q,BIG_XXX u[4])
 {
     int i,j,k,nb,pb,bt;
-	FP12_YYY g[8],r;
-	BIG_XXX t[4],mt;
+    FP12_YYY g[8],r;
+    BIG_XXX t[4],mt;
     sign8 w[NLEN_XXX*BASEBITS_XXX+1];
     sign8 s[NLEN_XXX*BASEBITS_XXX+1];
 
@@ -741,24 +743,24 @@
 // Precomputed table
     FP12_YYY_copy(&g[0],&q[0]); // q[0]
     FP12_YYY_copy(&g[1],&g[0]);
-	FP12_YYY_mul(&g[1],&q[1]);	// q[0].q[1]
+    FP12_YYY_mul(&g[1],&q[1]);	// q[0].q[1]
     FP12_YYY_copy(&g[2],&g[0]);
-	FP12_YYY_mul(&g[2],&q[2]);	// q[0].q[2]
-	FP12_YYY_copy(&g[3],&g[1]);
-	FP12_YYY_mul(&g[3],&q[2]);	// q[0].q[1].q[2]
-	FP12_YYY_copy(&g[4],&g[0]);
-	FP12_YYY_mul(&g[4],&q[3]);  // q[0].q[3]
-	FP12_YYY_copy(&g[5],&g[1]);
-	FP12_YYY_mul(&g[5],&q[3]);	// q[0].q[1].q[3]
-	FP12_YYY_copy(&g[6],&g[2]);
-	FP12_YYY_mul(&g[6],&q[3]);	// q[0].q[2].q[3]
-	FP12_YYY_copy(&g[7],&g[3]);
-	FP12_YYY_mul(&g[7],&q[3]);	// q[0].q[1].q[2].q[3]
+    FP12_YYY_mul(&g[2],&q[2]);	// q[0].q[2]
+    FP12_YYY_copy(&g[3],&g[1]);
+    FP12_YYY_mul(&g[3],&q[2]);	// q[0].q[1].q[2]
+    FP12_YYY_copy(&g[4],&g[0]);
+    FP12_YYY_mul(&g[4],&q[3]);  // q[0].q[3]
+    FP12_YYY_copy(&g[5],&g[1]);
+    FP12_YYY_mul(&g[5],&q[3]);	// q[0].q[1].q[3]
+    FP12_YYY_copy(&g[6],&g[2]);
+    FP12_YYY_mul(&g[6],&q[3]);	// q[0].q[2].q[3]
+    FP12_YYY_copy(&g[7],&g[3]);
+    FP12_YYY_mul(&g[7],&q[3]);	// q[0].q[1].q[2].q[3]
 
 // Make it odd
-	pb=1-BIG_XXX_parity(t[0]);
-	BIG_XXX_inc(t[0],pb);
-	BIG_XXX_norm(t[0]);
+    pb=1-BIG_XXX_parity(t[0]);
+    BIG_XXX_inc(t[0],pb);
+    BIG_XXX_norm(t[0]);
 
 // Number of bits
     BIG_XXX_zero(mt);
@@ -768,45 +770,45 @@
     }
     nb=1+BIG_XXX_nbits(mt);
 
-// Sign pivot 
-	s[nb-1]=1;
-	for (i=0;i<nb-1;i++)
-	{
+// Sign pivot
+    s[nb-1]=1;
+    for (i=0; i<nb-1; i++)
+    {
         BIG_XXX_fshr(t[0],1);
-		s[i]=2*BIG_XXX_parity(t[0])-1;
-	}
+        s[i]=2*BIG_XXX_parity(t[0])-1;
+    }
 
 // Recoded exponent
     for (i=0; i<nb; i++)
     {
-		w[i]=0;
-		k=1;
-		for (j=1; j<4; j++)
-		{
-			bt=s[i]*BIG_XXX_parity(t[j]);
-			BIG_XXX_fshr(t[j],1);
+        w[i]=0;
+        k=1;
+        for (j=1; j<4; j++)
+        {
+            bt=s[i]*BIG_XXX_parity(t[j]);
+            BIG_XXX_fshr(t[j],1);
 
-			BIG_XXX_dec(t[j],(bt>>1));
-			BIG_XXX_norm(t[j]);
-			w[i]+=bt*k;
-			k*=2;
+            BIG_XXX_dec(t[j],(bt>>1));
+            BIG_XXX_norm(t[j]);
+            w[i]+=bt*k;
+            k*=2;
         }
-    }		
+    }
 
 // Main loop
-	FP12_YYY_select(p,g,2*w[nb-1]+1);
+    FP12_YYY_select(p,g,2*w[nb-1]+1);
     for (i=nb-2; i>=0; i--)
     {
         FP12_YYY_select(&r,g,2*w[i]+s[i]);
-		FP12_YYY_usqr(p,p);
+        FP12_YYY_usqr(p,p);
         FP12_YYY_mul(p,&r);
     }
 // apply correction
-	FP12_YYY_conj(&r,&q[0]);   
-	FP12_YYY_mul(&r,p);
-	FP12_YYY_cmove(p,&r,pb);
+    FP12_YYY_conj(&r,&q[0]);
+    FP12_YYY_mul(&r,p);
+    FP12_YYY_cmove(p,&r,pb);
 
-	FP12_YYY_reduce(p);
+    FP12_YYY_reduce(p);
 }
 
 /* Set w=w^p using Frobenius */
@@ -823,7 +825,7 @@
 
     FP4_YYY_pmul(&(w->b),&(w->b),f);
     FP4_YYY_pmul(&(w->c),&(w->c),&f2);
-	w->type=FP_DENSE;
+    w->type=AMCL_FP_DENSE;
 }
 
 /* SU= 8 */
@@ -935,7 +937,7 @@
     FP4_YYY_cmove(&(f->a),&(g->a),d);
     FP4_YYY_cmove(&(f->b),&(g->b),d);
     FP4_YYY_cmove(&(f->c),&(g->c),d);
-	d=~(d-1);
-	f->type^=(f->type^g->type)&d;
+    d=~(d-1);
+    f->type^=(f->type^g->type)&d;
 }
 
diff --git a/version3/c/fp12.h b/version3/c/fp12.h
index bc23ec1..5cb5d83 100644
--- a/version3/c/fp12.h
+++ b/version3/c/fp12.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file fp12.h
+ * @file fp12_YYY.h
  * @author Mike Scott
  * @brief FP12 Header File
  *
@@ -38,7 +38,7 @@
     FP4_YYY a; /**< first part of FP12 */
     FP4_YYY b; /**< second part of FP12 */
     FP4_YYY c; /**< third part of FP12 */
-	int type;
+    int type;  /**< Type */
 } FP12_YYY;
 
 extern const BIG_XXX Fra_YYY; /**< real part of BN curve Frobenius Constant */
diff --git a/version3/c/fp16.c b/version3/c/fp16.c
index e2579c9..0f37181 100644
--- a/version3/c/fp16.c
+++ b/version3/c/fp16.c
@@ -100,14 +100,14 @@
 {
     /* Just one field neg */
     FP8_YYY m,t;
-	FP16_YYY_norm(x);
+    FP16_YYY_norm(x);
     FP8_YYY_add(&m,&(x->a),&(x->b));
-	FP8_YYY_norm(&m);
+    FP8_YYY_norm(&m);
     FP8_YYY_neg(&m,&m);
     FP8_YYY_add(&t,&m,&(x->b));
     FP8_YYY_add(&(w->b),&m,&(x->a));
     FP8_YYY_copy(&(w->a),&t);
-	FP16_YYY_norm(w);
+    FP16_YYY_norm(w);
 }
 
 /* Set w=conj(x) */
@@ -115,7 +115,7 @@
 {
     FP8_YYY_copy(&(w->a), &(x->a));
     FP8_YYY_neg(&(w->b), &(x->b));
-	FP16_YYY_norm(w);
+    FP16_YYY_norm(w);
 }
 
 /* Set w=-conj(x) */
@@ -123,7 +123,7 @@
 {
     FP8_YYY_copy(&(w->b),&(x->b));
     FP8_YYY_neg(&(w->a), &(x->a));
-	FP16_YYY_norm(w);
+    FP16_YYY_norm(w);
 }
 
 /* Set w=x+y */
@@ -192,8 +192,8 @@
 
     FP8_YYY_add(&t2,&(x->a),&t2);
 
-	FP8_YYY_norm(&t1);  // 2
-	FP8_YYY_norm(&t2);  // 2
+    FP8_YYY_norm(&t1);  // 2
+    FP8_YYY_norm(&t2);  // 2
 
     FP8_YYY_mul(&(w->a),&t1,&t2);
 
@@ -202,7 +202,7 @@
 
     FP8_YYY_add(&t2,&t2,&t3);
 
-	FP8_YYY_norm(&t2);  // 2
+    FP8_YYY_norm(&t2);  // 2
     FP8_YYY_neg(&t2,&t2);
     FP8_YYY_add(&(w->a),&(w->a),&t2);  /* a=(a+b)(a+i^2.b)-i^2.ab-ab = a*a+ib*ib */
     FP8_YYY_add(&(w->b),&t3,&t3);  /* b=2ab */
@@ -216,23 +216,23 @@
 {
 
     FP8_YYY t1,t2,t3,t4;
-    FP8_YYY_mul(&t1,&(x->a),&(y->a)); 
-    FP8_YYY_mul(&t2,&(x->b),&(y->b)); 
+    FP8_YYY_mul(&t1,&(x->a),&(y->a));
+    FP8_YYY_mul(&t2,&(x->b),&(y->b));
 
     FP8_YYY_add(&t3,&(y->b),&(y->a));
     FP8_YYY_add(&t4,&(x->b),&(x->a));
 
-	FP8_YYY_norm(&t4); // 2
-	FP8_YYY_norm(&t3); // 2
+    FP8_YYY_norm(&t4); // 2
+    FP8_YYY_norm(&t3); // 2
 
     FP8_YYY_mul(&t4,&t4,&t3); /* (xa+xb)(ya+yb) */
 
-	FP8_YYY_neg(&t3,&t1);  // 1
-	FP8_YYY_add(&t4,&t4,&t3);  //t4E=3
+    FP8_YYY_neg(&t3,&t1);  // 1
+    FP8_YYY_add(&t4,&t4,&t3);  //t4E=3
     FP8_YYY_norm(&t4);
 
-	FP8_YYY_neg(&t3,&t2);  // 1
-	FP8_YYY_add(&(w->b),&t4,&t3); //wbE=3
+    FP8_YYY_neg(&t3,&t2);  // 1
+    FP8_YYY_add(&(w->b),&t4,&t3); //wbE=3
 
     FP8_YYY_times_i(&t2);
     FP8_YYY_add(&(w->a),&t2,&t1);
@@ -266,56 +266,57 @@
     FP8_YYY_sqr(&t1,&(x->a));
     FP8_YYY_sqr(&t2,&(x->b));
     FP8_YYY_times_i(&t2);
-	FP8_YYY_norm(&t2);
+    FP8_YYY_norm(&t2);
 
     FP8_YYY_sub(&t1,&t1,&t2);
-	FP8_YYY_norm(&t1);
+    FP8_YYY_norm(&t1);
 
     FP8_YYY_inv(&t1,&t1);
 
     FP8_YYY_mul(&(w->a),&t1,&(x->a));
     FP8_YYY_neg(&t1,&t1);
-	FP8_YYY_norm(&t1);
+    FP8_YYY_norm(&t1);
     FP8_YYY_mul(&(w->b),&t1,&(x->b));
 }
 
 /* w*=i where i = sqrt(sqrt(-1+sqrt(-1))) */
 void FP16_YYY_times_i(FP16_YYY *w)
 {
-	FP8_YYY s,t;
-	FP8_YYY_copy(&s,&(w->b));
-	FP8_YYY_copy(&t,&(w->a));
-	FP8_YYY_times_i(&s);
-	FP8_YYY_copy(&(w->a),&s);
-	FP8_YYY_copy(&(w->b),&t);
-	FP16_YYY_norm(w);
+    FP8_YYY s,t;
+    FP8_YYY_copy(&s,&(w->b));
+    FP8_YYY_copy(&t,&(w->a));
+    FP8_YYY_times_i(&s);
+    FP8_YYY_copy(&(w->a),&s);
+    FP8_YYY_copy(&(w->b),&t);
+    FP16_YYY_norm(w);
 }
 
 void FP16_YYY_times_i2(FP16_YYY *w)
 {
-	FP8_YYY_times_i(&(w->a));
-	FP8_YYY_times_i(&(w->b));
+    FP8_YYY_times_i(&(w->a));
+    FP8_YYY_times_i(&(w->b));
 }
 
 void FP16_YYY_times_i4(FP16_YYY *w)
 {
-	FP8_YYY_times_i2(&(w->a));
-	FP8_YYY_times_i2(&(w->b));
+    FP8_YYY_times_i2(&(w->a));
+    FP8_YYY_times_i2(&(w->b));
 }
 
 /* Set w=w^p using Frobenius */
 void FP16_YYY_frob(FP16_YYY *w,FP2_YYY *f)
-{ // f=(i+1)^(p-3)/8
-	FP2_YYY ff;
+{
+    // f=(i+1)^(p-3)/8
+    FP2_YYY ff;
 
-	FP2_YYY_sqr(&ff,f);  // (i+1)^(p-3)/4
-	FP2_YYY_norm(&ff);
+    FP2_YYY_sqr(&ff,f);  // (i+1)^(p-3)/4
+    FP2_YYY_norm(&ff);
 
-	FP8_YYY_frob(&(w->a),&ff);
-	FP8_YYY_frob(&(w->b),&ff);
+    FP8_YYY_frob(&(w->a),&ff);
+    FP8_YYY_frob(&(w->b),&ff);
 
-	FP8_YYY_qmul(&(w->b),&(w->b),f);  // times (1+i)^(p-3)/8
-	FP8_YYY_times_i(&(w->b));		// (i+1)^(p-1)/8
+    FP8_YYY_qmul(&(w->b),&(w->b),f);  // times (1+i)^(p-3)/8
+    FP8_YYY_times_i(&(w->b));		// (i+1)^(p-1)/8
 }
 
 /* Set r=a^b mod m */
@@ -358,10 +359,10 @@
 
     FP16_YYY_copy(r,x);
     FP16_YYY_sub(&t1,w,y);
-	FP16_YYY_norm(&t1);
+    FP16_YYY_norm(&t1);
     FP16_YYY_pmul(&t1,&t1,&(r->a));
     FP16_YYY_add(&t2,w,y);
-	FP16_YYY_norm(&t2);
+    FP16_YYY_norm(&t2);
     FP16_YYY_pmul(&t2,&t2,&(r->b));
     FP16_YYY_times_i(&t2);
 
@@ -379,7 +380,7 @@
     FP16_YYY_conj(&w,r);
     FP16_YYY_add(&w,&w,&w);
     FP16_YYY_sqr(r,r);
-	FP16_YYY_norm(&w);
+    FP16_YYY_norm(&w);
     FP16_YYY_sub(r,r,&w);
     FP16_YYY_reduce(r);    /* reduce here as multiple calls trigger automatic reductions */
 }
@@ -390,20 +391,20 @@
     int i,par,nb;
     BIG_XXX v;
     FP2_YYY w2;
-	FP4_YYY w4;
-	FP8_YYY w8;
+    FP4_YYY w4;
+    FP8_YYY w8;
     FP16_YYY t,a,b,c,sf;
 
     BIG_XXX_zero(v);
     BIG_XXX_inc(v,3);
-	BIG_XXX_norm(v);
+    BIG_XXX_norm(v);
     FP2_YYY_from_BIG(&w2,v);
     FP4_YYY_from_FP2(&w4,&w2);
-	FP8_YYY_from_FP4(&w8,&w4);
+    FP8_YYY_from_FP4(&w8,&w4);
     FP16_YYY_from_FP8(&a,&w8);
-	FP16_YYY_copy(&sf,x);
-	FP16_YYY_norm(&sf);
-	FP16_YYY_copy(&b,&sf);
+    FP16_YYY_copy(&sf,x);
+    FP16_YYY_norm(&sf);
+    FP16_YYY_copy(&b,&sf);
     FP16_YYY_xtr_D(&c,&sf);
 
 
@@ -455,7 +456,7 @@
     BIG_XXX_copy(e,a);
     BIG_XXX_copy(d,b);
     BIG_XXX_norm(d);
-	BIG_XXX_norm(e);
+    BIG_XXX_norm(e);
     FP16_YYY_copy(&cu,ck);
     FP16_YYY_copy(&cv,cl);
     FP16_YYY_copy(&cumv,ckml);
diff --git a/version3/c/fp2.c b/version3/c/fp2.c
index 0c9cb63..5e7e8eb 100644
--- a/version3/c/fp2.c
+++ b/version3/c/fp2.c
@@ -279,7 +279,6 @@
 /* SU= 128 */
 void FP2_YYY_inv(FP2_YYY *w,FP2_YYY *x)
 {
-    BIG_XXX m,b;
     FP_YYY w1,w2;
 
     FP2_YYY_norm(x);
@@ -287,7 +286,7 @@
     FP_YYY_sqr(&w2,&(x->b));
     FP_YYY_add(&w1,&w1,&w2);
 
-	FP_YYY_inv(&w1,&w1);
+    FP_YYY_inv(&w1,&w1);
 
     FP_YYY_mul(&(w->a),&(x->a),&w1);
     FP_YYY_neg(&w1,&w1);
@@ -384,7 +383,6 @@
 
 int FP2_YYY_sqrt(FP2_YYY *w,FP2_YYY *u)
 {
-    BIG_XXX b;
     FP_YYY w1,w2;
     FP2_YYY_copy(w,u);
     if (FP2_YYY_iszilch(w)) return 1;
@@ -416,7 +414,7 @@
     FP_YYY_copy(&(w->a),&w2);
     FP_YYY_add(&w2,&w2,&w2);
 
-	FP_YYY_inv(&w2,&w2);
+    FP_YYY_inv(&w2,&w2);
 
     FP_YYY_mul(&(w->b),&(w->b),&w2);
     return 1;
diff --git a/version3/c/fp2.h b/version3/c/fp2.h
index 6767685..8442141 100644
--- a/version3/c/fp2.h
+++ b/version3/c/fp2.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file fp2.h
+ * @file fp2_YYY.h
  * @author Mike Scott
  * @brief FP2 Header File
  *
diff --git a/version3/c/fp24.c b/version3/c/fp24.c
index 8711e96..815ce89 100644
--- a/version3/c/fp24.c
+++ b/version3/c/fp24.c
@@ -79,7 +79,7 @@
     FP8_YYY_copy(&(w->a),&(x->a));
     FP8_YYY_copy(&(w->b),&(x->b));
     FP8_YYY_copy(&(w->c),&(x->c));
-	w->type=x->type;
+    w->type=x->type;
 }
 
 /* FP24 w=1 */
@@ -89,7 +89,7 @@
     FP8_YYY_one(&(w->a));
     FP8_YYY_zero(&(w->b));
     FP8_YYY_zero(&(w->c));
-	w->type=FP_UNITY;
+    w->type=AMCL_FP_UNITY;
 }
 
 void FP24_YYY_zero(FP24_YYY *w)
@@ -97,7 +97,7 @@
     FP8_YYY_zero(&(w->a));
     FP8_YYY_zero(&(w->b));
     FP8_YYY_zero(&(w->c));
-	w->type=FP_ZERO;
+    w->type=AMCL_FP_ZERO;
 }
 
 /* return 1 if x==y, else 0 */
@@ -126,7 +126,7 @@
     FP8_YYY_copy(&(w->a),a);
     FP8_YYY_zero(&(w->b));
     FP8_YYY_zero(&(w->c));
-	w->type=FP_SPARSER;
+    w->type=AMCL_AMCL_FP_SPARSER;
 }
 
 /* Create FP24 from 3 FP8's */
@@ -136,7 +136,7 @@
     FP8_YYY_copy(&(w->a),a);
     FP8_YYY_copy(&(w->b),b);
     FP8_YYY_copy(&(w->c),c);
-	w->type=FP_DENSE;
+    w->type=AMCL_FP_DENSE;
 }
 
 /* Granger-Scott Unitary Squaring. This does not benefit from lazy reduction */
@@ -176,7 +176,7 @@
     FP8_YYY_add(&(w->c),&(w->c),&(w->c));
     FP8_YYY_add(&(w->b),&B,&(w->b));
     FP8_YYY_add(&(w->c),&C,&(w->c));
-	w->type=FP_DENSE;
+    w->type=AMCL_FP_DENSE;
     FP24_YYY_reduce(w);	    /* reduce here as in pow function repeated squarings would trigger multiple reductions */
 }
 
@@ -188,16 +188,16 @@
 
     FP8_YYY A,B,C,D;
 
-	if (x->type<=FP_UNITY)
-	{
-		FP24_YYY_copy(w,x);
-		return;
-	}
+    if (x->type<=AMCL_FP_UNITY)
+    {
+        FP24_YYY_copy(w,x);
+        return;
+    }
 
     FP8_YYY_sqr(&A,&(x->a));
     FP8_YYY_mul(&B,&(x->b),&(x->c));
     FP8_YYY_add(&B,&B,&B);
-	FP8_YYY_norm(&B);
+    FP8_YYY_norm(&B);
     FP8_YYY_sqr(&C,&(x->c));
 
     FP8_YYY_mul(&D,&(x->a),&(x->b));
@@ -205,7 +205,7 @@
 
     FP8_YYY_add(&(w->c),&(x->a),&(x->c));
     FP8_YYY_add(&(w->c),&(x->b),&(w->c));
-	FP8_YYY_norm(&(w->c));	
+    FP8_YYY_norm(&(w->c));
 
     FP8_YYY_sqr(&(w->c),&(w->c));
 
@@ -227,10 +227,10 @@
     FP8_YYY_add(&(w->b),&C,&D);
     FP8_YYY_add(&(w->c),&(w->c),&A);
 
-	if (x->type==FP_SPARSER)
-		w->type=FP_SPARSE;
-	else
-		w->type=FP_DENSE;
+    if (x->type==AMCL_AMCL_FP_SPARSER)
+        w->type=AMCL_FP_SPARSE;
+    else
+        w->type=AMCL_FP_DENSE;
 
     FP24_YYY_norm(w);
 }
@@ -250,15 +250,15 @@
     FP8_YYY_add(&t0,&(w->a),&(w->b));
     FP8_YYY_add(&t1,&(y->a),&(y->b));  //
 
-	FP8_YYY_norm(&t0);
-	FP8_YYY_norm(&t1);
+    FP8_YYY_norm(&t0);
+    FP8_YYY_norm(&t1);
 
     FP8_YYY_mul(&z1,&t0,&t1);
     FP8_YYY_add(&t0,&(w->b),&(w->c));
     FP8_YYY_add(&t1,&(y->b),&(y->c));  //
 
-	FP8_YYY_norm(&t0);
-	FP8_YYY_norm(&t1);
+    FP8_YYY_norm(&t0);
+    FP8_YYY_norm(&t1);
 
     FP8_YYY_mul(&z3,&t0,&t1);
 
@@ -273,8 +273,8 @@
     FP8_YYY_add(&t0,&(w->a),&(w->c));
     FP8_YYY_add(&t1,&(y->a),&(y->c));
 
-	FP8_YYY_norm(&t0);
-	FP8_YYY_norm(&t1);
+    FP8_YYY_norm(&t0);
+    FP8_YYY_norm(&t1);
 
     FP8_YYY_mul(&t0,&t1,&t0);
     FP8_YYY_add(&z2,&z2,&t0);
@@ -286,10 +286,10 @@
     FP8_YYY_add(&z3,&z3,&t1);
     FP8_YYY_times_i(&t0);
     FP8_YYY_add(&(w->b),&(w->b),&t0);
-	FP8_YYY_norm(&z3);
+    FP8_YYY_norm(&z3);
     FP8_YYY_times_i(&z3);
     FP8_YYY_add(&(w->a),&z0,&z3);
-	w->type=FP_DENSE;
+    w->type=AMCL_FP_DENSE;
     FP24_YYY_norm(w);
 }
 
@@ -298,274 +298,276 @@
 /* Usually w is denser than y */
 void FP24_YYY_ssmul(FP24_YYY *w,FP24_YYY *y)
 {
-	FP8_YYY z0,z1,z2,z3,t0,t1;
-	if (w->type==FP_UNITY)
-	{
-		FP24_YYY_copy(w,y);
-		return;
-	}
-	if (y->type==FP_UNITY)
-		return;
+    FP8_YYY z0,z1,z2,z3,t0,t1;
+    if (w->type==AMCL_FP_UNITY)
+    {
+        FP24_YYY_copy(w,y);
+        return;
+    }
+    if (y->type==AMCL_FP_UNITY)
+        return;
 
-	if (y->type >= FP_SPARSE)
-	{
-		FP8_YYY_mul(&z0,&(w->a),&(y->a));  // xa.ya   always 11x11
+    if (y->type >= AMCL_FP_SPARSE)
+    {
+        FP8_YYY_mul(&z0,&(w->a),&(y->a));  // xa.ya   always 11x11
 
 #if SEXTIC_TWIST_ZZZ == M_TYPE
-		if (y->type==FP_SPARSE || w->type==FP_SPARSE)
-		{
-			FP4_YYY_mul(&z2.b,&(w->b).b,&(y->b).b);
-			FP4_YYY_zero(&z2.a);
-			if (y->type!=FP_SPARSE)
-				FP4_YYY_mul(&z2.a,&(w->b).b,&(y->b).a);
-			if (w->type!=FP_SPARSE)
-				FP4_YYY_mul(&z2.a,&(w->b).a,&(y->b).b);
-			FP8_YYY_times_i(&z2);
-		}
-		else
-#endif 
-			FP8_YYY_mul(&z2,&(w->b),&(y->b));  // xb.yb  could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11 
-
-		FP8_YYY_add(&t0,&(w->a),&(w->b));  // (xa+xb)
-		FP8_YYY_add(&t1,&(y->a),&(y->b));  // (ya+yb)
-
-		FP8_YYY_norm(&t0);
-		FP8_YYY_norm(&t1);
-
-		FP8_YYY_mul(&z1,&t0,&t1); // (xa+xb)(ya+yb)  always 11x11
-		FP8_YYY_add(&t0,&(w->b),&(w->c));  // (xb+xc)
-		FP8_YYY_add(&t1,&(y->b),&(y->c));  // (yb+yc)
-
-		FP8_YYY_norm(&t0);
-		FP8_YYY_norm(&t1);
-
-		FP8_YYY_mul(&z3,&t0,&t1);	// (xb+xc)(yb+yc)   could be anything...
-		FP8_YYY_neg(&t0,&z0);		// -(xa.ya)
-		FP8_YYY_neg(&t1,&z2);		// -(xb.yb)
-
-		FP8_YYY_add(&z1,&z1,&t0);  
-		FP8_YYY_add(&(w->b),&z1,&t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb)						= xa.yb + xb.ya
-
-		FP8_YYY_add(&z3,&z3,&t1);        // (xb+xc)(yb+yc) -(xb.yb)
-		FP8_YYY_add(&z2,&z2,&t0);        // (xb.yb) - (xa.ya)
-
-		FP8_YYY_add(&t0,&(w->a),&(w->c));  // (xa+xc)
-		FP8_YYY_add(&t1,&(y->a),&(y->c));  // (ya+yc)
-
-		FP8_YYY_norm(&t0);
-		FP8_YYY_norm(&t1);
-
-		FP8_YYY_mul(&t0,&t1,&t0);	// (xa+xc)(ya+yc)    always 11x11
-		FP8_YYY_add(&z2,&z2,&t0);	// (xb.yb) - (xa.ya) + (xa+xc)(ya+yc)
-
-#if SEXTIC_TWIST_ZZZ == D_TYPE
-		if (y->type==FP_SPARSE || w->type==FP_SPARSE)
-		{
-			FP4_YYY_mul(&t0.a,&(w->c).a,&(y->c).a);
-			FP4_YYY_zero(&t0.b);
-			if (y->type!=FP_SPARSE)
-				FP4_YYY_mul(&t0.b,&(w->c).a,&(y->c).b);
-			if (w->type!=FP_SPARSE)
-				FP4_YYY_mul(&t0.b,&(w->c).b,&(y->c).a);
-		}
-		else
+        if (y->type==AMCL_FP_SPARSE || w->type==AMCL_FP_SPARSE)
+        {
+            FP4_YYY_mul(&z2.b,&(w->b).b,&(y->b).b);
+            FP4_YYY_zero(&z2.a);
+            if (y->type!=AMCL_FP_SPARSE)
+                FP4_YYY_mul(&z2.a,&(w->b).b,&(y->b).a);
+            if (w->type!=AMCL_FP_SPARSE)
+                FP4_YYY_mul(&z2.a,&(w->b).a,&(y->b).b);
+            FP8_YYY_times_i(&z2);
+        }
+        else
 #endif
-			FP8_YYY_mul(&t0,&(w->c),&(y->c)); // (xc.yc)  could be anything
-			
-		FP8_YYY_neg(&t1,&t0);			  // -(xc.yc) 
+            FP8_YYY_mul(&z2,&(w->b),&(y->b));  // xb.yb  could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11
 
-		FP8_YYY_add(&(w->c),&z2,&t1);		// wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc)	=  xb.yb + xc.ya + xa.yc
-		FP8_YYY_add(&z3,&z3,&t1);			// (xb+xc)(yb+yc) -(xb.yb) - (xc.yc)					=  xb.yc + xc.yb
-		FP8_YYY_times_i(&t0);				// i.(xc.yc)
-		FP8_YYY_add(&(w->b),&(w->b),&t0);   // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc)
-		FP8_YYY_norm(&z3);
-		FP8_YYY_times_i(&z3);				// i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)]					= i(xb.yc + xc.yb)
-		FP8_YYY_add(&(w->a),&z0,&z3);		// wa = xa.ya + i(xb.yc + xc.yb)
-	} else {
-		if (w->type==FP_SPARSER)
-		{
-			FP24_YYY_smul(w,y);
-			return;
-		}
-// dense by sparser - 13m 
+        FP8_YYY_add(&t0,&(w->a),&(w->b));  // (xa+xb)
+        FP8_YYY_add(&t1,&(y->a),&(y->b));  // (ya+yb)
+
+        FP8_YYY_norm(&t0);
+        FP8_YYY_norm(&t1);
+
+        FP8_YYY_mul(&z1,&t0,&t1); // (xa+xb)(ya+yb)  always 11x11
+        FP8_YYY_add(&t0,&(w->b),&(w->c));  // (xb+xc)
+        FP8_YYY_add(&t1,&(y->b),&(y->c));  // (yb+yc)
+
+        FP8_YYY_norm(&t0);
+        FP8_YYY_norm(&t1);
+
+        FP8_YYY_mul(&z3,&t0,&t1);	// (xb+xc)(yb+yc)   could be anything...
+        FP8_YYY_neg(&t0,&z0);		// -(xa.ya)
+        FP8_YYY_neg(&t1,&z2);		// -(xb.yb)
+
+        FP8_YYY_add(&z1,&z1,&t0);
+        FP8_YYY_add(&(w->b),&z1,&t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb)						= xa.yb + xb.ya
+
+        FP8_YYY_add(&z3,&z3,&t1);        // (xb+xc)(yb+yc) -(xb.yb)
+        FP8_YYY_add(&z2,&z2,&t0);        // (xb.yb) - (xa.ya)
+
+        FP8_YYY_add(&t0,&(w->a),&(w->c));  // (xa+xc)
+        FP8_YYY_add(&t1,&(y->a),&(y->c));  // (ya+yc)
+
+        FP8_YYY_norm(&t0);
+        FP8_YYY_norm(&t1);
+
+        FP8_YYY_mul(&t0,&t1,&t0);	// (xa+xc)(ya+yc)    always 11x11
+        FP8_YYY_add(&z2,&z2,&t0);	// (xb.yb) - (xa.ya) + (xa+xc)(ya+yc)
+
 #if SEXTIC_TWIST_ZZZ == D_TYPE
-		FP8_YYY_copy(&z3,&(w->b));
-		FP8_YYY_mul(&z0,&(w->a),&(y->a));
+        if (y->type==AMCL_FP_SPARSE || w->type==AMCL_FP_SPARSE)
+        {
+            FP4_YYY_mul(&t0.a,&(w->c).a,&(y->c).a);
+            FP4_YYY_zero(&t0.b);
+            if (y->type!=AMCL_FP_SPARSE)
+                FP4_YYY_mul(&t0.b,&(w->c).a,&(y->c).b);
+            if (w->type!=AMCL_FP_SPARSE)
+                FP4_YYY_mul(&t0.b,&(w->c).b,&(y->c).a);
+        }
+        else
+#endif
+            FP8_YYY_mul(&t0,&(w->c),&(y->c)); // (xc.yc)  could be anything
 
-		FP8_YYY_pmul(&z2,&(w->b),&(y->b).a);
-		FP8_YYY_add(&(w->b),&(w->a),&(w->b));
-		FP8_YYY_copy(&t1,&(y->a));
-		FP4_YYY_add(&t1.a,&t1.a,&(y->b).a);
+        FP8_YYY_neg(&t1,&t0);			  // -(xc.yc)
 
-		FP8_YYY_norm(&t1);
-		FP8_YYY_norm(&(w->b));
+        FP8_YYY_add(&(w->c),&z2,&t1);		// wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc)	=  xb.yb + xc.ya + xa.yc
+        FP8_YYY_add(&z3,&z3,&t1);			// (xb+xc)(yb+yc) -(xb.yb) - (xc.yc)					=  xb.yc + xc.yb
+        FP8_YYY_times_i(&t0);				// i.(xc.yc)
+        FP8_YYY_add(&(w->b),&(w->b),&t0);   // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc)
+        FP8_YYY_norm(&z3);
+        FP8_YYY_times_i(&z3);				// i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)]					= i(xb.yc + xc.yb)
+        FP8_YYY_add(&(w->a),&z0,&z3);		// wa = xa.ya + i(xb.yc + xc.yb)
+    }
+    else
+    {
+        if (w->type==AMCL_AMCL_FP_SPARSER)
+        {
+            FP24_YYY_smul(w,y);
+            return;
+        }
+// dense by sparser - 13m
+#if SEXTIC_TWIST_ZZZ == D_TYPE
+        FP8_YYY_copy(&z3,&(w->b));
+        FP8_YYY_mul(&z0,&(w->a),&(y->a));
 
-		FP8_YYY_mul(&(w->b),&(w->b),&t1);
-		FP8_YYY_add(&z3,&z3,&(w->c));
-		FP8_YYY_norm(&z3);
-		FP8_YYY_pmul(&z3,&z3,&(y->b).a);
-		FP8_YYY_neg(&t0,&z0);
-		FP8_YYY_neg(&t1,&z2);
+        FP8_YYY_pmul(&z2,&(w->b),&(y->b).a);
+        FP8_YYY_add(&(w->b),&(w->a),&(w->b));
+        FP8_YYY_copy(&t1,&(y->a));
+        FP4_YYY_add(&t1.a,&t1.a,&(y->b).a);
 
-		FP8_YYY_add(&(w->b),&(w->b),&t0);   // z1=z1-z0
-		FP8_YYY_add(&(w->b),&(w->b),&t1);   // z1=z1-z2
+        FP8_YYY_norm(&t1);
+        FP8_YYY_norm(&(w->b));
 
-		FP8_YYY_add(&z3,&z3,&t1);        // z3=z3-z2
-		FP8_YYY_add(&z2,&z2,&t0);        // z2=z2-z0
+        FP8_YYY_mul(&(w->b),&(w->b),&t1);
+        FP8_YYY_add(&z3,&z3,&(w->c));
+        FP8_YYY_norm(&z3);
+        FP8_YYY_pmul(&z3,&z3,&(y->b).a);
+        FP8_YYY_neg(&t0,&z0);
+        FP8_YYY_neg(&t1,&z2);
 
-		FP8_YYY_add(&t0,&(w->a),&(w->c));
-		FP8_YYY_norm(&t0);
-		FP8_YYY_norm(&z3);
+        FP8_YYY_add(&(w->b),&(w->b),&t0);   // z1=z1-z0
+        FP8_YYY_add(&(w->b),&(w->b),&t1);   // z1=z1-z2
 
-		FP8_YYY_mul(&t0,&(y->a),&t0);
-		FP8_YYY_add(&(w->c),&z2,&t0);
+        FP8_YYY_add(&z3,&z3,&t1);        // z3=z3-z2
+        FP8_YYY_add(&z2,&z2,&t0);        // z2=z2-z0
 
-		FP8_YYY_times_i(&z3);
-		FP8_YYY_add(&(w->a),&z0,&z3);
+        FP8_YYY_add(&t0,&(w->a),&(w->c));
+        FP8_YYY_norm(&t0);
+        FP8_YYY_norm(&z3);
+
+        FP8_YYY_mul(&t0,&(y->a),&t0);
+        FP8_YYY_add(&(w->c),&z2,&t0);
+
+        FP8_YYY_times_i(&z3);
+        FP8_YYY_add(&(w->a),&z0,&z3);
 #endif
 #if SEXTIC_TWIST_ZZZ == M_TYPE
-		FP8_YYY_mul(&z0,&(w->a),&(y->a));
-		FP8_YYY_add(&t0,&(w->a),&(w->b));
-		FP8_YYY_norm(&t0);
+        FP8_YYY_mul(&z0,&(w->a),&(y->a));
+        FP8_YYY_add(&t0,&(w->a),&(w->b));
+        FP8_YYY_norm(&t0);
 
-		FP8_YYY_mul(&z1,&t0,&(y->a));
-		FP8_YYY_add(&t0,&(w->b),&(w->c));
-		FP8_YYY_norm(&t0);
+        FP8_YYY_mul(&z1,&t0,&(y->a));
+        FP8_YYY_add(&t0,&(w->b),&(w->c));
+        FP8_YYY_norm(&t0);
 
-		FP8_YYY_pmul(&z3,&t0,&(y->c).b);
-		FP8_YYY_times_i(&z3);
+        FP8_YYY_pmul(&z3,&t0,&(y->c).b);
+        FP8_YYY_times_i(&z3);
 
-		FP8_YYY_neg(&t0,&z0);
-		FP8_YYY_add(&z1,&z1,&t0);   // z1=z1-z0
+        FP8_YYY_neg(&t0,&z0);
+        FP8_YYY_add(&z1,&z1,&t0);   // z1=z1-z0
 
-		FP8_YYY_copy(&(w->b),&z1);
-		FP8_YYY_copy(&z2,&t0);
+        FP8_YYY_copy(&(w->b),&z1);
+        FP8_YYY_copy(&z2,&t0);
 
-		FP8_YYY_add(&t0,&(w->a),&(w->c));
-		FP8_YYY_add(&t1,&(y->a),&(y->c));
+        FP8_YYY_add(&t0,&(w->a),&(w->c));
+        FP8_YYY_add(&t1,&(y->a),&(y->c));
 
-		FP8_YYY_norm(&t0);
-		FP8_YYY_norm(&t1);
+        FP8_YYY_norm(&t0);
+        FP8_YYY_norm(&t1);
 
-		FP8_YYY_mul(&t0,&t1,&t0);
-		FP8_YYY_add(&z2,&z2,&t0);
+        FP8_YYY_mul(&t0,&t1,&t0);
+        FP8_YYY_add(&z2,&z2,&t0);
 
-		FP8_YYY_pmul(&t0,&(w->c),&(y->c).b);
-		FP8_YYY_times_i(&t0);
-		FP8_YYY_neg(&t1,&t0);
-		FP8_YYY_times_i(&t0);
+        FP8_YYY_pmul(&t0,&(w->c),&(y->c).b);
+        FP8_YYY_times_i(&t0);
+        FP8_YYY_neg(&t1,&t0);
+        FP8_YYY_times_i(&t0);
 
-		FP8_YYY_add(&(w->c),&z2,&t1);
-		FP8_YYY_add(&z3,&z3,&t1);
+        FP8_YYY_add(&(w->c),&z2,&t1);
+        FP8_YYY_add(&z3,&z3,&t1);
 
-		FP8_YYY_add(&(w->b),&(w->b),&t0);
-		FP8_YYY_norm(&z3);
-		FP8_YYY_times_i(&z3);
-		FP8_YYY_add(&(w->a),&z0,&z3);
+        FP8_YYY_add(&(w->b),&(w->b),&t0);
+        FP8_YYY_norm(&z3);
+        FP8_YYY_times_i(&z3);
+        FP8_YYY_add(&(w->a),&z0,&z3);
 #endif
-	}
-	w->type=FP_DENSE;
+    }
+    w->type=AMCL_FP_DENSE;
     FP24_YYY_norm(w);
 }
 
 /* FP24 multiplication w=w*y */
 /* catering for special case that arises from special form of ATE pairing line function */
-/* w and y are both sparser line functions - cost = 6m */ 
+/* w and y are both sparser line functions - cost = 6m */
 void FP24_YYY_smul(FP24_YYY *w,FP24_YYY *y)
 {
-	FP4_YYY w1,w2,w3,ta,tb,tc,td,te,t;
+    FP4_YYY w1,w2,w3,ta,tb,tc,td,te,t;
 
 
 #if SEXTIC_TWIST_ZZZ == D_TYPE
-	FP4_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
-	FP4_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
-	FP4_YYY_mul(&w3,&(w->b).a,&(y->b).a); // C1.C2
+    FP4_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
+    FP4_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
+    FP4_YYY_mul(&w3,&(w->b).a,&(y->b).a); // C1.C2
 
-	FP4_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
-	FP4_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
-	FP4_YYY_norm(&ta);
-	FP4_YYY_norm(&tb);
-	FP4_YYY_mul(&tc,&ta,&tb);			// (A1+B1)(A2+B2)
-	FP4_YYY_add(&t,&w1,&w2);
-	FP4_YYY_neg(&t,&t);
-	FP4_YYY_add(&tc,&tc,&t);			// (A1+B1)(A2+B2)-A1.A2-B1*B2 =  (A1.B2+A2.B1)		
-				
-	FP4_YYY_add(&ta,&(w->a).a,&(w->b).a); // A1+C1
-	FP4_YYY_add(&tb,&(y->a).a,&(y->b).a); // A2+C2
-	FP4_YYY_norm(&ta);
-	FP4_YYY_norm(&tb);
-	FP4_YYY_mul(&td,&ta,&tb);			// (A1+C1)(A2+C2)
-	FP4_YYY_add(&t,&w1,&w3);
-	FP4_YYY_neg(&t,&t);
-	FP4_YYY_add(&td,&td,&t);			// (A1+C1)(A2+C2)-A1.A2-C1*C2 =  (A1.C2+A2.C1)		
+    FP4_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
+    FP4_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
+    FP4_YYY_norm(&ta);
+    FP4_YYY_norm(&tb);
+    FP4_YYY_mul(&tc,&ta,&tb);			// (A1+B1)(A2+B2)
+    FP4_YYY_add(&t,&w1,&w2);
+    FP4_YYY_neg(&t,&t);
+    FP4_YYY_add(&tc,&tc,&t);			// (A1+B1)(A2+B2)-A1.A2-B1*B2 =  (A1.B2+A2.B1)
 
-	FP4_YYY_add(&ta,&(w->a).b,&(w->b).a); // B1+C1
-	FP4_YYY_add(&tb,&(y->a).b,&(y->b).a); // B2+C2
-	FP4_YYY_norm(&ta);
-	FP4_YYY_norm(&tb);
-	FP4_YYY_mul(&te,&ta,&tb);			// (B1+C1)(B2+C2)
-	FP4_YYY_add(&t,&w2,&w3);
-	FP4_YYY_neg(&t,&t);
-	FP4_YYY_add(&te,&te,&t);			// (B1+C1)(B2+C2)-B1.B2-C1*C2 =  (B1.C2+B2.C1)		
+    FP4_YYY_add(&ta,&(w->a).a,&(w->b).a); // A1+C1
+    FP4_YYY_add(&tb,&(y->a).a,&(y->b).a); // A2+C2
+    FP4_YYY_norm(&ta);
+    FP4_YYY_norm(&tb);
+    FP4_YYY_mul(&td,&ta,&tb);			// (A1+C1)(A2+C2)
+    FP4_YYY_add(&t,&w1,&w3);
+    FP4_YYY_neg(&t,&t);
+    FP4_YYY_add(&td,&td,&t);			// (A1+C1)(A2+C2)-A1.A2-C1*C2 =  (A1.C2+A2.C1)
 
-	FP4_YYY_times_i(&w2);
-	FP4_YYY_add(&w1,&w1,&w2);
-	FP8_YYY_from_FP4s(&(w->a),&w1,&tc);
-	FP8_YYY_from_FP4s(&(w->b),&td,&te); // only norm these 2
-	FP8_YYY_from_FP4(&(w->c),&w3);
+    FP4_YYY_add(&ta,&(w->a).b,&(w->b).a); // B1+C1
+    FP4_YYY_add(&tb,&(y->a).b,&(y->b).a); // B2+C2
+    FP4_YYY_norm(&ta);
+    FP4_YYY_norm(&tb);
+    FP4_YYY_mul(&te,&ta,&tb);			// (B1+C1)(B2+C2)
+    FP4_YYY_add(&t,&w2,&w3);
+    FP4_YYY_neg(&t,&t);
+    FP4_YYY_add(&te,&te,&t);			// (B1+C1)(B2+C2)-B1.B2-C1*C2 =  (B1.C2+B2.C1)
 
-	FP8_YYY_norm(&(w->a));
-	FP8_YYY_norm(&(w->b));
+    FP4_YYY_times_i(&w2);
+    FP4_YYY_add(&w1,&w1,&w2);
+    FP8_YYY_from_FP4s(&(w->a),&w1,&tc);
+    FP8_YYY_from_FP4s(&(w->b),&td,&te); // only norm these 2
+    FP8_YYY_from_FP4(&(w->c),&w3);
+
+    FP8_YYY_norm(&(w->a));
+    FP8_YYY_norm(&(w->b));
 #endif
 #if SEXTIC_TWIST_ZZZ == M_TYPE
-	FP4_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
-	FP4_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
-	FP4_YYY_mul(&w3,&(w->c).b,&(y->c).b); // F1.F2
+    FP4_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
+    FP4_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
+    FP4_YYY_mul(&w3,&(w->c).b,&(y->c).b); // F1.F2
 
-	FP4_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
-	FP4_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
-	FP4_YYY_norm(&ta);
-	FP4_YYY_norm(&tb);
-	FP4_YYY_mul(&tc,&ta,&tb);			// (A1+B1)(A2+B2)
-	FP4_YYY_add(&t,&w1,&w2);
-	FP4_YYY_neg(&t,&t);
-	FP4_YYY_add(&tc,&tc,&t);			// (A1+B1)(A2+B2)-A1.A2-B1*B2 =  (A1.B2+A2.B1)		
-				
-	FP4_YYY_add(&ta,&(w->a).a,&(w->c).b); // A1+F1
-	FP4_YYY_add(&tb,&(y->a).a,&(y->c).b); // A2+F2
-	FP4_YYY_norm(&ta);
-	FP4_YYY_norm(&tb);
-	FP4_YYY_mul(&td,&ta,&tb);			// (A1+F1)(A2+F2)
-	FP4_YYY_add(&t,&w1,&w3);
-	FP4_YYY_neg(&t,&t);
-	FP4_YYY_add(&td,&td,&t);			// (A1+F1)(A2+F2)-A1.A2-F1*F2 =  (A1.F2+A2.F1)		
+    FP4_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
+    FP4_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
+    FP4_YYY_norm(&ta);
+    FP4_YYY_norm(&tb);
+    FP4_YYY_mul(&tc,&ta,&tb);			// (A1+B1)(A2+B2)
+    FP4_YYY_add(&t,&w1,&w2);
+    FP4_YYY_neg(&t,&t);
+    FP4_YYY_add(&tc,&tc,&t);			// (A1+B1)(A2+B2)-A1.A2-B1*B2 =  (A1.B2+A2.B1)
 
-	FP4_YYY_add(&ta,&(w->a).b,&(w->c).b); // B1+F1
-	FP4_YYY_add(&tb,&(y->a).b,&(y->c).b); // B2+F2
-	FP4_YYY_norm(&ta);
-	FP4_YYY_norm(&tb);
-	FP4_YYY_mul(&te,&ta,&tb);			// (B1+F1)(B2+F2)
-	FP4_YYY_add(&t,&w2,&w3);
-	FP4_YYY_neg(&t,&t);
-	FP4_YYY_add(&te,&te,&t);			// (B1+F1)(B2+F2)-B1.B2-F1*F2 =  (B1.F2+B2.F1)	
+    FP4_YYY_add(&ta,&(w->a).a,&(w->c).b); // A1+F1
+    FP4_YYY_add(&tb,&(y->a).a,&(y->c).b); // A2+F2
+    FP4_YYY_norm(&ta);
+    FP4_YYY_norm(&tb);
+    FP4_YYY_mul(&td,&ta,&tb);			// (A1+F1)(A2+F2)
+    FP4_YYY_add(&t,&w1,&w3);
+    FP4_YYY_neg(&t,&t);
+    FP4_YYY_add(&td,&td,&t);			// (A1+F1)(A2+F2)-A1.A2-F1*F2 =  (A1.F2+A2.F1)
 
-	FP4_YYY_times_i(&w2);
-	FP4_YYY_add(&w1,&w1,&w2);
-	FP8_YYY_from_FP4s(&(w->a),&w1,&tc);
+    FP4_YYY_add(&ta,&(w->a).b,&(w->c).b); // B1+F1
+    FP4_YYY_add(&tb,&(y->a).b,&(y->c).b); // B2+F2
+    FP4_YYY_norm(&ta);
+    FP4_YYY_norm(&tb);
+    FP4_YYY_mul(&te,&ta,&tb);			// (B1+F1)(B2+F2)
+    FP4_YYY_add(&t,&w2,&w3);
+    FP4_YYY_neg(&t,&t);
+    FP4_YYY_add(&te,&te,&t);			// (B1+F1)(B2+F2)-B1.B2-F1*F2 =  (B1.F2+B2.F1)
 
-	FP4_YYY_times_i(&w3);
-	FP4_YYY_norm(&w3);
-	FP8_YYY_from_FP4H(&(w->b),&w3);
+    FP4_YYY_times_i(&w2);
+    FP4_YYY_add(&w1,&w1,&w2);
+    FP8_YYY_from_FP4s(&(w->a),&w1,&tc);
 
-	FP4_YYY_norm(&te);
-	FP4_YYY_times_i(&te);
-	FP8_YYY_from_FP4s(&(w->c),&te,&td);
+    FP4_YYY_times_i(&w3);
+    FP4_YYY_norm(&w3);
+    FP8_YYY_from_FP4H(&(w->b),&w3);
 
-	FP8_YYY_norm(&(w->a));
-	FP8_YYY_norm(&(w->c));
+    FP4_YYY_norm(&te);
+    FP4_YYY_times_i(&te);
+    FP8_YYY_from_FP4s(&(w->c),&te,&td);
+
+    FP8_YYY_norm(&(w->a));
+    FP8_YYY_norm(&(w->c));
 #endif
 
-	w->type=FP_SPARSE;
+    w->type=AMCL_FP_SPARSE;
 }
 
 /* Set w=1/x */
@@ -578,18 +580,18 @@
     FP8_YYY_mul(&f1,&(x->b),&(x->c));
     FP8_YYY_times_i(&f1);
     FP8_YYY_sub(&f0,&f0,&f1);  /* y.a */
-	FP8_YYY_norm(&f0); 		
+    FP8_YYY_norm(&f0);
 
     FP8_YYY_sqr(&f1,&(x->c));
     FP8_YYY_times_i(&f1);
     FP8_YYY_mul(&f2,&(x->a),&(x->b));
     FP8_YYY_sub(&f1,&f1,&f2);  /* y.b */
-	FP8_YYY_norm(&f1); 
+    FP8_YYY_norm(&f1);
 
     FP8_YYY_sqr(&f2,&(x->b));
     FP8_YYY_mul(&f3,&(x->a),&(x->c));
     FP8_YYY_sub(&f2,&f2,&f3);  /* y.c */
-	FP8_YYY_norm(&f2); 
+    FP8_YYY_norm(&f2);
 
     FP8_YYY_mul(&f3,&(x->b),&f2);
     FP8_YYY_times_i(&f3);
@@ -599,13 +601,13 @@
     FP8_YYY_times_i(&(w->c));
 
     FP8_YYY_add(&f3,&(w->c),&f3);
-	FP8_YYY_norm(&f3);
-	
+    FP8_YYY_norm(&f3);
+
     FP8_YYY_inv(&f3,&f3);
     FP8_YYY_mul(&(w->a),&f0,&f3);
     FP8_YYY_mul(&(w->b),&f1,&f3);
     FP8_YYY_mul(&(w->c),&f2,&f3);
-	w->type=FP_DENSE;
+    w->type=AMCL_FP_DENSE;
 }
 
 /* constant time powering by small integer of max length bts */
@@ -632,9 +634,9 @@
 void FP24_YYY_compow(FP8_YYY *c,FP24_YYY *x,BIG_XXX e,BIG_XXX r)
 {
     FP24_YYY g1,g2;
-	FP8_YYY cp,cpm1,cpm2;
+    FP8_YYY cp,cpm1,cpm2;
     FP2_YYY f;
-	BIG_XXX q,a,b,m;
+    BIG_XXX q,a,b,m;
 
     BIG_XXX_rcopy(a,Fra_YYY);
     BIG_XXX_rcopy(b,Frb_YYY);
@@ -643,7 +645,7 @@
     BIG_XXX_rcopy(q,Modulus_YYY);
 
     FP24_YYY_copy(&g1,x);
-	FP24_YYY_copy(&g2,x);
+    FP24_YYY_copy(&g2,x);
 
     BIG_XXX_copy(m,q);
     BIG_XXX_mod(m,r);
@@ -656,11 +658,11 @@
 
     FP24_YYY_trace(c,&g1);
 
-	if (BIG_XXX_iszilch(b))
-	{
-		FP8_YYY_xtr_pow(c,c,e);
-		return;
-	}
+    if (BIG_XXX_iszilch(b))
+    {
+        FP8_YYY_xtr_pow(c,c,e);
+        return;
+    }
 
     FP24_YYY_frob(&g2,&f,1);
     FP24_YYY_trace(&cp,&g2);
@@ -682,33 +684,33 @@
     FP24_YYY w,sf;
     BIG_XXX b1,b3;
     int i,nb,bt;
-	BIG_XXX_copy(b1,b);
+    BIG_XXX_copy(b1,b);
     BIG_XXX_norm(b1);
-	BIG_XXX_pmul(b3,b1,3);
-	BIG_XXX_norm(b3);
+    BIG_XXX_pmul(b3,b1,3);
+    BIG_XXX_norm(b3);
 
-	FP24_YYY_copy(&sf,a);
-	FP24_YYY_norm(&sf);
+    FP24_YYY_copy(&sf,a);
+    FP24_YYY_norm(&sf);
     FP24_YYY_copy(&w,&sf);
 
 
-	nb=BIG_XXX_nbits(b3);
-	for (i=nb-2;i>=1;i--)
-	{
-		FP24_YYY_usqr(&w,&w);
-		bt=BIG_XXX_bit(b3,i)-BIG_XXX_bit(b1,i);
-		if (bt==1)
-			FP24_YYY_mul(&w,&sf);
-		if (bt==-1)
-		{
-			FP24_YYY_conj(&sf,&sf);
-			FP24_YYY_mul(&w,&sf);
-			FP24_YYY_conj(&sf,&sf);
-		}
-	}
+    nb=BIG_XXX_nbits(b3);
+    for (i=nb-2; i>=1; i--)
+    {
+        FP24_YYY_usqr(&w,&w);
+        bt=BIG_XXX_bit(b3,i)-BIG_XXX_bit(b1,i);
+        if (bt==1)
+            FP24_YYY_mul(&w,&sf);
+        if (bt==-1)
+        {
+            FP24_YYY_conj(&sf,&sf);
+            FP24_YYY_mul(&w,&sf);
+            FP24_YYY_conj(&sf,&sf);
+        }
+    }
 
-	FP24_YYY_copy(r,&w);
-	FP24_YYY_reduce(r);
+    FP24_YYY_copy(r,&w);
+    FP24_YYY_reduce(r);
 }
 
 /* p=q0^u0.q1^u1.q2^u2.q3^u3... */
@@ -719,14 +721,14 @@
 void FP24_YYY_pow8(FP24_YYY *p,FP24_YYY *q,BIG_XXX u[8])
 {
     int i,j,k,nb,pb1,pb2,bt;
-	FP24_YYY g1[8],g2[8],r;
-	BIG_XXX t[8],mt;
+    FP24_YYY g1[8],g2[8],r;
+    BIG_XXX t[8],mt;
     sign8 w1[NLEN_XXX*BASEBITS_XXX+1];
     sign8 s1[NLEN_XXX*BASEBITS_XXX+1];
     sign8 w2[NLEN_XXX*BASEBITS_XXX+1];
     sign8 s2[NLEN_XXX*BASEBITS_XXX+1];
     FP_YYY fx,fy;
-	FP2_YYY X;
+    FP2_YYY X;
 
     FP_YYY_rcopy(&fx,Fra_YYY);
     FP_YYY_rcopy(&fy,Frb_YYY);
@@ -738,36 +740,36 @@
 // Precomputed table
     FP24_YYY_copy(&g1[0],&q[0]); // q[0]
     FP24_YYY_copy(&g1[1],&g1[0]);
-	FP24_YYY_mul(&g1[1],&q[1]);	// q[0].q[1]
+    FP24_YYY_mul(&g1[1],&q[1]);	// q[0].q[1]
     FP24_YYY_copy(&g1[2],&g1[0]);
-	FP24_YYY_mul(&g1[2],&q[2]);	// q[0].q[2]
-	FP24_YYY_copy(&g1[3],&g1[1]);
-	FP24_YYY_mul(&g1[3],&q[2]);	// q[0].q[1].q[2]
-	FP24_YYY_copy(&g1[4],&g1[0]);
-	FP24_YYY_mul(&g1[4],&q[3]);  // q[0].q[3]
-	FP24_YYY_copy(&g1[5],&g1[1]);
-	FP24_YYY_mul(&g1[5],&q[3]);	// q[0].q[1].q[3]
-	FP24_YYY_copy(&g1[6],&g1[2]);
-	FP24_YYY_mul(&g1[6],&q[3]);	// q[0].q[2].q[3]
-	FP24_YYY_copy(&g1[7],&g1[3]);
-	FP24_YYY_mul(&g1[7],&q[3]);	// q[0].q[1].q[2].q[3]
+    FP24_YYY_mul(&g1[2],&q[2]);	// q[0].q[2]
+    FP24_YYY_copy(&g1[3],&g1[1]);
+    FP24_YYY_mul(&g1[3],&q[2]);	// q[0].q[1].q[2]
+    FP24_YYY_copy(&g1[4],&g1[0]);
+    FP24_YYY_mul(&g1[4],&q[3]);  // q[0].q[3]
+    FP24_YYY_copy(&g1[5],&g1[1]);
+    FP24_YYY_mul(&g1[5],&q[3]);	// q[0].q[1].q[3]
+    FP24_YYY_copy(&g1[6],&g1[2]);
+    FP24_YYY_mul(&g1[6],&q[3]);	// q[0].q[2].q[3]
+    FP24_YYY_copy(&g1[7],&g1[3]);
+    FP24_YYY_mul(&g1[7],&q[3]);	// q[0].q[1].q[2].q[3]
 
 // Use Frobenius
 
-	for (i=0;i<8;i++)
-	{
-		FP24_YYY_copy(&g2[i],&g1[i]);
-		FP24_YYY_frob(&g2[i],&X,4);
-	}
+    for (i=0; i<8; i++)
+    {
+        FP24_YYY_copy(&g2[i],&g1[i]);
+        FP24_YYY_frob(&g2[i],&X,4);
+    }
 
 // Make it odd
-	pb1=1-BIG_XXX_parity(t[0]);
-	BIG_XXX_inc(t[0],pb1);
-	BIG_XXX_norm(t[0]);
+    pb1=1-BIG_XXX_parity(t[0]);
+    BIG_XXX_inc(t[0],pb1);
+    BIG_XXX_norm(t[0]);
 
-	pb2=1-BIG_XXX_parity(t[4]);
-	BIG_XXX_inc(t[4],pb2);
-	BIG_XXX_norm(t[4]);
+    pb2=1-BIG_XXX_parity(t[4]);
+    BIG_XXX_inc(t[4],pb2);
+    BIG_XXX_norm(t[4]);
 
 // Number of bits
     BIG_XXX_zero(mt);
@@ -777,54 +779,54 @@
     }
     nb=1+BIG_XXX_nbits(mt);
 
-// Sign pivot 
-	s1[nb-1]=1;
-	s2[nb-1]=1;
-	for (i=0;i<nb-1;i++)
-	{
+// Sign pivot
+    s1[nb-1]=1;
+    s2[nb-1]=1;
+    for (i=0; i<nb-1; i++)
+    {
         BIG_XXX_fshr(t[0],1);
-		s1[i]=2*BIG_XXX_parity(t[0])-1;
+        s1[i]=2*BIG_XXX_parity(t[0])-1;
         BIG_XXX_fshr(t[4],1);
-		s2[i]=2*BIG_XXX_parity(t[4])-1;
-	}
+        s2[i]=2*BIG_XXX_parity(t[4])-1;
+    }
 
 // Recoded exponents
     for (i=0; i<nb; i++)
     {
-		w1[i]=0;
-		k=1;
-		for (j=1; j<4; j++)
-		{
-			bt=s1[i]*BIG_XXX_parity(t[j]);
-			BIG_XXX_fshr(t[j],1);
+        w1[i]=0;
+        k=1;
+        for (j=1; j<4; j++)
+        {
+            bt=s1[i]*BIG_XXX_parity(t[j]);
+            BIG_XXX_fshr(t[j],1);
 
-			BIG_XXX_dec(t[j],(bt>>1));
-			BIG_XXX_norm(t[j]);
-			w1[i]+=bt*k;
-			k*=2;
+            BIG_XXX_dec(t[j],(bt>>1));
+            BIG_XXX_norm(t[j]);
+            w1[i]+=bt*k;
+            k*=2;
         }
 
-		w2[i]=0;
-		k=1;
-		for (j=5; j<8; j++)
-		{
-			bt=s2[i]*BIG_XXX_parity(t[j]);
-			BIG_XXX_fshr(t[j],1);
+        w2[i]=0;
+        k=1;
+        for (j=5; j<8; j++)
+        {
+            bt=s2[i]*BIG_XXX_parity(t[j]);
+            BIG_XXX_fshr(t[j],1);
 
-			BIG_XXX_dec(t[j],(bt>>1));
-			BIG_XXX_norm(t[j]);
-			w2[i]+=bt*k;
-			k*=2;
+            BIG_XXX_dec(t[j],(bt>>1));
+            BIG_XXX_norm(t[j]);
+            w2[i]+=bt*k;
+            k*=2;
         }
-    }	
+    }
 
 // Main loop
-	FP24_YYY_select(p,g1,2*w1[nb-1]+1);
-	FP24_YYY_select(&r,g2,2*w2[nb-1]+1);
-	FP24_YYY_mul(p,&r);
+    FP24_YYY_select(p,g1,2*w1[nb-1]+1);
+    FP24_YYY_select(&r,g2,2*w2[nb-1]+1);
+    FP24_YYY_mul(p,&r);
     for (i=nb-2; i>=0; i--)
     {
-		FP24_YYY_usqr(p,p);
+        FP24_YYY_usqr(p,p);
         FP24_YYY_select(&r,g1,2*w1[i]+s1[i]);
         FP24_YYY_mul(p,&r);
         FP24_YYY_select(&r,g2,2*w2[i]+s2[i]);
@@ -832,39 +834,41 @@
     }
 
 // apply correction
-	FP24_YYY_conj(&r,&q[0]);   
-	FP24_YYY_mul(&r,p);
-	FP24_YYY_cmove(p,&r,pb1);
-	FP24_YYY_conj(&r,&q[4]);   
-	FP24_YYY_mul(&r,p);
-	FP24_YYY_cmove(p,&r,pb2);
+    FP24_YYY_conj(&r,&q[0]);
+    FP24_YYY_mul(&r,p);
+    FP24_YYY_cmove(p,&r,pb1);
+    FP24_YYY_conj(&r,&q[4]);
+    FP24_YYY_mul(&r,p);
+    FP24_YYY_cmove(p,&r,pb2);
 
-	FP24_YYY_reduce(p);
+    FP24_YYY_reduce(p);
 }
 
 /* Set w=w^p using Frobenius */
 /* SU= 160 */
 void FP24_YYY_frob(FP24_YYY *w,FP2_YYY *f,int n)
 {
-	int i;
-	FP4_YYY X2,X4;
+    int i;
     FP2_YYY f3,f2;				// f=(1+i)^(p-7)/12
-    FP2_YYY_sqr(&f2,f);     // 
+    FP2_YYY_sqr(&f2,f);     //
     FP2_YYY_mul(&f3,&f2,f); // f3=f^3=(1+i)^(p-7)/4
 
-	FP2_YYY_mul_ip(&f3);    // f3 = (1+i).f3 = (1+i)^(p-3)/4 
-	FP2_YYY_norm(&f3);
+    FP2_YYY_mul_ip(&f3);    // f3 = (1+i).f3 = (1+i)^(p-3)/4
+    FP2_YYY_norm(&f3);
 
-	for (i=0;i<n;i++)
-	{
-		FP8_YYY_frob(&(w->a),&f3);   // a=a^p
-		FP8_YYY_frob(&(w->b),&f3);   // b=b^p
-		FP8_YYY_frob(&(w->c),&f3);   // c=c^p
-  
-		FP8_YYY_qmul(&(w->b),&(w->b),f); FP8_YYY_times_i2(&(w->b));
-		FP8_YYY_qmul(&(w->c),&(w->c),&f2); FP8_YYY_times_i2(&(w->c)); FP8_YYY_times_i2(&(w->c));
-	}
-	w->type=FP_DENSE;
+    for (i=0; i<n; i++)
+    {
+        FP8_YYY_frob(&(w->a),&f3);   // a=a^p
+        FP8_YYY_frob(&(w->b),&f3);   // b=b^p
+        FP8_YYY_frob(&(w->c),&f3);   // c=c^p
+
+        FP8_YYY_qmul(&(w->b),&(w->b),f);
+        FP8_YYY_times_i2(&(w->b));
+        FP8_YYY_qmul(&(w->c),&(w->c),&f2);
+        FP8_YYY_times_i2(&(w->c));
+        FP8_YYY_times_i2(&(w->c));
+    }
+    w->type=AMCL_FP_DENSE;
 }
 
 /* SU= 8 */
@@ -969,7 +973,7 @@
 /* Restore g from octet string w */
 void FP24_YYY_fromOctet(FP24_YYY *g,octet *W)
 {
-	BIG_XXX b;
+    BIG_XXX b;
 
     BIG_XXX_fromBytes(b,&W->val[0]);
     FP_YYY_nres(&(g->a.a.a.a),b);
@@ -1029,7 +1033,7 @@
     FP8_YYY_cmove(&(f->a),&(g->a),d);
     FP8_YYY_cmove(&(f->b),&(g->b),d);
     FP8_YYY_cmove(&(f->c),&(g->c),d);
-	d=~(d-1);
-	f->type^=(f->type^g->type)&d;
+    d=~(d-1);
+    f->type^=(f->type^g->type)&d;
 }
 
diff --git a/version3/c/fp24.h b/version3/c/fp24.h
index 12b0209..3a9fbd3 100644
--- a/version3/c/fp24.h
+++ b/version3/c/fp24.h
@@ -12,7 +12,7 @@
     FP8_YYY a; /**< first part of FP12 */
     FP8_YYY b; /**< second part of FP12 */
     FP8_YYY c; /**< third part of FP12 */
-	int type;
+    int type;
 } FP24_YYY;
 
 extern const BIG_XXX Fra_YYY; /**< real part of BN curve Frobenius Constant */
@@ -134,7 +134,7 @@
  */
 extern void FP24_YYY_pinpow(FP24_YYY *x,int i,int b);
 
-/**	@brief Raises an FP24 instance x to a BIG power, compressed to FP8 
+/**	@brief Raises an FP24 instance x to a BIG power, compressed to FP8
  *
 	@param c FP8 instance, on exit = x^(e mod r) as FP8
 	@param x FP24 input
diff --git a/version3/c/fp4.c b/version3/c/fp4.c
index 7b05c9e..c1c54f0 100644
--- a/version3/c/fp4.c
+++ b/version3/c/fp4.c
@@ -110,7 +110,7 @@
 {
     /* Just one field neg */
     FP2_YYY m,t;
-	FP4_YYY_norm(x);
+    FP4_YYY_norm(x);
     FP2_YYY_add(&m,&(x->a),&(x->b));
     FP2_YYY_neg(&m,&m);
     FP2_YYY_add(&t,&m,&(x->b));
@@ -334,7 +334,7 @@
     BIG_XXX_copy(z,b);
     BIG_XXX_norm(z);
     FP4_YYY_copy(&w,a);
-	FP4_YYY_norm(&w);
+    FP4_YYY_norm(&w);
     FP4_YYY_one(r);
 
     while(1)
@@ -397,14 +397,14 @@
     FP2_YYY_from_BIG(&w,v);
     FP4_YYY_from_FP2(&a,&w);
 
-	FP4_YYY_copy(&sf,x);
-	FP4_YYY_norm(&sf);
+    FP4_YYY_copy(&sf,x);
+    FP4_YYY_norm(&sf);
     FP4_YYY_copy(&b,&sf);
     FP4_YYY_xtr_D(&c,&sf);
 
     par=BIG_XXX_parity(n);
     BIG_XXX_copy(v,n);
-	BIG_XXX_norm(v);
+    BIG_XXX_norm(v);
     BIG_XXX_shr(v,1);
     if (par==0)
     {
@@ -600,7 +600,7 @@
     FP4_YYY_copy(r,x);
     if (FP4_YYY_iszilch(x))
         return 1;
-    
+
     FP2_YYY_copy(&a,&(x->a));
     FP2_YYY_copy(&s,&(x->b));
 
@@ -662,14 +662,14 @@
 
 void FP4_YYY_div_2i(FP4_YYY *f)
 {
-	FP2_YYY u,v;
-	FP2_YYY_copy(&u,&(f->a));
-	FP2_YYY_copy(&v,&(f->b));
-	FP2_YYY_div_ip2(&u);
-	FP2_YYY_add(&v,&v,&v);
-	FP2_YYY_norm(&v);
-	FP2_YYY_copy(&(f->a),&v);
-	FP2_YYY_copy(&(f->b),&u);
+    FP2_YYY u,v;
+    FP2_YYY_copy(&u,&(f->a));
+    FP2_YYY_copy(&v,&(f->b));
+    FP2_YYY_div_ip2(&u);
+    FP2_YYY_add(&v,&v,&v);
+    FP2_YYY_norm(&v);
+    FP2_YYY_copy(&(f->a),&v);
+    FP2_YYY_copy(&(f->b),&u);
 }
 
 #endif
diff --git a/version3/c/fp4.h b/version3/c/fp4.h
index 451ab4a..4c6dda9 100644
--- a/version3/c/fp4.h
+++ b/version3/c/fp4.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file fp4.h
+ * @file fp4_YYY.h
  * @author Mike Scott
  * @brief FP4 Header File
  *
diff --git a/version3/c/fp48.c b/version3/c/fp48.c
index e99257c..8083bf5 100644
--- a/version3/c/fp48.c
+++ b/version3/c/fp48.c
@@ -80,7 +80,7 @@
     FP16_YYY_copy(&(w->a),&(x->a));
     FP16_YYY_copy(&(w->b),&(x->b));
     FP16_YYY_copy(&(w->c),&(x->c));
-	w->type=x->type;
+    w->type=x->type;
 }
 
 /* FP48 w=1 */
@@ -90,7 +90,7 @@
     FP16_YYY_one(&(w->a));
     FP16_YYY_zero(&(w->b));
     FP16_YYY_zero(&(w->c));
-	w->type=FP_UNITY;
+    w->type=AMCL_FP_UNITY;
 }
 
 void FP48_YYY_zero(FP48_YYY *w)
@@ -98,7 +98,7 @@
     FP16_YYY_zero(&(w->a));
     FP16_YYY_zero(&(w->b));
     FP16_YYY_zero(&(w->c));
-	w->type=FP_ZERO;
+    w->type=AMCL_FP_ZERO;
 }
 
 /* return 1 if x==y, else 0 */
@@ -127,7 +127,7 @@
     FP16_YYY_copy(&(w->a),a);
     FP16_YYY_zero(&(w->b));
     FP16_YYY_zero(&(w->c));
-	w->type=FP_SPARSER;
+    w->type=AMCL_AMCL_FP_SPARSER;
 }
 
 /* Create FP48 from 3 FP16's */
@@ -137,7 +137,7 @@
     FP16_YYY_copy(&(w->a),a);
     FP16_YYY_copy(&(w->b),b);
     FP16_YYY_copy(&(w->c),c);
-	w->type=FP_DENSE;
+    w->type=AMCL_FP_DENSE;
 }
 
 /* Granger-Scott Unitary Squaring. This does not benefit from lazy reduction */
@@ -177,7 +177,7 @@
     FP16_YYY_add(&(w->c),&(w->c),&(w->c));
     FP16_YYY_add(&(w->b),&B,&(w->b));
     FP16_YYY_add(&(w->c),&C,&(w->c));
-	w->type=FP_DENSE;
+    w->type=AMCL_FP_DENSE;
     FP48_YYY_reduce(w);	    /* reduce here as in pow function repeated squarings would trigger multiple reductions */
 }
 
@@ -189,16 +189,16 @@
 
     FP16_YYY A,B,C,D;
 
-	if (x->type<=FP_UNITY)
-	{
-		FP48_YYY_copy(w,x);
-		return;
-	}
+    if (x->type<=AMCL_FP_UNITY)
+    {
+        FP48_YYY_copy(w,x);
+        return;
+    }
 
     FP16_YYY_sqr(&A,&(x->a));
     FP16_YYY_mul(&B,&(x->b),&(x->c));
     FP16_YYY_add(&B,&B,&B);
-	FP16_YYY_norm(&B);
+    FP16_YYY_norm(&B);
     FP16_YYY_sqr(&C,&(x->c));
 
     FP16_YYY_mul(&D,&(x->a),&(x->b));
@@ -206,7 +206,7 @@
 
     FP16_YYY_add(&(w->c),&(x->a),&(x->c));
     FP16_YYY_add(&(w->c),&(x->b),&(w->c));
-	FP16_YYY_norm(&(w->c));	
+    FP16_YYY_norm(&(w->c));
 
     FP16_YYY_sqr(&(w->c),&(w->c));
 
@@ -228,10 +228,10 @@
     FP16_YYY_add(&(w->b),&C,&D);
     FP16_YYY_add(&(w->c),&(w->c),&A);
 
-	if (x->type==FP_SPARSER)
-		w->type=FP_SPARSE;
-	else
-		w->type=FP_DENSE;
+    if (x->type==AMCL_AMCL_FP_SPARSER)
+        w->type=AMCL_FP_SPARSE;
+    else
+        w->type=AMCL_FP_DENSE;
 
     FP48_YYY_norm(w);
 }
@@ -251,15 +251,15 @@
     FP16_YYY_add(&t0,&(w->a),&(w->b));
     FP16_YYY_add(&t1,&(y->a),&(y->b));  //
 
-	FP16_YYY_norm(&t0);
-	FP16_YYY_norm(&t1);
+    FP16_YYY_norm(&t0);
+    FP16_YYY_norm(&t1);
 
     FP16_YYY_mul(&z1,&t0,&t1);
     FP16_YYY_add(&t0,&(w->b),&(w->c));
     FP16_YYY_add(&t1,&(y->b),&(y->c));  //
 
-	FP16_YYY_norm(&t0);
-	FP16_YYY_norm(&t1);
+    FP16_YYY_norm(&t0);
+    FP16_YYY_norm(&t1);
 
     FP16_YYY_mul(&z3,&t0,&t1);
 
@@ -274,8 +274,8 @@
     FP16_YYY_add(&t0,&(w->a),&(w->c));
     FP16_YYY_add(&t1,&(y->a),&(y->c));
 
-	FP16_YYY_norm(&t0);
-	FP16_YYY_norm(&t1);
+    FP16_YYY_norm(&t0);
+    FP16_YYY_norm(&t1);
 
     FP16_YYY_mul(&t0,&t1,&t0);
     FP16_YYY_add(&z2,&z2,&t0);
@@ -287,10 +287,10 @@
     FP16_YYY_add(&z3,&z3,&t1);
     FP16_YYY_times_i(&t0);
     FP16_YYY_add(&(w->b),&(w->b),&t0);
-	FP16_YYY_norm(&z3);
+    FP16_YYY_norm(&z3);
     FP16_YYY_times_i(&z3);
     FP16_YYY_add(&(w->a),&z0,&z3);
-	w->type=FP_DENSE;
+    w->type=AMCL_FP_DENSE;
     FP48_YYY_norm(w);
 }
 
@@ -299,274 +299,276 @@
 /* Usually w is denser than y */
 void FP48_YYY_ssmul(FP48_YYY *w,FP48_YYY *y)
 {
-	FP16_YYY z0,z1,z2,z3,t0,t1;
-	if (w->type==FP_UNITY)
-	{
-		FP48_YYY_copy(w,y);
-		return;
-	}
-	if (y->type==FP_UNITY)
-		return;
+    FP16_YYY z0,z1,z2,z3,t0,t1;
+    if (w->type==AMCL_FP_UNITY)
+    {
+        FP48_YYY_copy(w,y);
+        return;
+    }
+    if (y->type==AMCL_FP_UNITY)
+        return;
 
-	if (y->type >= FP_SPARSE)
-	{
-		FP16_YYY_mul(&z0,&(w->a),&(y->a));  // xa.ya   always 11x11
+    if (y->type >= AMCL_FP_SPARSE)
+    {
+        FP16_YYY_mul(&z0,&(w->a),&(y->a));  // xa.ya   always 11x11
 
 #if SEXTIC_TWIST_ZZZ == M_TYPE
-		if (y->type==FP_SPARSE || w->type==FP_SPARSE)
-		{
-			FP8_YYY_mul(&z2.b,&(w->b).b,&(y->b).b);
-			FP8_YYY_zero(&z2.a);
-			if (y->type!=FP_SPARSE)
-				FP8_YYY_mul(&z2.a,&(w->b).b,&(y->b).a);
-			if (w->type!=FP_SPARSE)
-				FP8_YYY_mul(&z2.a,&(w->b).a,&(y->b).b);
-			FP16_YYY_times_i(&z2);
-		}
-		else
-#endif 
-			FP16_YYY_mul(&z2,&(w->b),&(y->b));  // xb.yb  could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11 
-
-		FP16_YYY_add(&t0,&(w->a),&(w->b));  // (xa+xb)
-		FP16_YYY_add(&t1,&(y->a),&(y->b));  // (ya+yb)
-
-		FP16_YYY_norm(&t0);
-		FP16_YYY_norm(&t1);
-
-		FP16_YYY_mul(&z1,&t0,&t1); // (xa+xb)(ya+yb)  always 11x11
-		FP16_YYY_add(&t0,&(w->b),&(w->c));  // (xb+xc)
-		FP16_YYY_add(&t1,&(y->b),&(y->c));  // (yb+yc)
-
-		FP16_YYY_norm(&t0);
-		FP16_YYY_norm(&t1);
-
-		FP16_YYY_mul(&z3,&t0,&t1);	// (xb+xc)(yb+yc)   could be anything...
-		FP16_YYY_neg(&t0,&z0);		// -(xa.ya)
-		FP16_YYY_neg(&t1,&z2);		// -(xb.yb)
-
-		FP16_YYY_add(&z1,&z1,&t0);  
-		FP16_YYY_add(&(w->b),&z1,&t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb)						= xa.yb + xb.ya
-
-		FP16_YYY_add(&z3,&z3,&t1);        // (xb+xc)(yb+yc) -(xb.yb)
-		FP16_YYY_add(&z2,&z2,&t0);        // (xb.yb) - (xa.ya)
-
-		FP16_YYY_add(&t0,&(w->a),&(w->c));  // (xa+xc)
-		FP16_YYY_add(&t1,&(y->a),&(y->c));  // (ya+yc)
-
-		FP16_YYY_norm(&t0);
-		FP16_YYY_norm(&t1);
-
-		FP16_YYY_mul(&t0,&t1,&t0);	// (xa+xc)(ya+yc)    always 11x11
-		FP16_YYY_add(&z2,&z2,&t0);	// (xb.yb) - (xa.ya) + (xa+xc)(ya+yc)
-
-#if SEXTIC_TWIST_ZZZ == D_TYPE
-		if (y->type==FP_SPARSE || w->type==FP_SPARSE)
-		{
-			FP8_YYY_mul(&t0.a,&(w->c).a,&(y->c).a);
-			FP8_YYY_zero(&t0.b);
-			if (y->type!=FP_SPARSE)
-				FP8_YYY_mul(&t0.b,&(w->c).a,&(y->c).b);
-			if (w->type!=FP_SPARSE)
-				FP8_YYY_mul(&t0.b,&(w->c).b,&(y->c).a);
-		}
-		else
+        if (y->type==AMCL_FP_SPARSE || w->type==AMCL_FP_SPARSE)
+        {
+            FP8_YYY_mul(&z2.b,&(w->b).b,&(y->b).b);
+            FP8_YYY_zero(&z2.a);
+            if (y->type!=AMCL_FP_SPARSE)
+                FP8_YYY_mul(&z2.a,&(w->b).b,&(y->b).a);
+            if (w->type!=AMCL_FP_SPARSE)
+                FP8_YYY_mul(&z2.a,&(w->b).a,&(y->b).b);
+            FP16_YYY_times_i(&z2);
+        }
+        else
 #endif
-			FP16_YYY_mul(&t0,&(w->c),&(y->c)); // (xc.yc)  could be anything
-			
-		FP16_YYY_neg(&t1,&t0);			  // -(xc.yc) 
+            FP16_YYY_mul(&z2,&(w->b),&(y->b));  // xb.yb  could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11
 
-		FP16_YYY_add(&(w->c),&z2,&t1);		// wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc)	=  xb.yb + xc.ya + xa.yc
-		FP16_YYY_add(&z3,&z3,&t1);			// (xb+xc)(yb+yc) -(xb.yb) - (xc.yc)					=  xb.yc + xc.yb
-		FP16_YYY_times_i(&t0);				// i.(xc.yc)
-		FP16_YYY_add(&(w->b),&(w->b),&t0);   // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc)
-		FP16_YYY_norm(&z3);
-		FP16_YYY_times_i(&z3);				// i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)]					= i(xb.yc + xc.yb)
-		FP16_YYY_add(&(w->a),&z0,&z3);		// wa = xa.ya + i(xb.yc + xc.yb)
-	} else {
-		if (w->type==FP_SPARSER)
-		{
-			FP48_YYY_smul(w,y);
-			return;
-		}
-// dense by sparser - 13m 
+        FP16_YYY_add(&t0,&(w->a),&(w->b));  // (xa+xb)
+        FP16_YYY_add(&t1,&(y->a),&(y->b));  // (ya+yb)
+
+        FP16_YYY_norm(&t0);
+        FP16_YYY_norm(&t1);
+
+        FP16_YYY_mul(&z1,&t0,&t1); // (xa+xb)(ya+yb)  always 11x11
+        FP16_YYY_add(&t0,&(w->b),&(w->c));  // (xb+xc)
+        FP16_YYY_add(&t1,&(y->b),&(y->c));  // (yb+yc)
+
+        FP16_YYY_norm(&t0);
+        FP16_YYY_norm(&t1);
+
+        FP16_YYY_mul(&z3,&t0,&t1);	// (xb+xc)(yb+yc)   could be anything...
+        FP16_YYY_neg(&t0,&z0);		// -(xa.ya)
+        FP16_YYY_neg(&t1,&z2);		// -(xb.yb)
+
+        FP16_YYY_add(&z1,&z1,&t0);
+        FP16_YYY_add(&(w->b),&z1,&t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb)						= xa.yb + xb.ya
+
+        FP16_YYY_add(&z3,&z3,&t1);        // (xb+xc)(yb+yc) -(xb.yb)
+        FP16_YYY_add(&z2,&z2,&t0);        // (xb.yb) - (xa.ya)
+
+        FP16_YYY_add(&t0,&(w->a),&(w->c));  // (xa+xc)
+        FP16_YYY_add(&t1,&(y->a),&(y->c));  // (ya+yc)
+
+        FP16_YYY_norm(&t0);
+        FP16_YYY_norm(&t1);
+
+        FP16_YYY_mul(&t0,&t1,&t0);	// (xa+xc)(ya+yc)    always 11x11
+        FP16_YYY_add(&z2,&z2,&t0);	// (xb.yb) - (xa.ya) + (xa+xc)(ya+yc)
+
 #if SEXTIC_TWIST_ZZZ == D_TYPE
-		FP16_YYY_copy(&z3,&(w->b));
-		FP16_YYY_mul(&z0,&(w->a),&(y->a));
+        if (y->type==AMCL_FP_SPARSE || w->type==AMCL_FP_SPARSE)
+        {
+            FP8_YYY_mul(&t0.a,&(w->c).a,&(y->c).a);
+            FP8_YYY_zero(&t0.b);
+            if (y->type!=AMCL_FP_SPARSE)
+                FP8_YYY_mul(&t0.b,&(w->c).a,&(y->c).b);
+            if (w->type!=AMCL_FP_SPARSE)
+                FP8_YYY_mul(&t0.b,&(w->c).b,&(y->c).a);
+        }
+        else
+#endif
+            FP16_YYY_mul(&t0,&(w->c),&(y->c)); // (xc.yc)  could be anything
 
-		FP16_YYY_pmul(&z2,&(w->b),&(y->b).a);
-		FP16_YYY_add(&(w->b),&(w->a),&(w->b));
-		FP16_YYY_copy(&t1,&(y->a));
-		FP8_YYY_add(&t1.a,&t1.a,&(y->b).a);
+        FP16_YYY_neg(&t1,&t0);			  // -(xc.yc)
 
-		FP16_YYY_norm(&t1);
-		FP16_YYY_norm(&(w->b));
+        FP16_YYY_add(&(w->c),&z2,&t1);		// wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc)	=  xb.yb + xc.ya + xa.yc
+        FP16_YYY_add(&z3,&z3,&t1);			// (xb+xc)(yb+yc) -(xb.yb) - (xc.yc)					=  xb.yc + xc.yb
+        FP16_YYY_times_i(&t0);				// i.(xc.yc)
+        FP16_YYY_add(&(w->b),&(w->b),&t0);   // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc)
+        FP16_YYY_norm(&z3);
+        FP16_YYY_times_i(&z3);				// i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)]					= i(xb.yc + xc.yb)
+        FP16_YYY_add(&(w->a),&z0,&z3);		// wa = xa.ya + i(xb.yc + xc.yb)
+    }
+    else
+    {
+        if (w->type==AMCL_AMCL_FP_SPARSER)
+        {
+            FP48_YYY_smul(w,y);
+            return;
+        }
+// dense by sparser - 13m
+#if SEXTIC_TWIST_ZZZ == D_TYPE
+        FP16_YYY_copy(&z3,&(w->b));
+        FP16_YYY_mul(&z0,&(w->a),&(y->a));
 
-		FP16_YYY_mul(&(w->b),&(w->b),&t1);
-		FP16_YYY_add(&z3,&z3,&(w->c));
-		FP16_YYY_norm(&z3);
-		FP16_YYY_pmul(&z3,&z3,&(y->b).a);
-		FP16_YYY_neg(&t0,&z0);
-		FP16_YYY_neg(&t1,&z2);
+        FP16_YYY_pmul(&z2,&(w->b),&(y->b).a);
+        FP16_YYY_add(&(w->b),&(w->a),&(w->b));
+        FP16_YYY_copy(&t1,&(y->a));
+        FP8_YYY_add(&t1.a,&t1.a,&(y->b).a);
 
-		FP16_YYY_add(&(w->b),&(w->b),&t0);   // z1=z1-z0
-		FP16_YYY_add(&(w->b),&(w->b),&t1);   // z1=z1-z2
+        FP16_YYY_norm(&t1);
+        FP16_YYY_norm(&(w->b));
 
-		FP16_YYY_add(&z3,&z3,&t1);        // z3=z3-z2
-		FP16_YYY_add(&z2,&z2,&t0);        // z2=z2-z0
+        FP16_YYY_mul(&(w->b),&(w->b),&t1);
+        FP16_YYY_add(&z3,&z3,&(w->c));
+        FP16_YYY_norm(&z3);
+        FP16_YYY_pmul(&z3,&z3,&(y->b).a);
+        FP16_YYY_neg(&t0,&z0);
+        FP16_YYY_neg(&t1,&z2);
 
-		FP16_YYY_add(&t0,&(w->a),&(w->c));
-		FP16_YYY_norm(&t0);
-		FP16_YYY_norm(&z3);
+        FP16_YYY_add(&(w->b),&(w->b),&t0);   // z1=z1-z0
+        FP16_YYY_add(&(w->b),&(w->b),&t1);   // z1=z1-z2
 
-		FP16_YYY_mul(&t0,&(y->a),&t0);
-		FP16_YYY_add(&(w->c),&z2,&t0);
+        FP16_YYY_add(&z3,&z3,&t1);        // z3=z3-z2
+        FP16_YYY_add(&z2,&z2,&t0);        // z2=z2-z0
 
-		FP16_YYY_times_i(&z3);
-		FP16_YYY_add(&(w->a),&z0,&z3);
+        FP16_YYY_add(&t0,&(w->a),&(w->c));
+        FP16_YYY_norm(&t0);
+        FP16_YYY_norm(&z3);
+
+        FP16_YYY_mul(&t0,&(y->a),&t0);
+        FP16_YYY_add(&(w->c),&z2,&t0);
+
+        FP16_YYY_times_i(&z3);
+        FP16_YYY_add(&(w->a),&z0,&z3);
 #endif
 #if SEXTIC_TWIST_ZZZ == M_TYPE
-		FP16_YYY_mul(&z0,&(w->a),&(y->a));
-		FP16_YYY_add(&t0,&(w->a),&(w->b));
-		FP16_YYY_norm(&t0);
+        FP16_YYY_mul(&z0,&(w->a),&(y->a));
+        FP16_YYY_add(&t0,&(w->a),&(w->b));
+        FP16_YYY_norm(&t0);
 
-		FP16_YYY_mul(&z1,&t0,&(y->a));
-		FP16_YYY_add(&t0,&(w->b),&(w->c));
-		FP16_YYY_norm(&t0);
+        FP16_YYY_mul(&z1,&t0,&(y->a));
+        FP16_YYY_add(&t0,&(w->b),&(w->c));
+        FP16_YYY_norm(&t0);
 
-		FP16_YYY_pmul(&z3,&t0,&(y->c).b);
-		FP16_YYY_times_i(&z3);
+        FP16_YYY_pmul(&z3,&t0,&(y->c).b);
+        FP16_YYY_times_i(&z3);
 
-		FP16_YYY_neg(&t0,&z0);
-		FP16_YYY_add(&z1,&z1,&t0);   // z1=z1-z0
+        FP16_YYY_neg(&t0,&z0);
+        FP16_YYY_add(&z1,&z1,&t0);   // z1=z1-z0
 
-		FP16_YYY_copy(&(w->b),&z1);
-		FP16_YYY_copy(&z2,&t0);
+        FP16_YYY_copy(&(w->b),&z1);
+        FP16_YYY_copy(&z2,&t0);
 
-		FP16_YYY_add(&t0,&(w->a),&(w->c));
-		FP16_YYY_add(&t1,&(y->a),&(y->c));
+        FP16_YYY_add(&t0,&(w->a),&(w->c));
+        FP16_YYY_add(&t1,&(y->a),&(y->c));
 
-		FP16_YYY_norm(&t0);
-		FP16_YYY_norm(&t1);
+        FP16_YYY_norm(&t0);
+        FP16_YYY_norm(&t1);
 
-		FP16_YYY_mul(&t0,&t1,&t0);
-		FP16_YYY_add(&z2,&z2,&t0);
+        FP16_YYY_mul(&t0,&t1,&t0);
+        FP16_YYY_add(&z2,&z2,&t0);
 
-		FP16_YYY_pmul(&t0,&(w->c),&(y->c).b);
-		FP16_YYY_times_i(&t0);
-		FP16_YYY_neg(&t1,&t0);
-		FP16_YYY_times_i(&t0);
+        FP16_YYY_pmul(&t0,&(w->c),&(y->c).b);
+        FP16_YYY_times_i(&t0);
+        FP16_YYY_neg(&t1,&t0);
+        FP16_YYY_times_i(&t0);
 
-		FP16_YYY_add(&(w->c),&z2,&t1);
-		FP16_YYY_add(&z3,&z3,&t1);
+        FP16_YYY_add(&(w->c),&z2,&t1);
+        FP16_YYY_add(&z3,&z3,&t1);
 
-		FP16_YYY_add(&(w->b),&(w->b),&t0);
-		FP16_YYY_norm(&z3);
-		FP16_YYY_times_i(&z3);
-		FP16_YYY_add(&(w->a),&z0,&z3);
+        FP16_YYY_add(&(w->b),&(w->b),&t0);
+        FP16_YYY_norm(&z3);
+        FP16_YYY_times_i(&z3);
+        FP16_YYY_add(&(w->a),&z0,&z3);
 #endif
-	}
-	w->type=FP_DENSE;
+    }
+    w->type=AMCL_FP_DENSE;
     FP48_YYY_norm(w);
 }
 
 /* FP48 multiplication w=w*y */
 /* catering for special case that arises from special form of ATE pairing line function */
-/* w and y are both sparser line functions - cost = 6m */ 
+/* w and y are both sparser line functions - cost = 6m */
 void FP48_YYY_smul(FP48_YYY *w,FP48_YYY *y)
 {
-	FP8_YYY w1,w2,w3,ta,tb,tc,td,te,t;
+    FP8_YYY w1,w2,w3,ta,tb,tc,td,te,t;
 
 
 #if SEXTIC_TWIST_ZZZ == D_TYPE
-	FP8_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
-	FP8_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
-	FP8_YYY_mul(&w3,&(w->b).a,&(y->b).a); // C1.C2
+    FP8_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
+    FP8_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
+    FP8_YYY_mul(&w3,&(w->b).a,&(y->b).a); // C1.C2
 
-	FP8_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
-	FP8_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
-	FP8_YYY_norm(&ta);
-	FP8_YYY_norm(&tb);
-	FP8_YYY_mul(&tc,&ta,&tb);			// (A1+B1)(A2+B2)
-	FP8_YYY_add(&t,&w1,&w2);
-	FP8_YYY_neg(&t,&t);
-	FP8_YYY_add(&tc,&tc,&t);			// (A1+B1)(A2+B2)-A1.A2-B1*B2 =  (A1.B2+A2.B1)		
-				
-	FP8_YYY_add(&ta,&(w->a).a,&(w->b).a); // A1+C1
-	FP8_YYY_add(&tb,&(y->a).a,&(y->b).a); // A2+C2
-	FP8_YYY_norm(&ta);
-	FP8_YYY_norm(&tb);
-	FP8_YYY_mul(&td,&ta,&tb);			// (A1+C1)(A2+C2)
-	FP8_YYY_add(&t,&w1,&w3);
-	FP8_YYY_neg(&t,&t);
-	FP8_YYY_add(&td,&td,&t);			// (A1+C1)(A2+C2)-A1.A2-C1*C2 =  (A1.C2+A2.C1)		
+    FP8_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
+    FP8_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
+    FP8_YYY_norm(&ta);
+    FP8_YYY_norm(&tb);
+    FP8_YYY_mul(&tc,&ta,&tb);			// (A1+B1)(A2+B2)
+    FP8_YYY_add(&t,&w1,&w2);
+    FP8_YYY_neg(&t,&t);
+    FP8_YYY_add(&tc,&tc,&t);			// (A1+B1)(A2+B2)-A1.A2-B1*B2 =  (A1.B2+A2.B1)
 
-	FP8_YYY_add(&ta,&(w->a).b,&(w->b).a); // B1+C1
-	FP8_YYY_add(&tb,&(y->a).b,&(y->b).a); // B2+C2
-	FP8_YYY_norm(&ta);
-	FP8_YYY_norm(&tb);
-	FP8_YYY_mul(&te,&ta,&tb);			// (B1+C1)(B2+C2)
-	FP8_YYY_add(&t,&w2,&w3);
-	FP8_YYY_neg(&t,&t);
-	FP8_YYY_add(&te,&te,&t);			// (B1+C1)(B2+C2)-B1.B2-C1*C2 =  (B1.C2+B2.C1)		
+    FP8_YYY_add(&ta,&(w->a).a,&(w->b).a); // A1+C1
+    FP8_YYY_add(&tb,&(y->a).a,&(y->b).a); // A2+C2
+    FP8_YYY_norm(&ta);
+    FP8_YYY_norm(&tb);
+    FP8_YYY_mul(&td,&ta,&tb);			// (A1+C1)(A2+C2)
+    FP8_YYY_add(&t,&w1,&w3);
+    FP8_YYY_neg(&t,&t);
+    FP8_YYY_add(&td,&td,&t);			// (A1+C1)(A2+C2)-A1.A2-C1*C2 =  (A1.C2+A2.C1)
 
-	FP8_YYY_times_i(&w2);
-	FP8_YYY_add(&w1,&w1,&w2);
-	FP16_YYY_from_FP8s(&(w->a),&w1,&tc);
-	FP16_YYY_from_FP8s(&(w->b),&td,&te); // only norm these 2
-	FP16_YYY_from_FP8(&(w->c),&w3);
+    FP8_YYY_add(&ta,&(w->a).b,&(w->b).a); // B1+C1
+    FP8_YYY_add(&tb,&(y->a).b,&(y->b).a); // B2+C2
+    FP8_YYY_norm(&ta);
+    FP8_YYY_norm(&tb);
+    FP8_YYY_mul(&te,&ta,&tb);			// (B1+C1)(B2+C2)
+    FP8_YYY_add(&t,&w2,&w3);
+    FP8_YYY_neg(&t,&t);
+    FP8_YYY_add(&te,&te,&t);			// (B1+C1)(B2+C2)-B1.B2-C1*C2 =  (B1.C2+B2.C1)
 
-	FP16_YYY_norm(&(w->a));
-	FP16_YYY_norm(&(w->b));
+    FP8_YYY_times_i(&w2);
+    FP8_YYY_add(&w1,&w1,&w2);
+    FP16_YYY_from_FP8s(&(w->a),&w1,&tc);
+    FP16_YYY_from_FP8s(&(w->b),&td,&te); // only norm these 2
+    FP16_YYY_from_FP8(&(w->c),&w3);
+
+    FP16_YYY_norm(&(w->a));
+    FP16_YYY_norm(&(w->b));
 #endif
 #if SEXTIC_TWIST_ZZZ == M_TYPE
-	FP8_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
-	FP8_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
-	FP8_YYY_mul(&w3,&(w->c).b,&(y->c).b); // F1.F2
+    FP8_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
+    FP8_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
+    FP8_YYY_mul(&w3,&(w->c).b,&(y->c).b); // F1.F2
 
-	FP8_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
-	FP8_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
-	FP8_YYY_norm(&ta);
-	FP8_YYY_norm(&tb);
-	FP8_YYY_mul(&tc,&ta,&tb);			// (A1+B1)(A2+B2)
-	FP8_YYY_add(&t,&w1,&w2);
-	FP8_YYY_neg(&t,&t);
-	FP8_YYY_add(&tc,&tc,&t);			// (A1+B1)(A2+B2)-A1.A2-B1*B2 =  (A1.B2+A2.B1)		
-				
-	FP8_YYY_add(&ta,&(w->a).a,&(w->c).b); // A1+F1
-	FP8_YYY_add(&tb,&(y->a).a,&(y->c).b); // A2+F2
-	FP8_YYY_norm(&ta);
-	FP8_YYY_norm(&tb);
-	FP8_YYY_mul(&td,&ta,&tb);			// (A1+F1)(A2+F2)
-	FP8_YYY_add(&t,&w1,&w3);
-	FP8_YYY_neg(&t,&t);
-	FP8_YYY_add(&td,&td,&t);			// (A1+F1)(A2+F2)-A1.A2-F1*F2 =  (A1.F2+A2.F1)		
+    FP8_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
+    FP8_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
+    FP8_YYY_norm(&ta);
+    FP8_YYY_norm(&tb);
+    FP8_YYY_mul(&tc,&ta,&tb);			// (A1+B1)(A2+B2)
+    FP8_YYY_add(&t,&w1,&w2);
+    FP8_YYY_neg(&t,&t);
+    FP8_YYY_add(&tc,&tc,&t);			// (A1+B1)(A2+B2)-A1.A2-B1*B2 =  (A1.B2+A2.B1)
 
-	FP8_YYY_add(&ta,&(w->a).b,&(w->c).b); // B1+F1
-	FP8_YYY_add(&tb,&(y->a).b,&(y->c).b); // B2+F2
-	FP8_YYY_norm(&ta);
-	FP8_YYY_norm(&tb);
-	FP8_YYY_mul(&te,&ta,&tb);			// (B1+F1)(B2+F2)
-	FP8_YYY_add(&t,&w2,&w3);
-	FP8_YYY_neg(&t,&t);
-	FP8_YYY_add(&te,&te,&t);			// (B1+F1)(B2+F2)-B1.B2-F1*F2 =  (B1.F2+B2.F1)	
+    FP8_YYY_add(&ta,&(w->a).a,&(w->c).b); // A1+F1
+    FP8_YYY_add(&tb,&(y->a).a,&(y->c).b); // A2+F2
+    FP8_YYY_norm(&ta);
+    FP8_YYY_norm(&tb);
+    FP8_YYY_mul(&td,&ta,&tb);			// (A1+F1)(A2+F2)
+    FP8_YYY_add(&t,&w1,&w3);
+    FP8_YYY_neg(&t,&t);
+    FP8_YYY_add(&td,&td,&t);			// (A1+F1)(A2+F2)-A1.A2-F1*F2 =  (A1.F2+A2.F1)
 
-	FP8_YYY_times_i(&w2);
-	FP8_YYY_add(&w1,&w1,&w2);
-	FP16_YYY_from_FP8s(&(w->a),&w1,&tc);
+    FP8_YYY_add(&ta,&(w->a).b,&(w->c).b); // B1+F1
+    FP8_YYY_add(&tb,&(y->a).b,&(y->c).b); // B2+F2
+    FP8_YYY_norm(&ta);
+    FP8_YYY_norm(&tb);
+    FP8_YYY_mul(&te,&ta,&tb);			// (B1+F1)(B2+F2)
+    FP8_YYY_add(&t,&w2,&w3);
+    FP8_YYY_neg(&t,&t);
+    FP8_YYY_add(&te,&te,&t);			// (B1+F1)(B2+F2)-B1.B2-F1*F2 =  (B1.F2+B2.F1)
 
-	FP8_YYY_times_i(&w3);
-	FP8_YYY_norm(&w3);
-	FP16_YYY_from_FP8H(&(w->b),&w3);
+    FP8_YYY_times_i(&w2);
+    FP8_YYY_add(&w1,&w1,&w2);
+    FP16_YYY_from_FP8s(&(w->a),&w1,&tc);
 
-	FP8_YYY_norm(&te);
-	FP8_YYY_times_i(&te);
-	FP16_YYY_from_FP8s(&(w->c),&te,&td);
+    FP8_YYY_times_i(&w3);
+    FP8_YYY_norm(&w3);
+    FP16_YYY_from_FP8H(&(w->b),&w3);
 
-	FP16_YYY_norm(&(w->a));
-	FP16_YYY_norm(&(w->c));
+    FP8_YYY_norm(&te);
+    FP8_YYY_times_i(&te);
+    FP16_YYY_from_FP8s(&(w->c),&te,&td);
+
+    FP16_YYY_norm(&(w->a));
+    FP16_YYY_norm(&(w->c));
 #endif
 
-	w->type=FP_SPARSE;
+    w->type=AMCL_FP_SPARSE;
 }
 
 
@@ -580,18 +582,18 @@
     FP16_YYY_mul(&f1,&(x->b),&(x->c));
     FP16_YYY_times_i(&f1);
     FP16_YYY_sub(&f0,&f0,&f1);  /* y.a */
-	FP16_YYY_norm(&f0); 		
+    FP16_YYY_norm(&f0);
 
     FP16_YYY_sqr(&f1,&(x->c));
     FP16_YYY_times_i(&f1);
     FP16_YYY_mul(&f2,&(x->a),&(x->b));
     FP16_YYY_sub(&f1,&f1,&f2);  /* y.b */
-	FP16_YYY_norm(&f1); 
+    FP16_YYY_norm(&f1);
 
     FP16_YYY_sqr(&f2,&(x->b));
     FP16_YYY_mul(&f3,&(x->a),&(x->c));
     FP16_YYY_sub(&f2,&f2,&f3);  /* y.c */
-	FP16_YYY_norm(&f2); 
+    FP16_YYY_norm(&f2);
 
     FP16_YYY_mul(&f3,&(x->b),&f2);
     FP16_YYY_times_i(&f3);
@@ -601,13 +603,13 @@
     FP16_YYY_times_i(&(w->c));
 
     FP16_YYY_add(&f3,&(w->c),&f3);
-	FP16_YYY_norm(&f3);
-	
+    FP16_YYY_norm(&f3);
+
     FP16_YYY_inv(&f3,&f3);
     FP16_YYY_mul(&(w->a),&f0,&f3);
     FP16_YYY_mul(&(w->b),&f1,&f3);
     FP16_YYY_mul(&(w->c),&f2,&f3);
-	w->type=FP_DENSE;
+    w->type=AMCL_FP_DENSE;
 }
 
 /* constant time powering by small integer of max length bts */
@@ -634,9 +636,9 @@
 void FP48_YYY_compow(FP16_YYY *c,FP48_YYY *x,BIG_XXX e,BIG_XXX r)
 {
     FP48_YYY g1,g2;
-	FP16_YYY cp,cpm1,cpm2;
+    FP16_YYY cp,cpm1,cpm2;
     FP2_YYY  f;
-	BIG_XXX q,a,b,m;
+    BIG_XXX q,a,b,m;
 
     BIG_XXX_rcopy(a,Fra_YYY);
     BIG_XXX_rcopy(b,Frb_YYY);
@@ -645,7 +647,7 @@
     BIG_XXX_rcopy(q,Modulus_YYY);
 
     FP48_YYY_copy(&g1,x);
-	FP48_YYY_copy(&g2,x);
+    FP48_YYY_copy(&g2,x);
 
     BIG_XXX_copy(m,q);
     BIG_XXX_mod(m,r);
@@ -658,11 +660,11 @@
 
     FP48_YYY_trace(c,&g1);
 
-	if (BIG_XXX_iszilch(b))
-	{
-		FP16_YYY_xtr_pow(c,c,e);
-		return;
-	}
+    if (BIG_XXX_iszilch(b))
+    {
+        FP16_YYY_xtr_pow(c,c,e);
+        return;
+    }
 
     FP48_YYY_frob(&g2,&f,1);
     FP48_YYY_trace(&cp,&g2);
@@ -684,32 +686,32 @@
     FP48_YYY w,sf;
     BIG_XXX b1,b3;
     int i,nb,bt;
-	BIG_XXX_copy(b1,b);
+    BIG_XXX_copy(b1,b);
     BIG_XXX_norm(b1);
-	BIG_XXX_pmul(b3,b1,3);
-	BIG_XXX_norm(b3);
+    BIG_XXX_pmul(b3,b1,3);
+    BIG_XXX_norm(b3);
 
-	FP48_YYY_copy(&sf,a);
-	FP48_YYY_norm(&sf);
+    FP48_YYY_copy(&sf,a);
+    FP48_YYY_norm(&sf);
     FP48_YYY_copy(&w,&sf);
 
-	nb=BIG_XXX_nbits(b3);
-	for (i=nb-2;i>=1;i--)
-	{
-		FP48_YYY_usqr(&w,&w);
-		bt=BIG_XXX_bit(b3,i)-BIG_XXX_bit(b1,i);
-		if (bt==1)
-			FP48_YYY_mul(&w,&sf);
-		if (bt==-1)
-		{
-			FP48_YYY_conj(&sf,&sf);
-			FP48_YYY_mul(&w,&sf);
-			FP48_YYY_conj(&sf,&sf);
-		}
-	}
+    nb=BIG_XXX_nbits(b3);
+    for (i=nb-2; i>=1; i--)
+    {
+        FP48_YYY_usqr(&w,&w);
+        bt=BIG_XXX_bit(b3,i)-BIG_XXX_bit(b1,i);
+        if (bt==1)
+            FP48_YYY_mul(&w,&sf);
+        if (bt==-1)
+        {
+            FP48_YYY_conj(&sf,&sf);
+            FP48_YYY_mul(&w,&sf);
+            FP48_YYY_conj(&sf,&sf);
+        }
+    }
 
-	FP48_YYY_copy(r,&w);
-	FP48_YYY_reduce(r);
+    FP48_YYY_copy(r,&w);
+    FP48_YYY_reduce(r);
 }
 
 /* p=q0^u0.q1^u1.q2^u2.q3^u3... */
@@ -720,8 +722,8 @@
 void FP48_YYY_pow16(FP48_YYY *p,FP48_YYY *q,BIG_XXX u[16])
 {
     int i,j,k,nb,pb1,pb2,pb3,pb4,bt;
-	FP48_YYY g1[8],g2[8],g3[8],g4[8],r;
-	BIG_XXX t[16],mt;
+    FP48_YYY g1[8],g2[8],g3[8],g4[8],r;
+    BIG_XXX t[16],mt;
     sign8 w1[NLEN_XXX*BASEBITS_XXX+1];
     sign8 s1[NLEN_XXX*BASEBITS_XXX+1];
     sign8 w2[NLEN_XXX*BASEBITS_XXX+1];
@@ -731,7 +733,7 @@
     sign8 w4[NLEN_XXX*BASEBITS_XXX+1];
     sign8 s4[NLEN_XXX*BASEBITS_XXX+1];
     FP_YYY fx,fy;
-	FP2_YYY  X;
+    FP2_YYY  X;
 
     FP_YYY_rcopy(&fx,Fra_YYY);
     FP_YYY_rcopy(&fy,Frb_YYY);
@@ -743,50 +745,50 @@
 // Precomputed table
     FP48_YYY_copy(&g1[0],&q[0]); // q[0]
     FP48_YYY_copy(&g1[1],&g1[0]);
-	FP48_YYY_mul(&g1[1],&q[1]);	// q[0].q[1]
+    FP48_YYY_mul(&g1[1],&q[1]);	// q[0].q[1]
     FP48_YYY_copy(&g1[2],&g1[0]);
-	FP48_YYY_mul(&g1[2],&q[2]);	// q[0].q[2]
-	FP48_YYY_copy(&g1[3],&g1[1]);
-	FP48_YYY_mul(&g1[3],&q[2]);	// q[0].q[1].q[2]
-	FP48_YYY_copy(&g1[4],&g1[0]);
-	FP48_YYY_mul(&g1[4],&q[3]);  // q[0].q[3]
-	FP48_YYY_copy(&g1[5],&g1[1]);
-	FP48_YYY_mul(&g1[5],&q[3]);	// q[0].q[1].q[3]
-	FP48_YYY_copy(&g1[6],&g1[2]);
-	FP48_YYY_mul(&g1[6],&q[3]);	// q[0].q[2].q[3]
-	FP48_YYY_copy(&g1[7],&g1[3]);
-	FP48_YYY_mul(&g1[7],&q[3]);	// q[0].q[1].q[2].q[3]
+    FP48_YYY_mul(&g1[2],&q[2]);	// q[0].q[2]
+    FP48_YYY_copy(&g1[3],&g1[1]);
+    FP48_YYY_mul(&g1[3],&q[2]);	// q[0].q[1].q[2]
+    FP48_YYY_copy(&g1[4],&g1[0]);
+    FP48_YYY_mul(&g1[4],&q[3]);  // q[0].q[3]
+    FP48_YYY_copy(&g1[5],&g1[1]);
+    FP48_YYY_mul(&g1[5],&q[3]);	// q[0].q[1].q[3]
+    FP48_YYY_copy(&g1[6],&g1[2]);
+    FP48_YYY_mul(&g1[6],&q[3]);	// q[0].q[2].q[3]
+    FP48_YYY_copy(&g1[7],&g1[3]);
+    FP48_YYY_mul(&g1[7],&q[3]);	// q[0].q[1].q[2].q[3]
 
 // Use Frobenius
 
-	for (i=0;i<8;i++)
-	{
-		FP48_YYY_copy(&g2[i],&g1[i]);
-		FP48_YYY_frob(&g2[i],&X,4);
+    for (i=0; i<8; i++)
+    {
+        FP48_YYY_copy(&g2[i],&g1[i]);
+        FP48_YYY_frob(&g2[i],&X,4);
 
-		FP48_YYY_copy(&g3[i],&g2[i]);
-		FP48_YYY_frob(&g3[i],&X,4);
+        FP48_YYY_copy(&g3[i],&g2[i]);
+        FP48_YYY_frob(&g3[i],&X,4);
 
-		FP48_YYY_copy(&g4[i],&g3[i]);
-		FP48_YYY_frob(&g4[i],&X,4);
-	}
+        FP48_YYY_copy(&g4[i],&g3[i]);
+        FP48_YYY_frob(&g4[i],&X,4);
+    }
 
 // Make them odd
-	pb1=1-BIG_XXX_parity(t[0]);
-	BIG_XXX_inc(t[0],pb1);
-	BIG_XXX_norm(t[0]);
+    pb1=1-BIG_XXX_parity(t[0]);
+    BIG_XXX_inc(t[0],pb1);
+    BIG_XXX_norm(t[0]);
 
-	pb2=1-BIG_XXX_parity(t[4]);
-	BIG_XXX_inc(t[4],pb2);
-	BIG_XXX_norm(t[4]);
+    pb2=1-BIG_XXX_parity(t[4]);
+    BIG_XXX_inc(t[4],pb2);
+    BIG_XXX_norm(t[4]);
 
-	pb3=1-BIG_XXX_parity(t[8]);
-	BIG_XXX_inc(t[8],pb3);
-	BIG_XXX_norm(t[8]);
+    pb3=1-BIG_XXX_parity(t[8]);
+    BIG_XXX_inc(t[8],pb3);
+    BIG_XXX_norm(t[8]);
 
-	pb4=1-BIG_XXX_parity(t[12]);
-	BIG_XXX_inc(t[12],pb4);
-	BIG_XXX_norm(t[12]);
+    pb4=1-BIG_XXX_parity(t[12]);
+    BIG_XXX_inc(t[12],pb4);
+    BIG_XXX_norm(t[12]);
 
 // Number of bits
     BIG_XXX_zero(mt);
@@ -796,90 +798,90 @@
     }
     nb=1+BIG_XXX_nbits(mt);
 
-// Sign pivot 
-	s1[nb-1]=1;
-	s2[nb-1]=1;
-	s3[nb-1]=1;
-	s4[nb-1]=1;
-	for (i=0;i<nb-1;i++)
-	{
+// Sign pivot
+    s1[nb-1]=1;
+    s2[nb-1]=1;
+    s3[nb-1]=1;
+    s4[nb-1]=1;
+    for (i=0; i<nb-1; i++)
+    {
         BIG_XXX_fshr(t[0],1);
-		s1[i]=2*BIG_XXX_parity(t[0])-1;
+        s1[i]=2*BIG_XXX_parity(t[0])-1;
         BIG_XXX_fshr(t[4],1);
-		s2[i]=2*BIG_XXX_parity(t[4])-1;
+        s2[i]=2*BIG_XXX_parity(t[4])-1;
         BIG_XXX_fshr(t[8],1);
-		s3[i]=2*BIG_XXX_parity(t[8])-1;
+        s3[i]=2*BIG_XXX_parity(t[8])-1;
         BIG_XXX_fshr(t[12],1);
-		s4[i]=2*BIG_XXX_parity(t[12])-1;
-	}
+        s4[i]=2*BIG_XXX_parity(t[12])-1;
+    }
 
 // Recoded exponents
     for (i=0; i<nb; i++)
     {
-		w1[i]=0;
-		k=1;
-		for (j=1; j<4; j++)
-		{
-			bt=s1[i]*BIG_XXX_parity(t[j]);
-			BIG_XXX_fshr(t[j],1);
+        w1[i]=0;
+        k=1;
+        for (j=1; j<4; j++)
+        {
+            bt=s1[i]*BIG_XXX_parity(t[j]);
+            BIG_XXX_fshr(t[j],1);
 
-			BIG_XXX_dec(t[j],(bt>>1));
-			BIG_XXX_norm(t[j]);
-			w1[i]+=bt*k;
-			k*=2;
+            BIG_XXX_dec(t[j],(bt>>1));
+            BIG_XXX_norm(t[j]);
+            w1[i]+=bt*k;
+            k*=2;
         }
 
-		w2[i]=0;
-		k=1;
-		for (j=5; j<8; j++)
-		{
-			bt=s2[i]*BIG_XXX_parity(t[j]);
-			BIG_XXX_fshr(t[j],1);
+        w2[i]=0;
+        k=1;
+        for (j=5; j<8; j++)
+        {
+            bt=s2[i]*BIG_XXX_parity(t[j]);
+            BIG_XXX_fshr(t[j],1);
 
-			BIG_XXX_dec(t[j],(bt>>1));
-			BIG_XXX_norm(t[j]);
-			w2[i]+=bt*k;
-			k*=2;
+            BIG_XXX_dec(t[j],(bt>>1));
+            BIG_XXX_norm(t[j]);
+            w2[i]+=bt*k;
+            k*=2;
         }
 
-		w3[i]=0;
-		k=1;
-		for (j=9; j<12; j++)
-		{
-			bt=s3[i]*BIG_XXX_parity(t[j]);
-			BIG_XXX_fshr(t[j],1);
+        w3[i]=0;
+        k=1;
+        for (j=9; j<12; j++)
+        {
+            bt=s3[i]*BIG_XXX_parity(t[j]);
+            BIG_XXX_fshr(t[j],1);
 
-			BIG_XXX_dec(t[j],(bt>>1));
-			BIG_XXX_norm(t[j]);
-			w3[i]+=bt*k;
-			k*=2;
+            BIG_XXX_dec(t[j],(bt>>1));
+            BIG_XXX_norm(t[j]);
+            w3[i]+=bt*k;
+            k*=2;
         }
 
-		w4[i]=0;
-		k=1;
-		for (j=13; j<16; j++)
-		{
-			bt=s4[i]*BIG_XXX_parity(t[j]);
-			BIG_XXX_fshr(t[j],1);
+        w4[i]=0;
+        k=1;
+        for (j=13; j<16; j++)
+        {
+            bt=s4[i]*BIG_XXX_parity(t[j]);
+            BIG_XXX_fshr(t[j],1);
 
-			BIG_XXX_dec(t[j],(bt>>1));
-			BIG_XXX_norm(t[j]);
-			w4[i]+=bt*k;
-			k*=2;
+            BIG_XXX_dec(t[j],(bt>>1));
+            BIG_XXX_norm(t[j]);
+            w4[i]+=bt*k;
+            k*=2;
         }
-    }	
+    }
 
 // Main loop
-	FP48_YYY_select(p,g1,2*w1[nb-1]+1);
-	FP48_YYY_select(&r,g2,2*w2[nb-1]+1);
-	FP48_YYY_mul(p,&r);
-	FP48_YYY_select(&r,g3,2*w3[nb-1]+1);
-	FP48_YYY_mul(p,&r);
-	FP48_YYY_select(&r,g4,2*w4[nb-1]+1);
-	FP48_YYY_mul(p,&r);
+    FP48_YYY_select(p,g1,2*w1[nb-1]+1);
+    FP48_YYY_select(&r,g2,2*w2[nb-1]+1);
+    FP48_YYY_mul(p,&r);
+    FP48_YYY_select(&r,g3,2*w3[nb-1]+1);
+    FP48_YYY_mul(p,&r);
+    FP48_YYY_select(&r,g4,2*w4[nb-1]+1);
+    FP48_YYY_mul(p,&r);
     for (i=nb-2; i>=0; i--)
     {
-		FP48_YYY_usqr(p,p);
+        FP48_YYY_usqr(p,p);
         FP48_YYY_select(&r,g1,2*w1[i]+s1[i]);
         FP48_YYY_mul(p,&r);
         FP48_YYY_select(&r,g2,2*w2[i]+s2[i]);
@@ -891,49 +893,52 @@
     }
 
 // apply correction
-	FP48_YYY_conj(&r,&q[0]);   
-	FP48_YYY_mul(&r,p);
-	FP48_YYY_cmove(p,&r,pb1);
-	FP48_YYY_conj(&r,&q[4]);   
-	FP48_YYY_mul(&r,p);
-	FP48_YYY_cmove(p,&r,pb2);
+    FP48_YYY_conj(&r,&q[0]);
+    FP48_YYY_mul(&r,p);
+    FP48_YYY_cmove(p,&r,pb1);
+    FP48_YYY_conj(&r,&q[4]);
+    FP48_YYY_mul(&r,p);
+    FP48_YYY_cmove(p,&r,pb2);
 
-	FP48_YYY_conj(&r,&q[8]);   
-	FP48_YYY_mul(&r,p);
-	FP48_YYY_cmove(p,&r,pb3);
-	FP48_YYY_conj(&r,&q[12]);   
-	FP48_YYY_mul(&r,p);
-	FP48_YYY_cmove(p,&r,pb4);
+    FP48_YYY_conj(&r,&q[8]);
+    FP48_YYY_mul(&r,p);
+    FP48_YYY_cmove(p,&r,pb3);
+    FP48_YYY_conj(&r,&q[12]);
+    FP48_YYY_mul(&r,p);
+    FP48_YYY_cmove(p,&r,pb4);
 
-	FP48_YYY_reduce(p);
+    FP48_YYY_reduce(p);
 }
 
 /* Set w=w^p using Frobenius */
 /* SU= 160 */
 void FP48_YYY_frob(FP48_YYY *w,FP2_YYY  *f,int n)
 {
-	int i;
-	FP8_YYY X2,X4;
-	FP4_YYY F;
+    int i;
     FP2_YYY  f3,f2;				// f=(1+i)^(p-19)/24
-    FP2_YYY_sqr(&f2,f);     // 
+    FP2_YYY_sqr(&f2,f);     //
     FP2_YYY_mul(&f3,&f2,f); // f3=f^3=(1+i)^(p-19)/8
 
-	FP2_YYY_mul_ip(&f3);
-	FP2_YYY_norm(&f3);
-	FP2_YYY_mul_ip(&f3);    // f3 = (1+i)^16/8.(1+i)^(p-19)/8 = (1+i)^(p-3)/8 
-	FP2_YYY_norm(&f3);
+    FP2_YYY_mul_ip(&f3);
+    FP2_YYY_norm(&f3);
+    FP2_YYY_mul_ip(&f3);    // f3 = (1+i)^16/8.(1+i)^(p-19)/8 = (1+i)^(p-3)/8
+    FP2_YYY_norm(&f3);
 
-	for (i=0;i<n;i++)
-	{
-		FP16_YYY_frob(&(w->a),&f3);   // a=a^p
-		FP16_YYY_frob(&(w->b),&f3);   // b=b^p
-		FP16_YYY_frob(&(w->c),&f3);   // c=c^p
-  
-		FP16_YYY_qmul(&(w->b),&(w->b),f); FP16_YYY_times_i4(&(w->b)); FP16_YYY_times_i2(&(w->b)); 
-		FP16_YYY_qmul(&(w->c),&(w->c),&f2); FP16_YYY_times_i4(&(w->c)); FP16_YYY_times_i4(&(w->c)); FP16_YYY_times_i4(&(w->c)); 
-	}
-	w->type=FP_DENSE;
+    for (i=0; i<n; i++)
+    {
+        FP16_YYY_frob(&(w->a),&f3);   // a=a^p
+        FP16_YYY_frob(&(w->b),&f3);   // b=b^p
+        FP16_YYY_frob(&(w->c),&f3);   // c=c^p
+
+        FP16_YYY_qmul(&(w->b),&(w->b),f);
+        FP16_YYY_times_i4(&(w->b));
+        FP16_YYY_times_i2(&(w->b));
+        FP16_YYY_qmul(&(w->c),&(w->c),&f2);
+        FP16_YYY_times_i4(&(w->c));
+        FP16_YYY_times_i4(&(w->c));
+        FP16_YYY_times_i4(&(w->c));
+    }
+    w->type=AMCL_FP_DENSE;
 }
 
 /* SU= 8 */
@@ -985,10 +990,10 @@
     BIG_XXX_toBytes(&(W->val[0]),a);
     FP_YYY_redc(a,&(g->a.a.a.a.b));
     BIG_XXX_toBytes(&(W->val[MODBYTES_XXX]),a);
-    
-	FP_YYY_redc(a,&(g->a.a.a.b.a));
+
+    FP_YYY_redc(a,&(g->a.a.a.b.a));
     BIG_XXX_toBytes(&(W->val[2*MODBYTES_XXX]),a);
-	FP_YYY_redc(a,&(g->a.a.a.b.b));
+    FP_YYY_redc(a,&(g->a.a.a.b.b));
     BIG_XXX_toBytes(&(W->val[3*MODBYTES_XXX]),a);
 
     FP_YYY_redc(a,&(g->a.a.b.a.a));
@@ -1106,7 +1111,7 @@
 /* Restore g from octet string w */
 void FP48_YYY_fromOctet(FP48_YYY *g,octet *W)
 {
-	BIG_XXX b;
+    BIG_XXX b;
 
     BIG_XXX_fromBytes(b,&W->val[0]);
     FP_YYY_nres(&(g->a.a.a.a.a),b);
@@ -1236,6 +1241,6 @@
     FP16_YYY_cmove(&(f->a),&(g->a),d);
     FP16_YYY_cmove(&(f->b),&(g->b),d);
     FP16_YYY_cmove(&(f->c),&(g->c),d);
-	d=~(d-1);
-	f->type^=(f->type^g->type)&d;
+    d=~(d-1);
+    f->type^=(f->type^g->type)&d;
 }
diff --git a/version3/c/fp48.h b/version3/c/fp48.h
index f445af7..93dc50d 100644
--- a/version3/c/fp48.h
+++ b/version3/c/fp48.h
@@ -12,7 +12,7 @@
     FP16_YYY a; /**< first part of FP12 */
     FP16_YYY b; /**< second part of FP12 */
     FP16_YYY c; /**< third part of FP12 */
-	int type;
+    int type;
 } FP48_YYY;
 
 extern const BIG_XXX Fra_YYY; /**< real part of BN curve Frobenius Constant */
@@ -133,7 +133,7 @@
  */
 extern void FP48_YYY_pinpow(FP48_YYY *x,int i,int b);
 
-/**	@brief Raises an FP48 instance x to a BIG_XXX power, compressed to FP16 
+/**	@brief Raises an FP48 instance x to a BIG_XXX power, compressed to FP16
  *
 	@param c FP16 instance, on exit = x^(e mod r) as FP16
 	@param x FP48 input
diff --git a/version3/c/fp8.c b/version3/c/fp8.c
index 3786a7a..9fe0452 100644
--- a/version3/c/fp8.c
+++ b/version3/c/fp8.c
@@ -100,14 +100,14 @@
 {
     /* Just one field neg */
     FP4_YYY m,t;
-	FP8_YYY_norm(x);
+    FP8_YYY_norm(x);
     FP4_YYY_add(&m,&(x->a),&(x->b));
-	FP4_YYY_norm(&m);
+    FP4_YYY_norm(&m);
     FP4_YYY_neg(&m,&m);
     FP4_YYY_add(&t,&m,&(x->b));
     FP4_YYY_add(&(w->b),&m,&(x->a));
     FP4_YYY_copy(&(w->a),&t);
-	FP8_YYY_norm(w);
+    FP8_YYY_norm(w);
 }
 
 /* Set w=conj(x) */
@@ -115,7 +115,7 @@
 {
     FP4_YYY_copy(&(w->a), &(x->a));
     FP4_YYY_neg(&(w->b), &(x->b));
-	FP8_YYY_norm(w);
+    FP8_YYY_norm(w);
 }
 
 /* Set w=-conj(x) */
@@ -123,7 +123,7 @@
 {
     FP4_YYY_copy(&(w->b),&(x->b));
     FP4_YYY_neg(&(w->a), &(x->a));
-	FP8_YYY_norm(w);
+    FP8_YYY_norm(w);
 }
 
 /* Set w=x+y */
@@ -199,8 +199,8 @@
 
     FP4_YYY_add(&t2,&(x->a),&t2);
 
-	FP4_YYY_norm(&t1);  // 2
-	FP4_YYY_norm(&t2);  // 2
+    FP4_YYY_norm(&t1);  // 2
+    FP4_YYY_norm(&t2);  // 2
 
     FP4_YYY_mul(&(w->a),&t1,&t2);
 
@@ -209,7 +209,7 @@
 
     FP4_YYY_add(&t2,&t2,&t3);
 
-	FP4_YYY_norm(&t2);  // 2
+    FP4_YYY_norm(&t2);  // 2
     FP4_YYY_neg(&t2,&t2);
     FP4_YYY_add(&(w->a),&(w->a),&t2);  /* a=(a+b)(a+i^2.b)-i^2.ab-ab = a*a+ib*ib */
     FP4_YYY_add(&(w->b),&t3,&t3);  /* b=2ab */
@@ -223,23 +223,23 @@
 {
 
     FP4_YYY t1,t2,t3,t4;
-    FP4_YYY_mul(&t1,&(x->a),&(y->a)); 
-    FP4_YYY_mul(&t2,&(x->b),&(y->b)); 
+    FP4_YYY_mul(&t1,&(x->a),&(y->a));
+    FP4_YYY_mul(&t2,&(x->b),&(y->b));
 
     FP4_YYY_add(&t3,&(y->b),&(y->a));
     FP4_YYY_add(&t4,&(x->b),&(x->a));
 
-	FP4_YYY_norm(&t4); // 2
-	FP4_YYY_norm(&t3); // 2
+    FP4_YYY_norm(&t4); // 2
+    FP4_YYY_norm(&t3); // 2
 
     FP4_YYY_mul(&t4,&t4,&t3); /* (xa+xb)(ya+yb) */
 
-	FP4_YYY_neg(&t3,&t1);  // 1
-	FP4_YYY_add(&t4,&t4,&t3);  //t4E=3
+    FP4_YYY_neg(&t3,&t1);  // 1
+    FP4_YYY_add(&t4,&t4,&t3);  //t4E=3
     FP4_YYY_norm(&t4);
 
-	FP4_YYY_neg(&t3,&t2);  // 1
-	FP4_YYY_add(&(w->b),&t4,&t3); //wbE=3
+    FP4_YYY_neg(&t3,&t2);  // 1
+    FP4_YYY_add(&(w->b),&t4,&t3); //wbE=3
 
     FP4_YYY_times_i(&t2);
     FP4_YYY_add(&(w->a),&t2,&t1);
@@ -273,47 +273,48 @@
     FP4_YYY_sqr(&t1,&(x->a));
     FP4_YYY_sqr(&t2,&(x->b));
     FP4_YYY_times_i(&t2);
-	FP4_YYY_norm(&t2);
+    FP4_YYY_norm(&t2);
 
     FP4_YYY_sub(&t1,&t1,&t2);
-	FP4_YYY_norm(&t1);
+    FP4_YYY_norm(&t1);
     FP4_YYY_inv(&t1,&t1);
 
     FP4_YYY_mul(&(w->a),&t1,&(x->a));
     FP4_YYY_neg(&t1,&t1);
-	FP4_YYY_norm(&t1);
+    FP4_YYY_norm(&t1);
     FP4_YYY_mul(&(w->b),&t1,&(x->b));
 }
 
 /* w*=i where i = sqrt(sqrt(-1+sqrt(-1))) */
 void FP8_YYY_times_i(FP8_YYY *w)
 {
-	FP4_YYY s,t;
-	FP4_YYY_copy(&s,&(w->b));
-	FP4_YYY_copy(&t,&(w->a));
-	FP4_YYY_times_i(&s);
-	FP4_YYY_copy(&(w->a),&s);
-	FP4_YYY_copy(&(w->b),&t);
-	FP8_YYY_norm(w);
+    FP4_YYY s,t;
+    FP4_YYY_copy(&s,&(w->b));
+    FP4_YYY_copy(&t,&(w->a));
+    FP4_YYY_times_i(&s);
+    FP4_YYY_copy(&(w->a),&s);
+    FP4_YYY_copy(&(w->b),&t);
+    FP8_YYY_norm(w);
 }
 
 void FP8_YYY_times_i2(FP8_YYY *w)
 {
-	FP4_YYY_times_i(&(w->a));
-	FP4_YYY_times_i(&(w->b));
+    FP4_YYY_times_i(&(w->a));
+    FP4_YYY_times_i(&(w->b));
 }
 
 /* Set w=w^p using Frobenius */
 void FP8_YYY_frob(FP8_YYY *w,FP2_YYY *f)
-{ // f=(i+1)^(p-3)/4
-	FP2_YYY ff;
-	FP2_YYY_sqr(&ff,f);  // (i+1)^(p-3)/2
-	FP2_YYY_mul_ip(&ff); // (i+1)^(p-1)/2
-	FP2_YYY_norm(&ff);
-	FP4_YYY_frob(&(w->a),&ff);
-	FP4_YYY_frob(&(w->b),&ff);
-	FP4_YYY_pmul(&(w->b),&(w->b),f);  // times (1+i)^(p-3)/4
-	FP4_YYY_times_i(&(w->b));		// (i+1)^(p-1)/4
+{
+    // f=(i+1)^(p-3)/4
+    FP2_YYY ff;
+    FP2_YYY_sqr(&ff,f);  // (i+1)^(p-3)/2
+    FP2_YYY_mul_ip(&ff); // (i+1)^(p-1)/2
+    FP2_YYY_norm(&ff);
+    FP4_YYY_frob(&(w->a),&ff);
+    FP4_YYY_frob(&(w->b),&ff);
+    FP4_YYY_pmul(&(w->b),&(w->b),f);  // times (1+i)^(p-3)/4
+    FP4_YYY_times_i(&(w->b));		// (i+1)^(p-1)/4
 }
 
 /* Set r=a^b mod m */
@@ -327,7 +328,7 @@
 
     BIG_XXX_copy(z,b);
     FP8_YYY_copy(&w,a);
-	FP8_YYY_norm(&w);
+    FP8_YYY_norm(&w);
     FP8_YYY_one(r);
     BIG_XXX_norm(z);
     while(1)
@@ -350,10 +351,10 @@
 
     FP8_YYY_copy(r,x);
     FP8_YYY_sub(&t1,w,y);
-	FP8_YYY_norm(&t1);
+    FP8_YYY_norm(&t1);
     FP8_YYY_pmul(&t1,&t1,&(r->a));
     FP8_YYY_add(&t2,w,y);
-	FP8_YYY_norm(&t2);
+    FP8_YYY_norm(&t2);
     FP8_YYY_pmul(&t2,&t2,&(r->b));
     FP8_YYY_times_i(&t2);
 
@@ -371,7 +372,7 @@
     FP8_YYY_conj(&w,r);
     FP8_YYY_add(&w,&w,&w);
     FP8_YYY_sqr(r,r);
-	FP8_YYY_norm(&w);
+    FP8_YYY_norm(&w);
     FP8_YYY_sub(r,r,&w);
     FP8_YYY_reduce(r);    /* reduce here as multiple calls trigger automatic reductions */
 }
@@ -382,18 +383,18 @@
     int i,par,nb;
     BIG_XXX v;
     FP2_YYY w2;
-	FP4_YYY w4;
+    FP4_YYY w4;
     FP8_YYY t,a,b,c,sf;
 
     BIG_XXX_zero(v);
     BIG_XXX_inc(v,3);
-	BIG_XXX_norm(v);
+    BIG_XXX_norm(v);
     FP2_YYY_from_BIG(&w2,v);
     FP4_YYY_from_FP2(&w4,&w2);
     FP8_YYY_from_FP4(&a,&w4);
-	FP8_YYY_copy(&sf,x);
-	FP8_YYY_norm(&sf);
-	FP8_YYY_copy(&b,&sf);
+    FP8_YYY_copy(&sf,x);
+    FP8_YYY_norm(&sf);
+    FP8_YYY_copy(&b,&sf);
     FP8_YYY_xtr_D(&c,&sf);
 
     par=BIG_XXX_parity(n);
@@ -444,7 +445,7 @@
     BIG_XXX_copy(e,a);
     BIG_XXX_copy(d,b);
     BIG_XXX_norm(e);
-	BIG_XXX_norm(d);
+    BIG_XXX_norm(d);
     FP8_YYY_copy(&cu,ck);
     FP8_YYY_copy(&cv,cl);
     FP8_YYY_copy(&cumv,ckml);
@@ -584,93 +585,93 @@
 /* returns true if x is QR */
 int FP8_YYY_sqrt(FP8_YYY *r,FP8_YYY* x)
 {
-	FP4_YYY a,s,t;
+    FP4_YYY a,s,t;
 
-	FP8_YYY_copy(r,x);
-	if (FP8_YYY_iszilch(x))
-		return 1;
-	
-	FP4_YYY_copy(&a,&(x->a));
-	FP4_YYY_copy(&s,&(x->b));
+    FP8_YYY_copy(r,x);
+    if (FP8_YYY_iszilch(x))
+        return 1;
 
-	if (FP4_YYY_iszilch(&s))
-	{
-		if (FP4_YYY_sqrt(&t,&a))
-		{
-			FP8_YYY_from_FP4(r,&t);
-		}
-		else
-		{
-			FP4_YYY_div_i(&a);
-			FP4_YYY_sqrt(&t,&a);
-			FP8_YYY_from_FP4H(r,&t);
-		}
-		return 1;
-	}
+    FP4_YYY_copy(&a,&(x->a));
+    FP4_YYY_copy(&s,&(x->b));
 
-	FP4_YYY_sqr(&s,&s);  // s*=s
-	FP4_YYY_sqr(&a,&a);  // a*=a
-	FP4_YYY_times_i(&s);
-	FP4_YYY_norm(&s);
-	FP4_YYY_sub(&a,&a,&s); // a-=txx(s)
+    if (FP4_YYY_iszilch(&s))
+    {
+        if (FP4_YYY_sqrt(&t,&a))
+        {
+            FP8_YYY_from_FP4(r,&t);
+        }
+        else
+        {
+            FP4_YYY_div_i(&a);
+            FP4_YYY_sqrt(&t,&a);
+            FP8_YYY_from_FP4H(r,&t);
+        }
+        return 1;
+    }
 
-	if (!FP4_YYY_sqrt(&s,&a)) return 0;
+    FP4_YYY_sqr(&s,&s);  // s*=s
+    FP4_YYY_sqr(&a,&a);  // a*=a
+    FP4_YYY_times_i(&s);
+    FP4_YYY_norm(&s);
+    FP4_YYY_sub(&a,&a,&s); // a-=txx(s)
 
-	FP4_YYY_sqr(&t,&s);
+    if (!FP4_YYY_sqrt(&s,&a)) return 0;
+
+    FP4_YYY_sqr(&t,&s);
 
 
-	FP4_YYY_copy(&t,&(x->a));
-	FP4_YYY_add(&a,&t,&s);
-	FP4_YYY_norm(&a);
-	FP4_YYY_div2(&a,&a);
+    FP4_YYY_copy(&t,&(x->a));
+    FP4_YYY_add(&a,&t,&s);
+    FP4_YYY_norm(&a);
+    FP4_YYY_div2(&a,&a);
 
-	if (!FP4_YYY_sqrt(&a,&a))
-	{
-		FP4_YYY_sub(&a,&t,&s);
-		FP4_YYY_norm(&a);
-		FP4_YYY_div2(&a,&a);
-		if (!FP4_YYY_sqrt(&a,&a)) return 0;
-	}
+    if (!FP4_YYY_sqrt(&a,&a))
+    {
+        FP4_YYY_sub(&a,&t,&s);
+        FP4_YYY_norm(&a);
+        FP4_YYY_div2(&a,&a);
+        if (!FP4_YYY_sqrt(&a,&a)) return 0;
+    }
 
-	FP4_YYY_copy(&t,&(x->b));
-	FP4_YYY_add(&s,&a,&a);
-	FP4_YYY_inv(&s,&s);
+    FP4_YYY_copy(&t,&(x->b));
+    FP4_YYY_add(&s,&a,&a);
+    FP4_YYY_inv(&s,&s);
 
-	FP4_YYY_mul(&t,&t,&s);
-	FP8_YYY_from_FP4s(r,&a,&t);
+    FP4_YYY_mul(&t,&t,&s);
+    FP8_YYY_from_FP4s(r,&a,&t);
 
-	return 1;
+    return 1;
 
 }
 
 
 void FP8_YYY_div_i(FP8_YYY *f)
 {
-	FP4_YYY u,v;
-	FP4_YYY_copy(&u,&(f->a));
-	FP4_YYY_copy(&v,&(f->b));
-	FP4_YYY_div_i(&u);
-	FP4_YYY_copy(&(f->a),&v);
-	FP4_YYY_copy(&(f->b),&u);
+    FP4_YYY u,v;
+    FP4_YYY_copy(&u,&(f->a));
+    FP4_YYY_copy(&v,&(f->b));
+    FP4_YYY_div_i(&u);
+    FP4_YYY_copy(&(f->a),&v);
+    FP4_YYY_copy(&(f->b),&u);
 }
 
 void FP8_YYY_div_i2(FP8_YYY *f)
 {
-	FP4_YYY_div_i(&(f->a));
-	FP4_YYY_div_i(&(f->b));
+    FP4_YYY_div_i(&(f->a));
+    FP4_YYY_div_i(&(f->b));
 }
 
 
 void FP8_YYY_div_2i(FP8_YYY *f)
 {
-	FP4_YYY u,v;
-	FP4_YYY_copy(&u,&(f->a));
-	FP4_YYY_copy(&v,&(f->b));
-	FP4_YYY_div_2i(&u);
-	FP4_YYY_add(&v,&v,&v);
-	FP4_YYY_norm(&v);
-	FP4_YYY_copy(&(f->a),&v);
-	FP4_YYY_copy(&(f->b),&u);
+    FP4_YYY u,v;
+    FP4_YYY_copy(&u,&(f->a));
+    FP4_YYY_copy(&v,&(f->b));
+    FP4_YYY_div_2i(&u);
+    FP4_YYY_add(&v,&v,&v);
+    FP4_YYY_norm(&v);
+    FP4_YYY_copy(&(f->a),&v);
+    FP4_YYY_copy(&(f->b),&u);
 }
 
 #endif
diff --git a/version3/c/mpin.c b/version3/c/mpin.c
index 9d5d983..6c6ccdd 100644
--- a/version3/c/mpin.c
+++ b/version3/c/mpin.c
@@ -137,7 +137,7 @@
         if (su<0) su=-su;
         su%=2;
         map(&W,u,su);
-        ECP_ZZZ_sub(&P,&W); 
+        ECP_ZZZ_sub(&P,&W);
 
         rn=unmap(v,&sv,&P);
         m=RAND_byte(RNG);
@@ -169,7 +169,7 @@
         sv=(D->val[0]>>1)&1;
         map(&W,u,su);
         map(&P,v,sv);
-        ECP_ZZZ_add(&P,&W); 
+        ECP_ZZZ_add(&P,&W);
         ECP_ZZZ_toOctet(D,&P,false);
     }
 
@@ -188,7 +188,7 @@
     }
     if (res==0)
     {
-        ECP_ZZZ_add(&P,&T); 
+        ECP_ZZZ_add(&P,&T);
         ECP_ZZZ_toOctet(R,&P,false);
     }
     return res;
@@ -203,7 +203,7 @@
     if (!ECP2_ZZZ_fromOctet(&T,W2)) res=MPIN_INVALID_POINT;
     if (res==0)
     {
-        ECP2_ZZZ_add(&Q,&T); 
+        ECP2_ZZZ_add(&Q,&T);
         ECP2_ZZZ_toOctet(W,&Q);
     }
     return res;
@@ -246,7 +246,7 @@
         ECP_ZZZ_mapit(&R,&H);
 
         ECP_ZZZ_pinmul(&R,factor,facbits);
-        ECP_ZZZ_sub(&P,&R); 
+        ECP_ZZZ_sub(&P,&R);
 
         ECP_ZZZ_toOctet(TOKEN,&P,false);
     }
@@ -268,7 +268,7 @@
         ECP_ZZZ_mapit(&R,&H);
 
         ECP_ZZZ_pinmul(&R,factor,facbits);
-        ECP_ZZZ_add(&P,&R); 
+        ECP_ZZZ_add(&P,&R);
 
         ECP_ZZZ_toOctet(TOKEN,&P,false);
     }
@@ -436,7 +436,7 @@
                 PAIR_ZZZ_G1mul(&P,x);				// P=x.H(ID)
                 ECP_ZZZ_toOctet(xID,&P,false);  // xID
                 PAIR_ZZZ_G1mul(&W,x);               // W=x.H(T|ID)
-                ECP_ZZZ_add(&P,&W); 
+                ECP_ZZZ_add(&P,&W);
             }
             else
             {
@@ -456,9 +456,9 @@
     }
 
     if (res==0)
-	{
+    {
         ECP_ZZZ_toOctet(SEC,&T,false);  // V
-	}
+    }
     return res;
 }
 
@@ -471,7 +471,7 @@
 
     BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
 
-	ECP2_ZZZ_generator(&Q);
+    ECP2_ZZZ_generator(&Q);
 
     if (res==0)
     {
@@ -531,7 +531,7 @@
         mhashit(sha,date,&H,&H);
 #endif
         ECP_ZZZ_mapit(&R,&H);
-        ECP_ZZZ_add(&P,&R); 
+        ECP_ZZZ_add(&P,&R);
         ECP_ZZZ_toOctet(HTID,&P,false);
     }
 }
@@ -539,13 +539,13 @@
 /* Implement M-Pin on server side */
 int MPIN_ZZZ_SERVER_2(int date,octet *HID,octet *HTID,octet *Y,octet *SST,octet *xID,octet *xCID,octet *mSEC,octet *E,octet *F,octet *Pa)
 {
-    BIG_XXX px,py,y;
+    BIG_XXX y;
     FP12_YYY g;
     ECP2_ZZZ Q,sQ;
     ECP_ZZZ P,R;
     int res=0;
 
-	ECP2_ZZZ_generator(&Q);
+    ECP2_ZZZ_generator(&Q);
 
     // key-escrow less scheme: use Pa instead of Q in pairing computation
     // Q left for backward compatiblity
@@ -563,11 +563,11 @@
     {
         if (date)
         {
-			if (!ECP_ZZZ_fromOctet(&R,xCID))  res=MPIN_INVALID_POINT;
+            if (!ECP_ZZZ_fromOctet(&R,xCID))  res=MPIN_INVALID_POINT;
         }
         else
         {
-			if (!ECP_ZZZ_fromOctet(&R,xID))  res=MPIN_INVALID_POINT;
+            if (!ECP_ZZZ_fromOctet(&R,xID))  res=MPIN_INVALID_POINT;
         }
     }
     if (res==0)
@@ -723,7 +723,7 @@
         }
         else
         {
-			ECP2_ZZZ_generator(&Q);
+            ECP2_ZZZ_generator(&Q);
         }
     }
     if (res==0)
@@ -921,7 +921,7 @@
 
     BIG_XXX_invmodp(z,z,r);
 
-	ECP2_ZZZ_generator(&Q);
+    ECP2_ZZZ_generator(&Q);
 
     if (res==0)
     {
diff --git a/version3/c/mpin.h b/version3/c/mpin.h
index 98c853c..e0c7227 100644
--- a/version3/c/mpin.h
+++ b/version3/c/mpin.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file mpin.h
+ * @file mpin_ZZZ.h
  * @author Mike Scott
  * @brief M-Pin Header file
  *
diff --git a/version3/c/mpin192.c b/version3/c/mpin192.c
index 92b50ee..9520ddd 100644
--- a/version3/c/mpin192.c
+++ b/version3/c/mpin192.c
@@ -41,7 +41,7 @@
     int hlen=sha;
 
 
-	FP_YYY_redc(x,&(f->a.a.a));
+    FP_YYY_redc(x,&(f->a.a.a));
     BIG_XXX_toBytes(&t[0],x);
     FP_YYY_redc(x,&(f->a.a.b));
     BIG_XXX_toBytes(&t[MODBYTES_XXX],x);
@@ -50,7 +50,7 @@
     FP_YYY_redc(x,&(f->a.b.b));
     BIG_XXX_toBytes(&t[3*MODBYTES_XXX],x);
 
-	FP_YYY_redc(x,&(f->b.a.a));
+    FP_YYY_redc(x,&(f->b.a.a));
     BIG_XXX_toBytes(&t[4*MODBYTES_XXX],x);
     FP_YYY_redc(x,&(f->b.a.b));
     BIG_XXX_toBytes(&t[5*MODBYTES_XXX],x);
@@ -98,9 +98,10 @@
     BIG_XXX_mod(x,q);
 
     while (!ECP_ZZZ_setx(P,x,cb))
-	{
-        BIG_XXX_inc(x,1); BIG_XXX_norm(x);
-	}
+    {
+        BIG_XXX_inc(x,1);
+        BIG_XXX_norm(x);
+    }
 }
 
 /* returns u derived from P. Random value in range 1 to return value should then be added to u */
@@ -113,7 +114,8 @@
     BIG_XXX_copy(u,x);
     do
     {
-        BIG_XXX_dec(u,1); BIG_XXX_norm(u);
+        BIG_XXX_dec(u,1);
+        BIG_XXX_norm(u);
         r++;
     }
     while (!ECP_ZZZ_setx(P,u,s));
@@ -145,7 +147,7 @@
         if (su<0) su=-su;
         su%=2;
         map(&W,u,su);
-        ECP_ZZZ_sub(&P,&W); 
+        ECP_ZZZ_sub(&P,&W);
 
         rn=unmap(v,&sv,&P);
         m=RAND_byte(RNG);
@@ -177,7 +179,7 @@
         sv=(D->val[0]>>1)&1;
         map(&W,u,su);
         map(&P,v,sv);
-        ECP_ZZZ_add(&P,&W); 
+        ECP_ZZZ_add(&P,&W);
         ECP_ZZZ_toOctet(D,&P,false);
     }
 
@@ -196,7 +198,7 @@
     }
     if (res==0)
     {
-        ECP_ZZZ_add(&P,&T); 
+        ECP_ZZZ_add(&P,&T);
         ECP_ZZZ_toOctet(R,&P,false);
     }
     return res;
@@ -211,7 +213,7 @@
     if (!ECP4_ZZZ_fromOctet(&T,W2)) res=MPIN_INVALID_POINT;
     if (res==0)
     {
-        ECP4_ZZZ_add(&Q,&T); 
+        ECP4_ZZZ_add(&Q,&T);
         ECP4_ZZZ_toOctet(W,&Q);
     }
     return res;
@@ -235,8 +237,8 @@
 /* Extract PIN from TOKEN for identity CID */
 int MPIN_ZZZ_EXTRACT_PIN(int sha,octet *CID,int pin,octet *TOKEN)
 {
-	pin%=MAXPIN;
-	return MPIN_ZZZ_EXTRACT_FACTOR(sha,CID,pin,PBLEN,TOKEN);
+    pin%=MAXPIN;
+    return MPIN_ZZZ_EXTRACT_FACTOR(sha,CID,pin,PBLEN,TOKEN);
 }
 
 /* Extract a factor < 32 bits for identity CID */
@@ -254,7 +256,7 @@
         ECP_ZZZ_mapit(&R,&H);
 
         ECP_ZZZ_pinmul(&R,factor,facbits);
-        ECP_ZZZ_sub(&P,&R); 
+        ECP_ZZZ_sub(&P,&R);
 
         ECP_ZZZ_toOctet(TOKEN,&P,false);
     }
@@ -333,10 +335,10 @@
     {
         if (!ECP_ZZZ_fromOctet(&P,G)) res=MPIN_INVALID_POINT;
     }
-    else 
-	{
-		ECP_ZZZ_mapit(&P,G);
-	}
+    else
+    {
+        ECP_ZZZ_mapit(&P,G);
+    }
 
     if (res==0)
     {
@@ -464,9 +466,9 @@
     }
 
     if (res==0)
-	{
+    {
         ECP_ZZZ_toOctet(SEC,&T,false);  // V
-	}
+    }
     return res;
 }
 
@@ -479,7 +481,7 @@
 
     BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
 
-	ECP4_ZZZ_generator(&Q);
+    ECP4_ZZZ_generator(&Q);
 
     if (res==0)
     {
@@ -521,7 +523,6 @@
     char h[MODBYTES_XXX];
     octet H= {0,sizeof(h),h};
     ECP_ZZZ P,R;
-	BIG_XXX x;
 
 #ifdef USE_ANONYMOUS
     ECP_ZZZ_mapit(&P,CID);
@@ -540,7 +541,7 @@
         mhashit(sha,date,&H,&H);
 #endif
         ECP_ZZZ_mapit(&R,&H);
-        ECP_ZZZ_add(&P,&R); 
+        ECP_ZZZ_add(&P,&R);
         ECP_ZZZ_toOctet(HTID,&P,false);
     }
 }
@@ -548,13 +549,13 @@
 /* Implement M-Pin on server side */
 int MPIN_ZZZ_SERVER_2(int date,octet *HID,octet *HTID,octet *Y,octet *SST,octet *xID,octet *xCID,octet *mSEC,octet *E,octet *F,octet *Pa)
 {
-    BIG_XXX px,py,y;
+    BIG_XXX y;
     FP24_YYY g;
     ECP4_ZZZ Q,sQ;
     ECP_ZZZ P,R;
     int res=0;
 
-	ECP4_ZZZ_generator(&Q);
+    ECP4_ZZZ_generator(&Q);
 
     // key-escrow less scheme: use Pa instead of Q in pairing computation
     // Q left for backward compatiblity
@@ -571,13 +572,13 @@
 
     if (res==0)
     {
-       if (date)
+        if (date)
         {
-			if (!ECP_ZZZ_fromOctet(&R,xCID))  res=MPIN_INVALID_POINT;
+            if (!ECP_ZZZ_fromOctet(&R,xCID))  res=MPIN_INVALID_POINT;
         }
         else
         {
-			if (!ECP_ZZZ_fromOctet(&R,xID))  res=MPIN_INVALID_POINT;
+            if (!ECP_ZZZ_fromOctet(&R,xID))  res=MPIN_INVALID_POINT;
         }
     }
     if (res==0)
@@ -720,7 +721,6 @@
     ECP_ZZZ P,T;
     ECP4_ZZZ Q;
     FP24_YYY g;
-	BIG_XXX x;
     int res=0;
 
     if (!ECP_ZZZ_fromOctet(&T,TOKEN)) res=MPIN_INVALID_POINT;
@@ -734,7 +734,7 @@
         }
         else
         {
-			ECP4_ZZZ_generator(&Q);
+            ECP4_ZZZ_generator(&Q);
         }
     }
     if (res==0)
@@ -758,7 +758,7 @@
 int MPIN_ZZZ_CLIENT_KEY(int sha,octet *G1,octet *G2,int pin,octet *R,octet *X,octet *H,octet *wCID,octet *CK)
 {
     FP24_YYY g1,g2;
-	FP8_YYY c;
+    FP8_YYY c;
 
     ECP_ZZZ W;
     int res=0;
@@ -781,10 +781,10 @@
         FP24_YYY_pinpow(&g2,pin,PBLEN);
         FP24_YYY_mul(&g1,&g2);
 
-		PAIR_ZZZ_G1mul(&W,x);
+        PAIR_ZZZ_G1mul(&W,x);
 
-		FP24_YYY_compow(&c,&g1,z,r);
-		mpin_hash(sha,&c,&W,CK);
+        FP24_YYY_compow(&c,&g1,z,r);
+        mpin_hash(sha,&c,&W,CK);
 
     }
     return res;
@@ -870,10 +870,10 @@
         return rtn;
 
     OCT_joctet(&M,pID);
-   if (MESSAGE!=NULL)
-   {
-       OCT_joctet(&M,MESSAGE);
-   }
+    if (MESSAGE!=NULL)
+    {
+        OCT_joctet(&M,MESSAGE);
+    }
 
     MPIN_ZZZ_GET_Y(sha,TimeValue,&M,Y);
 
@@ -900,10 +900,10 @@
     MPIN_ZZZ_SERVER_1(sha,date,ID,HID,HTID);
 
     OCT_joctet(&M,pU);
-   if (MESSAGE!=NULL)
-   {
-       OCT_joctet(&M,MESSAGE);
-   }
+    if (MESSAGE!=NULL)
+    {
+        OCT_joctet(&M,MESSAGE);
+    }
 
     MPIN_ZZZ_GET_Y(sha,TimeValue,&M,Y);
 
@@ -933,7 +933,7 @@
 
     BIG_XXX_invmodp(z,z,r);
 
-	ECP4_ZZZ_generator(&Q);
+    ECP4_ZZZ_generator(&Q);
 
     if (res==0)
     {
@@ -942,4 +942,4 @@
     }
 
     return res;
-}
\ No newline at end of file
+}
diff --git a/version3/c/mpin192.h b/version3/c/mpin192.h
index 79f562c..c457bd2 100644
--- a/version3/c/mpin192.h
+++ b/version3/c/mpin192.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file mpin.h
+ * @file mpin_ZZZ.h
  * @author Mike Scott and Kealan McCusker
  * @date 2nd June 2015
  * @brief M-Pin Header file
diff --git a/version3/c/mpin256.c b/version3/c/mpin256.c
index d8d9ea3..fd91d28 100644
--- a/version3/c/mpin256.c
+++ b/version3/c/mpin256.c
@@ -42,9 +42,9 @@
     char t[18*MODBYTES_XXX];  // to hold 10 BIGs
     int hlen=sha;
 
-	FP_YYY_redc(x,&(f->a.a.a.a));
+    FP_YYY_redc(x,&(f->a.a.a.a));
     BIG_XXX_toBytes(&t[0],x);
-	FP_YYY_redc(x,&(f->a.a.a.b));
+    FP_YYY_redc(x,&(f->a.a.a.b));
     BIG_XXX_toBytes(&t[MODBYTES_XXX],x);
 
     FP_YYY_redc(x,&(f->a.a.b.a));
@@ -62,14 +62,14 @@
     FP_YYY_redc(x,&(f->a.b.b.b));
     BIG_XXX_toBytes(&t[7*MODBYTES_XXX],x);
 
-	FP_YYY_redc(x,&(f->b.a.a.a));
+    FP_YYY_redc(x,&(f->b.a.a.a));
     BIG_XXX_toBytes(&t[8*MODBYTES_XXX],x);
-	FP_YYY_redc(x,&(f->b.a.a.b));
+    FP_YYY_redc(x,&(f->b.a.a.b));
     BIG_XXX_toBytes(&t[9*MODBYTES_XXX],x);
 
     FP_YYY_redc(x,&(f->b.a.b.a));
     BIG_XXX_toBytes(&t[10*MODBYTES_XXX],x);
-	FP_YYY_redc(x,&(f->b.a.b.b));
+    FP_YYY_redc(x,&(f->b.a.b.b));
     BIG_XXX_toBytes(&t[11*MODBYTES_XXX],x);
 
     FP_YYY_redc(x,&(f->b.b.a.a));
@@ -121,9 +121,10 @@
     BIG_XXX_mod(x,q);
 
     while (!ECP_ZZZ_setx(P,x,cb))
-	{
-        BIG_XXX_inc(x,1); BIG_XXX_norm(x);
-	}
+    {
+        BIG_XXX_inc(x,1);
+        BIG_XXX_norm(x);
+    }
 }
 
 /* returns u derived from P. Random value in range 1 to return value should then be added to u */
@@ -136,7 +137,8 @@
     BIG_XXX_copy(u,x);
     do
     {
-        BIG_XXX_dec(u,1); BIG_XXX_norm(u);
+        BIG_XXX_dec(u,1);
+        BIG_XXX_norm(u);
         r++;
     }
     while (!ECP_ZZZ_setx(P,u,s));
@@ -168,7 +170,7 @@
         if (su<0) su=-su;
         su%=2;
         map(&W,u,su);
-        ECP_ZZZ_sub(&P,&W); 
+        ECP_ZZZ_sub(&P,&W);
 
         rn=unmap(v,&sv,&P);
         m=RAND_byte(RNG);
@@ -200,7 +202,7 @@
         sv=(D->val[0]>>1)&1;
         map(&W,u,su);
         map(&P,v,sv);
-        ECP_ZZZ_add(&P,&W); 
+        ECP_ZZZ_add(&P,&W);
         ECP_ZZZ_toOctet(D,&P,false);
     }
 
@@ -219,7 +221,7 @@
     }
     if (res==0)
     {
-        ECP_ZZZ_add(&P,&T); 
+        ECP_ZZZ_add(&P,&T);
         ECP_ZZZ_toOctet(R,&P,false);
     }
     return res;
@@ -234,7 +236,7 @@
     if (!ECP8_ZZZ_fromOctet(&T,W2)) res=MPIN_INVALID_POINT;
     if (res==0)
     {
-        ECP8_ZZZ_add(&Q,&T); 
+        ECP8_ZZZ_add(&Q,&T);
         ECP8_ZZZ_toOctet(W,&Q);
     }
     return res;
@@ -258,8 +260,8 @@
 /* Extract PIN from TOKEN for identity CID */
 int MPIN_ZZZ_EXTRACT_PIN(int sha,octet *CID,int pin,octet *TOKEN)
 {
-	pin%=MAXPIN;
-	return MPIN_ZZZ_EXTRACT_FACTOR(sha,CID,pin,PBLEN,TOKEN);
+    pin%=MAXPIN;
+    return MPIN_ZZZ_EXTRACT_FACTOR(sha,CID,pin,PBLEN,TOKEN);
 }
 
 /* Extract a factor < 32 bits for identity CID */
@@ -277,7 +279,7 @@
         ECP_ZZZ_mapit(&R,&H);
 
         ECP_ZZZ_pinmul(&R,factor,facbits);
-        ECP_ZZZ_sub(&P,&R); 
+        ECP_ZZZ_sub(&P,&R);
 
         ECP_ZZZ_toOctet(TOKEN,&P,false);
     }
@@ -299,7 +301,7 @@
         ECP_ZZZ_mapit(&R,&H);
 
         ECP_ZZZ_pinmul(&R,factor,facbits);
-        ECP_ZZZ_add(&P,&R); 
+        ECP_ZZZ_add(&P,&R);
 
         ECP_ZZZ_toOctet(TOKEN,&P,false);
     }
@@ -356,10 +358,10 @@
     {
         if (!ECP_ZZZ_fromOctet(&P,G)) res=MPIN_INVALID_POINT;
     }
-    else 
-	{
-		ECP_ZZZ_mapit(&P,G);
-	}
+    else
+    {
+        ECP_ZZZ_mapit(&P,G);
+    }
 
     if (res==0)
     {
@@ -467,11 +469,11 @@
                 PAIR_ZZZ_G1mul(&P,x);				// P=x.H(ID)
                 ECP_ZZZ_toOctet(xID,&P,false);  // xID
                 PAIR_ZZZ_G1mul(&W,x);               // W=x.H(T|ID)
-                ECP_ZZZ_add(&P,&W); 
+                ECP_ZZZ_add(&P,&W);
             }
             else
             {
-                ECP_ZZZ_add(&P,&W); 
+                ECP_ZZZ_add(&P,&W);
                 PAIR_ZZZ_G1mul(&P,x);
             }
             if (xCID!=NULL) ECP_ZZZ_toOctet(xCID,&P,false);  // U
@@ -487,9 +489,9 @@
     }
 
     if (res==0)
-	{
+    {
         ECP_ZZZ_toOctet(SEC,&T,false);  // V
-	}
+    }
     return res;
 }
 
@@ -502,7 +504,7 @@
 
     BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
 
-	ECP8_ZZZ_generator(&Q);
+    ECP8_ZZZ_generator(&Q);
 
     if (res==0)
     {
@@ -544,7 +546,6 @@
     char h[MODBYTES_XXX];
     octet H= {0,sizeof(h),h};
     ECP_ZZZ P,R;
-	BIG_XXX x;
 
 #ifdef USE_ANONYMOUS
     ECP_ZZZ_mapit(&P,CID);
@@ -563,7 +564,7 @@
         mhashit(sha,date,&H,&H);
 #endif
         ECP_ZZZ_mapit(&R,&H);
-        ECP_ZZZ_add(&P,&R); 
+        ECP_ZZZ_add(&P,&R);
         ECP_ZZZ_toOctet(HTID,&P,false);
     }
 }
@@ -571,13 +572,13 @@
 /* Implement M-Pin on server side */
 int MPIN_ZZZ_SERVER_2(int date,octet *HID,octet *HTID,octet *Y,octet *SST,octet *xID,octet *xCID,octet *mSEC,octet *E,octet *F,octet *Pa)
 {
-    BIG_XXX px,py,y;
+    BIG_XXX y;
     FP48_YYY g;
     ECP8_ZZZ Q,sQ;
     ECP_ZZZ P,R;
     int res=0;
 
-	ECP8_ZZZ_generator(&Q);
+    ECP8_ZZZ_generator(&Q);
 
     // key-escrow less scheme: use Pa instead of Q in pairing computation
     // Q left for backward compatiblity
@@ -594,13 +595,13 @@
 
     if (res==0)
     {
-       if (date)
+        if (date)
         {
-			if (!ECP_ZZZ_fromOctet(&R,xCID))  res=MPIN_INVALID_POINT;
+            if (!ECP_ZZZ_fromOctet(&R,xCID))  res=MPIN_INVALID_POINT;
         }
         else
         {
-			if (!ECP_ZZZ_fromOctet(&R,xID))  res=MPIN_INVALID_POINT;
+            if (!ECP_ZZZ_fromOctet(&R,xID))  res=MPIN_INVALID_POINT;
         }
     }
     if (res==0)
@@ -742,7 +743,6 @@
     ECP_ZZZ P,T;
     ECP8_ZZZ Q;
     FP48_YYY g;
-	BIG_XXX x;
     int res=0;
 
     if (!ECP_ZZZ_fromOctet(&T,TOKEN)) res=MPIN_INVALID_POINT;
@@ -756,7 +756,7 @@
         }
         else
         {
-			ECP8_ZZZ_generator(&Q);
+            ECP8_ZZZ_generator(&Q);
         }
     }
     if (res==0)
@@ -780,7 +780,7 @@
 int MPIN_ZZZ_CLIENT_KEY(int sha,octet *G1,octet *G2,int pin,octet *R,octet *X,octet *H,octet *wCID,octet *CK)
 {
     FP48_YYY g1,g2;
-	FP16_YYY c;
+    FP16_YYY c;
 
     ECP_ZZZ W;
     int res=0;
@@ -803,10 +803,10 @@
         FP48_YYY_pinpow(&g2,pin,PBLEN);
         FP48_YYY_mul(&g1,&g2);
 
-		PAIR_ZZZ_G1mul(&W,x);
+        PAIR_ZZZ_G1mul(&W,x);
 
-		FP48_YYY_compow(&c,&g1,z,r);
-		mpin_hash(sha,&c,&W,CK);
+        FP48_YYY_compow(&c,&g1,z,r);
+        mpin_hash(sha,&c,&W,CK);
 
     }
     return res;
@@ -892,10 +892,10 @@
         return rtn;
 
     OCT_joctet(&M,pID);
-   if (MESSAGE!=NULL)
-   {
-       OCT_joctet(&M,MESSAGE);
-   }
+    if (MESSAGE!=NULL)
+    {
+        OCT_joctet(&M,MESSAGE);
+    }
 
     MPIN_ZZZ_GET_Y(sha,TimeValue,&M,Y);
 
@@ -922,10 +922,10 @@
     MPIN_ZZZ_SERVER_1(sha,date,ID,HID,HTID);
 
     OCT_joctet(&M,pU);
-   if (MESSAGE!=NULL)
-   {
-       OCT_joctet(&M,MESSAGE);
-   }
+    if (MESSAGE!=NULL)
+    {
+        OCT_joctet(&M,MESSAGE);
+    }
 
     MPIN_ZZZ_GET_Y(sha,TimeValue,&M,Y);
 
@@ -955,7 +955,7 @@
 
     BIG_XXX_invmodp(z,z,r);
 
-	ECP8_ZZZ_generator(&Q);
+    ECP8_ZZZ_generator(&Q);
 
     if (res==0)
     {
diff --git a/version3/c/mpin256.h b/version3/c/mpin256.h
index 46ba21a..3307e57 100644
--- a/version3/c/mpin256.h
+++ b/version3/c/mpin256.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file mpin.h
+ * @file mpin_ZZZ.h
  * @author Mike Scott and Kealan McCusker
  * @date 2nd June 2015
  * @brief M-Pin Header file
diff --git a/version3/c/oct.c b/version3/c/oct.c
index 866c96c..cb9c067 100644
--- a/version3/c/oct.c
+++ b/version3/c/oct.c
@@ -93,7 +93,7 @@
         res|=(int)(x->val[i]^y->val[i]);
     }
     if (res==0) return 1;
-	return 0;
+    return 0;
 }
 
 /* Shift octet to the left by n bytes. Leftmost bytes disappear  */
diff --git a/version3/c/pair.c b/version3/c/pair.c
index 47265fa..8faf54a 100644
--- a/version3/c/pair.c
+++ b/version3/c/pair.c
@@ -131,20 +131,20 @@
     }
 
     FP12_YYY_from_FP4s(v,&a,&b,&c);
-	v->type=FP_SPARSER;
+    v->type=AMCL_AMCL_FP_SPARSER;
 }
 
 
 /* prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3*n */
 int PAIR_ZZZ_nbits(BIG_XXX n3,BIG_XXX n)
 {
-	BIG_XXX x;
+    BIG_XXX x;
     BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
 
 #if PAIRING_FRIENDLY_ZZZ==BN
     BIG_XXX_pmul(n,x,6);
 #if SIGN_OF_X_ZZZ==POSITIVEX
-	BIG_XXX_inc(n,2);
+    BIG_XXX_inc(n,2);
 #else
     BIG_XXX_dec(n,2);
 #endif
@@ -154,8 +154,8 @@
 #endif
 
     BIG_XXX_norm(n);
-	BIG_XXX_pmul(n3,n,3);
-	BIG_XXX_norm(n3);
+    BIG_XXX_pmul(n3,n,3);
+    BIG_XXX_norm(n3);
 
     return BIG_XXX_nbits(n3);
 }
@@ -172,97 +172,98 @@
 /* prepare for multi-pairing */
 void PAIR_ZZZ_initmp(FP12_YYY r[])
 {
-	int i;
-	for (i=ATE_BITS_ZZZ-1; i>=0; i--)
-		FP12_YYY_one(&r[i]);
-	return;
+    int i;
+    for (i=ATE_BITS_ZZZ-1; i>=0; i--)
+        FP12_YYY_one(&r[i]);
+    return;
 }
 
 /* basic Miller loop */
 void PAIR_ZZZ_miller(FP12_YYY *res,FP12_YYY r[])
 {
-	int i;
+    int i;
     FP12_YYY_one(res);
-	for (i=ATE_BITS_ZZZ-1; i>=1; i--)
-	{
-		FP12_YYY_sqr(res,res);
-		FP12_YYY_ssmul(res,&r[i]);
-	}
+    for (i=ATE_BITS_ZZZ-1; i>=1; i--)
+    {
+        FP12_YYY_sqr(res,res);
+        FP12_YYY_ssmul(res,&r[i]);
+    }
 
 #if SIGN_OF_X_ZZZ==NEGATIVEX
     FP12_YYY_conj(res,res);
 #endif
-	FP12_YYY_ssmul(res,&r[0]);
-	return;
+    FP12_YYY_ssmul(res,&r[0]);
+    return;
 }
 
 /* Accumulate another set of line functions for n-pairing */
 void PAIR_ZZZ_another(FP12_YYY r[],ECP2_ZZZ* PV,ECP_ZZZ* QV)
 {
-    int i,j,nb,bt;
-	BIG_XXX x,n,n3;
+    int i,nb,bt;
+    BIG_XXX n,n3;
     FP12_YYY lv,lv2;
     ECP2_ZZZ A,NP,P;
-	ECP_ZZZ Q;
-	FP_YYY Qx,Qy;
+    ECP_ZZZ Q;
+    FP_YYY Qx,Qy;
 #if PAIRING_FRIENDLY_ZZZ==BN
-	ECP2_ZZZ K;
+    ECP2_ZZZ K;
     FP2_YYY X;
     FP_YYY_rcopy(&Qx,Fra_YYY);
     FP_YYY_rcopy(&Qy,Frb_YYY);
     FP2_YYY_from_FPs(&X,&Qx,&Qy);
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-	FP2_YYY_inv(&X,&X);
-	FP2_YYY_norm(&X);
+    FP2_YYY_inv(&X,&X);
+    FP2_YYY_norm(&X);
 #endif
 #endif
 
-	nb=PAIR_ZZZ_nbits(n3,n);
+    nb=PAIR_ZZZ_nbits(n3,n);
 
-	ECP2_ZZZ_copy(&P,PV);
-	ECP_ZZZ_copy(&Q,QV);
+    ECP2_ZZZ_copy(&P,PV);
+    ECP_ZZZ_copy(&Q,QV);
 
-	ECP2_ZZZ_affine(&P);
-	ECP_ZZZ_affine(&Q);
+    ECP2_ZZZ_affine(&P);
+    ECP_ZZZ_affine(&Q);
 
-	FP_YYY_copy(&Qx,&(Q.x));
-	FP_YYY_copy(&Qy,&(Q.y));
+    FP_YYY_copy(&Qx,&(Q.x));
+    FP_YYY_copy(&Qy,&(Q.y));
 
-	ECP2_ZZZ_copy(&A,&P);
-	ECP2_ZZZ_copy(&NP,&P); ECP2_ZZZ_neg(&NP);
+    ECP2_ZZZ_copy(&A,&P);
+    ECP2_ZZZ_copy(&NP,&P);
+    ECP2_ZZZ_neg(&NP);
 
-	for (i=nb-2; i>=1; i--)
-	{
-		PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
+    for (i=nb-2; i>=1; i--)
+    {
+        PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
 
-		bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
-		if (bt==1)
-		{
-			PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
-			FP12_YYY_smul(&lv,&lv2);
-		}
-		if (bt==-1)
-		{
-			PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
-			FP12_YYY_smul(&lv,&lv2);
-		}
-		FP12_YYY_ssmul(&r[i],&lv);
-	}
+        bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+        if (bt==1)
+        {
+            PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
+            FP12_YYY_smul(&lv,&lv2);
+        }
+        if (bt==-1)
+        {
+            PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
+            FP12_YYY_smul(&lv,&lv2);
+        }
+        FP12_YYY_ssmul(&r[i],&lv);
+    }
 
 #if PAIRING_FRIENDLY_ZZZ==BN
 
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	ECP2_ZZZ_neg(&A);
+    ECP2_ZZZ_neg(&A);
 #endif
 
-	ECP2_ZZZ_copy(&K,&P);
-	ECP2_ZZZ_frob(&K,&X);
-	PAIR_ZZZ_line(&lv,&A,&K,&Qx,&Qy);
-	ECP2_ZZZ_frob(&K,&X);
-	ECP2_ZZZ_neg(&K);
-	PAIR_ZZZ_line(&lv2,&A,&K,&Qx,&Qy);
-	FP12_YYY_smul(&lv,&lv2);
-	FP12_YYY_ssmul(&r[0],&lv);
+    ECP2_ZZZ_copy(&K,&P);
+    ECP2_ZZZ_frob(&K,&X);
+    PAIR_ZZZ_line(&lv,&A,&K,&Qx,&Qy);
+    ECP2_ZZZ_frob(&K,&X);
+    ECP2_ZZZ_neg(&K);
+    PAIR_ZZZ_line(&lv2,&A,&K,&Qx,&Qy);
+    FP12_YYY_smul(&lv,&lv2);
+    FP12_YYY_ssmul(&r[0],&lv);
 
 #endif
 }
@@ -270,12 +271,11 @@
 /* Optimal R-ate pairing r=e(P,Q) */
 void PAIR_ZZZ_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1)
 {
-
-    BIG_XXX x,n,n3;
+    BIG_XXX n,n3;
     FP_YYY Qx,Qy;
     int i,nb,bt;
     ECP2_ZZZ A,NP,P;
-	ECP_ZZZ Q;
+    ECP_ZZZ Q;
     FP12_YYY lv,lv2;
 #if PAIRING_FRIENDLY_ZZZ==BN
     ECP2_ZZZ KA;
@@ -291,46 +291,47 @@
 #endif
 #endif
 
-	nb=PAIR_ZZZ_nbits(n3,n);
+    nb=PAIR_ZZZ_nbits(n3,n);
 
-	ECP2_ZZZ_copy(&P,P1);
-	ECP_ZZZ_copy(&Q,Q1);
+    ECP2_ZZZ_copy(&P,P1);
+    ECP_ZZZ_copy(&Q,Q1);
 
-	ECP2_ZZZ_affine(&P);
-	ECP_ZZZ_affine(&Q);
+    ECP2_ZZZ_affine(&P);
+    ECP_ZZZ_affine(&Q);
 
     FP_YYY_copy(&Qx,&(Q.x));
     FP_YYY_copy(&Qy,&(Q.y));
 
     ECP2_ZZZ_copy(&A,&P);
-	ECP2_ZZZ_copy(&NP,&P); ECP2_ZZZ_neg(&NP);
+    ECP2_ZZZ_copy(&NP,&P);
+    ECP2_ZZZ_neg(&NP);
 
     FP12_YYY_one(r);
 
     /* Main Miller Loop */
     for (i=nb-2; i>=1; i--)   //0
     {
-		FP12_YYY_sqr(r,r);
+        FP12_YYY_sqr(r,r);
         PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
 
-		bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+        bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
         if (bt==1)
         {
             PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
             FP12_YYY_smul(&lv,&lv2);
         }
-		if (bt==-1)
-		{
+        if (bt==-1)
+        {
             PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
             FP12_YYY_smul(&lv,&lv2);
-		}
-		FP12_YYY_ssmul(r,&lv);
+        }
+        FP12_YYY_ssmul(r,&lv);
 
     }
 
 
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP12_YYY_conj(r,r);
+    FP12_YYY_conj(r,r);
 #endif
 
     /* R-ate fixup required for BN curves */
@@ -346,7 +347,7 @@
     ECP2_ZZZ_frob(&KA,&X);
     ECP2_ZZZ_neg(&KA);
     PAIR_ZZZ_line(&lv2,&A,&KA,&Qx,&Qy);
-	FP12_YYY_smul(&lv,&lv2);
+    FP12_YYY_smul(&lv,&lv2);
     FP12_YYY_ssmul(r,&lv);
 #endif
 }
@@ -354,11 +355,11 @@
 /* Optimal R-ate double pairing e(P,Q).e(R,S) */
 void PAIR_ZZZ_double_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1,ECP2_ZZZ *R1,ECP_ZZZ *S1)
 {
-    BIG_XXX x,n,n3;
+    BIG_XXX n,n3;
     FP_YYY Qx,Qy,Sx,Sy;
     int i,nb,bt;
     ECP2_ZZZ A,B,NP,NR,P,R;
-	ECP_ZZZ Q,S;
+    ECP_ZZZ Q,S;
     FP12_YYY lv,lv2;
 #if PAIRING_FRIENDLY_ZZZ==BN
     FP2_YYY X;
@@ -373,19 +374,19 @@
     FP2_YYY_norm(&X);
 #endif
 #endif
-	nb=PAIR_ZZZ_nbits(n3,n);
+    nb=PAIR_ZZZ_nbits(n3,n);
 
-	ECP2_ZZZ_copy(&P,P1);
-	ECP_ZZZ_copy(&Q,Q1);
+    ECP2_ZZZ_copy(&P,P1);
+    ECP_ZZZ_copy(&Q,Q1);
 
-	ECP2_ZZZ_affine(&P);
-	ECP_ZZZ_affine(&Q);
+    ECP2_ZZZ_affine(&P);
+    ECP_ZZZ_affine(&Q);
 
-	ECP2_ZZZ_copy(&R,R1);
-	ECP_ZZZ_copy(&S,S1);
+    ECP2_ZZZ_copy(&R,R1);
+    ECP_ZZZ_copy(&S,S1);
 
-	ECP2_ZZZ_affine(&R);
-	ECP_ZZZ_affine(&S);
+    ECP2_ZZZ_affine(&R);
+    ECP_ZZZ_affine(&S);
 
     FP_YYY_copy(&Qx,&(Q.x));
     FP_YYY_copy(&Qy,&(Q.y));
@@ -396,8 +397,10 @@
     ECP2_ZZZ_copy(&A,&P);
     ECP2_ZZZ_copy(&B,&R);
 
-	ECP2_ZZZ_copy(&NP,&P); ECP2_ZZZ_neg(&NP);
-	ECP2_ZZZ_copy(&NR,&R); ECP2_ZZZ_neg(&NR);
+    ECP2_ZZZ_copy(&NP,&P);
+    ECP2_ZZZ_neg(&NP);
+    ECP2_ZZZ_copy(&NR,&R);
+    ECP2_ZZZ_neg(&NR);
 
     FP12_YYY_one(r);
 
@@ -407,24 +410,24 @@
         FP12_YYY_sqr(r,r);
         PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
         PAIR_ZZZ_line(&lv2,&B,&B,&Sx,&Sy);
-		FP12_YYY_smul(&lv,&lv2);
+        FP12_YYY_smul(&lv,&lv2);
         FP12_YYY_ssmul(r,&lv);
 
-		bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+        bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
         if (bt==1)
         {
             PAIR_ZZZ_line(&lv,&A,&P,&Qx,&Qy);
             PAIR_ZZZ_line(&lv2,&B,&R,&Sx,&Sy);
-			FP12_YYY_smul(&lv,&lv2);
+            FP12_YYY_smul(&lv,&lv2);
             FP12_YYY_ssmul(r,&lv);
         }
-		if (bt==-1)
-		{
+        if (bt==-1)
+        {
             PAIR_ZZZ_line(&lv,&A,&NP,&Qx,&Qy);
             PAIR_ZZZ_line(&lv2,&B,&NR,&Sx,&Sy);
-			FP12_YYY_smul(&lv,&lv2);
+            FP12_YYY_smul(&lv,&lv2);
             FP12_YYY_ssmul(r,&lv);
-		}
+        }
 
     }
 
@@ -432,7 +435,7 @@
     /* R-ate fixup required for BN curves */
 
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP12_YYY_conj(r,r);
+    FP12_YYY_conj(r,r);
 #endif
 
 #if PAIRING_FRIENDLY_ZZZ==BN
@@ -448,7 +451,7 @@
     ECP2_ZZZ_frob(&K,&X);
     ECP2_ZZZ_neg(&K);
     PAIR_ZZZ_line(&lv2,&A,&K,&Qx,&Qy);
-	FP12_YYY_smul(&lv,&lv2);
+    FP12_YYY_smul(&lv,&lv2);
     FP12_YYY_ssmul(r,&lv);
 
     ECP2_ZZZ_copy(&K,&R);
@@ -457,7 +460,7 @@
     ECP2_ZZZ_frob(&K,&X);
     ECP2_ZZZ_neg(&K);
     PAIR_ZZZ_line(&lv2,&B,&K,&Sx,&Sy);
-	FP12_YYY_smul(&lv,&lv2);
+    FP12_YYY_smul(&lv,&lv2);
     FP12_YYY_ssmul(r,&lv);
 #endif
 }
@@ -487,11 +490,11 @@
     FP12_YYY_frob(r,&X);
     FP12_YYY_mul(r,&t0);
 
-	if (FP12_YYY_isunity(r))
-	{
-		FP12_YYY_zero(r);
-		return;
-	}
+    if (FP12_YYY_isunity(r))
+    {
+        FP12_YYY_zero(r);
+        return;
+    }
 
     /* Hard part of final exp - see Duquesne & Ghamman eprint 2015/192.pdf */
 #if PAIRING_FRIENDLY_ZZZ==BN
@@ -724,7 +727,8 @@
     BIG_XXX_rcopy(q,CURVE_Order_ZZZ);
     glv(u,e);
 
-    ECP_ZZZ_copy(&Q,P); ECP_ZZZ_affine(&Q);
+    ECP_ZZZ_copy(&Q,P);
+    ECP_ZZZ_affine(&Q);
     FP_YYY_rcopy(&cru,CURVE_Cru_ZZZ);
     FP_YYY_mul(&(Q.x),&(Q.x),&cru);
 
@@ -795,7 +799,7 @@
             BIG_XXX_copy(u[i],x);
             ECP2_ZZZ_neg(&Q[i]);
         }
-        BIG_XXX_norm(u[i]);    
+        BIG_XXX_norm(u[i]);
     }
 
     ECP2_ZZZ_mul4(P,Q,u);
diff --git a/version3/c/pair.h b/version3/c/pair.h
index f03b329..a7350bd 100644
--- a/version3/c/pair.h
+++ b/version3/c/pair.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file pair.h
+ * @file pair_ZZZ.h
  * @author Mike Scott
  * @brief PAIR Header File
  *
diff --git a/version3/c/pair192.c b/version3/c/pair192.c
index 790a2d7..3e6f966 100644
--- a/version3/c/pair192.c
+++ b/version3/c/pair192.c
@@ -27,124 +27,124 @@
 /* Line function */
 static void PAIR_ZZZ_line(FP24_YYY *v,ECP4_ZZZ *A,ECP4_ZZZ *B,FP_YYY *Qx,FP_YYY *Qy)
 {
-	FP4_YYY X1,Y1,T1,T2;
-	FP4_YYY XX,YY,ZZ,YZ;
+    FP4_YYY X1,Y1,T1,T2;
+    FP4_YYY XX,YY,ZZ,YZ;
     FP8_YYY a,b,c;
 
-	if (A==B)
+    if (A==B)
     {
         /* doubling */
- 		FP4_YYY_copy(&XX,&(A->x));	//FP4_YYY XX=new FP4_YYY(A.getx());  //X
-		FP4_YYY_copy(&YY,&(A->y));	//FP4_YYY YY=new FP4_YYY(A.gety());  //Y
-		FP4_YYY_copy(&ZZ,&(A->z));	//FP4_YYY ZZ=new FP4_YYY(A.getz());  //Z
+        FP4_YYY_copy(&XX,&(A->x));	//FP4_YYY XX=new FP4_YYY(A.getx());  //X
+        FP4_YYY_copy(&YY,&(A->y));	//FP4_YYY YY=new FP4_YYY(A.gety());  //Y
+        FP4_YYY_copy(&ZZ,&(A->z));	//FP4_YYY ZZ=new FP4_YYY(A.getz());  //Z
 
 
-		FP4_YYY_copy(&YZ,&YY);		//FP4_YYY YZ=new FP4_YYY(YY);        //Y 
-		FP4_YYY_mul(&YZ,&YZ,&ZZ);		//YZ.mul(ZZ);                //YZ
-		FP4_YYY_sqr(&XX,&XX);		//XX.sqr();	               //X^2
-		FP4_YYY_sqr(&YY,&YY);		//YY.sqr();	               //Y^2
-		FP4_YYY_sqr(&ZZ,&ZZ);		//ZZ.sqr();			       //Z^2
-			
-		FP4_YYY_imul(&YZ,&YZ,4);	//YZ.imul(4);
-		FP4_YYY_neg(&YZ,&YZ);		//YZ.neg(); 
-		FP4_YYY_norm(&YZ);			//YZ.norm();       //-4YZ
+        FP4_YYY_copy(&YZ,&YY);		//FP4_YYY YZ=new FP4_YYY(YY);        //Y
+        FP4_YYY_mul(&YZ,&YZ,&ZZ);		//YZ.mul(ZZ);                //YZ
+        FP4_YYY_sqr(&XX,&XX);		//XX.sqr();	               //X^2
+        FP4_YYY_sqr(&YY,&YY);		//YY.sqr();	               //Y^2
+        FP4_YYY_sqr(&ZZ,&ZZ);		//ZZ.sqr();			       //Z^2
 
-		FP4_YYY_imul(&XX,&XX,6);					//6X^2
-		FP4_YYY_qmul(&XX,&XX,Qx);	               //6X^2.Xs
+        FP4_YYY_imul(&YZ,&YZ,4);	//YZ.imul(4);
+        FP4_YYY_neg(&YZ,&YZ);		//YZ.neg();
+        FP4_YYY_norm(&YZ);			//YZ.norm();       //-4YZ
 
-		FP4_YYY_imul(&ZZ,&ZZ,3*CURVE_B_I_ZZZ);	//3Bz^2 
+        FP4_YYY_imul(&XX,&XX,6);					//6X^2
+        FP4_YYY_qmul(&XX,&XX,Qx);	               //6X^2.Xs
 
-		FP4_YYY_qmul(&YZ,&YZ,Qy);	//-4YZ.Ys
+        FP4_YYY_imul(&ZZ,&ZZ,3*CURVE_B_I_ZZZ);	//3Bz^2
+
+        FP4_YYY_qmul(&YZ,&YZ,Qy);	//-4YZ.Ys
 
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-		FP4_YYY_div_2i(&ZZ);		//6(b/i)z^2
+        FP4_YYY_div_2i(&ZZ);		//6(b/i)z^2
 #endif
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-		FP4_YYY_times_i(&ZZ);
-		FP4_YYY_add(&ZZ,&ZZ,&ZZ);  // 6biz^2
-		FP4_YYY_times_i(&YZ);
-		FP4_YYY_norm(&YZ);	
+        FP4_YYY_times_i(&ZZ);
+        FP4_YYY_add(&ZZ,&ZZ,&ZZ);  // 6biz^2
+        FP4_YYY_times_i(&YZ);
+        FP4_YYY_norm(&YZ);
 #endif
-		FP4_YYY_norm(&ZZ);			// 6bi.Z^2 
+        FP4_YYY_norm(&ZZ);			// 6bi.Z^2
 
-		FP4_YYY_add(&YY,&YY,&YY);	// 2y^2
-		FP4_YYY_sub(&ZZ,&ZZ,&YY);	// 
-		FP4_YYY_norm(&ZZ);			// 6b.Z^2-2Y^2
+        FP4_YYY_add(&YY,&YY,&YY);	// 2y^2
+        FP4_YYY_sub(&ZZ,&ZZ,&YY);	//
+        FP4_YYY_norm(&ZZ);			// 6b.Z^2-2Y^2
 
-		FP8_YYY_from_FP4s(&a,&YZ,&ZZ); // -4YZ.Ys | 6b.Z^2-2Y^2 | 6X^2.Xs 
+        FP8_YYY_from_FP4s(&a,&YZ,&ZZ); // -4YZ.Ys | 6b.Z^2-2Y^2 | 6X^2.Xs
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-		FP8_YYY_from_FP4(&b,&XX);	
-		FP8_YYY_zero(&c);
+        FP8_YYY_from_FP4(&b,&XX);
+        FP8_YYY_zero(&c);
 #endif
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-		FP8_YYY_zero(&b);
-		FP8_YYY_from_FP4H(&c,&XX);
+        FP8_YYY_zero(&b);
+        FP8_YYY_from_FP4H(&c,&XX);
 #endif
 
-		ECP4_ZZZ_dbl(A);				//A.dbl();
+        ECP4_ZZZ_dbl(A);				//A.dbl();
     }
     else
     {
         /* addition */
 
-		FP4_YYY_copy(&X1,&(A->x));		//FP4_YYY X1=new FP4_YYY(A.getx());    // X1
-		FP4_YYY_copy(&Y1,&(A->y));		//FP4_YYY Y1=new FP4_YYY(A.gety());    // Y1
-		FP4_YYY_copy(&T1,&(A->z));		//FP4_YYY T1=new FP4_YYY(A.getz());    // Z1
-			
-		FP4_YYY_copy(&T2,&T1);		//FP4_YYY T2=new FP4_YYY(A.getz());    // Z1
+        FP4_YYY_copy(&X1,&(A->x));		//FP4_YYY X1=new FP4_YYY(A.getx());    // X1
+        FP4_YYY_copy(&Y1,&(A->y));		//FP4_YYY Y1=new FP4_YYY(A.gety());    // Y1
+        FP4_YYY_copy(&T1,&(A->z));		//FP4_YYY T1=new FP4_YYY(A.getz());    // Z1
 
-		FP4_YYY_mul(&T1,&T1,&(B->y));	//T1.mul(B.gety());    // T1=Z1.Y2 
-		FP4_YYY_mul(&T2,&T2,&(B->x));	//T2.mul(B.getx());    // T2=Z1.X2
+        FP4_YYY_copy(&T2,&T1);		//FP4_YYY T2=new FP4_YYY(A.getz());    // Z1
 
-		FP4_YYY_sub(&X1,&X1,&T2);		//X1.sub(T2); 
-		FP4_YYY_norm(&X1);				//X1.norm();  // X1=X1-Z1.X2
-		FP4_YYY_sub(&Y1,&Y1,&T1);		//Y1.sub(T1); 
-		FP4_YYY_norm(&Y1);				//Y1.norm();  // Y1=Y1-Z1.Y2
+        FP4_YYY_mul(&T1,&T1,&(B->y));	//T1.mul(B.gety());    // T1=Z1.Y2
+        FP4_YYY_mul(&T2,&T2,&(B->x));	//T2.mul(B.getx());    // T2=Z1.X2
 
-		FP4_YYY_copy(&T1,&X1);			//T1.copy(X1);            // T1=X1-Z1.X2
+        FP4_YYY_sub(&X1,&X1,&T2);		//X1.sub(T2);
+        FP4_YYY_norm(&X1);				//X1.norm();  // X1=X1-Z1.X2
+        FP4_YYY_sub(&Y1,&Y1,&T1);		//Y1.sub(T1);
+        FP4_YYY_norm(&Y1);				//Y1.norm();  // Y1=Y1-Z1.Y2
 
-		FP4_YYY_qmul(&X1,&X1,Qy);		//X1.pmul(Qy);            // X1=(X1-Z1.X2).Ys
+        FP4_YYY_copy(&T1,&X1);			//T1.copy(X1);            // T1=X1-Z1.X2
+
+        FP4_YYY_qmul(&X1,&X1,Qy);		//X1.pmul(Qy);            // X1=(X1-Z1.X2).Ys
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-		FP4_YYY_times_i(&X1);
-		FP4_YYY_norm(&X1);
+        FP4_YYY_times_i(&X1);
+        FP4_YYY_norm(&X1);
 #endif
 
-		FP4_YYY_mul(&T1,&T1,&(B->y));	//T1.mul(B.gety());       // T1=(X1-Z1.X2).Y2
+        FP4_YYY_mul(&T1,&T1,&(B->y));	//T1.mul(B.gety());       // T1=(X1-Z1.X2).Y2
 
-		FP4_YYY_copy(&T2,&Y1);			//T2.copy(Y1);            // T2=Y1-Z1.Y2
-		FP4_YYY_mul(&T2,&T2,&(B->x));	//T2.mul(B.getx());       // T2=(Y1-Z1.Y2).X2
-		FP4_YYY_sub(&T2,&T2,&T1);		//T2.sub(T1); 
-		FP4_YYY_norm(&T2);				//T2.norm();          // T2=(Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2
-		FP4_YYY_qmul(&Y1,&Y1,Qx);		//Y1.pmul(Qx);  
-		FP4_YYY_neg(&Y1,&Y1);			//Y1.neg(); 
-		FP4_YYY_norm(&Y1);				//Y1.norm(); // Y1=-(Y1-Z1.Y2).Xs
+        FP4_YYY_copy(&T2,&Y1);			//T2.copy(Y1);            // T2=Y1-Z1.Y2
+        FP4_YYY_mul(&T2,&T2,&(B->x));	//T2.mul(B.getx());       // T2=(Y1-Z1.Y2).X2
+        FP4_YYY_sub(&T2,&T2,&T1);		//T2.sub(T1);
+        FP4_YYY_norm(&T2);				//T2.norm();          // T2=(Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2
+        FP4_YYY_qmul(&Y1,&Y1,Qx);		//Y1.pmul(Qx);
+        FP4_YYY_neg(&Y1,&Y1);			//Y1.neg();
+        FP4_YYY_norm(&Y1);				//Y1.norm(); // Y1=-(Y1-Z1.Y2).Xs
 
-		FP8_YYY_from_FP4s(&a,&X1,&T2);	// (X1-Z1.X2).Ys  |  (Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2  | - (Y1-Z1.Y2).Xs
+        FP8_YYY_from_FP4s(&a,&X1,&T2);	// (X1-Z1.X2).Ys  |  (Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2  | - (Y1-Z1.Y2).Xs
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-		FP8_YYY_from_FP4(&b,&Y1);		//b=new FP4(Y1);
-		FP8_YYY_zero(&c);
+        FP8_YYY_from_FP4(&b,&Y1);		//b=new FP4(Y1);
+        FP8_YYY_zero(&c);
 #endif
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-		FP8_YYY_zero(&b);
-		FP8_YYY_from_FP4H(&c,&Y1);		//b=new FP4(Y1);
+        FP8_YYY_zero(&b);
+        FP8_YYY_from_FP4H(&c,&Y1);		//b=new FP4(Y1);
 #endif
-		ECP4_ZZZ_add(A,B);			//A.add(B);
+        ECP4_ZZZ_add(A,B);			//A.add(B);
     }
 
     FP24_YYY_from_FP8s(v,&a,&b,&c);
-	v->type=FP_SPARSER;
+    v->type=AMCL_AMCL_FP_SPARSER;
 }
 
 /* prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3*n */
 int PAIR_ZZZ_nbits(BIG_XXX n3,BIG_XXX n)
 {
-	BIG_XXX x;
+    BIG_XXX x;
     BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
 
     BIG_XXX_copy(n,x);
     BIG_XXX_norm(n);
-	BIG_XXX_pmul(n3,n,3);
-	BIG_XXX_norm(n3);
+    BIG_XXX_pmul(n3,n,3);
+    BIG_XXX_norm(n3);
 
     return BIG_XXX_nbits(n3);
 }
@@ -161,117 +161,119 @@
 /* prepare for multi-pairing */
 void PAIR_ZZZ_initmp(FP24_YYY r[])
 {
-	int i;
-	for (i=ATE_BITS_ZZZ-1; i>=0; i--)
-		FP24_YYY_one(&r[i]);
-	return;
+    int i;
+    for (i=ATE_BITS_ZZZ-1; i>=0; i--)
+        FP24_YYY_one(&r[i]);
+    return;
 }
 
 /* basic Miller loop */
 void PAIR_ZZZ_miller(FP24_YYY *res,FP24_YYY r[])
 {
-	int i;
+    int i;
     FP24_YYY_one(res);
-	for (i=ATE_BITS_ZZZ-1; i>=1; i--)
-	{
-		FP24_YYY_sqr(res,res);
-		FP24_YYY_ssmul(res,&r[i]);
-	}
+    for (i=ATE_BITS_ZZZ-1; i>=1; i--)
+    {
+        FP24_YYY_sqr(res,res);
+        FP24_YYY_ssmul(res,&r[i]);
+    }
 
 #if SIGN_OF_X_ZZZ==NEGATIVEX
     FP24_YYY_conj(res,res);
 #endif
-	FP24_YYY_ssmul(res,&r[0]);
-	return;
+    FP24_YYY_ssmul(res,&r[0]);
+    return;
 }
 
 /* Accumulate another set of line functions for n-pairing */
 void PAIR_ZZZ_another(FP24_YYY r[],ECP4_ZZZ* PV,ECP_ZZZ* QV)
 {
-    int i,j,nb,bt;
-	BIG_XXX x,n,n3;
+    int i,nb,bt;
+    BIG_XXX n,n3;
     FP24_YYY lv,lv2;
     ECP4_ZZZ A,NP,P;
-	ECP_ZZZ Q;
-	FP_YYY Qx,Qy;
+    ECP_ZZZ Q;
+    FP_YYY Qx,Qy;
 
-	nb=PAIR_ZZZ_nbits(n3,n);
+    nb=PAIR_ZZZ_nbits(n3,n);
 
-	ECP4_ZZZ_copy(&P,PV);
-	ECP_ZZZ_copy(&Q,QV);
+    ECP4_ZZZ_copy(&P,PV);
+    ECP_ZZZ_copy(&Q,QV);
 
-	ECP4_ZZZ_affine(&P);
-	ECP_ZZZ_affine(&Q);
+    ECP4_ZZZ_affine(&P);
+    ECP_ZZZ_affine(&Q);
 
-	FP_YYY_copy(&Qx,&(Q.x));
-	FP_YYY_copy(&Qy,&(Q.y));
+    FP_YYY_copy(&Qx,&(Q.x));
+    FP_YYY_copy(&Qy,&(Q.y));
 
-	ECP4_ZZZ_copy(&A,&P);
-	ECP4_ZZZ_copy(&NP,&P); ECP4_ZZZ_neg(&NP);
+    ECP4_ZZZ_copy(&A,&P);
+    ECP4_ZZZ_copy(&NP,&P);
+    ECP4_ZZZ_neg(&NP);
 
-	for (i=nb-2; i>=1; i--)
-	{
-		PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
+    for (i=nb-2; i>=1; i--)
+    {
+        PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
 
-		bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
-		if (bt==1)
-		{
-			PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
-			FP24_YYY_smul(&lv,&lv2);
-		}
-		if (bt==-1)
-		{
-			PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
-			FP24_YYY_smul(&lv,&lv2);
-		}
-		FP24_YYY_ssmul(&r[i],&lv);
-	}
+        bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+        if (bt==1)
+        {
+            PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
+            FP24_YYY_smul(&lv,&lv2);
+        }
+        if (bt==-1)
+        {
+            PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
+            FP24_YYY_smul(&lv,&lv2);
+        }
+        FP24_YYY_ssmul(&r[i],&lv);
+    }
 }
 
 /* Optimal R-ate pairing r=e(P,Q) */
 void PAIR_ZZZ_ate(FP24_YYY *r,ECP4_ZZZ *P1,ECP_ZZZ *Q1)
 {
-    BIG_XXX x,n,n3;
-	FP_YYY Qx,Qy;
+    BIG_XXX n,n3;
+    FP_YYY Qx,Qy;
     int i,nb,bt;
     ECP4_ZZZ A,NP,P;
-	ECP_ZZZ Q;
+    ECP_ZZZ Q;
     FP24_YYY lv,lv2;
 
-	nb=PAIR_ZZZ_nbits(n3,n);
+    nb=PAIR_ZZZ_nbits(n3,n);
 
-	ECP4_ZZZ_copy(&P,P1);
-	ECP_ZZZ_copy(&Q,Q1);
+    ECP4_ZZZ_copy(&P,P1);
+    ECP_ZZZ_copy(&Q,Q1);
 
-	ECP4_ZZZ_affine(&P);
-	ECP_ZZZ_affine(&Q);
+    ECP4_ZZZ_affine(&P);
+    ECP_ZZZ_affine(&Q);
 
 
     FP_YYY_copy(&Qx,&(Q.x));
     FP_YYY_copy(&Qy,&(Q.y));
 
     ECP4_ZZZ_copy(&A,&P);
-	ECP4_ZZZ_copy(&NP,&P); ECP4_ZZZ_neg(&NP);
+    ECP4_ZZZ_copy(&NP,&P);
+    ECP4_ZZZ_neg(&NP);
 
     FP24_YYY_one(r);
 
     /* Main Miller Loop */
     for (i=nb-2; i>=1; i--)
     {
-		FP24_YYY_sqr(r,r);
+        FP24_YYY_sqr(r,r);
         PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
 
-		bt= BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i);  // BIG_bit(n,i); 
+        bt= BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i);  // BIG_bit(n,i);
         if (bt==1)
         {
             PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
             FP24_YYY_smul(&lv,&lv2);
         }
-		if (bt==-1)
-		{
+        if (bt==-1)
+        {
             PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
             FP24_YYY_smul(&lv,&lv2);
-		}
+        }
         FP24_YYY_ssmul(r,&lv);
     }
 
@@ -284,25 +286,25 @@
 /* Optimal R-ate double pairing e(P,Q).e(R,S) */
 void PAIR_ZZZ_double_ate(FP24_YYY *r,ECP4_ZZZ *P1,ECP_ZZZ *Q1,ECP4_ZZZ *R1,ECP_ZZZ *S1)
 {
-    BIG_XXX x,n,n3;
-	FP_YYY Qx,Qy,Sx,Sy;
+    BIG_XXX n,n3;
+    FP_YYY Qx,Qy,Sx,Sy;
     int i,nb,bt;
     ECP4_ZZZ A,B,NP,NR,P,R;
-	ECP_ZZZ Q,S;
+    ECP_ZZZ Q,S;
     FP24_YYY lv,lv2;
-	nb=PAIR_ZZZ_nbits(n3,n);
+    nb=PAIR_ZZZ_nbits(n3,n);
 
-	ECP4_ZZZ_copy(&P,P1);
-	ECP_ZZZ_copy(&Q,Q1);
+    ECP4_ZZZ_copy(&P,P1);
+    ECP_ZZZ_copy(&Q,Q1);
 
-	ECP4_ZZZ_affine(&P);
-	ECP_ZZZ_affine(&Q);
+    ECP4_ZZZ_affine(&P);
+    ECP_ZZZ_affine(&Q);
 
-	ECP4_ZZZ_copy(&R,R1);
-	ECP_ZZZ_copy(&S,S1);
+    ECP4_ZZZ_copy(&R,R1);
+    ECP_ZZZ_copy(&S,S1);
 
-	ECP4_ZZZ_affine(&R);
-	ECP_ZZZ_affine(&S);
+    ECP4_ZZZ_affine(&R);
+    ECP_ZZZ_affine(&S);
 
     FP_YYY_copy(&Qx,&(Q.x));
     FP_YYY_copy(&Qy,&(Q.y));
@@ -312,36 +314,38 @@
 
     ECP4_ZZZ_copy(&A,&P);
     ECP4_ZZZ_copy(&B,&R);
-	ECP4_ZZZ_copy(&NP,&P); ECP4_ZZZ_neg(&NP);
-	ECP4_ZZZ_copy(&NR,&R); ECP4_ZZZ_neg(&NR);
+    ECP4_ZZZ_copy(&NP,&P);
+    ECP4_ZZZ_neg(&NP);
+    ECP4_ZZZ_copy(&NR,&R);
+    ECP4_ZZZ_neg(&NR);
 
     FP24_YYY_one(r);
 
     /* Main Miller Loop */
     for (i=nb-2; i>=1; i--)
     {
-		FP24_YYY_sqr(r,r);
+        FP24_YYY_sqr(r,r);
         PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
         PAIR_ZZZ_line(&lv2,&B,&B,&Sx,&Sy);
-		FP24_YYY_smul(&lv,&lv2);
+        FP24_YYY_smul(&lv,&lv2);
         FP24_YYY_ssmul(r,&lv);
 
-		bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+        bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
         if (bt==1)
         {
             PAIR_ZZZ_line(&lv,&A,&P,&Qx,&Qy);
-			PAIR_ZZZ_line(&lv2,&B,&R,&Sx,&Sy);
+            PAIR_ZZZ_line(&lv2,&B,&R,&Sx,&Sy);
             FP24_YYY_smul(&lv,&lv2);
             FP24_YYY_ssmul(r,&lv);
         }
-		if (bt==-1)
-		{
+        if (bt==-1)
+        {
             PAIR_ZZZ_line(&lv,&A,&NP,&Qx,&Qy);
-			PAIR_ZZZ_line(&lv2,&B,&NR,&Sx,&Sy);
+            PAIR_ZZZ_line(&lv2,&B,&NR,&Sx,&Sy);
             FP24_YYY_smul(&lv,&lv2);
             FP24_YYY_ssmul(r,&lv);
-		}
-	}
+        }
+    }
 
 
 
@@ -357,7 +361,7 @@
 {
     FP2_YYY X;
     BIG_XXX x;
-	FP_YYY a,b;
+    FP_YYY a,b;
     FP24_YYY t0,t1,t2,t3,t4,t5,t6,t7;  // could lose one of these - r=t3
 
     BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
@@ -377,89 +381,89 @@
 
     FP24_YYY_mul(r,&t0);
 
-	if (FP24_YYY_isunity(r))
-	{
-		FP24_YYY_zero(r);
-		return;
-	}
+    if (FP24_YYY_isunity(r))
+    {
+        FP24_YYY_zero(r);
+        return;
+    }
 // Ghamman & Fouotsa Method - (completely garbled in  https://eprint.iacr.org/2016/130)
 
-	FP24_YYY_usqr(&t7,r);			// t7=f^2
-	FP24_YYY_pow(&t1,&t7,x);		// t1=t7^u
+    FP24_YYY_usqr(&t7,r);			// t7=f^2
+    FP24_YYY_pow(&t1,&t7,x);		// t1=t7^u
 
-	BIG_XXX_fshr(x,1);
-	FP24_YYY_pow(&t2,&t1,x);		// t2=t1^(u/2)
-	BIG_XXX_fshl(x,1);  // x must be even
+    BIG_XXX_fshr(x,1);
+    FP24_YYY_pow(&t2,&t1,x);		// t2=t1^(u/2)
+    BIG_XXX_fshl(x,1);  // x must be even
 
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP24_YYY_conj(&t1,&t1);
+    FP24_YYY_conj(&t1,&t1);
 #endif
 
-	FP24_YYY_conj(&t3,&t1);		// t3=1/t1
-	FP24_YYY_mul(&t2,&t3);		// t2=t1*t3
-	FP24_YYY_mul(&t2,r);		// t2=t2*f
+    FP24_YYY_conj(&t3,&t1);		// t3=1/t1
+    FP24_YYY_mul(&t2,&t3);		// t2=t1*t3
+    FP24_YYY_mul(&t2,r);		// t2=t2*f
 
 
-	FP24_YYY_pow(&t3,&t2,x);		// t3=t2^u
-	FP24_YYY_pow(&t4,&t3,x);		// t4=t3^u
-	FP24_YYY_pow(&t5,&t4,x);		// t5=t4^u
+    FP24_YYY_pow(&t3,&t2,x);		// t3=t2^u
+    FP24_YYY_pow(&t4,&t3,x);		// t4=t3^u
+    FP24_YYY_pow(&t5,&t4,x);		// t5=t4^u
 
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP24_YYY_conj(&t3,&t3);
-	FP24_YYY_conj(&t5,&t5);
+    FP24_YYY_conj(&t3,&t3);
+    FP24_YYY_conj(&t5,&t5);
 #endif
 
-	FP24_YYY_frob(&t3,&X,6);
-	FP24_YYY_frob(&t4,&X,5);
+    FP24_YYY_frob(&t3,&X,6);
+    FP24_YYY_frob(&t4,&X,5);
 
-	FP24_YYY_mul(&t3,&t4);		// t3=t3.t4
+    FP24_YYY_mul(&t3,&t4);		// t3=t3.t4
 
 
-	FP24_YYY_pow(&t6,&t5,x);		// t6=t5^u
+    FP24_YYY_pow(&t6,&t5,x);		// t6=t5^u
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP24_YYY_conj(&t6,&t6);
+    FP24_YYY_conj(&t6,&t6);
 #endif
 
 
-	FP24_YYY_frob(&t5,&X,4); 
-	FP24_YYY_mul(&t3,&t5); // ??
+    FP24_YYY_frob(&t5,&X,4);
+    FP24_YYY_mul(&t3,&t5); // ??
 
 
-	FP24_YYY_conj(&t0,&t2);			// t0=1/t2
-	FP24_YYY_mul(&t6,&t0);		// t6=t6*t0
+    FP24_YYY_conj(&t0,&t2);			// t0=1/t2
+    FP24_YYY_mul(&t6,&t0);		// t6=t6*t0
 
-	FP24_YYY_copy(&t5,&t6);
-	FP24_YYY_frob(&t5,&X,3); 
+    FP24_YYY_copy(&t5,&t6);
+    FP24_YYY_frob(&t5,&X,3);
 
-	FP24_YYY_mul(&t3,&t5);		// t3=t3*t5
-	FP24_YYY_pow(&t5,&t6,x);	// t5=t6^x
-	FP24_YYY_pow(&t6,&t5,x);	// t6=t5^x
+    FP24_YYY_mul(&t3,&t5);		// t3=t3*t5
+    FP24_YYY_pow(&t5,&t6,x);	// t5=t6^x
+    FP24_YYY_pow(&t6,&t5,x);	// t6=t5^x
 
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP24_YYY_conj(&t5,&t5);
+    FP24_YYY_conj(&t5,&t5);
 #endif
 
-	FP24_YYY_copy(&t0,&t5);	
-	FP24_YYY_frob(&t0,&X,2); 
-	FP24_YYY_mul(&t3,&t0);		// t3=t3*t0
-	FP24_YYY_copy(&t0,&t6);     // 
-	FP24_YYY_frob(&t0,&X,1);
+    FP24_YYY_copy(&t0,&t5);
+    FP24_YYY_frob(&t0,&X,2);
+    FP24_YYY_mul(&t3,&t0);		// t3=t3*t0
+    FP24_YYY_copy(&t0,&t6);     //
+    FP24_YYY_frob(&t0,&X,1);
 
-	FP24_YYY_mul(&t3,&t0);		// t3=t3*t0
-	FP24_YYY_pow(&t5,&t6,x);    // t5=t6*x
+    FP24_YYY_mul(&t3,&t0);		// t3=t3*t0
+    FP24_YYY_pow(&t5,&t6,x);    // t5=t6*x
 
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP24_YYY_conj(&t5,&t5);
+    FP24_YYY_conj(&t5,&t5);
 #endif
 
-	FP24_YYY_frob(&t2,&X,7); 
+    FP24_YYY_frob(&t2,&X,7);
 
-	FP24_YYY_mul(&t5,&t7);		// t5=t5*t7
-	FP24_YYY_mul(&t3,&t2);		// t3=t3*t2
-	FP24_YYY_mul(&t3,&t5);		// t3=t3*t5
+    FP24_YYY_mul(&t5,&t7);		// t5=t5*t7
+    FP24_YYY_mul(&t3,&t2);		// t3=t3*t2
+    FP24_YYY_mul(&t3,&t5);		// t3=t3*t5
 
-	FP24_YYY_mul(r,&t3);
-	FP24_YYY_reduce(r);
+    FP24_YYY_mul(r,&t3);
+    FP24_YYY_reduce(r);
 
 }
 
@@ -473,7 +477,7 @@
     BIG_XXX x,x2,q;
     BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
     BIG_XXX_smul(x2,x,x);
-	BIG_XXX_smul(x,x2,x2);
+    BIG_XXX_smul(x,x2,x2);
     BIG_XXX_copy(u[0],e);
     BIG_XXX_mod(u[0],x);
     BIG_XXX_copy(u[1],e);
@@ -493,7 +497,7 @@
     int i;
 
     BIG_XXX x,w,q;
-	BIG_XXX_rcopy(q,CURVE_Order_ZZZ);
+    BIG_XXX_rcopy(q,CURVE_Order_ZZZ);
     BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
     BIG_XXX_copy(w,e);
 
@@ -503,14 +507,14 @@
         BIG_XXX_mod(u[i],x);
         BIG_XXX_sdiv(w,x);
     }
-	BIG_XXX_copy(u[7],w);
+    BIG_XXX_copy(u[7],w);
 
-/*  */
+    /*  */
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	BIG_XXX_modneg(u[1],u[1],q);
-	BIG_XXX_modneg(u[3],u[3],q);
-	BIG_XXX_modneg(u[5],u[5],q);
-	BIG_XXX_modneg(u[7],u[7],q);
+    BIG_XXX_modneg(u[1],u[1],q);
+    BIG_XXX_modneg(u[3],u[3],q);
+    BIG_XXX_modneg(u[5],u[5],q);
+    BIG_XXX_modneg(u[7],u[7],q);
 #endif
 
 
@@ -523,14 +527,15 @@
 #ifdef USE_GLV_ZZZ   /* Note this method is patented */
     int np,nn;
     ECP_ZZZ Q;
-	FP_YYY cru;
+    FP_YYY cru;
     BIG_XXX t,q;
     BIG_XXX u[2];
 
     BIG_XXX_rcopy(q,CURVE_Order_ZZZ);
     glv(u,e);
 
-    ECP_ZZZ_copy(&Q,P); ECP_ZZZ_affine(&Q);
+    ECP_ZZZ_copy(&Q,P);
+    ECP_ZZZ_affine(&Q);
     FP_YYY_rcopy(&cru,CURVE_Cru_ZZZ);
     FP_YYY_mul(&(Q.x),&(Q.x),&cru);
 
@@ -554,7 +559,7 @@
         ECP_ZZZ_neg(&Q);
     }
     BIG_XXX_norm(u[0]);
-    BIG_XXX_norm(u[1]);    
+    BIG_XXX_norm(u[1]);
     ECP_ZZZ_mul2(P,&Q,u[0],u[1]);
 
 #else
@@ -571,7 +576,7 @@
     FP2_YYY X[3];
     BIG_XXX x,y,u[8];
 
-	ECP4_ZZZ_frob_constants(X);
+    ECP4_ZZZ_frob_constants(X);
 
     BIG_XXX_rcopy(y,CURVE_Order_ZZZ);
     gs(u,e);
@@ -593,7 +598,7 @@
             BIG_XXX_copy(u[i],x);
             ECP4_ZZZ_neg(&Q[i]);
         }
-        BIG_XXX_norm(u[i]);   
+        BIG_XXX_norm(u[i]);
     }
 
     ECP4_ZZZ_mul8(P,Q,u);
@@ -611,7 +616,7 @@
     FP24_YYY g[8];
     FP2_YYY X;
     BIG_XXX t,q;
-	FP_YYY fx,fy;
+    FP_YYY fx,fy;
     BIG_XXX u[8];
 
     FP_YYY_rcopy(&fx,Fra_YYY);
@@ -638,7 +643,7 @@
             BIG_XXX_copy(u[i],t);
             FP24_YYY_conj(&g[i],&g[i]);
         }
-        BIG_XXX_norm(u[i]);        
+        BIG_XXX_norm(u[i]);
     }
     FP24_YYY_pow8(f,g,u);
 
@@ -666,16 +671,16 @@
     ECP_ZZZ Q,R;
     FP24 g,gp;
     FP8_YYY t,c,cp,cpm1,cpm2;
-	FP4_YYY X,Y;
+    FP4_YYY X,Y;
     FP2_YYY x,y,f,Aa,Bb;
-	FP_YYY cru;
+    FP_YYY cru;
 
-	for (i=0;i<32;i++)
-		byt[i]=i+9;
-	RAND_seed(&rng,32,byt);
+    for (i=0; i<32; i++)
+        byt[i]=i+9;
+    RAND_seed(&rng,32,byt);
 
-	BIG_XXX_rcopy(r,CURVE_Order);
-	BIG_XXX_rcopy(p,Modulus);
+    BIG_XXX_rcopy(r,CURVE_Order);
+    BIG_XXX_rcopy(p,Modulus);
 
 
     BIG_XXX_rcopy(xa,CURVE_Gx);
@@ -689,7 +694,7 @@
     ECP_output(&Q);
     printf("\n");
 
-	ECP4_ZZZ_generator(&P);
+    ECP4_ZZZ_generator(&P);
 
     if (P.inf) printf("Failed to set - point not on curve\n");
     else printf("G2 set success\n");
@@ -700,7 +705,7 @@
 
     PAIR_ate(&g,&P,&Q);
 
-	printf("gb= ");
+    printf("gb= ");
     FP24_output(&g);
     printf("\n");
     PAIR_fexp(&g);
@@ -709,12 +714,12 @@
     FP24_output(&g);
     printf("\n");
 
-	ECP_copy(&R,&Q);
-	ECP4_ZZZ_copy(&G,&P);
+    ECP_copy(&R,&Q);
+    ECP4_ZZZ_copy(&G,&P);
 
-	ECP4_ZZZ_dbl(&G);
-	ECP_dbl(&R);
-	ECP_affine(&R);
+    ECP4_ZZZ_dbl(&G);
+    ECP_dbl(&R);
+    ECP_affine(&R);
 
     PAIR_ate(&g,&G,&Q);
     PAIR_fexp(&g);
@@ -731,25 +736,33 @@
     printf("\n");
 
 
-	PAIR_G1mul(&Q,r);
-	printf("rQ= ");ECP_output(&Q); printf("\n");
+    PAIR_G1mul(&Q,r);
+    printf("rQ= ");
+    ECP_output(&Q);
+    printf("\n");
 
-	PAIR_G2mul(&P,r);
-	printf("rP= ");ECP4_ZZZ_output(&P); printf("\n");
+    PAIR_G2mul(&P,r);
+    printf("rP= ");
+    ECP4_ZZZ_output(&P);
+    printf("\n");
 
-	BIG_XXX_randomnum(w,r,&rng);
+    BIG_XXX_randomnum(w,r,&rng);
 
-	FP24_copy(&gp,&g);
+    FP24_copy(&gp,&g);
 
-	PAIR_GTpow(&g,w);
+    PAIR_GTpow(&g,w);
 
-	FP24_trace(&t,&g);
+    FP24_trace(&t,&g);
 
-	printf("g^r=  ");FP8_output(&t); printf("\n");
+    printf("g^r=  ");
+    FP8_output(&t);
+    printf("\n");
 
-	FP24_compow(&t,&gp,w,r);
+    FP24_compow(&t,&gp,w,r);
 
-	printf("t(g)= "); FP8_output(&t); printf("\n");
+    printf("t(g)= ");
+    FP8_output(&t);
+    printf("\n");
 
 }
 
diff --git a/version3/c/pair256.c b/version3/c/pair256.c
index 9dab331..2b53ba4 100644
--- a/version3/c/pair256.c
+++ b/version3/c/pair256.c
@@ -26,122 +26,122 @@
 /* Line function */
 static void PAIR_ZZZ_line(FP48_YYY *v,ECP8_ZZZ *A,ECP8_ZZZ *B,FP_YYY *Qx,FP_YYY *Qy)
 {
-	FP8_YYY X1,Y1,T1,T2;
-	FP8_YYY XX,YY,ZZ,YZ;
+    FP8_YYY X1,Y1,T1,T2;
+    FP8_YYY XX,YY,ZZ,YZ;
     FP16_YYY a,b,c;
 
-	if (A==B)
+    if (A==B)
     {
         /* doubling */
- 		FP8_YYY_copy(&XX,&(A->x));	//FP8_YYY XX=new FP8_YYY(A.getx());  //X
-		FP8_YYY_copy(&YY,&(A->y));	//FP8_YYY YY=new FP8_YYY(A.gety());  //Y
-		FP8_YYY_copy(&ZZ,&(A->z));	//FP8_YYY ZZ=new FP8_YYY(A.getz());  //Z
+        FP8_YYY_copy(&XX,&(A->x));	//FP8_YYY XX=new FP8_YYY(A.getx());  //X
+        FP8_YYY_copy(&YY,&(A->y));	//FP8_YYY YY=new FP8_YYY(A.gety());  //Y
+        FP8_YYY_copy(&ZZ,&(A->z));	//FP8_YYY ZZ=new FP8_YYY(A.getz());  //Z
 
 
-		FP8_YYY_copy(&YZ,&YY);		//FP8_YYY YZ=new FP8_YYY(YY);        //Y 
-		FP8_YYY_mul(&YZ,&YZ,&ZZ);		//YZ.mul(ZZ);                //YZ
-		FP8_YYY_sqr(&XX,&XX);		//XX.sqr();	               //X^2
-		FP8_YYY_sqr(&YY,&YY);		//YY.sqr();	               //Y^2
-		FP8_YYY_sqr(&ZZ,&ZZ);		//ZZ.sqr();			       //Z^2
-			
-		FP8_YYY_imul(&YZ,&YZ,4);	//YZ.imul(4);
-		FP8_YYY_neg(&YZ,&YZ);		//YZ.neg(); 
-		FP8_YYY_norm(&YZ);			//YZ.norm();       //-4YZ
+        FP8_YYY_copy(&YZ,&YY);		//FP8_YYY YZ=new FP8_YYY(YY);        //Y
+        FP8_YYY_mul(&YZ,&YZ,&ZZ);		//YZ.mul(ZZ);                //YZ
+        FP8_YYY_sqr(&XX,&XX);		//XX.sqr();	               //X^2
+        FP8_YYY_sqr(&YY,&YY);		//YY.sqr();	               //Y^2
+        FP8_YYY_sqr(&ZZ,&ZZ);		//ZZ.sqr();			       //Z^2
 
-		FP8_YYY_imul(&XX,&XX,6);					//6X^2
-		FP8_YYY_tmul(&XX,&XX,Qx);	               //6X^2.Xs
+        FP8_YYY_imul(&YZ,&YZ,4);	//YZ.imul(4);
+        FP8_YYY_neg(&YZ,&YZ);		//YZ.neg();
+        FP8_YYY_norm(&YZ);			//YZ.norm();       //-4YZ
 
-		FP8_YYY_imul(&ZZ,&ZZ,3*CURVE_B_I_ZZZ);	//3Bz^2 
-		FP8_YYY_tmul(&YZ,&YZ,Qy);	//-4YZ.Ys
+        FP8_YYY_imul(&XX,&XX,6);					//6X^2
+        FP8_YYY_tmul(&XX,&XX,Qx);	               //6X^2.Xs
+
+        FP8_YYY_imul(&ZZ,&ZZ,3*CURVE_B_I_ZZZ);	//3Bz^2
+        FP8_YYY_tmul(&YZ,&YZ,Qy);	//-4YZ.Ys
 
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-		FP8_YYY_div_2i(&ZZ);		//6(b/i)z^2
+        FP8_YYY_div_2i(&ZZ);		//6(b/i)z^2
 #endif
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-		FP8_YYY_times_i(&ZZ);
-		FP8_YYY_add(&ZZ,&ZZ,&ZZ);  // 6biz^2
-		FP8_YYY_times_i(&YZ);
-		FP8_YYY_norm(&YZ);	
+        FP8_YYY_times_i(&ZZ);
+        FP8_YYY_add(&ZZ,&ZZ,&ZZ);  // 6biz^2
+        FP8_YYY_times_i(&YZ);
+        FP8_YYY_norm(&YZ);
 #endif
-		FP8_YYY_norm(&ZZ);			// 6bi.Z^2 
+        FP8_YYY_norm(&ZZ);			// 6bi.Z^2
 
-		FP8_YYY_add(&YY,&YY,&YY);	// 2y^2
-		FP8_YYY_sub(&ZZ,&ZZ,&YY);	// 
-		FP8_YYY_norm(&ZZ);			// 6b.Z^2-2Y^2
+        FP8_YYY_add(&YY,&YY,&YY);	// 2y^2
+        FP8_YYY_sub(&ZZ,&ZZ,&YY);	//
+        FP8_YYY_norm(&ZZ);			// 6b.Z^2-2Y^2
 
-		FP16_YYY_from_FP8s(&a,&YZ,&ZZ); // -4YZ.Ys | 6b.Z^2-2Y^2 | 6X^2.Xs 
+        FP16_YYY_from_FP8s(&a,&YZ,&ZZ); // -4YZ.Ys | 6b.Z^2-2Y^2 | 6X^2.Xs
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-		FP16_YYY_from_FP8(&b,&XX);	
-		FP16_YYY_zero(&c);
+        FP16_YYY_from_FP8(&b,&XX);
+        FP16_YYY_zero(&c);
 #endif
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-		FP16_YYY_zero(&b);
-		FP16_YYY_from_FP8H(&c,&XX);
+        FP16_YYY_zero(&b);
+        FP16_YYY_from_FP8H(&c,&XX);
 #endif
 
-		ECP8_ZZZ_dbl(A);				//A.dbl();
+        ECP8_ZZZ_dbl(A);				//A.dbl();
     }
     else
     {
         /* addition */
 
-		FP8_YYY_copy(&X1,&(A->x));		//FP8_YYY X1=new FP8_YYY(A.getx());    // X1
-		FP8_YYY_copy(&Y1,&(A->y));		//FP8_YYY Y1=new FP8_YYY(A.gety());    // Y1
-		FP8_YYY_copy(&T1,&(A->z));		//FP8_YYY T1=new FP8_YYY(A.getz());    // Z1
-			
-		FP8_YYY_copy(&T2,&T1);		//FP8_YYY T2=new FP8_YYY(A.getz());    // Z1
+        FP8_YYY_copy(&X1,&(A->x));		//FP8_YYY X1=new FP8_YYY(A.getx());    // X1
+        FP8_YYY_copy(&Y1,&(A->y));		//FP8_YYY Y1=new FP8_YYY(A.gety());    // Y1
+        FP8_YYY_copy(&T1,&(A->z));		//FP8_YYY T1=new FP8_YYY(A.getz());    // Z1
 
-		FP8_YYY_mul(&T1,&T1,&(B->y));	//T1.mul(B.gety());    // T1=Z1.Y2 
-		FP8_YYY_mul(&T2,&T2,&(B->x));	//T2.mul(B.getx());    // T2=Z1.X2
+        FP8_YYY_copy(&T2,&T1);		//FP8_YYY T2=new FP8_YYY(A.getz());    // Z1
 
-		FP8_YYY_sub(&X1,&X1,&T2);		//X1.sub(T2); 
-		FP8_YYY_norm(&X1);				//X1.norm();  // X1=X1-Z1.X2
-		FP8_YYY_sub(&Y1,&Y1,&T1);		//Y1.sub(T1); 
-		FP8_YYY_norm(&Y1);				//Y1.norm();  // Y1=Y1-Z1.Y2
+        FP8_YYY_mul(&T1,&T1,&(B->y));	//T1.mul(B.gety());    // T1=Z1.Y2
+        FP8_YYY_mul(&T2,&T2,&(B->x));	//T2.mul(B.getx());    // T2=Z1.X2
 
-		FP8_YYY_copy(&T1,&X1);			//T1.copy(X1);            // T1=X1-Z1.X2
-		FP8_YYY_tmul(&X1,&X1,Qy);		//X1.pmul(Qy);            // X1=(X1-Z1.X2).Ys
+        FP8_YYY_sub(&X1,&X1,&T2);		//X1.sub(T2);
+        FP8_YYY_norm(&X1);				//X1.norm();  // X1=X1-Z1.X2
+        FP8_YYY_sub(&Y1,&Y1,&T1);		//Y1.sub(T1);
+        FP8_YYY_norm(&Y1);				//Y1.norm();  // Y1=Y1-Z1.Y2
+
+        FP8_YYY_copy(&T1,&X1);			//T1.copy(X1);            // T1=X1-Z1.X2
+        FP8_YYY_tmul(&X1,&X1,Qy);		//X1.pmul(Qy);            // X1=(X1-Z1.X2).Ys
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-		FP8_YYY_times_i(&X1);
-		FP8_YYY_norm(&X1);
+        FP8_YYY_times_i(&X1);
+        FP8_YYY_norm(&X1);
 #endif
 
-		FP8_YYY_mul(&T1,&T1,&(B->y));	//T1.mul(B.gety());       // T1=(X1-Z1.X2).Y2
+        FP8_YYY_mul(&T1,&T1,&(B->y));	//T1.mul(B.gety());       // T1=(X1-Z1.X2).Y2
 
-		FP8_YYY_copy(&T2,&Y1);			//T2.copy(Y1);            // T2=Y1-Z1.Y2
-		FP8_YYY_mul(&T2,&T2,&(B->x));	//T2.mul(B.getx());       // T2=(Y1-Z1.Y2).X2
-		FP8_YYY_sub(&T2,&T2,&T1);		//T2.sub(T1); 
-		FP8_YYY_norm(&T2);				//T2.norm();          // T2=(Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2
-		FP8_YYY_tmul(&Y1,&Y1,Qx);		//Y1.pmul(Qx);  
-		FP8_YYY_neg(&Y1,&Y1);			//Y1.neg(); 
-		FP8_YYY_norm(&Y1);				//Y1.norm(); // Y1=-(Y1-Z1.Y2).Xs
+        FP8_YYY_copy(&T2,&Y1);			//T2.copy(Y1);            // T2=Y1-Z1.Y2
+        FP8_YYY_mul(&T2,&T2,&(B->x));	//T2.mul(B.getx());       // T2=(Y1-Z1.Y2).X2
+        FP8_YYY_sub(&T2,&T2,&T1);		//T2.sub(T1);
+        FP8_YYY_norm(&T2);				//T2.norm();          // T2=(Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2
+        FP8_YYY_tmul(&Y1,&Y1,Qx);		//Y1.pmul(Qx);
+        FP8_YYY_neg(&Y1,&Y1);			//Y1.neg();
+        FP8_YYY_norm(&Y1);				//Y1.norm(); // Y1=-(Y1-Z1.Y2).Xs
 
-		FP16_YYY_from_FP8s(&a,&X1,&T2);	// (X1-Z1.X2).Ys  |  (Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2  | - (Y1-Z1.Y2).Xs
+        FP16_YYY_from_FP8s(&a,&X1,&T2);	// (X1-Z1.X2).Ys  |  (Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2  | - (Y1-Z1.Y2).Xs
 #if SEXTIC_TWIST_ZZZ==D_TYPE
-		FP16_YYY_from_FP8(&b,&Y1);		//b=new FP4(Y1);
-		FP16_YYY_zero(&c);
+        FP16_YYY_from_FP8(&b,&Y1);		//b=new FP4(Y1);
+        FP16_YYY_zero(&c);
 #endif
 #if SEXTIC_TWIST_ZZZ==M_TYPE
-		FP16_YYY_zero(&b);
-		FP16_YYY_from_FP8H(&c,&Y1);		//b=new FP4(Y1);
+        FP16_YYY_zero(&b);
+        FP16_YYY_from_FP8H(&c,&Y1);		//b=new FP4(Y1);
 #endif
-		ECP8_ZZZ_add(A,B);			// A.add(B);
+        ECP8_ZZZ_add(A,B);			// A.add(B);
     }
 
     FP48_YYY_from_FP16s(v,&a,&b,&c);
-	v->type=FP_SPARSER;
+    v->type=AMCL_AMCL_FP_SPARSER;
 }
 
 /* prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3*n */
 int PAIR_ZZZ_nbits(BIG_XXX n3,BIG_XXX n)
 {
-	BIG_XXX x;
+    BIG_XXX x;
     BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
 
     BIG_XXX_copy(n,x);
     BIG_XXX_norm(n);
-	BIG_XXX_pmul(n3,n,3);
-	BIG_XXX_norm(n3);
+    BIG_XXX_pmul(n3,n,3);
+    BIG_XXX_norm(n3);
 
     return BIG_XXX_nbits(n3);
 }
@@ -158,117 +158,119 @@
 /* prepare for multi-pairing */
 void PAIR_ZZZ_initmp(FP48_YYY r[])
 {
-	int i;
-	for (i=ATE_BITS_ZZZ-1; i>=0; i--)
-		FP48_YYY_one(&r[i]);
-	return;
+    int i;
+    for (i=ATE_BITS_ZZZ-1; i>=0; i--)
+        FP48_YYY_one(&r[i]);
+    return;
 }
 
 /* basic Miller loop */
 void PAIR_ZZZ_miller(FP48_YYY *res,FP48_YYY r[])
 {
-	int i;
+    int i;
     FP48_YYY_one(res);
-	for (i=ATE_BITS_ZZZ-1; i>=1; i--)
-	{
-		FP48_YYY_sqr(res,res);
-		FP48_YYY_ssmul(res,&r[i]);
-	}
+    for (i=ATE_BITS_ZZZ-1; i>=1; i--)
+    {
+        FP48_YYY_sqr(res,res);
+        FP48_YYY_ssmul(res,&r[i]);
+    }
 
 #if SIGN_OF_X_ZZZ==NEGATIVEX
     FP48_YYY_conj(res,res);
 #endif
-	FP48_YYY_ssmul(res,&r[0]);
-	return;
+    FP48_YYY_ssmul(res,&r[0]);
+    return;
 }
 
 /* Accumulate another set of line functions for n-pairing */
 void PAIR_ZZZ_another(FP48_YYY r[],ECP8_ZZZ* PV,ECP_ZZZ* QV)
 {
-    int i,j,nb,bt;
-	BIG_XXX x,n,n3;
+    int i,nb,bt;
+    BIG_XXX n,n3;
     FP48_YYY lv,lv2;
     ECP8_ZZZ A,NP,P;
-	ECP_ZZZ Q;
-	FP_YYY Qx,Qy;
+    ECP_ZZZ Q;
+    FP_YYY Qx,Qy;
 
-	nb=PAIR_ZZZ_nbits(n3,n);
+    nb=PAIR_ZZZ_nbits(n3,n);
 
-	ECP8_ZZZ_copy(&P,PV);
-	ECP_ZZZ_copy(&Q,QV);
+    ECP8_ZZZ_copy(&P,PV);
+    ECP_ZZZ_copy(&Q,QV);
 
-	ECP8_ZZZ_affine(&P);
-	ECP_ZZZ_affine(&Q);
+    ECP8_ZZZ_affine(&P);
+    ECP_ZZZ_affine(&Q);
 
-	FP_YYY_copy(&Qx,&(Q.x));
-	FP_YYY_copy(&Qy,&(Q.y));
+    FP_YYY_copy(&Qx,&(Q.x));
+    FP_YYY_copy(&Qy,&(Q.y));
 
-	ECP8_ZZZ_copy(&A,&P);
-	ECP8_ZZZ_copy(&NP,&P); ECP8_ZZZ_neg(&NP);
+    ECP8_ZZZ_copy(&A,&P);
+    ECP8_ZZZ_copy(&NP,&P);
+    ECP8_ZZZ_neg(&NP);
 
-	for (i=nb-2; i>=1; i--)
-	{
-		PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
+    for (i=nb-2; i>=1; i--)
+    {
+        PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
 
-		bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
-		if (bt==1)
-		{
-			PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
-			FP48_YYY_smul(&lv,&lv2);
-		}
-		if (bt==-1)
-		{
-			PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
-			FP48_YYY_smul(&lv,&lv2);
-		}
-		FP48_YYY_ssmul(&r[i],&lv);
-	}
+        bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+        if (bt==1)
+        {
+            PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
+            FP48_YYY_smul(&lv,&lv2);
+        }
+        if (bt==-1)
+        {
+            PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
+            FP48_YYY_smul(&lv,&lv2);
+        }
+        FP48_YYY_ssmul(&r[i],&lv);
+    }
 }
 
 /* Optimal R-ate pairing r=e(P,Q) */
 void PAIR_ZZZ_ate(FP48_YYY *r,ECP8_ZZZ *P1,ECP_ZZZ *Q1)
 {
-    BIG_XXX x,n,n3;
-	FP_YYY Qx,Qy;
+    BIG_XXX n,n3;
+    FP_YYY Qx,Qy;
     int i,nb,bt;
     ECP8_ZZZ A,NP,P;
-	ECP_ZZZ Q;
+    ECP_ZZZ Q;
     FP48_YYY lv,lv2;
 
-	nb=PAIR_ZZZ_nbits(n3,n);
+    nb=PAIR_ZZZ_nbits(n3,n);
 
-	ECP8_ZZZ_copy(&P,P1);
-	ECP_ZZZ_copy(&Q,Q1);
+    ECP8_ZZZ_copy(&P,P1);
+    ECP_ZZZ_copy(&Q,Q1);
 
-	ECP8_ZZZ_affine(&P);
-	ECP_ZZZ_affine(&Q);
+    ECP8_ZZZ_affine(&P);
+    ECP_ZZZ_affine(&Q);
 
 
     FP_YYY_copy(&Qx,&(Q.x));
     FP_YYY_copy(&Qy,&(Q.y));
 
     ECP8_ZZZ_copy(&A,&P);
-	ECP8_ZZZ_copy(&NP,&P); ECP8_ZZZ_neg(&NP);
+    ECP8_ZZZ_copy(&NP,&P);
+    ECP8_ZZZ_neg(&NP);
 
     FP48_YYY_one(r);
 
     /* Main Miller Loop */
     for (i=nb-2; i>=1; i--)
     {
-		FP48_YYY_sqr(r,r);
+        FP48_YYY_sqr(r,r);
         PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
 
-		bt= BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i);  // BIG_bit(n,i); 
+        bt= BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i);  // BIG_bit(n,i);
         if (bt==1)
         {
             PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
             FP48_YYY_smul(&lv,&lv2);
         }
-		if (bt==-1)
-		{
+        if (bt==-1)
+        {
             PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
             FP48_YYY_smul(&lv,&lv2);
-		}
+        }
         FP48_YYY_ssmul(r,&lv);
     }
 
@@ -281,26 +283,26 @@
 /* Optimal R-ate double pairing e(P,Q).e(R,S) */
 void PAIR_ZZZ_double_ate(FP48_YYY *r,ECP8_ZZZ *P1,ECP_ZZZ *Q1,ECP8_ZZZ *R1,ECP_ZZZ *S1)
 {
-    BIG_XXX x,n,n3;
-	FP_YYY Qx,Qy,Sx,Sy;
+    BIG_XXX n,n3;
+    FP_YYY Qx,Qy,Sx,Sy;
     int i,nb,bt;
     ECP8_ZZZ A,B,NP,NR,P,R;
-	ECP_ZZZ Q,S;
+    ECP_ZZZ Q,S;
     FP48_YYY lv,lv2;
 
-	nb=PAIR_ZZZ_nbits(n3,n);
+    nb=PAIR_ZZZ_nbits(n3,n);
 
-	ECP8_ZZZ_copy(&P,P1);
-	ECP_ZZZ_copy(&Q,Q1);
+    ECP8_ZZZ_copy(&P,P1);
+    ECP_ZZZ_copy(&Q,Q1);
 
-	ECP8_ZZZ_affine(&P);
-	ECP_ZZZ_affine(&Q);
+    ECP8_ZZZ_affine(&P);
+    ECP_ZZZ_affine(&Q);
 
-	ECP8_ZZZ_copy(&R,R1);
-	ECP_ZZZ_copy(&S,S1);
+    ECP8_ZZZ_copy(&R,R1);
+    ECP_ZZZ_copy(&S,S1);
 
-	ECP8_ZZZ_affine(&R);
-	ECP_ZZZ_affine(&S);
+    ECP8_ZZZ_affine(&R);
+    ECP_ZZZ_affine(&S);
 
     FP_YYY_copy(&Qx,&(Q.x));
     FP_YYY_copy(&Qy,&(Q.y));
@@ -310,8 +312,10 @@
 
     ECP8_ZZZ_copy(&A,&P);
     ECP8_ZZZ_copy(&B,&R);
-	ECP8_ZZZ_copy(&NP,&P); ECP8_ZZZ_neg(&NP);
-	ECP8_ZZZ_copy(&NR,&R); ECP8_ZZZ_neg(&NR);
+    ECP8_ZZZ_copy(&NP,&P);
+    ECP8_ZZZ_neg(&NP);
+    ECP8_ZZZ_copy(&NR,&R);
+    ECP8_ZZZ_neg(&NR);
 
     FP48_YYY_one(r);
 
@@ -320,26 +324,26 @@
     {
         FP48_YYY_sqr(r,r);
         PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
-		PAIR_ZZZ_line(&lv2,&B,&B,&Sx,&Sy);
+        PAIR_ZZZ_line(&lv2,&B,&B,&Sx,&Sy);
         FP48_YYY_smul(&lv,&lv2);
         FP48_YYY_ssmul(r,&lv);
 
-		bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+        bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
         if (bt==1)
         {
             PAIR_ZZZ_line(&lv,&A,&P,&Qx,&Qy);
             PAIR_ZZZ_line(&lv2,&B,&R,&Sx,&Sy);
-			FP48_YYY_smul(&lv,&lv2);
+            FP48_YYY_smul(&lv,&lv2);
             FP48_YYY_ssmul(r,&lv);
         }
-		if (bt==-1)
-		{
+        if (bt==-1)
+        {
             PAIR_ZZZ_line(&lv,&A,&NP,&Qx,&Qy);
             PAIR_ZZZ_line(&lv2,&B,&NR,&Sx,&Sy);
             FP48_YYY_smul(&lv,&lv2);
             FP48_YYY_ssmul(r,&lv);
-		}
-	}
+        }
+    }
 
 #if SIGN_OF_X_ZZZ==NEGATIVEX
     FP48_YYY_conj(r,r);
@@ -353,8 +357,8 @@
 {
     FP2_YYY X;
     BIG_XXX x;
-	FP_YYY a,b;
-    FP48_YYY t1,t2,t3,t7;  
+    FP_YYY a,b;
+    FP48_YYY t1,t2,t3,t7;
 
     BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
     FP_YYY_rcopy(&a,Fra_YYY);
@@ -373,156 +377,156 @@
 
     FP48_YYY_mul(r,&t7);
 
-	if (FP48_YYY_isunity(r))
-	{
-		FP48_YYY_zero(r);
-		return;
-	}
+    if (FP48_YYY_isunity(r))
+    {
+        FP48_YYY_zero(r);
+        return;
+    }
 
 // f^e0.f^e1^p.f^e2^p^2.. .. f^e14^p^14.f^e15^p^15
 
-	FP48_YYY_usqr(&t7,r);			// t7=f^2
-	FP48_YYY_pow(&t1,&t7,x);		// t1=f^2u
+    FP48_YYY_usqr(&t7,r);			// t7=f^2
+    FP48_YYY_pow(&t1,&t7,x);		// t1=f^2u
 
-	BIG_XXX_fshr(x,1);
-	FP48_YYY_pow(&t2,&t1,x);		// t2=f^2u^(u/2) =  f^u^2
-	BIG_XXX_fshl(x,1);				// x must be even
+    BIG_XXX_fshr(x,1);
+    FP48_YYY_pow(&t2,&t1,x);		// t2=f^2u^(u/2) =  f^u^2
+    BIG_XXX_fshl(x,1);				// x must be even
 
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
 
-	FP48_YYY_conj(&t3,&t1);		// t3=f^-2u
-	FP48_YYY_mul(&t2,&t3);		// t2=f^u^2.f^-2u
-	FP48_YYY_mul(&t2,r);		// t2=f^u^2.f^-2u.f = f^(u^2-2u+1) = f^e15
+    FP48_YYY_conj(&t3,&t1);		// t3=f^-2u
+    FP48_YYY_mul(&t2,&t3);		// t2=f^u^2.f^-2u
+    FP48_YYY_mul(&t2,r);		// t2=f^u^2.f^-2u.f = f^(u^2-2u+1) = f^e15
 
-	FP48_YYY_mul(r,&t7);		// f^3
+    FP48_YYY_mul(r,&t7);		// f^3
 
-	FP48_YYY_pow(&t1,&t2,x);	// f^e15^u = f^(u.e15) = f^(u^3-2u^2+u) = f^(e14)
+    FP48_YYY_pow(&t1,&t2,x);	// f^e15^u = f^(u.e15) = f^(u^3-2u^2+u) = f^(e14)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_copy(&t3,&t1);
-	FP48_YYY_frob(&t3,&X,14);	// f^(u^3-2u^2+u)^p^14
-	FP48_YYY_mul(r,&t3);		// f^3.f^(u^3-2u^2+u)^p^14
+    FP48_YYY_copy(&t3,&t1);
+    FP48_YYY_frob(&t3,&X,14);	// f^(u^3-2u^2+u)^p^14
+    FP48_YYY_mul(r,&t3);		// f^3.f^(u^3-2u^2+u)^p^14
 
-	FP48_YYY_pow(&t1,&t1,x);	// f^(u.e14) = f^(u^4-2u^3+u^2) =  f^(e13)
+    FP48_YYY_pow(&t1,&t1,x);	// f^(u.e14) = f^(u^4-2u^3+u^2) =  f^(e13)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_copy(&t3,&t1);
-	FP48_YYY_frob(&t3,&X,13);	// f^(e13)^p^13
-	FP48_YYY_mul(r,&t3);		// f^3.f^(u^3-2u^2+u)^p^14.f^(u^4-2u^3+u^2)^p^13
+    FP48_YYY_copy(&t3,&t1);
+    FP48_YYY_frob(&t3,&X,13);	// f^(e13)^p^13
+    FP48_YYY_mul(r,&t3);		// f^3.f^(u^3-2u^2+u)^p^14.f^(u^4-2u^3+u^2)^p^13
 
-	FP48_YYY_pow(&t1,&t1,x);	// f^(u.e13)
+    FP48_YYY_pow(&t1,&t1,x);	// f^(u.e13)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_copy(&t3,&t1);
-	FP48_YYY_frob(&t3,&X,12);	// f^(e12)^p^12
-	FP48_YYY_mul(r,&t3);		
+    FP48_YYY_copy(&t3,&t1);
+    FP48_YYY_frob(&t3,&X,12);	// f^(e12)^p^12
+    FP48_YYY_mul(r,&t3);
 
-	FP48_YYY_pow(&t1,&t1,x);	// f^(u.e12)
+    FP48_YYY_pow(&t1,&t1,x);	// f^(u.e12)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_copy(&t3,&t1);
-	FP48_YYY_frob(&t3,&X,11);	// f^(e11)^p^11
-	FP48_YYY_mul(r,&t3);		
+    FP48_YYY_copy(&t3,&t1);
+    FP48_YYY_frob(&t3,&X,11);	// f^(e11)^p^11
+    FP48_YYY_mul(r,&t3);
 
-	FP48_YYY_pow(&t1,&t1,x);	// f^(u.e11)
+    FP48_YYY_pow(&t1,&t1,x);	// f^(u.e11)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_copy(&t3,&t1);
-	FP48_YYY_frob(&t3,&X,10);	// f^(e10)^p^10
-	FP48_YYY_mul(r,&t3);		
+    FP48_YYY_copy(&t3,&t1);
+    FP48_YYY_frob(&t3,&X,10);	// f^(e10)^p^10
+    FP48_YYY_mul(r,&t3);
 
-	FP48_YYY_pow(&t1,&t1,x);	// f^(u.e10)
+    FP48_YYY_pow(&t1,&t1,x);	// f^(u.e10)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_copy(&t3,&t1);
-	FP48_YYY_frob(&t3,&X,9);	// f^(e9)^p^9
-	FP48_YYY_mul(r,&t3);		
+    FP48_YYY_copy(&t3,&t1);
+    FP48_YYY_frob(&t3,&X,9);	// f^(e9)^p^9
+    FP48_YYY_mul(r,&t3);
 
-	FP48_YYY_pow(&t1,&t1,x);	// f^(u.e9)
+    FP48_YYY_pow(&t1,&t1,x);	// f^(u.e9)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_copy(&t3,&t1);
-	FP48_YYY_frob(&t3,&X,8);	// f^(e8)^p^8
-	FP48_YYY_mul(r,&t3);		
+    FP48_YYY_copy(&t3,&t1);
+    FP48_YYY_frob(&t3,&X,8);	// f^(e8)^p^8
+    FP48_YYY_mul(r,&t3);
 
-	FP48_YYY_pow(&t1,&t1,x);	// f^(u.e8)
+    FP48_YYY_pow(&t1,&t1,x);	// f^(u.e8)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_conj(&t3,&t2);
-	FP48_YYY_mul(&t1,&t3);  // f^(u.e8).f^-e15
-	FP48_YYY_copy(&t3,&t1);
-	FP48_YYY_frob(&t3,&X,7);	// f^(e7)^p^7
-	FP48_YYY_mul(r,&t3);		
+    FP48_YYY_conj(&t3,&t2);
+    FP48_YYY_mul(&t1,&t3);  // f^(u.e8).f^-e15
+    FP48_YYY_copy(&t3,&t1);
+    FP48_YYY_frob(&t3,&X,7);	// f^(e7)^p^7
+    FP48_YYY_mul(r,&t3);
 
-	FP48_YYY_pow(&t1,&t1,x);	// f^(u.e7)
+    FP48_YYY_pow(&t1,&t1,x);	// f^(u.e7)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_copy(&t3,&t1);
-	FP48_YYY_frob(&t3,&X,6);	// f^(e6)^p^6
-	FP48_YYY_mul(r,&t3);		
+    FP48_YYY_copy(&t3,&t1);
+    FP48_YYY_frob(&t3,&X,6);	// f^(e6)^p^6
+    FP48_YYY_mul(r,&t3);
 
-	FP48_YYY_pow(&t1,&t1,x);	// f^(u.e6)
+    FP48_YYY_pow(&t1,&t1,x);	// f^(u.e6)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_copy(&t3,&t1);
-	FP48_YYY_frob(&t3,&X,5);	// f^(e5)^p^5
-	FP48_YYY_mul(r,&t3);		
+    FP48_YYY_copy(&t3,&t1);
+    FP48_YYY_frob(&t3,&X,5);	// f^(e5)^p^5
+    FP48_YYY_mul(r,&t3);
 
-	FP48_YYY_pow(&t1,&t1,x);	// f^(u.e5)
+    FP48_YYY_pow(&t1,&t1,x);	// f^(u.e5)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_copy(&t3,&t1);
-	FP48_YYY_frob(&t3,&X,4);	// f^(e4)^p^4
-	FP48_YYY_mul(r,&t3);		
+    FP48_YYY_copy(&t3,&t1);
+    FP48_YYY_frob(&t3,&X,4);	// f^(e4)^p^4
+    FP48_YYY_mul(r,&t3);
 
-	FP48_YYY_pow(&t1,&t1,x);	// f^(u.e4)
+    FP48_YYY_pow(&t1,&t1,x);	// f^(u.e4)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_copy(&t3,&t1);
-	FP48_YYY_frob(&t3,&X,3);	// f^(e3)^p^3
-	FP48_YYY_mul(r,&t3);		
+    FP48_YYY_copy(&t3,&t1);
+    FP48_YYY_frob(&t3,&X,3);	// f^(e3)^p^3
+    FP48_YYY_mul(r,&t3);
 
-	FP48_YYY_pow(&t1,&t1,x);	// f^(u.e3)
+    FP48_YYY_pow(&t1,&t1,x);	// f^(u.e3)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_copy(&t3,&t1);
-	FP48_YYY_frob(&t3,&X,2);	// f^(e2)^p^2
-	FP48_YYY_mul(r,&t3);		
+    FP48_YYY_copy(&t3,&t1);
+    FP48_YYY_frob(&t3,&X,2);	// f^(e2)^p^2
+    FP48_YYY_mul(r,&t3);
 
-	FP48_YYY_pow(&t1,&t1,x);	// f^(u.e2)
+    FP48_YYY_pow(&t1,&t1,x);	// f^(u.e2)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_copy(&t3,&t1);
-	FP48_YYY_frob(&t3,&X,1);	// f^(e1)^p^1
-	FP48_YYY_mul(r,&t3);		
+    FP48_YYY_copy(&t3,&t1);
+    FP48_YYY_frob(&t3,&X,1);	// f^(e1)^p^1
+    FP48_YYY_mul(r,&t3);
 
-	FP48_YYY_pow(&t1,&t1,x);	// f^(u.e1)
+    FP48_YYY_pow(&t1,&t1,x);	// f^(u.e1)
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	FP48_YYY_conj(&t1,&t1);
+    FP48_YYY_conj(&t1,&t1);
 #endif
-	FP48_YYY_mul(r,&t1);		// r.f^e0		
+    FP48_YYY_mul(r,&t1);		// r.f^e0
 
-	FP48_YYY_frob(&t2,&X,15);	// f^(e15.p^15)
-	FP48_YYY_mul(r,&t2);
+    FP48_YYY_frob(&t2,&X,15);	// f^(e15.p^15)
+    FP48_YYY_mul(r,&t2);
 
 
-	FP48_YYY_reduce(r);
+    FP48_YYY_reduce(r);
 
 }
 
@@ -535,10 +539,10 @@
 
     BIG_XXX x,x2,q;
     BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
-    
-	BIG_XXX_smul(x2,x,x);
-	BIG_XXX_smul(x,x2,x2);
-	BIG_XXX_smul(x2,x,x);
+
+    BIG_XXX_smul(x2,x,x);
+    BIG_XXX_smul(x,x2,x2);
+    BIG_XXX_smul(x2,x,x);
 
     BIG_XXX_copy(u[0],e);
     BIG_XXX_mod(u[0],x2);
@@ -559,7 +563,7 @@
     int i;
 
     BIG_XXX x,w,q;
-	BIG_XXX_rcopy(q,CURVE_Order_ZZZ);
+    BIG_XXX_rcopy(q,CURVE_Order_ZZZ);
     BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
     BIG_XXX_copy(w,e);
 
@@ -569,18 +573,18 @@
         BIG_XXX_mod(u[i],x);
         BIG_XXX_sdiv(w,x);
     }
-	BIG_XXX_copy(u[15],w);
+    BIG_XXX_copy(u[15],w);
 
-/*  */
+    /*  */
 #if SIGN_OF_X_ZZZ==NEGATIVEX
-	BIG_XXX_modneg(u[1],u[1],q);
-	BIG_XXX_modneg(u[3],u[3],q);
-	BIG_XXX_modneg(u[5],u[5],q);
-	BIG_XXX_modneg(u[7],u[7],q);
-	BIG_XXX_modneg(u[9],u[9],q);
-	BIG_XXX_modneg(u[11],u[11],q);
-	BIG_XXX_modneg(u[13],u[13],q);
-	BIG_XXX_modneg(u[15],u[15],q);
+    BIG_XXX_modneg(u[1],u[1],q);
+    BIG_XXX_modneg(u[3],u[3],q);
+    BIG_XXX_modneg(u[5],u[5],q);
+    BIG_XXX_modneg(u[7],u[7],q);
+    BIG_XXX_modneg(u[9],u[9],q);
+    BIG_XXX_modneg(u[11],u[11],q);
+    BIG_XXX_modneg(u[13],u[13],q);
+    BIG_XXX_modneg(u[15],u[15],q);
 #endif
 
 
@@ -593,14 +597,15 @@
 #ifdef USE_GLV_ZZZ   /* Note this method is patented */
     int np,nn;
     ECP_ZZZ Q;
-	FP_YYY cru;
+    FP_YYY cru;
     BIG_XXX t,q;
     BIG_XXX u[2];
 
     BIG_XXX_rcopy(q,CURVE_Order_ZZZ);
     glv(u,e);
 
-    ECP_ZZZ_copy(&Q,P); ECP_ZZZ_affine(&Q);
+    ECP_ZZZ_copy(&Q,P);
+    ECP_ZZZ_affine(&Q);
     FP_YYY_rcopy(&cru,CURVE_Cru_ZZZ);
     FP_YYY_mul(&(Q.x),&(Q.x),&cru);
 
@@ -624,7 +629,7 @@
         ECP_ZZZ_neg(&Q);
     }
     BIG_XXX_norm(u[0]);
-    BIG_XXX_norm(u[1]);    
+    BIG_XXX_norm(u[1]);
     ECP_ZZZ_mul2(P,&Q,u[0],u[1]);
 
 #else
@@ -641,7 +646,7 @@
     FP2_YYY X[3];
     BIG_XXX x,y,u[16];
 
-	ECP8_ZZZ_frob_constants(X);
+    ECP8_ZZZ_frob_constants(X);
 
     BIG_XXX_rcopy(y,CURVE_Order_ZZZ);
     gs(u,e);
@@ -663,7 +668,7 @@
             BIG_XXX_copy(u[i],x);
             ECP8_ZZZ_neg(&Q[i]);
         }
-        BIG_XXX_norm(u[i]);  
+        BIG_XXX_norm(u[i]);
     }
 
     ECP8_ZZZ_mul16(P,Q,u);
@@ -681,7 +686,7 @@
     FP48_YYY g[16];
     FP2_YYY X;
     BIG_XXX t,q;
-	FP_YYY fx,fy;
+    FP_YYY fx,fy;
     BIG_XXX u[16];
 
     FP_YYY_rcopy(&fx,Fra_YYY);
@@ -735,16 +740,16 @@
     ECP Q,R;
     FP48 g,gp;
     FP16 t,c,cp,cpm1,cpm2;
-	FP8 X,Y;
+    FP8 X,Y;
     FP2 x,y,f,Aa,Bb;
-	FP cru;
+    FP cru;
 
-	for (i=0;i<32;i++)
-		byt[i]=i+9;
-	RAND_seed(&rng,32,byt);
+    for (i=0; i<32; i++)
+        byt[i]=i+9;
+    RAND_seed(&rng,32,byt);
 
-	BIG_rcopy(r,CURVE_Order);
-	BIG_rcopy(p,Modulus);
+    BIG_rcopy(r,CURVE_Order);
+    BIG_rcopy(p,Modulus);
 
 
     BIG_rcopy(xa,CURVE_Gx_ZZZ);
@@ -758,7 +763,7 @@
     ECP_ZZZ_output(&Q);
     printf("\n");
 
-	ECP8_generator(&P);
+    ECP8_generator(&P);
 
     if (P.inf) printf("Failed to set - point not on curve\n");
     else printf("G2 set success\n");
@@ -769,7 +774,7 @@
 
     PAIR_ZZZ_ate(&g,&P,&Q);
 
-	printf("gb= ");
+    printf("gb= ");
     FP48_output(&g);
     printf("\n");
     PAIR_ZZZ_fexp(&g);
@@ -778,12 +783,12 @@
     FP48_output(&g);
     printf("\n");
 
-	ECP_ZZZ_copy(&R,&Q);
-	ECP8_copy(&G,&P);
+    ECP_ZZZ_copy(&R,&Q);
+    ECP8_copy(&G,&P);
 
-	ECP8_dbl(&G);
-	ECP_dbl(&R);
-	ECP_affine(&R);
+    ECP8_dbl(&G);
+    ECP_dbl(&R);
+    ECP_affine(&R);
 
     PAIR_ZZZ_ate(&g,&G,&Q);
     PAIR_ZZZ_fexp(&g);
@@ -800,29 +805,39 @@
     printf("\n");
 
 
-	PAIR_ZZZ_G1mul(&Q,r);
-	printf("rQ= ");ECP_output(&Q); printf("\n");
+    PAIR_ZZZ_G1mul(&Q,r);
+    printf("rQ= ");
+    ECP_output(&Q);
+    printf("\n");
 
-	PAIR_ZZZ_G2mul(&P,r);
-	printf("rP= ");ECP8_output(&P); printf("\n");
+    PAIR_ZZZ_G2mul(&P,r);
+    printf("rP= ");
+    ECP8_output(&P);
+    printf("\n");
 
-	PAIR_ZZZ_GTpow(&g,r);
-	printf("g^r= ");FP48_output(&g); printf("\n");
+    PAIR_ZZZ_GTpow(&g,r);
+    printf("g^r= ");
+    FP48_output(&g);
+    printf("\n");
 
 
-	BIG_randomnum(w,r,&rng);
+    BIG_randomnum(w,r,&rng);
 
-	FP48_copy(&gp,&g);
+    FP48_copy(&gp,&g);
 
-	PAIR_ZZZ_GTpow(&g,w);
+    PAIR_ZZZ_GTpow(&g,w);
 
-	FP48_trace(&t,&g);
+    FP48_trace(&t,&g);
 
-	printf("g^r=  ");FP16_output(&t); printf("\n");
+    printf("g^r=  ");
+    FP16_output(&t);
+    printf("\n");
 
-	FP48_compow(&t,&gp,w,r);
+    FP48_compow(&t,&gp,w,r);
 
-	printf("t(g)= "); FP16_output(&t); printf("\n");
+    printf("t(g)= ");
+    FP16_output(&t);
+    printf("\n");
 
 }
 
diff --git a/version3/c/rom_curve_ANSSI.c b/version3/c/rom_curve_ANSSI.c
index 535a697..075b733 100644
--- a/version3/c/rom_curve_ANSSI.c
+++ b/version3/c/rom_curve_ANSSI.c
@@ -10,7 +10,7 @@
 #endif
 
 #if CHUNK==32
-const int CURVE_Cof_I_ANNSI= 1;
+const int CURVE_Cof_I_ANSSI= 1;
 const BIG_256_28 CURVE_Cof_ANSSI= {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
 const int CURVE_A_ANSSI= -3;
 const int CURVE_B_I_ANSSI= 0;
@@ -21,7 +21,7 @@
 #endif
 
 #if CHUNK==64
-const int CURVE_Cof_I_ANNSI= 1;
+const int CURVE_Cof_I_ANSSI= 1;
 const BIG_256_56 CURVE_Cof_ANSSI= {0x1L,0x0L,0x0L,0x0L,0x0L};
 const int CURVE_A_ANSSI= -3;
 const int CURVE_B_I_ANSSI= 0;
diff --git a/version3/c/rsa.h b/version3/c/rsa.h
index 4d4c3c1..08a744f 100644
--- a/version3/c/rsa.h
+++ b/version3/c/rsa.h
@@ -18,7 +18,7 @@
 */
 
 /**
- * @file rsa.h
+ * @file rsa_WWW.h
  * @author Mike Scott
  * @brief RSA Header file for implementation of RSA protocol
  *
diff --git a/version3/c/rsa_support.h b/version3/c/rsa_support.h
index 3bd495f..519d012 100644
--- a/version3/c/rsa_support.h
+++ b/version3/c/rsa_support.h
@@ -46,7 +46,7 @@
 	@param R is a pointer to a cryptographically secure random number generator
 	@param P are input encoding parameter string (could be NULL)
 	@param F is the output encoding, ready for RSA encryption
-	@return 1 if OK, else 0
+	@return 0 if OK, else 1
  */
 extern int	OAEP_ENCODE(int h,octet *M,csprng *R,octet *P,octet *F);
 /**	@brief OAEP unpadding of a message after RSA decryption
@@ -55,7 +55,7 @@
 	@param h is the hash type
 	@param P are input encoding parameter string (could be NULL)
 	@param F is input padded message, unpadded on output
-	@return 1 if OK, else 0
+	@return 0 if OK, else 1
  */
 extern int  OAEP_DECODE(int h,octet *P,octet *F);
 
