diff --git a/core/net/src/main/java/org/onosproject/net/config/impl/BasicNetworkConfigs.java b/core/net/src/main/java/org/onosproject/net/config/impl/BasicNetworkConfigs.java
index a5d06a8..3cf0c0c 100644
--- a/core/net/src/main/java/org/onosproject/net/config/impl/BasicNetworkConfigs.java
+++ b/core/net/src/main/java/org/onosproject/net/config/impl/BasicNetworkConfigs.java
@@ -17,7 +17,6 @@
 
 import com.google.common.collect.ImmutableSet;
 import org.onosproject.core.CoreService;
-import org.onosproject.net.config.basics.PortDescriptionsConfig;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.HostId;
@@ -31,8 +30,10 @@
 import org.onosproject.net.config.basics.BasicRegionConfig;
 import org.onosproject.net.config.basics.BasicUiTopoLayoutConfig;
 import org.onosproject.net.config.basics.DeviceAnnotationConfig;
+import org.onosproject.net.config.basics.HostAnnotationConfig;
 import org.onosproject.net.config.basics.InterfaceConfig;
 import org.onosproject.net.config.basics.PortAnnotationConfig;
+import org.onosproject.net.config.basics.PortDescriptionsConfig;
 import org.onosproject.net.config.basics.SubjectFactories;
 import org.onosproject.net.region.RegionId;
 import org.onosproject.ui.model.topo.UiTopoLayoutId;
@@ -138,6 +139,14 @@
                 public DeviceAnnotationConfig createConfig() {
                     return new DeviceAnnotationConfig();
                 }
+            },
+            new ConfigFactory<HostId, HostAnnotationConfig>(HOST_SUBJECT_FACTORY,
+                    HostAnnotationConfig.class,
+                    HostAnnotationConfig.CONFIG_KEY) {
+                @Override
+                public HostAnnotationConfig createConfig() {
+                    return new HostAnnotationConfig();
+                }
             }
 
     );
diff --git a/core/net/src/main/java/org/onosproject/net/host/impl/HostAnnotationOperator.java b/core/net/src/main/java/org/onosproject/net/host/impl/HostAnnotationOperator.java
new file mode 100644
index 0000000..06ce4d6
--- /dev/null
+++ b/core/net/src/main/java/org/onosproject/net/host/impl/HostAnnotationOperator.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed 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.onosproject.net.host.impl;
+
+import org.onosproject.net.DefaultAnnotations;
+import org.onosproject.net.DefaultAnnotations.Builder;
+import org.onosproject.net.HostId;
+import org.onosproject.net.config.Config;
+import org.onosproject.net.config.HostConfigOperator;
+import org.onosproject.net.config.NetworkConfigService;
+import org.onosproject.net.config.basics.HostAnnotationConfig;
+import org.onosproject.net.host.DefaultHostDescription;
+import org.onosproject.net.host.HostDescription;
+
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * Implementations of {@link HostConfigOperator} to weave
+ * annotations added via {@link HostAnnotationConfig}.
+ */
+public class HostAnnotationOperator implements HostConfigOperator {
+
+    private NetworkConfigService networkConfigService;
+
+    /**
+     * Creates {@link HostAnnotationOperator} instance.
+     */
+    public HostAnnotationOperator() {
+    }
+
+    HostAnnotationOperator(NetworkConfigService networkConfigService) {
+        bindService(networkConfigService);
+    }
+
+    @Override
+    public void bindService(NetworkConfigService networkConfigService) {
+        this.networkConfigService = networkConfigService;
+    }
+
+    private HostAnnotationConfig lookupConfig(HostId hostId) {
+        if (networkConfigService == null) {
+            return null;
+        }
+        return networkConfigService.getConfig(hostId, HostAnnotationConfig.class);
+    }
+
+    @Override
+    public HostDescription combine(HostId hostId, HostDescription descr,
+                                   Optional<Config> prevConfig) {
+        HostAnnotationConfig cfg = lookupConfig(hostId);
+        if (cfg == null) {
+            return descr;
+        }
+        Map<String, String> annotations = cfg.annotations();
+
+        Builder builder = DefaultAnnotations.builder();
+        builder.putAll(descr.annotations());
+        if (prevConfig.isPresent()) {
+            HostAnnotationConfig prevHostAnnotationConfig = (HostAnnotationConfig) prevConfig.get();
+            for (String key : prevHostAnnotationConfig.annotations().keySet()) {
+                if (!annotations.containsKey(key)) {
+                    builder.remove(key);
+                }
+            }
+        }
+        builder.putAll(annotations);
+
+        return DefaultHostDescription.copyReplacingAnnotation(descr, builder.build());
+    }
+
+}
diff --git a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
index 1136951..97e3cb4 100644
--- a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
+++ b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
@@ -26,10 +26,12 @@
 import org.onosproject.net.Host;
 import org.onosproject.net.HostId;
 import org.onosproject.net.HostLocation;
