diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/config/Config.java b/incubator/api/src/main/java/org/onosproject/incubator/net/config/Config.java
index 1789bac..dcdb008 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/config/Config.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/config/Config.java
@@ -243,6 +243,7 @@
      * @param name         property name
      * @param defaultValue default value if property not set
      * @param enumClass    the enum class
+     * @param <E>          type of enum
      * @return property value or default value
      */
     protected <E extends Enum<E>> E get(String name, E defaultValue, Class<E> enumClass) {
@@ -254,6 +255,7 @@
      *
      * @param name  property name
      * @param value new value or null to clear the property
+     * @param <E>   type of enum
      * @return self
      */
     protected <E extends Enum> Config<S> setOrClear(String name, E value) {
@@ -268,9 +270,9 @@
     /**
      * Gets the specified array property as a list of items.
      *
-     * @param name property name
+     * @param name     property name
      * @param function mapper from string to item
-     * @param <T> type of item
+     * @param <T>      type of item
      * @return list of items
      */
     protected <T> List<T> getList(String name, Function<String, T> function) {
@@ -284,9 +286,9 @@
      * Sets the specified property as an array of items in a given collection or
      * clears it if null is given.
      *
-     * @param name propertyName
+     * @param name       propertyName
      * @param collection collection of items
-     * @param <T> type of items
+     * @param <T>        type of items
      * @return self
      */
     protected <T> Config<S> setOrClear(String name, Collection<T> collection) {
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/config/NetworkConfigService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/config/NetworkConfigService.java
index 5a89ccb..85cc6ee 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/config/NetworkConfigService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/config/NetworkConfigService.java
@@ -28,7 +28,7 @@
  */
 @Beta
 public interface NetworkConfigService
-    extends ListenerService<NetworkConfigEvent, NetworkConfigListener> {
+        extends ListenerService<NetworkConfigEvent, NetworkConfigListener> {
 
     /**
      * Returns the set of subject classes for which configuration may be
@@ -57,7 +57,8 @@
     /**
      * Returns the configuration class with the specified key.
      *
-     * @param configKey subject class name
+     * @param subjectKey subject class key
+     * @param configKey  subject class name
      * @return subject class
      */
     Class<? extends Config> getConfigClass(String subjectKey, String configKey);
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/config/NetworkConfigStore.java b/incubator/api/src/main/java/org/onosproject/incubator/net/config/NetworkConfigStore.java
index cd9e229..96f9c59 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/config/NetworkConfigStore.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/config/NetworkConfigStore.java
@@ -44,7 +44,7 @@
      *
      * @param configClass configuration class
      * @param <S>         type of subject
-     * @param <C>          type of configuration
+     * @param <C>         type of configuration
      * @return configuration factory or null
      */
     <S, C extends Config<S>> ConfigFactory<S, C> getConfigFactory(Class<C> configClass);
@@ -112,6 +112,7 @@
      * @param json        raw JSON node containing the configuration data
      * @param <S>         type of subject
      * @param <C>         type of configuration
+     * @return configuration object
      */
     <S, C extends Config<S>> C applyConfig(S subject, Class<C> configClass,
                                            ObjectNode json);
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/config/SubjectFactory.java b/incubator/api/src/main/java/org/onosproject/incubator/net/config/SubjectFactory.java
index 3f7e6dc..7e6448b 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/config/SubjectFactory.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/config/SubjectFactory.java
@@ -67,8 +67,9 @@
     /**
      * Creates a configuration subject from its key image.
      *
+     * @param subjectKey subject class key
      * @return configuration subject
      */
-    public abstract S createSubject(String key);
+    public abstract S createSubject(String subjectKey);
 
 }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/package-info.java b/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/package-info.java
new file mode 100644
index 0000000..506f1fc
--- /dev/null
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Various basic builtin network configurations.
+ */
+package org.onosproject.incubator.net.config.basics;
\ No newline at end of file
