private FontPeer createLogicalFontPeer(String faceName, int style, int size){
        String family = getFamilyFromLogicalFace(faceName);
        FontProperty[] fps = getFontProperties(family.toLowerCase() + "." + style); //$NON-NLS-1$
        if (fps != null){
            int numFonts = fps.length;
            FontPeerImpl[] physicalFonts = new FontPeerImpl[numFonts];
            for (int i = 0; i < numFonts; i++){
                FontProperty fp = fps[i];
                
                String name = fp.getName();
                int fpStyle = fp.getStyle();
                String key = name.concat(String.valueOf(fpStyle)).
                    concat(String.valueOf(size));
                
                HashMapReference hmr   = fontsTable.get(key);
                if (hmr != null) {
                    physicalFonts[i] = (FontPeerImpl)hmr.get();
                }

                if (physicalFonts[i] == null){
                    physicalFonts[i] = (FontPeerImpl)createPhysicalFontPeer(name, fpStyle, size);
                    fontsTable.put(key, new HashMapReference(key, physicalFonts[i], queue));
                }

                if (physicalFonts[i] == null){
                    physicalFonts[i] = (FontPeerImpl)getDefaultFont(style, size);
                }
            }
            return new CompositeFont(family, faceName, style, size, fps, physicalFonts); 
        }
        
        // if there is no property for this logical font - default font is to be
        // created
        FontPeerImpl peer = (FontPeerImpl)getDefaultFont(style, size);
        
        return peer;
    }