--- a/APSCpp/CamLens.c
+++ b/APSCpp/CamLens.c
@@ -1,6 +1,9 @@
 /*  CamLens.c   20 Feb 2008 TKS
 
   implementaton of CamLens class
+
+  For APSCpp version 2.5.1, accepts format code 29 for equal-area 
+  fisheye, codes 2 or 3 for equal-angle.
   
 */
 /*
@@ -35,6 +38,7 @@
   fish		 any        <= K
   mirr		 any		<= 2
   ster		 <Pi		 any
+  equa		 any		 any
 */
 
 static double r2a_rect( double R, double K ){
@@ -53,6 +57,14 @@
 	return K * sin( A / K );
 }
 
+static double r2a_equa( double R, double K ){
+	return R / K;
+}
+
+static double a2r_equa( double A, double K ){
+	return K * A;
+}
+
 static double r2a_mirr( double R, double K ){
 	return  asin( 0.5 * R );
 }
@@ -70,7 +82,73 @@
 	return tan(0.5 * A);
 }
 
-
+/* compute focal length in pixels from 
+	fov (deg)
+	dim (pixels full width)
+	fmt  projection type code 
+  NOTE the horizontal function for fmt is used
+*/
+double flpix( double fov, int dim, int fmt ){
+	double a = 0.5 * DEG2RAD( fov );
+	double d = 0.5 * dim;
+	switch( fmt ){
+	case _rectilinear:
+		return d / a2r_rect( a, 1 );
+		break;
+	case _fisheye_circ:		// equal-angle fisheye 
+	case _fisheye_ff:
+	case _panorama:  // cylindrical
+	case _equirectangular:
+	case _spherical_cp:
+	case _spherical_tp:
+		return d / a ;
+		break;
+	case _mirror:
+		return d / a2r_mirr( a, 1 );
+		break;
+	case _orthographic:	// equal area fisheye in APSCpp
+		return d / a2r_fish( a, 2 );
+		break;
+	case _stereographic:
+		return d / a2r_ster( a, 1 );
+		break;
+	default:
+		return 999999;	// unsupported format
+	}
+}
+
+/* compute fov in degrees from
+  flpix
+  dim (pixels)
+  fmt
+*/
+double fovdeg( double flpix, int dim, int fmt ){
+	double r = 0.5 * dim / flpix;
+	switch( fmt ){
+	case _rectilinear:
+		return 2 * RAD2DEG( r2a_rect( r, 1 ) );
+		break;
+	case _fisheye_circ:		// equal-angle fisheye 
+	case _fisheye_ff:
+	case _panorama:  // cylindrical
+	case _equirectangular:
+	case _spherical_cp:
+	case _spherical_tp:
+		return 2 * RAD2DEG( r );
+		break;
+	case _mirror:
+		return 2 * RAD2DEG( r2a_mirr( r, 1 ));
+		break;
+	case _orthographic:	// equal area fisheye in APSCpp
+		return 2 * RAD2DEG( r2a_fish( r, 2 ));
+		break;
+	case _stereographic:
+		return 2 * RAD2DEG( r2a_ster( r, 1 ));
+		break;
+	default:
+		return 0;	// unsupported format
+	}
+}
 
 // create empty
 pCamLens CamLens_new0()
@@ -83,7 +161,7 @@
 /* initialize with minimal info
    fmt is a PT format code
    fails if fmt is not a "camera" projection
-   hfov is the angle corresponding to wid
+   flpix is the focal length in pixels
    flmm should be 0 for an ideal projection, >0 for a real lens
    other assumptions see CamLens_setProjection()
 
@@ -105,7 +183,7 @@
 	   // focal lengths in pixels
 		R = CamLens_RofA( p, DEG2RAD( 0.5 * hfov ) ); 
 		p->hFLpix = p->vFLpix = 0.5 * p->widpix / R;
-
+		
 	   // projection center
 		p->hCpix = 0.5 * wid;
 		p->vCpix = 0.5 * hgt;
@@ -166,12 +244,12 @@
 		p->Klens = 1.0;
 		p->lensAxis &= 2;  // lens Y only
 		break;
-	case _fisheye_circ:
+	case _fisheye_circ:		// equal-angle fisheye in APSCpp
 	case _fisheye_ff:
-		p->R2A = r2a_fish;
-		p->A2R = a2r_fish;
-		p->Klens = 2.0;
-  		p->Rref = p->Rcrop = p->Klens;
+		p->R2A = r2a_equa;
+		p->A2R = a2r_equa;
+		p->Klens = 1.0;
+  		p->Rref = p->Rcrop = 2;  //p->Klens;
 		break;
 	case _equirectangular:
 		if( p->FLmm ){
@@ -196,10 +274,10 @@
 		p->A2R = a2r_mirr;
 		p->Klens = 1.0;
 		break;
-	case _orthographic:
+	case _orthographic:	// equal area fisheye in APSCpp
 		p->R2A = r2a_fish;
 		p->A2R = a2r_fish;
-		p->Klens = 1.0;
+		p->Klens = 2.0;
   		p->Rref = p->Rcrop = p->Klens;
 		break;
 	case _stereographic:
@@ -250,3 +328,23 @@
 	return sqrt( dx * dx + dy * dy );
 }
 
+const char * formatName( int fmt ){
+	static const char * fmtnms[] = {
+	"rectilinear",
+    "cylindrical",
+    "equal-angle fish",
+    "equal-angle fish",
+    "equirectangular",
+    "spherical_cp",
+    "spherical_tp",
+    "mirrorball",
+    "equal-area fish",
+    "cubic",
+    "stereographic",
+    "mercator",
+    "trans_merc",
+    "trans_cyli"
+	};
+	if( fmt < 0 || fmt > 13 ) return "->unknown<-";
+	return fmtnms[fmt];
+}