Index: org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/DefaultFLyrRaster.java
===================================================================
--- org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/DefaultFLyrRaster.java	(revision 1426)
+++ org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/DefaultFLyrRaster.java	(working copy)
@@ -1698,13 +1698,6 @@
 	}
 
 	/**
-	 * Gets the last buffer which was rendered
-	 */
-	public Buffer getLastRenderBuffer() {
-		return getRender().getLastRenderBuffer();
-	}
-
-	/**
 	 *
 	 * @return ROIs asociadas a la capa raster.
 	 */
Index: org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/DefaultRender.java
===================================================================
--- org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/DefaultRender.java	(revision 1315)
+++ org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/DefaultRender.java	(working copy)
@@ -61,6 +61,7 @@
 import org.gvsig.raster.cache.tile.exception.TileGettingException;
 import org.gvsig.raster.cache.tile.provider.TileListener;
 import org.gvsig.raster.impl.DefaultRasterManager;
+import org.gvsig.raster.impl.buffer.DefaultRasterQuery;
 import org.gvsig.raster.impl.datastruct.DefaultViewPortData;
 import org.gvsig.raster.impl.datastruct.ExtentImpl;
 import org.gvsig.raster.impl.grid.GridImpl;
@@ -111,7 +112,7 @@
 	 */
 	private int[]            renderBands              = { 0, 1, 2 };
 
-	private ImageDrawerImpl      drawer                   = null;
+	private ImageDrawerImpl  drawer                   = null;
 	/**
 	 * Ultima transparencia aplicada en la visualizaci�n que es obtenida desde el
 	 * grid
@@ -124,8 +125,6 @@
 	 */
 	private RasterFilterList filterList               = null;
 
