diff --git a/src/main/java/org/apache/ws/scout/registry/BulkResponseImpl.java b/src/main/java/org/apache/ws/scout/registry/BulkResponseImpl.java
index e6e24d9..d727b98 100644
--- a/src/main/java/org/apache/ws/scout/registry/BulkResponseImpl.java
+++ b/src/main/java/org/apache/ws/scout/registry/BulkResponseImpl.java
@@ -66,10 +66,10 @@
      *
      * So my interpretation is return null if result avail, and empty collection otherwise
      *
-     * @return
+     * @return Collection Exceptions
      * @throws JAXRException
      */
-    public Collection<Exception> getExceptions() throws JAXRException
+    public Collection getExceptions() throws JAXRException
     {
         return (this.exceptions.size() == 0 ? null : exceptions);
     }
diff --git a/src/main/java/org/apache/ws/scout/registry/BusinessLifeCycleManagerImpl.java b/src/main/java/org/apache/ws/scout/registry/BusinessLifeCycleManagerImpl.java
index 76d68e4..9667e6b 100644
--- a/src/main/java/org/apache/ws/scout/registry/BusinessLifeCycleManagerImpl.java
+++ b/src/main/java/org/apache/ws/scout/registry/BusinessLifeCycleManagerImpl.java
@@ -99,7 +99,7 @@
      *
      * @param keys
      * @param objectType
