 			colors[i / 3] = if xd == 0
 				if yd == 0
 					if zd == 0
-						@value(x, y, z)
+						_value(x, y, z)
 					else
 						#linear z
-						Interpolation.linear(@value(x, y, z0), @value(x, y, z1), zd)
+						Interpolation.linear(_value(x, y, z0), _value(x, y, z1), zd)
 				else
 					if zd == 0
 						#linear y
-						Interpolation.linear(@value(x, y0, z), @value(x, y1, z), yd)
+						Interpolation.linear(_value(x, y0, z), _value(x, y1, z), yd)
 					else
 						#bilinear y,z
 						Interpolation.bilinear(
-							@value(x, y0, z0), 
-							@value(x, y1, z0), 
-							@value(x, y0, z1), 
-							@value(x, y1, z1), 
+							_value(x, y0, z0), 
+							_value(x, y1, z0), 
+							_value(x, y0, z1), 
+							_value(x, y1, z1), 
 							yd, zd)
 			else
 				if yd == 0
 					if zd == 0
 						#linear x
-						Interpolation.linear(@value(x0, y, z), @value(x1, y, z), xd)
+						Interpolation.linear(_value(x0, y, z), _value(x1, y, z), xd)
 					else
 						#bilinear x,z
 						Interpolation.bilinear(
-							@value(x0, y, z0), 
-							@value(x1, y, z0), 
-							@value(x0, y, z1), 
-							@value(x1, y, z1), 
+							_value(x0, y, z0), 
+							_value(x1, y, z0), 
+							_value(x0, y, z1), 
+							_value(x1, y, z1), 
 							xd, zd)
 				else
 					if zd == 0
 						#bilinear x,y
 						Interpolation.bilinear(
-							@value(x0, y0, z), 
-							@value(x1, y0, z), 
-							@value(x0, y1, z), 
-							@value(x1, y1, z), 
+							_value(x0, y0, z), 
+							_value(x1, y0, z), 
+							_value(x0, y1, z), 
+							_value(x1, y1, z), 
 							xd, yd)
 					else
 						#trilinear x,y,z
 						Interpolation.trilinear(
-							@value(x0, y0, z0),
-							@value(x1, y0, z0),
-							@value(x0, y1, z0),
-							@value(x1, y1, z0),
-							@value(x0, y0, z1),
-							@value(x1, y0, z1),
-							@value(x0, y1, z1),
-							@value(x1, y1, z1),
+							_value(x0, y0, z0),
+							_value(x1, y0, z0),
+							_value(x0, y1, z0),
+							_value(x1, y1, z0),
+							_value(x0, y0, z1),
+							_value(x1, y0, z1),
+							_value(x0, y1, z1),
+							_value(x1, y1, z1),
 							xd, yd, zd
 						)
 		
 		callback(null, colors)
 
-	getOld : (position, direction, callback) ->
+	
+	ping : (position, direction, callback) ->
+
+		@ping = _.throttle2 @_ping, 20000
+		@ping(position, direction, callback)
+
+	_ping : (position, direction, callback) ->
 		
 		@lazyInitialize (err) =>
 			return callback err if err

						min_y = if y < min_y then y else min_y
						min_z = if z < min_z then z else min_z
					

					@extendPoints(min_x, min_y, min_z, max_x, max_y, max_z)
					
					for i in [0...colors.length]
						@value(vertices[i * 3], vertices[i * 3 + 1], vertices[i * 3 + 2], colors[i] / 256)

					console.timeEnd "e"
					callback null if callback

			@dirtyBuffer.push position
			@push()



#################################################
# Mixins
#################################################

Model.LazyInitializable =
	
	initialized : false
