public void release(HGPersistentHandle handle)
    {    	
        if (slots.isEmpty() || graph.getHandleFactory().nullHandle().equals(handle))
            return;
        HGPersistentHandle [] layout = graph.getStore().getLink(handle);
        if (layout == null)
            // this is fishy, a sys print out like this, next line will throw an NPE anyway
        	System.out.println("oops, no data for : " + handle); 
        if (layout.length != slots.size() * 2)
            throw new HGException("RecordType.remove: Record value of handle " + 
                                  handle + 
                                  " does not match record type number of slots.");       
        for (int i = 0; i < slots.size(); i++)
        {
        	HGHandle slotHandle = (HGHandle)getAt(i);
            HGAtomType type;
            if (getReferenceMode(slotHandle) == null)
            	type = graph.getTypeSystem().getType(layout[2*i]);
            else
            	type = graph.getTypeSystem().getAtomType(HGAtomRef.class);
            int j = 2*i + 1;
            if (!layout[j].equals(graph.getHandleFactory().nullHandle()))
            	if (!TypeUtils.isValueReleased(graph, layout[j]))
            	{
            		TypeUtils.releaseValue(graph, type, layout[j]);
            	}
        }        
        graph.getStore().removeLink(handle);
    }