-	private Buffer           lastRenderBuffer         = null;
-
 	/**
 	 * Ancho y alto del objeto Image en una petici�n de dibujado a un raster
 	 * raster
@@ -330,13 +329,10 @@
 		}
 		
 		if (dataStore != null) {
-			if (lastTransparency == null) {
-				lastTransparency = dataStore.getTransparency().cloneTransparency();
-				lastTransparency.addPropertyListener(this);
-				lastTransparency.setTransparencyBand(dataStore.getTransparency().getAlphaBandNumber());
-			}
+			if(getLastTransparency().getAlphaBandNumber() == -1)
+				getLastTransparency().setTransparencyBand(dataStore.getTransparency().getAlphaBandNumber());
 			
-			lastAlphaBand = lastTransparency.getAlphaBandNumber();
+			lastAlphaBand = getLastTransparency().getAlphaBandNumber();
 			
 			// Asignamos la banda de transparencia si existe esta
 			RasterQuery query = DefaultRasterManager.getInstance().createQuery();
@@ -345,7 +341,7 @@
 			query.setSupersamplingLoadingBuffer(false); // Desactivamos el supersampleo en la carga del buffer.
 			query.setDrawableBands(getRenderBands());
 			query.setFrameWidth(0);
-			query.setAlphaBand(lastTransparency.getAlphaBandNumber());
+			query.setAlphaBand(getLastTransparency().getAlphaBandNumber());
 			query.setAreaOfInterest(vp.getExtent(), 
 					(int)Math.round(vp.getWidth()), 
 					(int)Math.round(vp.getHeight()), this);
@@ -379,12 +375,6 @@
 		if (dataStore == null) 
 			return;
 		
-		//If the transparency hasn't been defined yet then we'll take that from the store
-		if (lastTransparency == null) {
-			lastTransparency = dataStore.getTransparency().cloneTransparency();
-			lastTransparency.addPropertyListener(this);
-		}
-		
 		Buffer buf = null; 
 		double[] step = null;
 		
@@ -394,7 +384,7 @@
 					(int)Math.round(heightImage), 
 					vp.getTime(), 
 					renderBands, 
-					lastTransparency);
+					getLastTransparency());
 		} else {
 			// Asignamos la banda de transparencia si existe esta
 			RasterQuery query = DefaultRasterManager.getInstance().createQuery();
@@ -403,15 +393,16 @@
 			query.setSupersamplingLoadingBuffer(false); // Desactivamos el supersampleo en la carga del buffer.
 			query.setAreaOfInterest(adjustedRotedRequest, (int)Math.round(widthImage), (int)Math.round(heightImage));
 
-			if (lastTransparency.getAlphaBandNumber() != -1) {
-				query.setDrawableBands(new int[] { lastTransparency.getAlphaBandNumber()});
-				lastTransparency.setAlphaBand(dataStore.query(query));
+			if (getLastTransparency().getAlphaBandNumber() != -1) {
+				query.setDrawableBands(new int[] { getLastTransparency().getAlphaBandNumber()});
+				getLastTransparency().setAlphaBand(dataStore.query(query));
 			}
-			lastAlphaBand = lastTransparency.getAlphaBandNumber();
+			lastAlphaBand = getLastTransparency().getAlphaBandNumber();
 
 			query.setAreaOfInterest(adjustedRotedRequest, (int)Math.round(widthImage), (int)Math.round(heightImage));
 			query.setDrawableBands(getRenderBands());
 			buf = dataStore.query(query);
+			((DefaultRasterQuery)query).setBuffer(null);
 			query.setSupersamplingLoadingBuffer(true);
 			step = dataStore.getStep();
 		}
@@ -437,18 +428,17 @@
 		
 		grid = bufferPreprocessing(buf, lastTransparency);
 		
-		if(lastRenderBuffer != null)
-			lastRenderBuffer.dispose();
 		//Buffer filtrado para renderizar
-		lastRenderBuffer = grid.getRasterBuf();
-		drawer.setBuffer(lastRenderBuffer); // Buffer de datos a renderizar
+		buf = grid.getRasterBuf();
+		drawer.setBuffer(buf); // Buffer de datos a renderizar
 		drawer.setSupersamplingOn(step); // Desplazamiento para supersampleo
 		drawer.setOutputSize((int)Math.round(widthImage), (int)Math.round(heightImage)); // Ancho y alto del buffer
 		drawer.setLastTransparency(getLastTransparency());
 		Image geoImage = drawer.drawBufferOverImageObject(); // Acci�n de renderizado
+		drawer.dispose();
 
 		// Borramos el buffer de transparencia para que siempre se tenga que regenerar.
-		lastTransparency.setAlphaBand(null);
+		getLastTransparency().setAlphaBand(null);
 
 		//En el caso de no tenga rotaci�n y el tama�o de pixel sea positivo en X y negativo en Y no aplicamos ninguna
 		//transformaci�n. Esto no es necesario hacerlo, sin ello se visualiza igual. Unicamente se hace porque de esta
@@ -574,7 +564,8 @@
 			} catch (ProcessInterruptedException e2) {
 				return;
 			}
-
+			d.dispose();
+			
 			lastTransparency.setAlphaBand(null);
 			
 			AffineTransform at = new AffineTransform();
@@ -853,11 +844,12 @@
 		return out;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.gvsig.fmap.dal.coverage.grid.Render#getLastTransparency()
-	 */
 	public Transparency getLastTransparency() {
+		//If the transparency hasn't been defined yet then we'll take that from the store
+		if (lastTransparency == null) {
+			lastTransparency = dataStore.getTransparency().cloneTransparency();
+			lastTransparency.addPropertyListener(this);
+		}
 		return lastTransparency;
 	}
 	
