public void removeOrganization(String key) 
	{
		try 
		{
			Organization org = organizations.get(key);
			
			// Delete all subOrganizations
			if ( !org.getAllSubOrganizations().isEmpty() && org.getAllSubOrganizations().size() > 0 ) 
			{
				Enumeration<String> subOrgs = org.getAllSubOrganizations().keys();
				while ( subOrgs.hasMoreElements() ) 
				{
					String subOrg = (String) subOrgs.nextElement();
					removeOrganization(subOrg);
				}
			}
			
			Enumeration<String> orgRoleNames = org.getAllAgentRoles().keys();
			AgentRole orgRole = null;
			
			while( orgRoleNames.hasMoreElements() ) 
			{
				String orgRoleName = (String) orgRoleNames.nextElement();
				orgRole = org.getAgentRole(orgRoleName);
				GenericAgent agent = orgRole.getPlayer();
				
				Enumeration<String> aRoleNames = agent.getAllAgentRoles().keys();
				AgentRole aRole = null;
				boolean hasOtherOrgs = false;
				
				// Cancel the role with agents 
				while ( aRoleNames.hasMoreElements() ) 
				{
					String aRoleName = (String) aRoleNames.nextElement();
					aRole = agent.getAgentRole(aRoleName);
					
					if ( aRole.getOwner() != org )
					{
						aRole.getOwner().getContainerController().acceptNewAgent(agent.getName(), agent);
						hasOtherOrgs = true;
						break;
					}
				}
				
				// When agent have not other organizations, it will be deleted
				if( !hasOtherOrgs )
					removeAgent( agent.getName() );
				
				// Removes the instance of AgentRole
				org.removeAgentRole( orgRoleName );
			}
			
			// Delete the container on JADE and JAMDER
			org.getContainerController().kill();
			organizations.remove(key);
		} 
		catch(ControllerException exception)
		{
			exception.printStackTrace();
		}
	}