public void update(Graphics g) {
	
		// setup the graphics environment
		Graphics2D g2 = (Graphics2D)g;
		if (manager.antialiasing) {
			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
			g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
			g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
		} else {
			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
			g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);			
			g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
		}

		// paint the cursors
		Enumeration<Finger> cursorList = manager.cursorList.elements();
		while (cursorList.hasMoreElements()) {
			Finger cursor = cursorList.nextElement();
			Vector<Point> gesture = cursor.getPath();
			if (gesture.size()>0) {
				g2.setPaint(Color.blue);
				g2.setStroke(gestureStroke);
				Point start = gesture.elementAt(0);
				for (int i=0;i<gesture.size();i++) {
					Point end  = gesture.elementAt(i);
					g2.draw(new Line2D.Double(start.getX(),start.getY(),end.getX(),end.getY()));
					start = end;
				}
				if (jointCursors.contains(cursor.session_id)) g2.setPaint(Color.darkGray);
				else g2.setPaint(Color.lightGray);
				g2.fill(new Ellipse2D.Double(start.getX()-5,start.getY()-5,10,10));
			}
		}
	}