+import org.onosproject.net.config.Config;
 import org.onosproject.net.config.NetworkConfigEvent;
 import org.onosproject.net.config.NetworkConfigListener;
 import org.onosproject.net.config.NetworkConfigService;
 import org.onosproject.net.config.basics.BasicHostConfig;
+import org.onosproject.net.config.basics.HostAnnotationConfig;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.edge.EdgePortService;
 import org.onosproject.net.host.HostAdminService;
@@ -57,6 +59,7 @@
 import org.slf4j.Logger;
 
 import java.util.Dictionary;
+import java.util.Optional;
 import java.util.Set;
 
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -138,10 +141,12 @@
     private boolean greedyLearningIpv6 = HM_GREEDY_LEARNING_IPV6_DEFAULT;
 
     private HostMonitor monitor;
+    private HostAnnotationOperator hostAnnotationOperator;
 
 
     @Activate
     public void activate(ComponentContext context) {
+        hostAnnotationOperator = new HostAnnotationOperator(networkConfigService);
         store.setDelegate(delegate);
         eventDispatcher.addSink(HostEvent.class, listenerRegistry);
         cfgService.registerProperties(getClass());
@@ -352,6 +357,19 @@
             if (!allowDuplicateIps) {
                 removeDuplicates(hostId, hostDescription);
             }
+
+            BasicHostConfig cfg = networkConfigService.getConfig(hostId, BasicHostConfig.class);
+            if (!isAllowed(cfg)) {
+                log.warn("Host {} is not allowed to be added into the contol domain", hostId);
+                return;
+            }
+
+            hostDescription = BasicHostOperator.combine(cfg, hostDescription);
+            HostAnnotationConfig annoConfig = networkConfigService.getConfig(hostId, HostAnnotationConfig.class);
+            if (annoConfig != null) {
+                hostDescription = hostAnnotationOperator.combine(hostId, hostDescription, Optional.of(annoConfig));
+            }
+
             store.createOrUpdateHost(provider().id(), hostId,
                                      hostDescription, replaceIps);
 
@@ -507,7 +525,8 @@
         public boolean isRelevant(NetworkConfigEvent event) {
             return (event.type() == NetworkConfigEvent.Type.CONFIG_ADDED
                     || event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED)
-                    && (event.configClass().equals(BasicHostConfig.class));
+                    && (event.configClass().equals(BasicHostConfig.class)
+                    || event.configClass().equals(HostAnnotationConfig.class));
         }
 
         @Override
@@ -521,7 +540,7 @@
 
             if (!isAllowed(cfg)) {
                 kickOutBadHost(hostId);
-            } else {
+            } else if (event.configClass().equals(BasicHostConfig.class)) {
                 Host host = getHost(hostId);
                 HostDescription desc =
                         (host == null) ? null : BasicHostOperator.descriptionOf(host);
@@ -529,6 +548,20 @@
                 if (desc != null) {
                     he = store.createOrUpdateHost(host.providerId(), hostId, desc, false);
                 }
+            } else if (event.configClass().equals(HostAnnotationConfig.class)) {
+                Host host = getHost(hostId);
+                HostProvider hp = getProvider(host.providerId());
+                HostDescription desc = (host == null) ? null : BasicHostOperator.descriptionOf(host);
+                Optional<Config> prevConfig = event.prevConfig();
+                log.debug("Host annotations: {} prevconfig {} desc {}", hostId, prevConfig, desc);
+                desc = hostAnnotationOperator.combine(hostId, desc, prevConfig);
+                if (desc != null && hp != null) {
+                    log.debug("Host annotations update - updated host description :{}", desc.toString());
+                    he = store.createOrUpdateHost(hp.id(), hostId, desc, false);
+                    if (he != null && he.subject() != null) {
+                        log.debug("Host annotations update - Host Event : {}", he.subject().annotations());
+                    }
+                }
             }
 
             if (he != null) {
