def get(cls, block_type):
        """Return a :class:`BlockType` instance from the given parameter.

        * If it's already a BlockType instance, return that.

        * If it exactly matches the command on a :class:`PluginBlockType`,
          return the corresponding BlockType.

        * If it loosely matches the text on a PluginBlockType, return the
          corresponding BlockType.

        * If it's a PluginBlockType instance, look for and return the
          corresponding BlockType.

        """
        if isinstance(block_type, (BlockType, CustomBlockType)):
            return block_type

        if isinstance(block_type, PluginBlockType):
            block_type = block_type.command

        block = kurt.plugin.Kurt.block_by_command(block_type)
        if block:
            return block

        blocks = kurt.plugin.Kurt.blocks_by_text(block_type)
        for block in blocks: # check the blocks' commands map to unique blocks
            if kurt.plugin.Kurt.block_by_command(
                    block.convert().command) != blocks[0]:
                raise ValueError(
                        "ambigious block text %r, use one of %r instead" %
                        (block_type, [b.convert().command for b in blocks]))

        if blocks:
            return blocks[0]

        raise UnknownBlock, repr(block_type)