protected void paintComponent(Graphics g) {
		// Let UI delegate paint first 
	    // (including background filling, if I'm opaque)
	    super.paintComponent(g);
	    
	    g.drawRect(0,0, getWidth() - 1, getHeight() - 1);

	    g.setColor(Color.gray);
	    g.drawLine(colWidth,padding, colWidth, statusTextHeight - padding);
	    g.setColor(Color.black);
	    
	    // calculate load and availability
	    List <Node> nodes = cluster.getNodes();
	    
	    int nrBusyNodes = 0;
	    int nrDownNodes = 0;
	    for (Node node : nodes) {
	    	if (node.getStatus() == NodeStatus.Busy) nrBusyNodes++;
	    	if (node.getStatus() == NodeStatus.Down) nrDownNodes++;
	    }
	    
	    int load = (int)Math.round( (nrBusyNodes * 100) / (double)nodes.size() );
	    int availability = (int)Math.round( ( (nodes.size() - nrDownNodes) * 100) / (double)nodes.size() );
	    
	    // draw the cluster name and load 
	    int x = padding;
	    int y = padding + fontHeight;
	    
	    g.drawString("Cluster name ", x, y);
	    g.drawString("" + cluster.getName(), x + colWidth, y);
	    y += fontHeight;
	    
	    g.drawString("Nr. of nodes ", x, y);
	    g.drawString("" + cluster.getNodeCount(), x + colWidth, y);
	    y += fontHeight;

	    g.drawString("Load ", x, y);
	    g.drawString("" + load + "%", x + colWidth, y);
	    y += fontHeight;
	    
	    g.drawString("Available ", x, y);
	    g.drawString("" + availability + "%", x + colWidth, y);
	    y += fontHeight;
	    
	    x = padding;
	    y = statusTextHeight + padding;

	    g.setColor(Color.gray);
	    g.drawLine(x, y, x + getWidth() - padding * 2, y);
	    
	    y += padding;
	    
	    for (Node node : nodes) {
	    	// determine color of the nodebox
	    	g.setColor(idleColor);
	    	if (node.getStatus() == NodeStatus.Busy) g.setColor(busyColor);
	    	if (node.getStatus() == NodeStatus.Down) g.setColor(downColor);
	    	
	    	g.fillRect(x, y, nodeSize, nodeSize);

	    	g.setColor(Color.black);
	    	g.drawRect(x, y, nodeSize, nodeSize);
	    	x += nodeSize + padding;
	    	
	    	if (x + nodeSize + padding > getWidth()) {
	    		x = padding;
	    		y += nodeSize + padding;
	    	}
	    	
	    }

    }