diff --git a/Numeric/bezierBasis.cpp b/Numeric/bezierBasis.cpp
index edf3952873b4abf208a6e8610864bf42cccfcae1..92a25a4116ef8fd0734e6fe60a167b11acb224e9 100644
--- a/Numeric/bezierBasis.cpp
+++ b/Numeric/bezierBasis.cpp
@@ -362,7 +362,7 @@ fullMatrix<double> generateBez2LagMatrixPyramid
 {
   if(exponent.size1() != point.size1() || exponent.size2() != point.size2() ||
       exponent.size2() != 3){
-    Msg::Fatal("Wrong sizes for bez2lag matrix generation %d %d -- %d %d",
+    Msg::Fatal("Wrong sizes for pyramid's bez2lag matrix generation %d %d -- %d %d",
       exponent.size1(),point.size1(),
       exponent.size2(),point.size2());
     return fullMatrix<double>(1, 1);
@@ -518,7 +518,7 @@ void bezierBasis::_construct(int parentType, int p)
 
   if (parentType == TYPE_PYR) {
     _numLagCoeff = p == 0 ? 4 : 8;
-    _exponents = gmshGenerateMonomialsPyramidGeneral(false, 2, _order);
+    _exponents = gmshGenerateMonomialsPyramidGeneral(false, _order+2, _order);
 
     subPoints = generateSubPointsPyr(_order);
     _numDivisions = static_cast<int>(subPoints.size());
diff --git a/Numeric/pointsGenerators.cpp b/Numeric/pointsGenerators.cpp
index f060da4ead30be3f0ad92ca8986f382be84fc885..485bf985756e970c14ffd47fe1f0186cb123cd86 100644
--- a/Numeric/pointsGenerators.cpp
+++ b/Numeric/pointsGenerators.cpp
@@ -906,7 +906,7 @@ fullMatrix<double> gmshGenerateMonomialsPyramidGeneral(
     }
 
     // Between bottom & top
-    for (int k = nk-1; k > 0; ++k) {
+    for (int k = nk-1; k > 0; --k) {
       int currentnij = pyr ? k+nij : nij;
       for (int i = 0; i <= currentnij; ++i) {
         for (int j = 0; j <= currentnij; ++j, ++index) {