public void draw(Graphics2D g2)
	{
		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, // Anti-alias!
		        RenderingHints.VALUE_ANTIALIAS_ON);
		
		xCenter = panel.getWidth()/2;
		yCenter = panel.getHeight()/2;
		
		if(!initialized)
		{
			GraphicalElectron.reset();
			String config = element.getFullElectronConfiguration();
			electrons = new ArrayList<GraphicalElectron>();
			
			// token holds the separated electron configuration
			// (Each token is in the format of "1s2")
			StringTokenizer token = new StringTokenizer(config);
			//int totalElectrons = 0;
			level = 0;
			
			int[] numPerLevel = new int[token.countTokens()];
			
			int[][] electronData = new int[token.countTokens()][3];
			int count = 0;
			
			while(token.hasMoreTokens())
			{
				// Parsing (Energy Level, Orbital, Number of Electrons), i.e. "3p4"
				StringTokenizer token2 = new StringTokenizer(token.nextToken(), "spdf", true);
				level = Integer.parseInt(token2.nextToken());
				String orb = token2.nextToken();
				int numE = Integer.parseInt(token2.nextToken());
				
				electronData[count][0] = level;
				electronData[count][1] = Electron.lValue(orb);
				electronData[count][2] = numE;
				count++;
				
				//totalElectrons += numE;
				//System.out.println(level-1 + " e: " + numE);
				numPerLevel[level-1] += numE;
				
				//for(int j = 0; j < numPerLevel.length; j++)
					//System.out.println("EnergyLevel: " + j + " " + numPerLevel[j]);
			}
			
			for(int k = 0; k < electronData.length; k++)
			{
				for(int c = 0; c < electronData[k][2]; c++)
				{
					GraphicalElectron e = new GraphicalElectron(xCenter, yCenter, 
							electronData[k][0], electronData[k][1], c, 
							numPerLevel[electronData[k][0]-1]);
					electrons.add(e);
				}
			}
			
			ber = new BohrElectronRenderer(panel);
			ber.start();
			initialized = true;
		}
		if(panel.getHeight() != ((GraphicalElectron)electrons.get(0)).getyCenter()*2)
		{
			xCenter = panel.getWidth()/2;
			yCenter = panel.getHeight()/2;
			
			Iterator<GraphicalElectron> iter = electrons.iterator();
			while(iter.hasNext())
			{
				((GraphicalElectron)iter.next()).setCenter(xCenter, yCenter);
			}
		}
		g2.setColor(Color.BLACK);
		
		g2.fillOval(xCenter-1,yCenter-1,3,3);
		for(int k = 0; k < level; k++)
			g2.drawOval(xCenter-((k+1)*30)/2, yCenter-((k+1)*30)/2, (k+1)*30, (k+1)*30);
			
		Iterator<GraphicalElectron> iter = electrons.iterator();
		
		if(active)
			factor += 0.1;
		
		while(iter.hasNext())
		{
			GraphicalElectron e = (GraphicalElectron)iter.next();
			e.step(factor);
			g2.setColor(Color.BLACK);
			g2.drawOval((int)(e.point.x-3),(int)(e.point.y-3),6,6);
			g2.setColor(Color.YELLOW);
			g2.fillOval((int)e.point.x-3,(int)e.point.y-3,6,6);
		}
	}