@@ -889,22 +881,6 @@
 
 	/*
 	 * (non-Javadoc)
-	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#getLastRenderBuffer()
-	 */
-	public Buffer getLastRenderBuffer() {
-		return this.lastRenderBuffer;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#setLastRenderBuffer(org.gvsig.fmap.dal.coverage.dataset.Buffer)
-	 */
-	public void setLastRenderBuffer(Buffer buf) {
-		this.lastRenderBuffer = buf;
-	}
-
-	/*
-	 * (non-Javadoc)
 	 * @see org.gvsig.fmap.dal.coverage.grid.render.Render#setFilterList(org.gvsig.fmap.dal.coverage.grid.RasterFilterList)
 	 */
 	public void setFilterList(RasterFilterList filterList) {
@@ -1007,8 +983,6 @@
 			grid.dispose();
 		if (getFilterList() != null)
 			getFilterList().dispose();
-		if (lastRenderBuffer != null)
-			lastRenderBuffer.dispose();
 		try {
 			finalize();
 		} catch (Throwable e) {
@@ -1026,7 +1000,6 @@
         drawer                   = null;
 		lastTransparency         = null;
 		filterList               = null;
-        lastRenderBuffer         = null;
         ulPxRequest              = null;
         lrPxRequest              = null;
 		lastGraphics             = null;
Index: org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/ImageDrawerImpl.java
===================================================================
--- org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/ImageDrawerImpl.java	(revision 1450)
+++ org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/ImageDrawerImpl.java	(working copy)
@@ -345,6 +345,8 @@
 	public void dispose() {
 		if(rasterBuf != null)
 			rasterBuf.dispose();
+		if(transparency != null)
+			transparency.dispose();
 		try {
 			finalize();
 		} catch (Throwable e) {
@@ -421,6 +423,7 @@
 	protected void finalize() throws Throwable {
 		step        = null;
 		rasterBuf   = null;
+		transparency = null;
 		super.finalize();
 	}
 
Index: org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/DataStoreTransparency.java
===================================================================
--- org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/DataStoreTransparency.java	(revision 1184)
+++ org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/DataStoreTransparency.java	(working copy)
@@ -134,11 +134,13 @@
 		
 		//TODO: FUNCIONALIDAD: Falta asignar lo necesario para la transparencia por selecci� 		this.transparencyRanges = (ArrayList<TransparencyRange>) t.getTransparencyRange().clone();
-		this.mask = t.getAlphaBand();
+		if(this.mask != null)
+			this.mask = t.getAlphaBand();
 		this.opacity = t.getOpacity();
 		this.alphaBandNumber = t.alphaBandNumber;
 		this.noData = (NoData)t.getNoData().clone();
-		this.originalData = t.originalData;
+		if(this.originalData != null)
+			this.originalData = t.originalData;
 		this.transparencyActive = t.transparencyActive;
 	}
 
@@ -422,7 +424,8 @@
 	 * @see org.gvsig.fmap.dal.coverage.store.props.Transparency#activeTransparency()
 	 */
 	public void activeTransparency() {
-		if(	existAlphaBand() || (getNoData().isDefined() && getNoData().isNoDataTransparent()) ||
+		if(	existAlphaBand() || 
+			(getNoData() != null && getNoData().isDefined() && getNoData().isNoDataTransparent()) ||
 			(transparencyRanges.size() > 0) ||
 			(opacity != 0xff))
 			transparencyActive = true;
@@ -617,10 +620,8 @@
 			mask.dispose();
 		if (originalData != null)
 			originalData.dispose();
-		try {
-			finalize();
-		} catch (Throwable e) {
-		}
+		mask = null;
+		originalData = null;
 	}
 	
 	/*
Index: org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/DataStoreColorTable.java
===================================================================
--- org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/DataStoreColorTable.java	(revision 1328)
+++ org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/DataStoreColorTable.java	(working copy)
@@ -952,21 +952,4 @@
 		}
 	}
 	
-	public void finalize() {
-		if(colorItems != null) {
-			colorItems.clear();
-			colorItems = null;
-		}
-		range             = null;
-		paletteByBand     = null;
-		if(nameClass != null) {
-			for (int i = 0; i < nameClass.length; i++) {
-				nameClass[i] = null;
-			}
-			nameClass = null;
-		}
-		name              = null;
-		filePath          = null;
-	}
-	
 }
\ No newline at end of file
Index: org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/grid/render/Render.java
===================================================================
--- org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/grid/render/Render.java	(revision 1277)
+++ org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/grid/render/Render.java	(working copy)
@@ -76,18 +76,6 @@
 	public int getLastAlphaBandNumber();
 	
 	/**
-	 * Obtiene el �ltimo buffer renderizado.
-	 * @return Buffer
-	 */
-	public Buffer getLastRenderBuffer();
-
-	/**
-	 * Asigna el �ltimo renderizado.
-	 * @param buf
-	 */
-	public void setLastRenderBuffer(Buffer buf);
-	
-	/**
 	 * Informa de si el raster tiene tabla de color asociada o no.
 	 * @return true si tiene tabla de color y false si no la tiene.
 	 */
