 		{
 			checkWriteUsage(this);
 			
-			var dataLength : int = data.length;
-
-			if (dataLength % _format.dwordsPerVertex)
+			var numValues 		: int 		= data.length;
+			var minMaxChanged	: Boolean	= false;
+
+			if (numValues % _format.dwordsPerVertex)
 				throw new Error("Invalid data length.");
 
-			for (var i : int = 0; i < dataLength; i++)
-				_data.push(data[i]);
-
-			_invalidMinMax = true;
-			_changed.execute(this, null);
+			for (var i : int = 0; i < numValues; i++)
+			{
+				var value 	: Number	= data[i];
+				var ii		: uint		= i % _format.dwordsPerVertex;
+				
+				if (value < _minimum[ii])
+				{
+					_minimum[i] = value;
+					minMaxChanged = true;
+				}
+				else if (value > _maximum[ii])
+				{
+					_maximum[i] = value;
+					minMaxChanged = true;
+				}
+				
+				_data.push(value);
+			}
+
+			if (_locked)
+			{
+				_invalidMinMax = minMaxChanged;
+			}
+			else
+			{
+				_changed.execute(this, null);
+				if (minMaxChanged)
+					_boundsChanged.execute(this);
+			}
 		}
 
 		public function disposeLocalData(waitForUpload : Boolean = true) : void
 		{
-			if (_dataLocked)
+			if (_locked)
 				throw new Error("Stream data can not be disposed since it's locked for update");
 			if (waitForUpload)
 				_localDispose = true;

					+ "is not set to StreamUsage.WRITE."
				);
			}
			if (stream._dataLocked)
				throw new Error(
					"Unable to write in vertex stream: stream data "
					+ "is locked for bulk update"

				minMaxChanged = true;
			}
			
			if (_locked)
			{
				_invalidMinMax = minMaxChanged;
			}
			else
			{
				_changed.execute(this, null);
				if (minMaxChanged)
					_boundsChanged.execute(this);
			}
		}
		
		public function lock() : Vector.<Number>
		{
			if (_locked) 
				throw new Error("The stream is already locked.");
			if (_localDispose)
				throw new Error("Cannot lock stream data which is already disposed.");
			
			checkWriteUsage(this);
			
			_locked = true;
			_invalidMinMax = false;
			
			return _data;
		}
		
		public function unlock() : void
		{
			if (!_locked)
				throw new Error("Data is not locked");
			
			_locked = false;
			_invalidMinMax = true;
			_changed.execute(this, null);
		}
