public void draw(Graphics2D g) {
		if (Float.isInfinite(x) || Float.isInfinite(y) || Float.isNaN(x) || Float.isNaN(y)) {
			System.err.println("Warning: NaN pos: " + getUID());
			return;
		}
		
		int tx = (int) x;
		int ty = (int) y;
		int r  = (int)this.r;
		
		g.translate(tx, ty);
		
		if (getType() == Visode.TYPE_LINK || getType() == Visode.TYPE_SPACER) {
			// We're a link! Links are a lie!
			/*
			this.r = r = 3;
			g.setColor(Color.BLACK);
			
			if (getType() == Visode.TYPE_SPACER) {
				g.drawOval(-r, -r, r*2, r*2);
			} else {
				g.fillOval(-r, -r, r*2, r*2);
			}
			*/
		} else {
			g.setColor(background);
			g.fillOval(-r, -r, r*2, r*2);
			g.setColor(Color.BLACK);
			g.drawOval(-r, -r, r*2, r*2);
	
			FontMetrics fm = g.getFontMetrics();
			int width = 0;
			
			String[] parts = String.valueOf(getDisplayName()).split(" ");
			for (String s : parts) {
				width = Math.max(fm.stringWidth(s), width);
			}
			
			int y = -(fm.getHeight()*parts.length)/2 + fm.getAscent();
			for (String name : parts) {
				g.drawString(name, -fm.stringWidth(name)/2, y);
				y += fm.getHeight();
			}
			
			float tr = width/2+5;
			if (this.r < tr)
				this.r = tr;
		}
		
		g.translate(-tx, -ty);
	}