--- dims_create.c.dist	2012-12-08 13:46:46.000000000 -0500
+++ dims_create.c	2012-12-08 13:48:02.000000000 -0500
@@ -317,28 +317,22 @@
 	    int cnt    = factors[0].cnt; /* Numver of factors left */
 	    int cnteach = ( cnt + dims_needed - 1 ) / dims_needed;
 	    int factor_each;
-	    
-	    factor_each = factor;
-	    for (i=1; i<cnteach; i++) factor_each *= factor;
 
-	    for (i=0; i<ndims; i++) {
-		if (dims[i] == 0) {
-		    if (cnt > cnteach) {
-			dims[i] = factor_each;
-			cnt -= cnteach;
-		    }
-		    else if (cnt > 0) {
-			factor_each = factor;
-			for (j=1; j<cnt; j++) 
-			    factor_each *= factor;
-			dims[i] = factor_each;
-			cnt = 0;
-		    }
-		    else {
-			dims[i] = 1;
-		    }
+	    for (i=0;i<ndims;i++){ 
+		if(dims[i]==0)dims[i]=-1;
+	    }
+	    i=0;
+	    while(cnt > 0){
+		if(dims[i] < 0){
+		    dims[i]=dims[i]*factor;
+		    cnt--;
 		}
+		if(++i >= ndims)i=0;
+	    }
+	    for (i=0;i<ndims;i++){
+		if(dims[i] < 0)dims[i]=-dims[i];
 	    }
+
 	}	    
 	else {
 	    /* Here is the general case.  */
