=== modified file 'src/com/goldencode/p2j/util/decimal.java'
--- src/com/goldencode/p2j/util/decimal.java	2014-02-16 03:02:46 +0000
+++ src/com/goldencode/p2j/util/decimal.java	2014-04-26 16:07:25 +0000
@@ -597,7 +597,34 @@
     */
    public static void setPrecision(decimal[] list, int precision)
    {
-      // TODO: in case of dynamic-extent vars, this needs to be saved somewhere
+      setPrecision(list, precision, false);
+   }
+   
+   /**
+    * Sets the number of digits that will be maintained to the right of
+    * the decimal point in each element of the given array.  All assignments
+    * to the value of those elements will be rounded/truncated to this number 
+    * of digits.  The value can range between 0 and 10 (inclusive).
+    *
+    * @param    precision
+    *           The precision which must range between 0 and 10 (inclusive).
+    */
+   public static void setLazyPrecision(decimal[] list, int precision)
+   {
+      setPrecision(list, precision, true);
+   }
+   
+   /**
+    * Sets the number of digits that will be maintained to the right of
+    * the decimal point in each element of the given array.  All assignments
+    * to the value of those elements will be rounded/truncated to this number 
+    * of digits.  The value can range between 0 and 10 (inclusive).
+    *
+    * @param    precision
+    *           The precision which must range between 0 and 10 (inclusive).
+    */
+   private static void setPrecision(decimal[] list, int precision, boolean lazy)
+   {
       if (precision < 0 || precision > MAX_SCALE)
       {
          throw new IllegalArgumentException("Invalid precision " + precision + ".");
@@ -605,7 +632,14 @@
       
       for (int i = 0; i < list.length; i++)
       {
-         list[i].setPrecision(precision);
+         list[i].setPrecision(precision, lazy);
+      }
+      
+      // set the decimal precision, for lengths > 0 the precision is stored 
+	  // in the array components
+      if (list.length == 0)
+      {
+         ArrayAssigner.setDecimalPrecision(list, precision);
       }
    }
    
@@ -1187,6 +1221,48 @@
     */
    public void setPrecision(int precision)
    {
+      setPrecision(precision, false);
+   }
+   
+   /**
+    * Sets the number of digits that will be maintained to the right of
+    * the decimal point in this instance.  All assignments to the value of
+    * this instance will be rounded/truncated to this number of digits.  The
+    * value can range between 0 and 10 (inclusive).
+    * <p>
+    * This method is used to set the current value in a manner that does not
+    * schedule an automated reset to the prior value later. Thus, this method
+    * is suitable for the initial configuration of a new instance.  If a
+    * temporary precision change is needed, use 
+    * {@link #setTemporaryPrecision}.
+    *
+    * @param    precision
+    *           The precision for this instance which must range between 0
+    *           and 10 (inclusive).
+    */
+   public void setLazyPrecision(int precision)
+   {
+      setPrecision(precision, true);
+   }
+   
+   /**
+    * Sets the number of digits that will be maintained to the right of
+    * the decimal point in this instance.  All assignments to the value of
+    * this instance will be rounded/truncated to this number of digits.  The
+    * value can range between 0 and 10 (inclusive).
+    * <p>
+    * This method is used to set the current value in a manner that does not
+    * schedule an automated reset to the prior value later. Thus, this method
+    * is suitable for the initial configuration of a new instance.  If a
+    * temporary precision change is needed, use 
+    * {@link #setTemporaryPrecision}.
+    *
+    * @param    precision
+    *           The precision for this instance which must range between 0
+    *           and 10 (inclusive).
+    */
+   private void setPrecision(int precision, boolean lazy)
+   {
       if (precision < 0 || precision > MAX_SCALE)
       {
          throw new IllegalArgumentException("Invalid precision " +
@@ -1198,7 +1274,7 @@
       // match the legacy terminology.
       scale = precision;
       
-      if (!isUnknown())
+      if (!lazy && !isUnknown())
       {
          value = value.setScale(precision, BigDecimal.ROUND_HALF_UP);
       }

