| 
							- diff --git a/src/lilv_internal.h b/src/lilv_internal.h
 - index af8e31a..72be413 100644
 - --- a/src/lilv_internal.h
 - +++ b/src/lilv_internal.h
 - @@ -185,6 +185,8 @@ struct LilvWorldImpl {
 -  		SordNode* lv2_requiredFeature;
 -  		SordNode* lv2_symbol;
 -  		SordNode* lv2_prototype;
 - +		SordNode* mod_builderVersion;
 - +		SordNode* mod_releaseNumber;
 -  		SordNode* owl_Ontology;
 -  		SordNode* pset_value;
 -  		SordNode* rdf_a;
 - @@ -238,8 +240,10 @@ struct LilvUIImpl {
 -  };
 -  
 -  typedef struct LilvVersion {
 - +	int builder;
 -  	int minor;
 -  	int micro;
 - +	int release;
 -  } LilvVersion;
 -  
 -  /*
 - @@ -335,6 +339,42 @@ lilv_version_cmp(const LilvVersion* a, const LilvVersion* b)
 -  	}
 -  }
 -  
 - +static inline int
 - +lilv_version_cmp_mod(const LilvVersion* a, const LilvVersion* b)
 - +{
 - +	// same version
 - +	if (a->builder == b->builder && a->minor == b->minor
 - +	    && a->micro == b->micro && a->release == b->release)
 - +		return 0;
 - +
 - +	// check builder
 - +	if (a->builder < b->builder)
 - +		return -1;
 - +	if (a->builder > b->builder)
 - +		return 1;
 - +
 - +	// check minor
 - +	if (a->minor < b->minor)
 - +		return -1;
 - +	if (a->minor > b->minor)
 - +		return 1;
 - +
 - +	// check micro
 - +	if (a->micro < b->micro)
 - +		return -1;
 - +	if (a->micro > b->micro)
 - +		return 1;
 - +
 - +	// check release
 - +	if (a->release < b->release)
 - +		return -1;
 - +	if (a->release > b->release)
 - +		return 1;
 - +
 - +	// huh!?
 - +	return 0;
 - +}
 - +
 -  struct LilvHeader*
 -  lilv_collection_get_by_uri(const ZixTree* seq, const LilvNode* uri);
 -  
 - diff --git a/src/world.c b/src/world.c
 - index 1e51a2d..d52edf4 100644
 - --- a/src/world.c
 - +++ b/src/world.c
 - @@ -78,6 +78,8 @@ lilv_world_new(void)
 -  	world->uris.lv2_requiredFeature = NEW_URI(LV2_CORE__requiredFeature);
 -  	world->uris.lv2_symbol          = NEW_URI(LV2_CORE__symbol);
 -  	world->uris.lv2_prototype       = NEW_URI(LV2_CORE__prototype);
 - +	world->uris.mod_builderVersion  = NEW_URI("http://moddevices.com/ns/mod#builderVersion");
 - +	world->uris.mod_releaseNumber   = NEW_URI("http://moddevices.com/ns/mod#releaseNumber");
 -  	world->uris.owl_Ontology        = NEW_URI(NS_OWL "Ontology");
 -  	world->uris.pset_value          = NEW_URI(LV2_PRESETS__value);
 -  	world->uris.rdf_a               = NEW_URI(LILV_NS_RDF  "type");
 - @@ -657,17 +659,27 @@ load_plugin_model(LilvWorld*      world,
 -  static LilvVersion
 -  get_version(LilvWorld* world, SordModel* model, const LilvNode* subject)
 -  {
 - +	const SordNode* builder_node = sord_get(
 - +		model, subject->node, world->uris.mod_builderVersion, NULL, NULL);
 -  	const SordNode* minor_node = sord_get(
 -  		model, subject->node, world->uris.lv2_minorVersion, NULL, NULL);
 -  	const SordNode* micro_node = sord_get(
 -  		model, subject->node, world->uris.lv2_microVersion, NULL, NULL);
 - +	const SordNode* release_node = sord_get(
 - +		model, subject->node, world->uris.mod_releaseNumber, NULL, NULL);
 -  
 -  
 - -	LilvVersion version = { 0, 0 };
 - +	LilvVersion version = { 0, 0, 0, 0 };
 - +	if (builder_node) {
 - +		version.builder = atoi((const char*)sord_node_get_string(builder_node));
 - +	}
 -  	if (minor_node && micro_node) {
 -  		version.minor = atoi((const char*)sord_node_get_string(minor_node));
 -  		version.micro = atoi((const char*)sord_node_get_string(micro_node));
 -  	}
 - +	if (release_node) {
 - +		version.release = atoi((const char*)sord_node_get_string(release_node));
 - +	}
 -  
 -  	return version;
 -  }
 - @@ -720,17 +732,19 @@ lilv_world_load_bundle(LilvWorld* world, const LilvNode* bundle_uri)
 -  		LilvVersion last_version = get_version(world, last_model, plugin_uri);
 -  		sord_free(this_model);
 -  		sord_free(last_model);
 - -		const int cmp = lilv_version_cmp(&this_version, &last_version);
 - +		const int cmp = lilv_version_cmp_mod(&this_version, &last_version);
 -  		if (cmp > 0) {
 -  			zix_tree_insert((ZixTree*)unload_uris,
 -  			                lilv_node_duplicate(plugin_uri),
 -  			                NULL);
 - -			LILV_WARNF("Replacing version %d.%d of <%s> from <%s>\n",
 - -			           last_version.minor, last_version.micro,
 - +			LILV_WARNF("Replacing version %d:%d.%d-%d of <%s> from <%s>\n",
 - +			           last_version.builder, last_version.minor,
 - +			           last_version.micro, last_version.release,
 -  			           sord_node_get_string(plug),
 -  			           sord_node_get_string(last_bundle->node));
 - -			LILV_NOTEF("New version %d.%d found in <%s>\n",
 - -			           this_version.minor, this_version.micro,
 - +			LILV_NOTEF("New version %d:%d.%d-%d found in <%s>\n",
 - +			           this_version.builder, this_version.minor,
 - +			           this_version.micro, this_version.release,
 -  			           sord_node_get_string(bundle_node));
 -  		} else if (cmp < 0) {
 -  			LILV_WARNF("Ignoring bundle <%s>\n",
 
 
  |