diff --git a/src/plugins/e-acsl/doc/memory_model/article.pdf b/src/plugins/e-acsl/doc/memory_model/article.pdf
index b00f251e110513423e61ce008e590bc54554c3cb..77e7a22ac1a26716f6bd1b29bd34381c0e0decca 100644
Binary files a/src/plugins/e-acsl/doc/memory_model/article.pdf and b/src/plugins/e-acsl/doc/memory_model/article.pdf differ
diff --git a/src/plugins/e-acsl/doc/memory_model/article.tex b/src/plugins/e-acsl/doc/memory_model/article.tex
index 3f635e815f5272557119563820bab297dd26db0e..2674239d2d58fb4500cb10e649e51006bce535be 100644
--- a/src/plugins/e-acsl/doc/memory_model/article.tex
+++ b/src/plugins/e-acsl/doc/memory_model/article.tex
@@ -703,6 +703,8 @@ $ptr$ are initialized, 0 otherwise.
     \hline
     $BubbleSort$ & 31 & 963s & 873 & 44 & 44 \\
     \hline
+    $MultiplyMatrix$ & 44 & 146s & 9 & 44 & 44 \\
+    \hline
   \end{tabular}
   \caption{Experimental results}
 \end{figure}~\\
diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/matmult/matmult.c b/src/plugins/e-acsl/doc/memory_model/experiments/matmult/matmult.c
index d7baaf0e93098e64f4b7fe94804ea5ac437b5a8c..bb1d9b389b71cbe6ffbefdba9b09d070e9b29949 100644
--- a/src/plugins/e-acsl/doc/memory_model/experiments/matmult/matmult.c
+++ b/src/plugins/e-acsl/doc/memory_model/experiments/matmult/matmult.c
@@ -13,10 +13,9 @@
  * Thomas Lundqvist at Chalmers.
  *----------------------------------------------------------------------*/
 
-#define UPPERLIMIT 10
 
 void 
-Multiply(int ** A, int ** B, int ** Res)
+Multiply(int ** A, int ** B, int ** Res, int n)
 /*
  * Multiplies arrays A and B and stores the result in ResultArray.
  */
@@ -24,29 +23,29 @@ Multiply(int ** A, int ** B, int ** Res)
   register int    Outer, Inner, Index;
 
   //@ ghost int old_Outer = -1; 
-  for (Outer = 0; Outer < UPPERLIMIT; Outer++) {
+  for (Outer = 0; Outer < n; Outer++) {
     //@ assert old_Outer != Outer;
     //@ ghost old_Outer = Outer;
-    //@ assert 0 <= Outer < 10;
+    //@ assert 0 <= Outer < n;
     //@ ghost int old_Inner = -1;
-    for (Inner = 0; Inner < UPPERLIMIT; Inner++) {
+    for (Inner = 0; Inner < n; Inner++) {
       //@ assert old_Inner != Inner;
       //@ ghost old_Inner = Inner;
-      //@ assert 0 <= Inner < 10;
+      //@ assert 0 <= Inner < n;
       Res[Outer][Inner] = 0;
       //@ assert Res[Outer][Inner] == 0;
       //@ ghost int old_Index = -1;
-      for (Index = 0; Index < UPPERLIMIT; Index++) {
+      for (Index = 0; Index < n; Index++) {
 	//@ assert old_Index != Index;
 	//@ ghost old_Index = Index;
-	//@ assert 0 <= Index < 10;
+	//@ assert 0 <= Index < n;
 	//@ ghost int res = Res[Outer][Inner];
 	Res[Outer][Inner] += A[Outer][Index] * B[Index][Inner];
 	//@ assert Res[Outer][Inner] == res + A[Outer][Index] * B[Index][Inner];
       }
-      //@ assert Index == 10;
+      //@ assert Index == n;
     }
-    //@ assert Inner == 10;
+    //@ assert Inner == n;
   }
-  //@ assert Outer == 10;
+  //@ assert Outer == n;
 }
diff --git a/src/plugins/e-acsl/doc/memory_model/experiments/matmult/test_parameters.pl b/src/plugins/e-acsl/doc/memory_model/experiments/matmult/test_parameters.pl
index e95ce39d4d23d243f9550741ba1aa34e4c2d64ca..7964c5440b786f69285107aadc098c4e6989804b 100644
--- a/src/plugins/e-acsl/doc/memory_model/experiments/matmult/test_parameters.pl
+++ b/src/plugins/e-acsl/doc/memory_model/experiments/matmult/test_parameters.pl
@@ -9,20 +9,32 @@
 :- export strategy/2.
 :- export precondition_of/2.
 
-dom('Multiply',dim(cont('A',_)),[],int([10])).
-dom('Multiply',dim(cont('B',_)),[],int([10])).
-dom('Multiply',dim(cont('Res',_)),[],int([10])).
+dom('Multiply',dim(cont('A',_)),[],int([0..100])).
+dom('Multiply',dim(cont('B',_)),[],int([0..100])).
+dom('Multiply',dim(cont('Res',_)),[],int([0..100])).
 dom('Multiply',cont(cont('A',_),_),[],int([-100..100])).
 dom('Multiply',cont(cont('B',_),_),[],int([-100..100])).
 dom('Multiply',cont(cont('Res',_),_),[],int([0])).
 
 create_input_vals('Multiply',Ins):-
-  create_input_val(dim('A'),int([10]),Ins),
-  create_input_val(dim('B'),int([10]),Ins),
-  create_input_val(dim('Res'),int([10]),Ins),
+  create_input_val(dim('A'),int([0..100]),Ins),
+  create_input_val(dim('B'),int([0..100]),Ins),
+  create_input_val(dim('Res'),int([0..100]),Ins),
+  create_input_val('n',int([2..10]),Ins),
   true.
 
-unquantif_preconds('Multiply',[]).
-quantif_preconds('Multiply',[]).
+unquantif_preconds('Multiply',[
+  cond(egal,'n',dim('A'),pre),
+  cond(egal,'n',dim('B'),pre),
+  cond(egal,'n',dim('Res'),pre)
+]).
+quantif_preconds('Multiply',[
+  uq_cond([I],[cond(supegal,I,0,pre),cond(inf,I,'n',pre)],
+          egal,'n',dim(cont('A',I))),
+  uq_cond([I],[cond(supegal,I,0,pre),cond(inf,I,'n',pre)],
+          egal,'n',dim(cont('B',I))),
+  uq_cond([I],[cond(supegal,I,0,pre),cond(inf,I,'n',pre)],
+          egal,'n',dim(cont('Res',I)))
+]).
 strategy('Multiply',[]).
 precondition_of(0,0).