public static JInternalFrame createHeirarchyFrame(final JFrame frame)
    {
		BasicFrames.removeDropdown(internalFrame);
		
        internalFrame.setVisible(true);
        internalFrame.setBounds(200, 200, 518, 352);
        internalFrame.setFocusable(true);
        try {
        	
            internalFrame.setSelected(true);

            tree.setModel(new DefaultTreeModel(
                	new DefaultMutableTreeNode("Loading Tree... Wait for Engine To Initialize") {
    					private static final long serialVersionUID = 1L;
    					{
                		}
                	}
                ));
            
            root.removeAllChildren();
            
            model.reload(root);
            
            MouseListener ml = new MouseAdapter() {
                public void mousePressed(MouseEvent e) {
                    int selRow = tree.getRowForLocation(e.getX(), e.getY());
                    TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
                    if(selRow != -1) {
                    	if(e.getClickCount() == 2 && isGameObject((DefaultMutableTreeNode)tree.getLastSelectedPathComponent())) {
                    		ObjectInfoFrame frameTAdd = new ObjectInfoFrame();
                    		synchronized(infoFrames)
                    		{
                    			infoFrames.add(frameTAdd);
                    		}
                        	internalFrame.getParent().add(frameTAdd.createInfoFrame(frame, selPath.getLastPathComponent().toString(), CoreEngine.game.getRootObject()));
                        }
                    }
                }
            };
            tree.addMouseListener(ml);
            
            internalFrame.getContentPane().add(tree, BorderLayout.CENTER);
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        internalFrame.invalidate();
        
        new Thread() {
        	public void run() {
        		while (true) {
        			synchronized(infoFrames)
        			{
	                    for(ObjectInfoFrame frome : infoFrames)
	                    {
	                    	frome.update();
	                    }
        			}
                }
        	}
        }.start();
        
        return internalFrame;
    }