Index: /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 20026)
+++ /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 20027)
@@ -75,5 +75,5 @@
 		/*compute legendre coefficient matrix:*/
 		legendre_coefficients=p_polynomial_value(M,nl-1,x);
-		parameters->AddObject(new DoubleMatParam(SealevelriseLegendreCoefficientsEnum,legendre_coefficients,nl,M));
+		parameters->AddObject(new DoubleMatParam(SealevelriseLegendreCoefficientsEnum,legendre_coefficients,M,nl));
 
 		/*free ressources:*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 20026)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 20027)
@@ -3560,5 +3560,5 @@
 	if(legendre_precompute){
 		DoubleMatParam* parameter = static_cast<DoubleMatParam*>(this->parameters->FindParamObject(SealevelriseLegendreCoefficientsEnum)); _assert_(parameter);
-		parameter->GetParameterValueByPointer(&legendre_coefficients,NULL,&M);
+		parameter->GetParameterValueByPointer(&legendre_coefficients,&M,NULL);
 	}
 
@@ -3648,5 +3648,5 @@
 				if(legendre_precompute){
 					int index=reCast<int,IssmDouble>((M-1)*(1-alpha/PI));
-					for(int n=0;n<nl;n++) G_elastic += deltalove[n]*legendre_coefficients[M*n + index];
+					for(int n=0;n<nl;n++) G_elastic += deltalove[n]*legendre_coefficients[index*nl+n];
 				}
 				else{
@@ -3810,5 +3810,5 @@
 		if(legendre_precompute){
 			DoubleMatParam* parameter = static_cast<DoubleMatParam*>(this->parameters->FindParamObject(SealevelriseLegendreCoefficientsEnum)); _assert_(parameter);
-			parameter->GetParameterValueByPointer(&legendre_coefficients,NULL,&M);
+			parameter->GetParameterValueByPointer(&legendre_coefficients,&M,NULL);
 		}
 
@@ -3853,5 +3853,5 @@
 				if(legendre_precompute){
 					int index=reCast<int,IssmDouble>((M-1)*(1-alpha/PI));
-					for(int n=0;n<nl;n++) G_elastic[i] += deltalove[n]*legendre_coefficients[M*n + index];
+					for(int n=0;n<nl;n++) G_elastic[i] += deltalove[n]*legendre_coefficients[index*nl+n];
 				}
 				else{
Index: /issm/trunk-jpl/src/c/shared/Numerics/legendre.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Numerics/legendre.cpp	(revision 20026)
+++ /issm/trunk-jpl/src/c/shared/Numerics/legendre.cpp	(revision 20027)
@@ -249,14 +249,16 @@
 	v = xNew<IssmDouble>(m*(n+1));
 
-	for ( i = 0; i < m; i++ ) v[i+0*m] = 1.0;
+	for ( i = 0; i < m; i++ ) v[i*(n+1)+0] = 1.0;
 	if ( n < 1 ) return v;
 
-	for ( i = 0; i < m; i++ ) v[i+1*m] = x[i];
-
-	for ( j = 2; j <= n; j++ ) {
-		for ( i = 0; i < m; i++ ) {
-			v[i+j*m] = ( ( IssmDouble ) ( 2 * j - 1 ) * x[i] * v[i+(j-1)*m]
-					- ( IssmDouble ) (     j - 1 ) *        v[i+(j-2)*m] )
+	for ( i = 0; i < m; i++ ) v[i*(n+1)+1] = x[i];
+
+	for ( i = 0; i < m; i++ ) {
+		for ( j = 2; j <= n; j++ ) {
+			
+			v[j+i*(n+1)] = ( ( IssmDouble ) ( 2 * j - 1 ) * x[i] * v[(j-1)+i*(n+1)]
+					- ( IssmDouble ) (     j - 1 ) *        v[(j-2)+i*(n+1)] )
 				/ ( IssmDouble ) (     j     );
+
 		}
 	}
