private void addStamp(CHRMultiTilePanelDecorator decorator){
        _stamps.add(decorator);
        _stampPanel.add(decorator);
        if(! decorator.isAdded()) {
            CHRMultiTilePanel stamp = decorator.getTilePanel();
            CHRTile tiles[] = stamp.getTiles();
            for(int i=0;i<tiles.length;i++){
                int byteOffset = _insertionPoint * 16;
                System.arraycopy(tiles[i].asMask(),0,_modelRef.getCHRModel().patternTable[_targetBank],byteOffset,16);
                _insertionPoint++;
            }
            _metaInsertionPoint += stamp.getMetaTilesSize();
            decorator.setAdded(true);
            decorator.addMouseListener(_popupListener);
        }
        
        MouseListener actListener = new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if(_lastStamp != null){
                    _lastStamp.setBorder(new BevelBorder(BevelBorder.RAISED));
                }
                _lastStamp = (CHRMultiTilePanelDecorator)e.getSource();
                _lastStamp.setBorder(new BevelBorder(BevelBorder.LOWERED));
                if(_activeStampObserver != null){
                    _activeStampObserver.setActiveStamp(_lastStamp.getTilePanel(), _targetBank); // this needs work
                }
                if(META_DATA_SUPPORTED) {
                	_metaPanel.updateUIFields(((CHRMultiTilePanelDecorator)e.getSource()).getMetaProperties());
                }
            }
        };
        decorator.addMouseListener(actListener);
        
        
        _tileCountLabel.setText(_prefix + " Tiles Remaining:" + (256 - _insertionPoint));
        _stampPanel.revalidate();
        _tilePanel.updatePatternTable();
        if(_listener != null){
            _listener.notifyPatternTableChanged();
        }
    }