http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java 
b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
deleted file mode 100644
index 6e9f963..0000000
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.catalog.internal;
-
-import java.util.Collection;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
-import brooklyn.basic.BrooklynObjectInternal;
-
-import org.apache.brooklyn.api.catalog.CatalogItem;
-import org.apache.brooklyn.api.entity.rebind.RebindSupport;
-import org.apache.brooklyn.api.management.ManagementContext;
-import org.apache.brooklyn.api.mementos.CatalogItemMemento;
-
-import brooklyn.config.ConfigKey;
-
-import com.google.common.base.Preconditions;
-
-public class CatalogItemDo<T,SpecT> implements CatalogItem<T,SpecT>, 
BrooklynObjectInternal {
-
-    protected final CatalogDo catalog;
-    protected final CatalogItemDtoAbstract<T,SpecT> itemDto;
-
-    protected volatile Class<T> javaClass; 
-    
-    public CatalogItemDo(CatalogDo catalog, CatalogItem<T,SpecT> itemDto) {
-        this.catalog = Preconditions.checkNotNull(catalog, "catalog");
-        this.itemDto = (CatalogItemDtoAbstract<T, SpecT>) 
Preconditions.checkNotNull(itemDto, "itemDto");
-    }
-
-    public CatalogItem<T,SpecT> getDto() {
-        return itemDto;
-    }
-    
-    /**
-     * Config not supported for catalog item. See {@link #getPlanYaml()}.
-     */
-    @Override
-    public ConfigurationSupportInternal config() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public <U> U setConfig(ConfigKey<U> key, U val) {
-        return config().set(key, val);
-    }
-
-    @Override
-    public CatalogItemType getCatalogItemType() {
-        return itemDto.getCatalogItemType();
-    }
-
-    @Override
-    public Class<T> getCatalogItemJavaType() {
-        return itemDto.getCatalogItemJavaType();
-    }
-
-    @Override
-    public String getId() {
-        return itemDto.getId();
-    }
-
-    @Override
-    public String getCatalogItemId() {
-        return itemDto.getCatalogItemId();
-    }
-
-    @Override
-    public void setDeprecated(boolean deprecated) {
-        itemDto.setDeprecated(deprecated);
-    }
-
-    @Override
-    public boolean isDeprecated() {
-        return itemDto.isDeprecated();
-    }
-
-    @Override
-    public void setCatalogItemId(String id) {
-        itemDto.setCatalogItemId(id);
-    }
-
-    @Override
-    public String getJavaType() {
-        return itemDto.getJavaType();
-    }
-
-    @Deprecated
-    @Override
-    public String getName() {
-        return getDisplayName();
-    }
-
-    @Deprecated
-    @Override
-    public String getRegisteredTypeName() {
-        return getSymbolicName();
-    }
-
-    @Override
-    public String getDisplayName() {
-        return itemDto.getDisplayName();
-    }
-
-    @Override
-    public TagSupport tags() {
-        return itemDto.tags();
-    }
-
-    @Override
-    public String getDescription() {
-        return itemDto.getDescription();
-    }
-
-    @Override
-    public String getIconUrl() {
-        return itemDto.getIconUrl();
-    }
-    
-    @Override
-    public String getSymbolicName() {
-        return itemDto.getSymbolicName();
-    }
-
-    @Override
-    public String getVersion() {
-        return itemDto.getVersion();
-    }
-
-    @Nonnull  // but it is still null sometimes, see in CatalogDo.loadJavaClass
-    @Override
-    public Collection<CatalogBundle> getLibraries() {
-        return itemDto.getLibraries();
-    }
-
-    /** @deprecated since 0.7.0 this is the legacy mechanism; still needed for 
policies and apps, but being phased out.
-     * new items should use {@link #getPlanYaml} and {@link 
#newClassLoadingContext} */
-    @Deprecated
-    public Class<T> getJavaClass() {
-        if (javaClass==null) loadJavaClass(null);
-        return javaClass;
-    }
-    
-    @SuppressWarnings("unchecked")
-    Class<? extends T> loadJavaClass(final ManagementContext mgmt) {
-        if (javaClass!=null) return javaClass;
-        javaClass = (Class<T>)CatalogUtils.newClassLoadingContext(mgmt, 
getId(), getLibraries(), catalog.getRootClassLoader()).loadClass(getJavaType());
-        return javaClass;
-    }
-
-    @Override
-    public String toString() {
-        return getClass().getCanonicalName()+"["+itemDto+"]";
-    }
-
-    @Override
-    public String toXmlString() {
-        return itemDto.toXmlString();
-    }
-
-    @Override
-    public Class<SpecT> getSpecType() {
-        return itemDto.getSpecType();
-    }
-
-    @Nullable @Override
-    public String getPlanYaml() {
-        return itemDto.getPlanYaml();
-    }
-
-    @Override
-    public RebindSupport<CatalogItemMemento> getRebindSupport() {
-        return itemDto.getRebindSupport();
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java 
b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
deleted file mode 100644
index b72f55f..0000000
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.catalog.internal;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import brooklyn.basic.AbstractBrooklynObject;
-
-import org.apache.brooklyn.api.catalog.CatalogItem;
-import org.apache.brooklyn.api.entity.rebind.RebindSupport;
-import org.apache.brooklyn.api.mementos.CatalogItemMemento;
-
-import brooklyn.config.ConfigKey;
-import brooklyn.entity.rebind.BasicCatalogItemRebindSupport;
-import brooklyn.util.collections.MutableList;
-import brooklyn.util.flags.FlagUtils;
-import brooklyn.util.flags.SetFromFlag;
-
-import com.google.common.base.Objects;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Sets;
-
-public abstract class CatalogItemDtoAbstract<T, SpecT> extends 
AbstractBrooklynObject implements CatalogItem<T, SpecT> {
-
-    private static Logger LOG = 
LoggerFactory.getLogger(CatalogItemDtoAbstract.class);
-
-    private @SetFromFlag String symbolicName;
-    private @SetFromFlag String version = BasicBrooklynCatalog.NO_VERSION;
-
-    private @SetFromFlag String displayName;
-    private @SetFromFlag String description;
-    private @SetFromFlag String iconUrl;
-
-    private @SetFromFlag String javaType;
-    /**@deprecated since 0.7.0, left for deserialization backwards 
compatibility */
-    private @Deprecated @SetFromFlag String type;
-    private @SetFromFlag String planYaml;
-
-    private @SetFromFlag Collection<CatalogBundle> libraries;
-    private @SetFromFlag Set<Object> tags = Sets.newLinkedHashSet();
-    private @SetFromFlag boolean deprecated;
-
-    /**
-     * Config not supported for catalog item. See {@link #getPlanYaml()}.
-     */
-    @Override
-    public ConfigurationSupportInternal config() {
-        throw new UnsupportedOperationException();
-    }
-    
-    @Override
-    public <U> U setConfig(ConfigKey<U> key, U val) {
-        return config().set(key, val);
-    }
-    
-    @Override
-    public String getId() {
-        return getCatalogItemId();
-    }
-
-    @Override
-    public String getCatalogItemId() {
-        return CatalogUtils.getVersionedId(getSymbolicName(), getVersion());
-    }
-
-    @Override
-    public String getJavaType() {
-        if (javaType != null) return javaType;
-        return type;
-    }
-
-    @Deprecated
-    public String getName() {
-        return getDisplayName();
-    }
-
-    @Deprecated
-    public String getRegisteredTypeName() {
-        return getSymbolicName();
-    }
-
-    @Override
-    public String getDisplayName() {
-        return displayName;
-    }
-
-    @Override
-    public String getDescription() {
-        return description;
-    }
-
-    @Override
-    public String getIconUrl() {
-        return iconUrl;
-    }
-
-    @Override
-    public String getSymbolicName() {
-        if (symbolicName != null) return symbolicName;
-        return getJavaType();
-    }
-
-    @Override
-    public String getVersion() {
-        // The property is set to NO_VERSION when the object is initialized so 
it's not supposed to be null ever.
-        // But xstream doesn't call constructors when reading from the 
catalog.xml file which results in null value
-        // for the version property. That's why we have to fix it in the 
getter.
-        if (version != null) {
-            return version;
-        } else {
-            return BasicBrooklynCatalog.NO_VERSION;
-        }
-    }
-
-    @Override
-    public boolean isDeprecated() {
-        return deprecated;
-    }
-
-    @Override
-    public void setDeprecated(boolean deprecated) {
-        this.deprecated = deprecated;
-    }
-
-    @Nonnull
-    @Override
-    public Collection<CatalogBundle> getLibraries() {
-        if (libraries != null) {
-            return ImmutableList.copyOf(libraries);
-        } else {
-            return Collections.emptyList();
-        }
-    }
-
-    @Nullable @Override
-    public String getPlanYaml() {
-        return planYaml;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hashCode(symbolicName, planYaml, javaType, 
nullIfEmpty(libraries), version, getCatalogItemId());
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) return true;
-        if (obj == null) return false;
-        if (getClass() != obj.getClass()) return false;
-        CatalogItemDtoAbstract<?,?> other = (CatalogItemDtoAbstract<?,?>) obj;
-        if (!Objects.equal(symbolicName, other.symbolicName)) return false;
-        if (!Objects.equal(planYaml, other.planYaml)) return false;
-        if (!Objects.equal(javaType, other.javaType)) return false;
-        if (!Objects.equal(nullIfEmpty(libraries), 
nullIfEmpty(other.libraries))) return false;
-        if (!Objects.equal(getCatalogItemId(), other.getCatalogItemId())) 
return false;
-        if (!Objects.equal(version, other.version)) return false;
-        if (!Objects.equal(deprecated, other.deprecated)) return false;
-        if (!Objects.equal(description, other.description)) return false;
-        if (!Objects.equal(displayName, other.displayName)) return false;
-        if (!Objects.equal(iconUrl, other.iconUrl)) return false;
-        if (!Objects.equal(tags, other.tags)) return false;
-        // 'type' not checked, because deprecated, 
-        // and in future we might want to allow it to be removed/blanked in 
some impls without affecting equality
-        // (in most cases it is the same as symbolicName so doesn't matter)
-        return true;
-    }
-
-    private static <T> Collection<T> nullIfEmpty(Collection<T> coll) {
-        if (coll==null || coll.isEmpty()) return null;
-        return coll;
-    }
-
-    @Override
-    public String toString() {
-        return getClass().getSimpleName()+"["+getId()+"/"+getDisplayName()+"]";
-    }
-
-    public abstract Class<SpecT> getSpecType();
-
-    transient CatalogXmlSerializer serializer;
-
-    @Override
-    public String toXmlString() {
-        if (serializer==null) loadSerializer();
-        return serializer.toString(this);
-    }
-
-    private synchronized void loadSerializer() {
-        if (serializer == null) {
-            serializer = new CatalogXmlSerializer();
-        }
-    }
-
-    @Override
-    public RebindSupport<CatalogItemMemento> getRebindSupport() {
-        return new BasicCatalogItemRebindSupport(this);
-    }
-
-    @Override
-    public void setDisplayName(String newName) {
-        this.displayName = newName;
-    }
-
-    @Override
-    protected AbstractBrooklynObject configure(Map<?, ?> flags) {
-        FlagUtils.setFieldsFromFlags(flags, this);
-        return this;
-    }
-
-    @Override
-    public TagSupport tags() {
-        return new BasicTagSupport();
-    }
-
-    /*
-     * Using a custom tag support class rather than the one in 
AbstractBrooklynObject because
-     * when XStream unmarshals a catalog item with no tags (e.g. from any 
catalog.xml file)
-     * super.tags will be null, and any call to getTags throws a 
NullPointerException on the
-     * synchronized (tags) statement. It can't just be initialised here 
because super.tags is
-     * final.
-     */
-    private class BasicTagSupport implements TagSupport {
-
-        private void setTagsIfNull() {
-            // Possible if the class was unmarshalled by Xstream with no tags
-            synchronized (CatalogItemDtoAbstract.this) {
-                if (tags == null) {
-                    tags = Sets.newLinkedHashSet();
-                }
-            }
-        }
-
-        @Nonnull
-        @Override
-        public Set<Object> getTags() {
-            synchronized (CatalogItemDtoAbstract.this) {
-                setTagsIfNull();
-                return ImmutableSet.copyOf(tags);
-            }
-        }
-
-        @Override
-        public boolean containsTag(Object tag) {
-            synchronized (CatalogItemDtoAbstract.this) {
-                setTagsIfNull();
-                return tags.contains(tag);
-            }
-        }
-
-        @Override
-        public boolean addTag(Object tag) {
-            boolean result;
-            synchronized (CatalogItemDtoAbstract.this) {
-                setTagsIfNull();
-                result = tags.add(tag);
-            }
-            onTagsChanged();
-            return result;
-        }
-
-        @Override
-        public boolean addTags(Iterable<?> newTags) {
-            boolean result;
-            synchronized (CatalogItemDtoAbstract.this) {
-                setTagsIfNull();
-                result = Iterables.addAll(tags, newTags);
-            }
-            onTagsChanged();
-            return result;
-        }
-
-        @Override
-        public boolean removeTag(Object tag) {
-            boolean result;
-            synchronized (CatalogItemDtoAbstract.this) {
-                setTagsIfNull();
-                result = tags.remove(tag);
-            }
-            onTagsChanged();
-            return result;
-        }
-    }
-
-    @Override
-    @Deprecated
-    public void setCatalogItemId(String id) {
-        //no op, should be used by rebind code only
-    }
-
-    protected void setSymbolicName(String symbolicName) {
-        this.symbolicName = symbolicName;
-    }
-
-    protected void setVersion(String version) {
-        this.version = version;
-    }
-
-    protected void setDescription(String description) {
-        this.description = description;
-    }
-
-    protected void setIconUrl(String iconUrl) {
-        this.iconUrl = iconUrl;
-    }
-
-    protected void setJavaType(String javaType) {
-        this.javaType = javaType;
-        this.type = null;
-    }
-
-    protected void setPlanYaml(String planYaml) {
-        this.planYaml = planYaml;
-    }
-
-    protected void setLibraries(Collection<CatalogBundle> libraries) {
-        this.libraries = libraries;
-    }
-
-    protected void setTags(Set<Object> tags) {
-        this.tags = tags;
-    }
-
-    protected void setSerializer(CatalogXmlSerializer serializer) {
-        this.serializer = serializer;
-    }
-
-    /**
-     * Parses an instance of CatalogLibrariesDto from the given List. Expects 
the list entries
-     * to be either Strings or Maps of String -> String. Will skip items that 
are not.
-     */
-    public static Collection<CatalogBundle> parseLibraries(Collection<?> 
possibleLibraries) {
-        Collection<CatalogBundle> dto = MutableList.of();
-        for (Object object : possibleLibraries) {
-            if (object instanceof Map) {
-                Map<?, ?> entry = (Map<?, ?>) object;
-                String name = stringValOrNull(entry, "name");
-                String version = stringValOrNull(entry, "version");
-                String url = stringValOrNull(entry, "url");
-                dto.add(new CatalogBundleDto(name, version, url));
-            } else if (object instanceof String) {
-                String inlineRef = (String) object;
-
-                final String name;
-                final String version;
-                final String url;
-
-                //Infer reference type (heuristically)
-                if (inlineRef.contains("/") || inlineRef.contains("\\")) {
-                    //looks like an url/file path
-                    name = null;
-                    version = null;
-                    url = inlineRef;
-                } else if (CatalogUtils.looksLikeVersionedId(inlineRef)) {
-                    //looks like a name+version ref
-                    name = CatalogUtils.getIdFromVersionedId(inlineRef);
-                    version = 
CatalogUtils.getVersionFromVersionedId(inlineRef);
-                    url = null;
-                } else {
-                    //assume it to be relative url
-                    name = null;
-                    version = null;
-                    url = inlineRef;
-                }
-
-                dto.add(new CatalogBundleDto(name, version, url));
-            } else {
-                LOG.debug("Unexpected entry in libraries list neither string 
nor map: " + object);
-            }
-        }
-        return dto;
-    }
-
-    private static String stringValOrNull(Map<?, ?> map, String key) {
-        Object val = map.get(key);
-        return val != null ? String.valueOf(val) : null;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDo.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDo.java 
b/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDo.java
deleted file mode 100644
index 2adc851..0000000
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDo.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.catalog.internal;
-
-import java.util.Collection;
-
-import org.apache.brooklyn.api.catalog.CatalogItem;
-
-import com.google.common.base.Preconditions;
-
-@Deprecated
-public class CatalogLibrariesDo implements CatalogItem.CatalogItemLibraries {
-
-    private final CatalogLibrariesDto librariesDto;
-
-
-    public CatalogLibrariesDo(CatalogLibrariesDto librariesDto) {
-        this.librariesDto = Preconditions.checkNotNull(librariesDto, 
"librariesDto");
-    }
-
-    @Override
-    public Collection<String> getBundles() {
-        return librariesDto.getBundles();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDto.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDto.java 
b/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDto.java
deleted file mode 100644
index 47dcdd5..0000000
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDto.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.catalog.internal;
-
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.brooklyn.api.catalog.CatalogItem;
-
-import com.google.common.collect.ImmutableList;
-
-@Deprecated
-public class CatalogLibrariesDto implements CatalogItem.CatalogItemLibraries {
-
-    private final Collection<String> bundles;
-
-    public CatalogLibrariesDto() {
-        this.bundles = Collections.emptyList();
-    }
-
-    public CatalogLibrariesDto(Collection<String> bundles) {
-        this.bundles = bundles;
-    }
-
-    /**
-     * @return An immutable copy of the bundle URLs referenced by this object
-     */
-    @Override
-    public Collection<String> getBundles() {
-        if (bundles == null) {
-            // can be null on deserialization
-            return Collections.emptyList();
-        }
-        return ImmutableList.copyOf(bundles);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogLocationItemDto.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/catalog/internal/CatalogLocationItemDto.java 
b/core/src/main/java/brooklyn/catalog/internal/CatalogLocationItemDto.java
deleted file mode 100644
index da185f2..0000000
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogLocationItemDto.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.catalog.internal;
-
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.location.LocationSpec;
-
-
-public class CatalogLocationItemDto extends 
CatalogItemDtoAbstract<Location,LocationSpec<?>> {
-    
-    @Override
-    public CatalogItemType getCatalogItemType() {
-        return CatalogItemType.LOCATION;
-    }
-
-    @Override
-    public Class<Location> getCatalogItemJavaType() {
-        return Location.class;
-    }
-
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    @Override
-    public Class<LocationSpec<?>> getSpecType() {
-        return (Class)LocationSpec.class;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogPolicyItemDto.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/catalog/internal/CatalogPolicyItemDto.java 
b/core/src/main/java/brooklyn/catalog/internal/CatalogPolicyItemDto.java
deleted file mode 100644
index 0475876..0000000
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogPolicyItemDto.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.catalog.internal;
-
-import org.apache.brooklyn.api.policy.Policy;
-import org.apache.brooklyn.api.policy.PolicySpec;
-
-
-public class CatalogPolicyItemDto extends 
CatalogItemDtoAbstract<Policy,PolicySpec<?>> {
-    
-    @Override
-    public CatalogItemType getCatalogItemType() {
-        return CatalogItemType.POLICY;
-    }
-
-    @Override
-    public Class<Policy> getCatalogItemJavaType() {
-        return Policy.class;
-    }
-
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    @Override
-    public Class<PolicySpec<?>> getSpecType() {
-        return (Class)PolicySpec.class;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogTemplateItemDto.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/catalog/internal/CatalogTemplateItemDto.java 
b/core/src/main/java/brooklyn/catalog/internal/CatalogTemplateItemDto.java
deleted file mode 100644
index 1003a4c..0000000
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogTemplateItemDto.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.catalog.internal;
-
-import org.apache.brooklyn.api.entity.Application;
-import org.apache.brooklyn.api.entity.proxying.EntitySpec;
-
-public class CatalogTemplateItemDto extends 
CatalogItemDtoAbstract<Application,EntitySpec<? extends Application>> {
-
-    @Override
-    public CatalogItemType getCatalogItemType() {
-        return CatalogItemType.TEMPLATE;
-    }
-
-    @Override
-    public Class<Application> getCatalogItemJavaType() {
-        return Application.class;
-    }
-
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    @Override
-    public Class<EntitySpec<? extends Application>> getSpecType() {
-        return (Class)EntitySpec.class;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java 
b/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
deleted file mode 100644
index 302e17c..0000000
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.catalog.internal;
-
-import java.util.Collection;
-
-import javax.annotation.Nullable;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import brooklyn.basic.BrooklynObjectInternal;
-
-import org.apache.brooklyn.api.basic.BrooklynObject;
-import org.apache.brooklyn.api.catalog.BrooklynCatalog;
-import org.apache.brooklyn.api.catalog.CatalogItem;
-import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.management.ManagementContext;
-import 
org.apache.brooklyn.api.management.classloading.BrooklynClassLoadingContext;
-import 
org.apache.brooklyn.core.management.classloading.BrooklynClassLoadingContextSequential;
-import 
org.apache.brooklyn.core.management.classloading.JavaBrooklynClassLoadingContext;
-import 
org.apache.brooklyn.core.management.classloading.OsgiBrooklynClassLoadingContext;
-import org.apache.brooklyn.core.management.ha.OsgiManager;
-import org.apache.brooklyn.core.management.internal.ManagementContextInternal;
-
-import brooklyn.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker;
-import brooklyn.config.BrooklynLogging;
-import brooklyn.entity.basic.EntityInternal;
-import brooklyn.entity.rebind.RebindManagerImpl.RebindTracker;
-import brooklyn.util.guava.Maybe;
-import brooklyn.util.text.Strings;
-import brooklyn.util.time.Time;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Joiner;
-import com.google.common.base.Stopwatch;
-
-public class CatalogUtils {
-    private static final Logger log = 
LoggerFactory.getLogger(CatalogUtils.class);
-
-    public static final char VERSION_DELIMITER = ':';
-
-    public static BrooklynClassLoadingContext 
newClassLoadingContext(ManagementContext mgmt, CatalogItem<?, ?> item) {
-        // TODO getLibraries() should never be null but sometimes it is still
-        // e.g. run CatalogResourceTest without the above check
-        if (item.getLibraries() == null) {
-            log.debug("CatalogItemDtoAbstract.getLibraries() is null.", new 
Exception("Trace for null CatalogItemDtoAbstract.getLibraries()"));
-        }
-        return newClassLoadingContext(mgmt, item.getId(), item.getLibraries());
-    }
-    
-    public static BrooklynClassLoadingContext getClassLoadingContext(Entity 
entity) {
-        ManagementContext mgmt = 
((EntityInternal)entity).getManagementContext();
-        String catId = entity.getCatalogItemId();
-        if (Strings.isBlank(catId)) return 
JavaBrooklynClassLoadingContext.create(mgmt);
-        CatalogItem<?, ?> cat = getCatalogItemOptionalVersion(mgmt, catId);
-        if (cat==null) {
-            log.warn("Cannot load "+catId+" to get classloader for "+entity+"; 
will try with standard loader, but might fail subsequently");
-            return JavaBrooklynClassLoadingContext.create(mgmt);
-        }
-        return newClassLoadingContext(mgmt, cat);
-    }
-
-    public static BrooklynClassLoadingContext newClassLoadingContext(@Nullable 
ManagementContext mgmt, String catalogItemId, Collection<CatalogBundle> 
libraries) {
-        BrooklynClassLoadingContextSequential result = new 
BrooklynClassLoadingContextSequential(mgmt);
-
-        if (libraries!=null && !libraries.isEmpty()) {
-            result.add(new OsgiBrooklynClassLoadingContext(mgmt, 
catalogItemId, libraries));
-        }
-
-        BrooklynClassLoadingContext loader = BrooklynLoaderTracker.getLoader();
-        if (loader != null) {
-            result.add(loader);
-        }
-
-        result.addSecondary(JavaBrooklynClassLoadingContext.create(mgmt));
-        return result;
-    }
-
-    /**
-     * @deprecated since 0.7.0 only for legacy catalog items which provide a 
non-osgi loader; see {@link #newDefault(ManagementContext)}
-     */ @Deprecated
-    public static BrooklynClassLoadingContext newClassLoadingContext(@Nullable 
ManagementContext mgmt, String catalogItemId, Collection<CatalogBundle> 
libraries, ClassLoader customClassLoader) {
-        BrooklynClassLoadingContextSequential result = new 
BrooklynClassLoadingContextSequential(mgmt);
-
-        if (libraries!=null && !libraries.isEmpty()) {
-            result.add(new OsgiBrooklynClassLoadingContext(mgmt, 
catalogItemId, libraries));
-        }
-
-        BrooklynClassLoadingContext loader = BrooklynLoaderTracker.getLoader();
-        if (loader != null) {
-            result.add(loader);
-        }
-
-        result.addSecondary(JavaBrooklynClassLoadingContext.create(mgmt, 
customClassLoader));
-        return result;
-    }
-
-    /**
-     * Registers all bundles with the management context's OSGi framework.
-     */
-    public static void installLibraries(ManagementContext managementContext, 
@Nullable Collection<CatalogBundle> libraries) {
-        if (libraries == null) return;
-
-        ManagementContextInternal mgmt = (ManagementContextInternal) 
managementContext;
-        if (!libraries.isEmpty()) {
-            Maybe<OsgiManager> osgi = mgmt.getOsgiManager();
-            if (osgi.isAbsent()) {
-                throw new IllegalStateException("Unable to load bundles 
"+libraries+" because OSGi is not running.");
-            }
-            if (log.isDebugEnabled()) 
-                logDebugOrTraceIfRebinding(log, 
-                    "Loading bundles in {}: {}", 
-                    new Object[] {managementContext, Joiner.on(", 
").join(libraries)});
-            Stopwatch timer = Stopwatch.createStarted();
-            for (CatalogBundle bundleUrl : libraries) {
-                osgi.get().registerBundle(bundleUrl);
-            }
-            if (log.isDebugEnabled()) 
-                logDebugOrTraceIfRebinding(log, 
-                    "Registered {} bundles in {}",
-                    new Object[]{libraries.size(), 
Time.makeTimeStringRounded(timer)});
-        }
-    }
-
-    /** Scans the given {@link BrooklynClassLoadingContext} to detect what 
catalog item id is in effect. */
-    public static String 
getCatalogItemIdFromLoader(BrooklynClassLoadingContext loader) {
-        if (loader instanceof OsgiBrooklynClassLoadingContext) {
-            return 
((OsgiBrooklynClassLoadingContext)loader).getCatalogItemId();
-        } else {
-            return null;
-        }
-    }
-
-    public static void setCatalogItemIdOnAddition(Entity entity, 
BrooklynObject itemBeingAdded) {
-        if (entity.getCatalogItemId()!=null) {
-            if (itemBeingAdded.getCatalogItemId()==null) {
-                if (log.isDebugEnabled())
-                    BrooklynLogging.log(log, 
BrooklynLogging.levelDebugOrTraceIfReadOnly(entity),
-                        "Catalog item addition: "+entity+" from 
"+entity.getCatalogItemId()+" applying its catalog item ID to "+itemBeingAdded);
-                
((BrooklynObjectInternal)itemBeingAdded).setCatalogItemId(entity.getCatalogItemId());
-            } else {
-                if 
(!itemBeingAdded.getCatalogItemId().equals(entity.getCatalogItemId())) {
-                    // not a problem, but something to watch out for
-                    log.debug("Cross-catalog item detected: "+entity+" from 
"+entity.getCatalogItemId()+" has "+itemBeingAdded+" from 
"+itemBeingAdded.getCatalogItemId());
-                }
-            }
-        } else if (itemBeingAdded.getCatalogItemId()!=null) {
-            if (log.isDebugEnabled())
-                BrooklynLogging.log(log, 
BrooklynLogging.levelDebugOrTraceIfReadOnly(entity),
-                    "Catalog item addition: "+entity+" without catalog item ID 
has "+itemBeingAdded+" from "+itemBeingAdded.getCatalogItemId());
-        }
-    }
-
-    @Beta
-    public static void logDebugOrTraceIfRebinding(Logger log, String message, 
Object ...args) {
-        if (RebindTracker.isRebinding())
-            log.trace(message, args);
-        else
-            log.debug(message, args);
-    }
-
-    public static boolean looksLikeVersionedId(String versionedId) {
-        if (versionedId==null) return false;
-        int fi = versionedId.indexOf(VERSION_DELIMITER);
-        if (fi<0) return false;
-        int li = versionedId.lastIndexOf(VERSION_DELIMITER);
-        if (li!=fi) {
-            // if multiple colons, we say it isn't a versioned reference; the 
prefix in that case must understand any embedded versioning scheme
-            // this fixes the case of:  http://localhost:8080
-            return false;
-        }
-        String candidateVersion = versionedId.substring(li+1);
-        if (!candidateVersion.matches("[0-9]+(|(\\.|_).*)")) {
-            // version must start with a number, followed if by anything with 
full stop or underscore before any other characters
-            // e.g.  foo:1  or foo:1.1  or foo:1_SNAPSHOT all supported, but 
not e.g. foo:bar (or chef:cookbook or docker:my/image)
-            return false;
-        }
-        return true;
-    }
-
-    public static String getIdFromVersionedId(String versionedId) {
-        if (versionedId == null) return null;
-        int versionDelimiterPos = versionedId.lastIndexOf(VERSION_DELIMITER);
-        if (versionDelimiterPos != -1) {
-            return versionedId.substring(0, versionDelimiterPos);
-        } else {
-            return null;
-        }
-    }
-
-    public static String getVersionFromVersionedId(String versionedId) {
-        if (versionedId == null) return null;
-        int versionDelimiterPos = versionedId.lastIndexOf(VERSION_DELIMITER);
-        if (versionDelimiterPos != -1) {
-            return versionedId.substring(versionDelimiterPos+1);
-        } else {
-            return null;
-        }
-    }
-
-    public static String getVersionedId(String id, String version) {
-        // TODO null checks
-        return id + VERSION_DELIMITER + version;
-    }
-
-    //TODO Don't really like this, but it's better to have it here than on the 
interface to keep the API's 
-    //surface minimal. Could instead have the interface methods accept 
VerionedId object and have the helpers
-    //construct it as needed.
-    public static CatalogItem<?, ?> 
getCatalogItemOptionalVersion(ManagementContext mgmt, String versionedId) {
-        if (versionedId == null) return null;
-        if (looksLikeVersionedId(versionedId)) {
-            String id = getIdFromVersionedId(versionedId);
-            String version = getVersionFromVersionedId(versionedId);
-            return mgmt.getCatalog().getCatalogItem(id, version);
-        } else {
-            return mgmt.getCatalog().getCatalogItem(versionedId, 
BrooklynCatalog.DEFAULT_VERSION);
-        }
-    }
-
-    public static boolean isBestVersion(ManagementContext mgmt, 
CatalogItem<?,?> item) {
-        CatalogItem<?, ?> bestVersion = getCatalogItemOptionalVersion(mgmt, 
item.getSymbolicName());
-        if (bestVersion==null) return false;
-        return (bestVersion.getVersion().equals(item.getVersion()));
-    }
-
-    public static <T,SpecT> CatalogItem<T, SpecT> 
getCatalogItemOptionalVersion(ManagementContext mgmt, Class<T> type, String 
versionedId) {
-        if (looksLikeVersionedId(versionedId)) {
-            String id = getIdFromVersionedId(versionedId);
-            String version = getVersionFromVersionedId(versionedId);
-            return mgmt.getCatalog().getCatalogItem(type, id, version);
-        } else {
-            return mgmt.getCatalog().getCatalogItem(type, versionedId, 
BrooklynCatalog.DEFAULT_VERSION);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogXmlSerializer.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/catalog/internal/CatalogXmlSerializer.java 
b/core/src/main/java/brooklyn/catalog/internal/CatalogXmlSerializer.java
deleted file mode 100644
index dbfd3fc..0000000
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogXmlSerializer.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.catalog.internal;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import brooklyn.basic.AbstractBrooklynObject;
-import brooklyn.catalog.internal.CatalogClasspathDo.CatalogScanningModes;
-import brooklyn.util.xstream.EnumCaseForgivingSingleValueConverter;
-import brooklyn.util.xstream.XmlSerializer;
-
-public class CatalogXmlSerializer extends XmlSerializer<Object> {
-
-    @SuppressWarnings("deprecation")
-    public CatalogXmlSerializer() {
-        xstream.addDefaultImplementation(ArrayList.class, Collection.class);
-        
-        xstream.aliasType("list", List.class);
-        xstream.aliasType("map", Map.class);
-
-        xstream.useAttributeFor("id", String.class);
-
-        xstream.aliasType("catalog", CatalogDto.class);
-        xstream.useAttributeFor(CatalogDto.class, "url");
-        xstream.addImplicitCollection(CatalogDto.class, "catalogs", 
CatalogDto.class);
-        xstream.addImplicitCollection(CatalogDto.class, "entries", 
CatalogTemplateItemDto.class);
-        xstream.addImplicitCollection(CatalogDto.class, "entries", 
CatalogEntityItemDto.class);
-        xstream.addImplicitCollection(CatalogDto.class, "entries", 
CatalogPolicyItemDto.class);
-        xstream.addImplicitCollection(CatalogDto.class, "entries", 
CatalogLocationItemDto.class);
-
-        xstream.aliasType("template", CatalogTemplateItemDto.class);
-        xstream.aliasType("entity", CatalogEntityItemDto.class);
-        xstream.aliasType("policy", CatalogPolicyItemDto.class);
-        xstream.aliasType("location", CatalogPolicyItemDto.class);
-
-        xstream.aliasField("registeredType", CatalogItemDtoAbstract.class, 
"symbolicName");
-        xstream.aliasAttribute(CatalogItemDtoAbstract.class, "displayName", 
"name");
-        xstream.useAttributeFor(CatalogItemDtoAbstract.class, "type");
-        xstream.useAttributeFor(CatalogItemDtoAbstract.class, "version");
-        xstream.aliasType("bundle", CatalogBundleDto.class);
-        xstream.registerConverter(new 
CatalogBundleConverter(xstream.getMapper(), xstream.getReflectionProvider()));
-
-        xstream.useAttributeFor(CatalogClasspathDto.class, "scan");
-        xstream.addImplicitCollection(CatalogClasspathDto.class, "entries", 
"entry", String.class);
-        xstream.registerConverter(new 
EnumCaseForgivingSingleValueConverter(CatalogScanningModes.class));
-
-        // Note: the management context is being omitted because it is 
unnecessary for
-        // representations of catalogues generated with this serializer.
-        xstream.omitField(AbstractBrooklynObject.class, "managementContext");
-        xstream.omitField(AbstractBrooklynObject.class, "_legacyConstruction");
-        xstream.omitField(AbstractBrooklynObject.class, 
"hasWarnedOfNoManagementContextWhenPersistRequested");
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/config/BrooklynServerConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/config/BrooklynServerConfig.java 
b/core/src/main/java/brooklyn/config/BrooklynServerConfig.java
index 2eae73e..e884bdd 100644
--- a/core/src/main/java/brooklyn/config/BrooklynServerConfig.java
+++ b/core/src/main/java/brooklyn/config/BrooklynServerConfig.java
@@ -26,10 +26,10 @@ import java.net.URI;
 import java.util.Map;
 
 import org.apache.brooklyn.api.management.ManagementContext;
+import org.apache.brooklyn.core.catalog.internal.CatalogInitialization;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import brooklyn.catalog.internal.CatalogInitialization;
 import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.util.guava.Maybe;
 import brooklyn.util.os.Os;
@@ -103,7 +103,7 @@ public class BrooklynServerConfig {
     /** @deprecated since 0.7.0 replaced by {@link CatalogInitialization}; 
also note, default removed 
      * (it was overridden anyway, and in almost all cases the new behaviour is 
still the default behaviour) */
     @Deprecated
-    public static final ConfigKey<brooklyn.catalog.CatalogLoadMode> 
CATALOG_LOAD_MODE = 
ConfigKeys.newConfigKey(brooklyn.catalog.CatalogLoadMode.class,
+    public static final 
ConfigKey<org.apache.brooklyn.core.catalog.CatalogLoadMode> CATALOG_LOAD_MODE = 
ConfigKeys.newConfigKey(org.apache.brooklyn.core.catalog.CatalogLoadMode.class,
             "brooklyn.catalog.mode",
             "The mode the management context should use to load the catalog 
when first starting");
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java 
b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
index 2860b82..1d21a7e 100644
--- a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
+++ b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
@@ -53,6 +53,7 @@ import org.apache.brooklyn.api.policy.EnricherSpec;
 import org.apache.brooklyn.api.policy.EntityAdjunct;
 import org.apache.brooklyn.api.policy.Policy;
 import org.apache.brooklyn.api.policy.PolicySpec;
+import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
 import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.apache.brooklyn.core.internal.BrooklynInitialization;
 import org.apache.brooklyn.core.management.internal.EffectorUtils;
@@ -64,7 +65,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import brooklyn.basic.AbstractBrooklynObject;
-import brooklyn.catalog.internal.CatalogUtils;
 import brooklyn.config.BrooklynLogging;
 import brooklyn.config.ConfigKey;
 import brooklyn.config.ConfigKey.HasConfigKey;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/BasicCatalogItemRebindSupport.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/entity/rebind/BasicCatalogItemRebindSupport.java 
b/core/src/main/java/brooklyn/entity/rebind/BasicCatalogItemRebindSupport.java
index 0d4d92c..52e87a6 100644
--- 
a/core/src/main/java/brooklyn/entity/rebind/BasicCatalogItemRebindSupport.java
+++ 
b/core/src/main/java/brooklyn/entity/rebind/BasicCatalogItemRebindSupport.java
@@ -20,10 +20,10 @@ package brooklyn.entity.rebind;
 
 import org.apache.brooklyn.api.entity.rebind.RebindContext;
 import org.apache.brooklyn.api.mementos.CatalogItemMemento;
+import org.apache.brooklyn.core.catalog.internal.CatalogItemDtoAbstract;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import brooklyn.catalog.internal.CatalogItemDtoAbstract;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.flags.FlagUtils;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/RebindContextLookupContext.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/entity/rebind/RebindContextLookupContext.java 
b/core/src/main/java/brooklyn/entity/rebind/RebindContextLookupContext.java
index 81b1321..e132a51 100644
--- a/core/src/main/java/brooklyn/entity/rebind/RebindContextLookupContext.java
+++ b/core/src/main/java/brooklyn/entity/rebind/RebindContextLookupContext.java
@@ -34,8 +34,7 @@ import org.apache.brooklyn.api.management.ManagementContext;
 import org.apache.brooklyn.api.mementos.BrooklynMementoPersister.LookupContext;
 import org.apache.brooklyn.api.policy.Enricher;
 import org.apache.brooklyn.api.policy.Policy;
-
-import brooklyn.catalog.internal.CatalogUtils;
+import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
 
 /** Looks in {@link RebindContext} <i>and</i> {@link ManagementContext} to 
find entities, locations, etc. */
 public class RebindContextLookupContext implements LookupContext {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java 
b/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
index 8c6a402..1164fff 100644
--- a/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
+++ b/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
@@ -64,6 +64,8 @@ import org.apache.brooklyn.api.mementos.TreeNode;
 import 
org.apache.brooklyn.api.mementos.BrooklynMementoManifest.EntityMementoManifest;
 import org.apache.brooklyn.api.policy.Enricher;
 import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.core.catalog.internal.CatalogInitialization;
+import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
 import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import 
org.apache.brooklyn.core.management.internal.BrooklynObjectManagementMode;
 import 
org.apache.brooklyn.core.management.internal.BrooklynObjectManagerInternal;
@@ -72,8 +74,6 @@ import 
org.apache.brooklyn.core.management.internal.LocationManagerInternal;
 import org.apache.brooklyn.core.management.internal.ManagementContextInternal;
 import org.apache.brooklyn.core.management.internal.ManagementTransitionMode;
 
-import brooklyn.catalog.internal.CatalogInitialization;
-import brooklyn.catalog.internal.CatalogUtils;
 import brooklyn.config.BrooklynLogging;
 import brooklyn.config.BrooklynLogging.LoggingLevel;
 import brooklyn.enricher.basic.AbstractEnricher;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/dto/BasicCatalogItemMemento.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/entity/rebind/dto/BasicCatalogItemMemento.java 
b/core/src/main/java/brooklyn/entity/rebind/dto/BasicCatalogItemMemento.java
index b2a3068..e46a6af 100644
--- a/core/src/main/java/brooklyn/entity/rebind/dto/BasicCatalogItemMemento.java
+++ b/core/src/main/java/brooklyn/entity/rebind/dto/BasicCatalogItemMemento.java
@@ -26,9 +26,8 @@ import java.util.Map;
 import org.codehaus.jackson.annotate.JsonAutoDetect;
 import org.apache.brooklyn.api.catalog.CatalogItem;
 import org.apache.brooklyn.api.mementos.CatalogItemMemento;
-
-import brooklyn.catalog.internal.BasicBrooklynCatalog;
-import brooklyn.catalog.internal.CatalogUtils;
+import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
+import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Objects;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java 
b/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
index 3525d84..dbe6e26 100644
--- a/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
+++ b/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
@@ -49,8 +49,8 @@ import org.apache.brooklyn.api.mementos.PolicyMemento;
 import org.apache.brooklyn.api.policy.Enricher;
 import org.apache.brooklyn.api.policy.EntityAdjunct;
 import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.core.catalog.internal.CatalogItemDo;
 
-import brooklyn.catalog.internal.CatalogItemDo;
 import brooklyn.config.ConfigKey;
 import brooklyn.enricher.basic.AbstractEnricher;
 import brooklyn.entity.basic.EntityDynamicType;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
 
b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
index be51b44..b5ca9c1 100644
--- 
a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
+++ 
b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
@@ -48,9 +48,9 @@ import 
org.apache.brooklyn.api.mementos.BrooklynMementoPersister;
 import org.apache.brooklyn.api.mementos.BrooklynMementoRawData;
 import org.apache.brooklyn.api.mementos.CatalogItemMemento;
 import org.apache.brooklyn.api.mementos.Memento;
+import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
 import 
org.apache.brooklyn.core.management.classloading.ClassLoaderFromBrooklynClassLoadingContext;
 
-import brooklyn.catalog.internal.CatalogUtils;
 import brooklyn.config.ConfigKey;
 import brooklyn.config.StringConfigMap;
 import brooklyn.entity.basic.ConfigKeys;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/persister/CatalogItemLibrariesConverter.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/entity/rebind/persister/CatalogItemLibrariesConverter.java
 
b/core/src/main/java/brooklyn/entity/rebind/persister/CatalogItemLibrariesConverter.java
index 7a7481c..4cf6310 100644
--- 
a/core/src/main/java/brooklyn/entity/rebind/persister/CatalogItemLibrariesConverter.java
+++ 
b/core/src/main/java/brooklyn/entity/rebind/persister/CatalogItemLibrariesConverter.java
@@ -23,8 +23,7 @@ import java.util.Collection;
 
 import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
 import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemLibraries;
-
-import brooklyn.catalog.internal.CatalogBundleDto;
+import org.apache.brooklyn.core.catalog.internal.CatalogBundleDto;
 
 import com.thoughtworks.xstream.converters.Converter;
 import com.thoughtworks.xstream.converters.MarshallingContext;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/persister/XmlMementoSerializer.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/entity/rebind/persister/XmlMementoSerializer.java 
b/core/src/main/java/brooklyn/entity/rebind/persister/XmlMementoSerializer.java
index fe5a677..99ee2e5 100644
--- 
a/core/src/main/java/brooklyn/entity/rebind/persister/XmlMementoSerializer.java
+++ 
b/core/src/main/java/brooklyn/entity/rebind/persister/XmlMementoSerializer.java
@@ -42,12 +42,12 @@ import 
org.apache.brooklyn.api.management.classloading.BrooklynClassLoadingConte
 import org.apache.brooklyn.api.mementos.BrooklynMementoPersister.LookupContext;
 import org.apache.brooklyn.api.policy.Enricher;
 import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.core.catalog.internal.CatalogBundleDto;
+import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
 import 
org.apache.brooklyn.core.management.classloading.BrooklynClassLoadingContextSequential;
 import 
org.apache.brooklyn.core.management.classloading.ClassLoaderFromBrooklynClassLoadingContext;
 import 
org.apache.brooklyn.core.management.classloading.JavaBrooklynClassLoadingContext;
 
-import brooklyn.catalog.internal.CatalogBundleDto;
-import brooklyn.catalog.internal.CatalogUtils;
 import brooklyn.entity.basic.BasicParameterType;
 import brooklyn.entity.effector.EffectorAndBody;
 import brooklyn.entity.effector.EffectorTasks.EffectorBodyTaskFactory;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/util/ResourceUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/ResourceUtils.java 
b/core/src/main/java/brooklyn/util/ResourceUtils.java
index 9b23b7a..338b223 100644
--- a/core/src/main/java/brooklyn/util/ResourceUtils.java
+++ b/core/src/main/java/brooklyn/util/ResourceUtils.java
@@ -40,6 +40,8 @@ import java.util.regex.Pattern;
 
 import org.apache.brooklyn.api.management.ManagementContext;
 import 
org.apache.brooklyn.api.management.classloading.BrooklynClassLoadingContext;
+import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
+import 
org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker;
 import org.apache.brooklyn.core.internal.BrooklynInitialization;
 import 
org.apache.brooklyn.core.management.classloading.JavaBrooklynClassLoadingContext;
 import org.apache.http.HttpEntity;
@@ -51,10 +53,6 @@ import org.apache.http.client.methods.HttpGet;
 import org.apache.http.util.EntityUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
-import brooklyn.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker;
-import brooklyn.catalog.internal.CatalogUtils;
-
 import org.apache.brooklyn.location.basic.SshMachineLocation;
 
 import brooklyn.util.collections.MutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogLoadMode.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogLoadMode.java 
b/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogLoadMode.java
new file mode 100644
index 0000000..8e9d6d5
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogLoadMode.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.catalog;
+
+import org.apache.brooklyn.core.catalog.internal.CatalogInitialization;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.entity.rebind.persister.PersistMode;
+
+/** @deprecated since 0.7.0 replaced by {@link CatalogInitialization} */
+@Deprecated
+public enum CatalogLoadMode {
+    /**
+     * The server will load its initial catalog from the URL configured in
+     * {@link brooklyn.config.BrooklynServerConfig#BROOKLYN_CATALOG_URL} and 
will
+     * disregard existing persisted state.
+     */
+    LOAD_BROOKLYN_CATALOG_URL,
+
+    /**
+     * The server will load its initial catalog from previously persisted 
state,
+     * and will behave as {@link #LOAD_BROOKLYN_CATALOG_URL} if no state 
exists.
+     */
+    LOAD_BROOKLYN_CATALOG_URL_IF_NO_PERSISTED_STATE,
+
+    /**
+     * The server will load its initial catalog from previously persisted 
state.
+     * The catalog will be empty if no previous state exists.
+     */
+    LOAD_PERSISTED_STATE;
+
+    /**
+     * @return A catalog load mode suitable for the given persistence mode:
+     * <ul>
+     * <li>disabled: {@link #LOAD_BROOKLYN_CATALOG_URL}</li>
+     * <li>rebind: {@link #LOAD_PERSISTED_STATE}</li>
+     * <li>auto or clean: {@link 
#LOAD_BROOKLYN_CATALOG_URL_IF_NO_PERSISTED_STATE}</li>
+     * </ul>
+     */
+    public static CatalogLoadMode forPersistMode(PersistMode m) {
+        // Clean case relies on the persistence directory being cleaned and 
rebind manager
+        // believing the store to be empty.
+        switch (m) {
+        case DISABLED:
+            return LOAD_BROOKLYN_CATALOG_URL;
+        case AUTO:
+        case CLEAN:
+            return LOAD_BROOKLYN_CATALOG_URL_IF_NO_PERSISTED_STATE;
+        case REBIND:
+            return LOAD_PERSISTED_STATE;
+        default:
+            LoggerFactory.getLogger(CatalogLoadMode.class)
+                    .warn("Unhandled persistence mode {}. Catalog defaulting 
to {}", m.name(), LOAD_BROOKLYN_CATALOG_URL.name());
+            return LOAD_BROOKLYN_CATALOG_URL;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogPredicates.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogPredicates.java 
b/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogPredicates.java
new file mode 100644
index 0000000..654fe56
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogPredicates.java
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.catalog;
+
+import javax.annotation.Nullable;
+
+import org.apache.brooklyn.api.catalog.CatalogItem;
+import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType;
+import org.apache.brooklyn.api.entity.Application;
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.entity.proxying.EntitySpec;
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.api.location.LocationSpec;
+import org.apache.brooklyn.api.management.ManagementContext;
+import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.api.policy.PolicySpec;
+import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
+import org.apache.brooklyn.core.management.entitlement.Entitlements;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+
+public class CatalogPredicates {
+
+    public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> 
isCatalogItemType(final CatalogItemType ciType) {
+        return new Predicate<CatalogItem<T,SpecT>>() {
+            @Override
+            public boolean apply(@Nullable CatalogItem<T,SpecT> item) {
+                return (item != null) && item.getCatalogItemType()==ciType;
+            }
+        };
+    }
+
+    public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> deprecated(final 
boolean deprecated) {
+        return new Predicate<CatalogItem<T,SpecT>>() {
+            @Override
+            public boolean apply(@Nullable CatalogItem<T,SpecT> item) {
+                return (item != null) && item.isDeprecated() == deprecated;
+            }
+        };
+    }
+
+    public static final Predicate<CatalogItem<Application,EntitySpec<? extends 
Application>>> IS_TEMPLATE = 
+            CatalogPredicates.<Application,EntitySpec<? extends 
Application>>isCatalogItemType(CatalogItemType.TEMPLATE);
+    public static final Predicate<CatalogItem<Entity,EntitySpec<?>>> IS_ENTITY 
= 
+            
CatalogPredicates.<Entity,EntitySpec<?>>isCatalogItemType(CatalogItemType.ENTITY);
+    public static final Predicate<CatalogItem<Policy,PolicySpec<?>>> IS_POLICY 
= 
+            
CatalogPredicates.<Policy,PolicySpec<?>>isCatalogItemType(CatalogItemType.POLICY);
+    public static final Predicate<CatalogItem<Location,LocationSpec<?>>> 
IS_LOCATION = 
+            
CatalogPredicates.<Location,LocationSpec<?>>isCatalogItemType(CatalogItemType.LOCATION);
+    
+    public static final Function<CatalogItem<?,?>,String> 
ID_OF_ITEM_TRANSFORMER = new Function<CatalogItem<?,?>, String>() {
+        @Override @Nullable
+        public String apply(@Nullable CatalogItem<?,?> input) {
+            if (input==null) return null;
+            return input.getId();
+        }
+    };
+
+    /** @deprecated since 0.7.0 use {@link #displayName(Predicate)} */
+    @Deprecated
+    public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> name(final 
Predicate<? super String> filter) {
+        return displayName(filter);
+    }
+
+    public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> displayName(final 
Predicate<? super String> filter) {
+        return new Predicate<CatalogItem<T,SpecT>>() {
+            @Override
+            public boolean apply(@Nullable CatalogItem<T,SpecT> item) {
+                return (item != null) && filter.apply(item.getDisplayName());
+            }
+        };
+    }
+
+    @Deprecated
+    public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> 
registeredTypeName(final Predicate<? super String> filter) {
+        return symbolicName(filter);
+    }
+
+    public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> symbolicName(final 
Predicate<? super String> filter) {
+        return new Predicate<CatalogItem<T,SpecT>>() {
+            @Override
+            public boolean apply(@Nullable CatalogItem<T,SpecT> item) {
+                return (item != null) && filter.apply(item.getSymbolicName());
+            }
+        };
+    }
+
+    public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> javaType(final 
Predicate<? super String> filter) {
+        return new Predicate<CatalogItem<T,SpecT>>() {
+            @Override
+            public boolean apply(@Nullable CatalogItem<T,SpecT> item) {
+                return (item != null) && filter.apply(item.getJavaType());
+            }
+        };
+    }
+
+    public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> xml(final 
Predicate<? super String> filter) {
+        return new Predicate<CatalogItem<T,SpecT>>() {
+            @Override
+            public boolean apply(@Nullable CatalogItem<T,SpecT> item) {
+                return (item != null) && filter.apply(item.toXmlString());
+            }
+        };
+    }
+
+    public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> 
entitledToSee(final ManagementContext mgmt) {
+        return new Predicate<CatalogItem<T,SpecT>>() {
+            @Override
+            public boolean apply(@Nullable CatalogItem<T,SpecT> item) {
+                return (item != null) && 
+                    Entitlements.isEntitled(mgmt.getEntitlementManager(), 
Entitlements.SEE_CATALOG_ITEM, item.getCatalogItemId());
+            }
+        };
+    }
+ 
+    public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> 
isBestVersion(final ManagementContext mgmt) {
+        return new Predicate<CatalogItem<T,SpecT>>() {
+            @Override
+            public boolean apply(@Nullable CatalogItem<T,SpecT> item) {
+                return CatalogUtils.isBestVersion(mgmt, item);
+            }
+        };
+    }
+
+}
\ No newline at end of file

Reply via email to