int idSuffix=1;
  protected void expandLowFiAsset (Task task, Vector subtasks) {    if (isDebugEnabled())      debug ("expanding low fi asset for task " + task.getUID());    //    test();    GLMAsset itemProto = (GLMAsset) task.getDirectObject();    if (isDebugEnabled()) {      debug (".expandLowFiAsset d.o. "+ itemProto.getUID () + " original dimensions :" + 	     " m " + itemProto.getPhysicalPG().getMass   ().getTons() + " tons, " +	     " v " + itemProto.getPhysicalPG().getVolume ().getCubicFeet() + " ft^3");    }    ForUnitPG unitPG = getForUnitPG(itemProto);    boolean isPerson = itemProto.hasPersonPG ();    double totalContrib = getItemContribution(itemProto);    boolean originalWasTiny = (totalContrib <= 0.00001);    if (originalWasTiny) {      warn (".expandLowFiAsset - item contribution " + totalContrib + 	    " for task " + task.getUID() + 	    "'s direct object " + itemProto + 	    " is < 0.00001, was " + totalContrib);    }    if (isPerson)      totalContrib = 1.0;    double maxCap = (isPerson) ? maxPassengerCapacity : maxContainCapacity - CAP_FUDGE;	    // round item weight to same precision as Vishnu    BigDecimal bigD = new BigDecimal (totalContrib);    totalContrib = bigD.setScale (2,BigDecimal.ROUND_UP).doubleValue();    boolean mustExpand = (totalContrib > maxCap);    double itemContrib = (mustExpand) ? maxCap : totalContrib;          if (isDebugEnabled()) {      debug (".expandLowFiAsset - item contribution " + itemContrib + 	    " maxCapacity " + maxCap +	    ((mustExpand) ? " must expand " : ""));    }    int numItemsOnTruck = 1;    double maxOnTruck = maxCap;    if (isDebugEnabled())      debug (".expandLowFiAsset - max items on truck " 	    + numItemsOnTruck +	    " max num " + maxOnTruck);    PhysicalPG originalPhysicalPG = itemProto.getPhysicalPG ();    int idSuffix=1;    // keep making subtasks    while (totalContrib > maxCap) {        Task newtask;      if (isDebugEnabled()) {	debug (".expandLowFiAsset d.o. "+ itemProto.getUID () + " before adjust dimensions :" + 	       " m " + itemProto.getPhysicalPG().getMass   ().getTons() + " tons, ");      }      String itemID = getUniqueID (itemProto);      Asset truckSizedAsset = 	getTruckSizedAsset (itemProto, originalPhysicalPG, itemID, maxOnTruck);      if (isDebugEnabled()) {	debug (".expandLowFiAsset d.o. "+ itemProto.getUID () + " after adjust dimensions :" + 	       " m " + itemProto.getPhysicalPG().getMass   ().getTons() + " tons, ");      }      subtasks.add (newtask = makeTask (task, truckSizedAsset, unitPG));      totalContrib -= itemContrib;      if (isDebugEnabled())	debug(".expandLowFiAsset - cargo > truckload, " +	     "Expanding with " + 	     numItemsOnTruck + 	     " items on truck, task id " + 	     newtask.getUID() + 	      ", contribution " + maxOnTruck);    }    // if there's any left over, make one last task    if (totalContrib > 0.00001 || originalWasTiny) {      Asset truckSizedAsset;      if (mustExpand) {	String itemID = getUniqueID (itemProto);	truckSizedAsset = getTruckSizedAsset (itemProto, originalPhysicalPG, itemID, totalContrib);      }      else	truckSizedAsset = task.getDirectObject();      if (isDebugEnabled() && mustExpand)	debug(".expandLowFiAsset - cargo was > truckload, " + 	      " truckSizedAsset is " + totalContrib + " tons");      subtasks.add (makeTask (task, truckSizedAsset, unitPG));    }    if (isDebugEnabled()) {      debug (".expandLowFiAsset d.o. "+ itemProto.getUID () + " after dimensions :" + 	     " m " + itemProto.getPhysicalPG().getMass   ().getTons() + " tons, " +	     " v " + itemProto.getPhysicalPG().getVolume ().getCubicFeet() + " ft^3");    }  }