e = ctxt.getAttributeNamesInScope(PageContext.PAGE_SCOPE);
    while (e.hasMoreElements()) {
      name = (String) e.nextElement();
      value = ctxt.getAttribute(name, PageContext.PAGE_SCOPE);
      FeatureDescriptor descriptor = new FeatureDescriptor();
      descriptor.setName(name);
      descriptor.setDisplayName(name);
      descriptor.setExpert(false);
      descriptor.setHidden(false);
      descriptor.setPreferred(true);
      descriptor.setShortDescription("page scoped attribute");
      descriptor.setValue("type", value.getClass());
      descriptor.setValue("resolvableAtDesignTime", Boolean.FALSE);
      list.add(descriptor);
    }
    e = ctxt.getAttributeNamesInScope(PageContext.REQUEST_SCOPE);
    while (e.hasMoreElements()) {
      name = (String) e.nextElement();
      value = ctxt.getAttribute(name, PageContext.REQUEST_SCOPE);
      FeatureDescriptor descriptor = new FeatureDescriptor();
      descriptor.setName(name);
      descriptor.setDisplayName(name);
      descriptor.setExpert(false);
      descriptor.setHidden(false);
      descriptor.setPreferred(true);
      descriptor.setShortDescription("request scope attribute");
      descriptor.setValue("type", value.getClass());
      descriptor.setValue("resolvableAtDesignTime", Boolean.FALSE);
      list.add(descriptor);
    }
    if (ctxt.getSession() != null) {
      e = ctxt.getAttributeNamesInScope(PageContext.SESSION_SCOPE);
      while (e.hasMoreElements()) {
        name = (String) e.nextElement();
        value = ctxt.getAttribute(name, PageContext.SESSION_SCOPE);
        FeatureDescriptor descriptor = new FeatureDescriptor();
        descriptor.setName(name);
        descriptor.setDisplayName(name);
        descriptor.setExpert(false);
        descriptor.setHidden(false);
        descriptor.setPreferred(true);
        descriptor.setShortDescription("session scoped attribute");
        descriptor.setValue("type", value.getClass());
        descriptor.setValue("resolvableAtDesignTime", Boolean.FALSE);
        list.add(descriptor);
      }
    }
    e = ctxt.getAttributeNamesInScope(PageContext.APPLICATION_SCOPE);
    while (e.hasMoreElements()) {
      name = (String) e.nextElement();
      value = ctxt.getAttribute(name, PageContext.APPLICATION_SCOPE);
      FeatureDescriptor descriptor = new FeatureDescriptor();
      descriptor.setName(name);
      descriptor.setDisplayName(name);
      descriptor.setExpert(false);
      descriptor.setHidden(false);
      descriptor.setPreferred(true);
      descriptor.setShortDescription("application scoped attribute");
      descriptor.setValue("type", value.getClass());
      descriptor.setValue("resolvableAtDesignTime", Boolean.FALSE);
      list.add(descriptor);
    }
    return list.iterator();
  }