-     * @return
+     * @return BulkResponse object
      * @throws JAXRException
      */
     public BulkResponse deleteObjects(Collection keys, String objectType) throws JAXRException {
diff --git a/src/main/java/org/apache/ws/scout/registry/BusinessQueryManagerImpl.java b/src/main/java/org/apache/ws/scout/registry/BusinessQueryManagerImpl.java
index c73bad7..614bea0 100644
--- a/src/main/java/org/apache/ws/scout/registry/BusinessQueryManagerImpl.java
+++ b/src/main/java/org/apache/ws/scout/registry/BusinessQueryManagerImpl.java
@@ -113,7 +113,7 @@
      * @param specifications
      * @param externalIdentifiers
      * @param externalLinks
-     * @return
+     * @return BulkResponse
      * @throws JAXRException
      */
     public BulkResponse findOrganizations(Collection findQualifiers,
@@ -266,7 +266,7 @@
      *
      * @param findQualifiers
      * @param namePatterns
-     * @return
+     * @return ClassificationScheme
      * @throws JAXRException
      */
     public ClassificationScheme findClassificationSchemeByName(Collection findQualifiers,
@@ -610,7 +610,7 @@
      * @param namePatterns
      * @param classifications
      * @param specificationa
-     * @return
+     * @return BulkResponse
      * @throws JAXRException
      */
     public BulkResponse findServices(Key orgKey, Collection findQualifiers,
@@ -767,7 +767,7 @@
      *  TODO - need to figure out what the set are.  This is just to get some
      *  basic functionality
      *
-     * @return
+     * @return BulkResponse
      * @throws JAXRException
      */
     public BulkResponse getRegistryObjects() throws JAXRException
diff --git a/src/main/java/org/apache/ws/scout/registry/Constants.java b/src/main/java/org/apache/ws/scout/registry/Constants.java
index 406991d..07dcda5 100644
--- a/src/main/java/org/apache/ws/scout/registry/Constants.java
+++ b/src/main/java/org/apache/ws/scout/registry/Constants.java
@@ -57,7 +57,7 @@
 	 * tModel defines the UNSPSC (United Nations Standard Products and Services
 	 * Code System) version 3.1 product taxonomy. <B>This taxonomy has been
 	 * superceeded by the Universal Standard Products and Services
-	 * Classification (see {@link #UNSPSC_73_TMODEL_KEY}) taxonomy.
+	 * Classification (see {@link #TMODEL_UNSPSC_73_TMODEL_KEY}) taxonomy.
 	 */
 	public static final String TMODEL_UNSPSC_TMODEL_KEY = "UUID:DB77450D-9FA8-45D4-A7BC-04411D14E384";
 
diff --git a/src/main/java/org/apache/ws/scout/registry/IRegistry.java b/src/main/java/org/apache/ws/scout/registry/IRegistry.java
index 360afc4..22fc400 100644
--- a/src/main/java/org/apache/ws/scout/registry/IRegistry.java
+++ b/src/main/java/org/apache/ws/scout/registry/IRegistry.java
@@ -40,7 +40,7 @@
 	URI getInquiryURI();
 	
 	/**
-	 * @param inquiryURL The inquiryURL to set.
+	 * @param uri The inquiry uri to set.
 	 */
 	void setInquiryURI(URI uri);
 	
@@ -50,7 +50,7 @@
 	URI getPublishURI();	
 	
 	/**
-	 * @param publishURL The publishURL to set.
+	 * @param uri The publish uri to set.
 	 */
 	void setPublishURI(URI uri);
 	
diff --git a/src/main/java/org/apache/ws/scout/registry/LifeCycleManagerImpl.java b/src/main/java/org/apache/ws/scout/registry/LifeCycleManagerImpl.java
index 6cb32ac..2022ed2 100644
--- a/src/main/java/org/apache/ws/scout/registry/LifeCycleManagerImpl.java
+++ b/src/main/java/org/apache/ws/scout/registry/LifeCycleManagerImpl.java
@@ -406,7 +406,7 @@
      *
      * @param keys
      * @param objectType
-     * @return
+     * @return BulkResponse
      * @throws JAXRException
      */
     public abstract BulkResponse deleteObjects(Collection keys, String objectType) throws JAXRException;
@@ -418,7 +418,7 @@
 
     /**
      * @param repositoryItem
-     * @return
+     * @return ExtrinsicObject
      * @throws JAXRException
      */
     public ExtrinsicObject createExtrinsicObject(DataHandler repositoryItem) throws JAXRException {
diff --git a/src/main/java/org/apache/ws/scout/registry/RegistryException.java b/src/main/java/org/apache/ws/scout/registry/RegistryException.java
index b182361..09aa957 100644
--- a/src/main/java/org/apache/ws/scout/registry/RegistryException.java
+++ b/src/main/java/org/apache/ws/scout/registry/RegistryException.java
@@ -124,7 +124,11 @@
 
   /**
    * Constructs a RegistryException instance.
-   * @param ex the original exception
+   * 
+   * @param fCode
+   * @param fString
+   * @param fActor
+   * @param dispRpt
    */
   public RegistryException(String fCode,String fString,String fActor,DispositionReport dispRpt)
   {
diff --git a/src/main/java/org/apache/ws/scout/registry/RegistryImpl.java b/src/main/java/org/apache/ws/scout/registry/RegistryImpl.java
index da27eb0..c531e8b 100644
--- a/src/main/java/org/apache/ws/scout/registry/RegistryImpl.java
+++ b/src/main/java/org/apache/ws/scout/registry/RegistryImpl.java
@@ -220,7 +220,7 @@
 	/**
 	 * 
 	 * @param uddiRequest
-	 * @return
+	 * @return String
 	 * @throws RegistryException
 	 */
 	public String execute(String uddiRequest, String urltype)
diff --git a/src/main/java/org/apache/ws/scout/util/ScoutUddiJaxrHelper.java b/src/main/java/org/apache/ws/scout/util/ScoutUddiJaxrHelper.java
index 0d214e6..f20fe56 100644
--- a/src/main/java/org/apache/ws/scout/util/ScoutUddiJaxrHelper.java
+++ b/src/main/java/org/apache/ws/scout/util/ScoutUddiJaxrHelper.java
@@ -524,10 +524,9 @@
 
    /**
     * Classifications - going to assume all are external since UDDI does not use "Concepts".
-    * 
     * @param categoryBag
-    * @param destinationObj
     * @param lifeCycleManager
+    * @return Collection Classifications
     * @throws JAXRException
     */
    public static Collection getClassifications(CategoryBag categoryBag, LifeCycleManager lifeCycleManager) 
@@ -570,13 +569,13 @@
    
    /**
     * External Identifiers
-    * 
     * @param identifierBag
-    * @param destinationObj
     * @param lifeCycleManager
+    * @return Collection ExternalIdentifier
     * @throws JAXRException
     */
-   public static Collection<ExternalIdentifier> getExternalIdentifiers(IdentifierBag identifierBag, LifeCycleManager lifeCycleManager) 
+   
+   public static Collection getExternalIdentifiers(IdentifierBag identifierBag, LifeCycleManager lifeCycleManager) 
    throws JAXRException {
 	  Collection<ExternalIdentifier> extidentifiers = null;
       if (identifierBag != null) {
diff --git a/src/test/java/org/apache/ws/scout/Creator.java b/src/test/java/org/apache/ws/scout/Creator.java
index eacc208..d4279f9 100644
--- a/src/test/java/org/apache/ws/scout/Creator.java
+++ b/src/test/java/org/apache/ws/scout/Creator.java
@@ -125,7 +125,7 @@
      * Creates a Classficiation for the default dummy classificationScheme.
      * 
      * @param classificationScheme
-     * @return
+     * @return JAXR Classification
      * @throws JAXRException
      */
     public Classification createClassification(ClassificationScheme classificationScheme) throws JAXRException
