diff --git a/publish.sh b/publish.sh
index af75d6d..d691608 100644
--- a/publish.sh
+++ b/publish.sh
@@ -74,18 +74,18 @@
     # Usage: parseHandoff handoff_file
     handoff_file=$1
     handoff_error_string1="Error: Invalid handoff_file name: '${handoff_file}'"
-    handoff_error_string2="                   Was expecting: 'handoff-file-<PROC>-<BRANCH>-<QUALIFIER>.dat'"
+    handoff_error_string2="                   Was expecting: 'handoff-file-<PROC>-<BRANCH_NM>-<QUALIFIER>.dat'"
     handoff_content_error1="Error: Invalid handoff_file contents: '`cat ${handoff_file}`'"
     handoff_content_error2="                       Was expecting: 'extract.loc=<BUILD_ARCHIVE_LOC> host=<HOST> maven.tag=<VERSION>-<MILESTONE>' "
 
-    ## Parse handoff_file name for BRANCH, QUALIFIER, and PROC (Procedure: Build/Test)
-    BRANCH=`echo ${handoff_file} | cut -s -d'-' -f4`
-    if [ "${BRANCH}" = "" ] ; then
-        echo "BRANCH ${handoff_error_string1}"
-        echo "       ${handoff_error_string2}"
-        BRANCH_ERR=true
+    ## Parse handoff_file name for BRANCH_NM, QUALIFIER, and PROC (Procedure: Build/Test)
+    BRANCH_NM=`echo ${handoff_file} | cut -s -d'-' -f4`
+    if [ "${BRANCH_NM}" = "" ] ; then
+        echo "BRANCH_NM ${handoff_error_string1}"
+        echo "          ${handoff_error_string2}"
+        BRANCH_NM_ERR=true
     else
-        BRANCH_ERR=false
+        BRANCH_NM_ERR=false
     fi
     QUALIFIER=`echo ${handoff_file} | cut -s -d'-' -f5,6 | cut -d'.' -f1`
     if [ "${QUALIFIER}" = "" ] ; then
@@ -147,7 +147,7 @@
     ## Parse MAVEN_TAG for VERSION
     VERSION=`echo ${MAVEN_TAG} | cut -d'-' -f1`
     if [ "${VERSION}" = "" ] ; then
-        echo "VERSION Error: Something wrong with MAVEN_TAG ('${MAVEN_TAG}' should be VERSION-MILESTONE}!"
+        echo "VERSION Error: Something wrong with MAVEN_TAG ('${MAVEN_TAG}' should be VERSION-MILESTONE)!"
         ## If parsing MAVEN_TAG failed, try parsing BUILD_ARCHIVE_LOC
         VERSION=`echo ${BUILD_ARCHIVE_LOC} | cut -d'/' -f6`
         if [ "${VERSION}" = "" ] ; then
@@ -158,6 +158,13 @@
         fi
     else
         VERSION_ERR=false
+        ## Parse VERSION for BRANCH
+        BRANCH=`echo ${VERSION} | cut -d'.' -f1-2`
+        if [ "${BRANCH}" = "" ] ; then
+            echo "BRANCH Error: Something wrong with VERSION ('${VERSION}' should be M.m.b)!"
+        else
+            BRANCH_ERR=false
+        fi
     fi
     ## Parse handoff_file directory listing for TIMESTAMP
     TIMESTAMP=`ls -l --time-style=+%Y%m%d%H%M.%S ${handoff_file} | cut -d' ' -f6`
@@ -170,6 +177,7 @@
     if [ "${DEBUG}" = "true" ] ; then
         echo "parseHandoff: Parsed values:"
         echo "   BRANCH           = '${BRANCH}'"
+        echo "   BRANCH_NM        = '${BRANCH_NM}'"
         echo "   QUALIFIER        = '${QUALIFIER}'"
         echo "   PROC             = '${PROC}'"
         echo "   BLDDATE          = '${BLDDATE}'"
@@ -194,8 +202,9 @@
     #  10 - p2 to pub
     #   1 - maven to pub (should be set if 100 = true, but only need eclipselink.jar and bundle.zip)
 
-    #reset PUB_SCOPE_EXPECTED for this handoff instance
+    #reset PUB_SCOPE_EXPECTED and PUB_SCOPE_COMPLETED for this handoff instance
     PUB_SCOPE_EXPECTED=0
+    PUB_SCOPE_COMPLETED=0
 
     # search for zip files in src meaning need to publish artifacts
     srcZipCount=`ls ${src} | grep -c [.]zip$`
@@ -395,65 +404,122 @@
     version=$4
     qualifier=$5
 
-    error_cnt=0
+    echo " "
+    echo "Preparing to publish Maven repository...."
 
     # Define SYSTEM variables needed
     BldDepsDir=${HOME_DIR}/bld_deps/${branch}
+    if [ ! -d "${BldDepsDir}" ] ; then
+        echo "${BldDepsDir} not found!"
+    fi
 
-    # unzip necessary files to 'upload dir'/plugins
-    srczip=`ls ${src}/eclipselink-src*`
-    installzip=`ls ${src}/eclipselink-${version}*`
-    nosqlpluginzip=`ls ${src}/eclipselink-plugins-nosql*`
-    pluginzip=`ls ${src}/eclipselink-plugins-${version}*`
-    if [ -f ${pluginzip} ] ; then
-       unzip -o ${pluginzip} -d ${src}/maven
-    else
-       echo "${pluginzip} not found!"
-       error_cnt=`expr ${error_cnt} + 1`
-    fi
-    if [ -f ${nosqlpluginzip} ] ; then
-       unzip -o ${nosqlpluginzip} -d ${src}/maven
-    else
-       echo "${nosqlpluginzip} not found!"
-       error_cnt=`expr ${error_cnt} + 1`
-    fi
-    if [ -f ${src}/eclipselink.jar ] ; then
-       cp ${src}/eclipselink.jar ${src}/maven/.
-    else
-       if [ -f ${installzip} ] ; then
-          unzip -o -j ${installzip} eclipselink/jlib/eclipselink.jar -d ${src}/maven
-       else
-       echo "${installzip} not found!"
-          error_cnt=`expr ${error_cnt} + 1`
-       fi
-    fi
-    if [ -f ${srczip} ] ; then
-       cp ${srczip} ${src}/maven/eclipselink-src.zip
-    else
-       echo "${srczip} not found!"
-       error_cnt=`expr ${error_cnt} + 1`
-    fi
-    ls ${src}/maven
+    #verify src, root dest, and needed variables exist before proceeding
+    if [ \( -d "${src}" \) -a \( -d "${BldDepsDir}" \) -a \( ! "${branch}" = "" \) -a \( ! "${blddate}" = "" \) -a \( ! "${version}" = "" \) -a \( ! "${qualifier}" = "" \) ] ; then
+        if [ "${DEBUG}" = "true" ] ; then
+            echo "publishMavenRepo: Required locations and data verified... proceeding..."
+            echo "   src       = '${src}'"
+            echo "   branch    = '${branch}'"
+            echo "   blddate   = '${blddate}'"
+            echo "   version   = '${version}'"
+            echo "   qualifier = '${qualifier}'"
+        fi
 
-    #Invoke Antscript for Maven upload
-    arguments="-Dbuild.deps.dir=${BldDepsDir} -Dcustom.tasks.lib=${RELENG_REPO}/ant_customizations.jar -Dversion.string=${version}.${qualifier}"
-    arguments="${arguments} -Drelease.version=${version} -Dbuild.date=${blddate} -Dbuild.type=SNAPSHOT -Dbundle.dir=${src}/maven"
+        error_cnt=0
 
-    # Run Ant from ${exec_location} using ${buildfile} ${arguments}
-    echo "ant ${RELENG_REPO}/upload${branch}ToMaven.xml ${arguments}"
-    ant -f ${RELENG_REPO}/upload${branch}ToMaven.xml ${arguments}
-    if [ "$?" = "0" ]
-    then
-       # if successful, cleanup and set "COMPLETE"
-       echo "Maven publish complete."
+        # unzip necessary files to 'upload dir'/plugins
+        ## start with nosql which isn't in older branches
+        if [ ! "`ls ${src} | grep -c nosql`" = "0" ] ; then
+            nosqlpluginzip=`ls ${src}/eclipselink-plugins-nosql*`
+            if [ -f ${nosqlpluginzip} ] ; then
+               unzip -o -q ${nosqlpluginzip} -d ${src}/maven
+            fi
+        else
+            echo "No nosql installer zip found! Assuming older branch, skipping..."
+        fi
+        ## The rest should not have any issues
+        srczip=`ls ${src}/eclipselink-src*`
+        installzip=`ls ${src}/eclipselink-${version}*`
+        pluginzip=`ls ${src}/eclipselink-plugins-${version}*`
+        if [ "${DEBUG}" = "true" ] ; then
+            echo "Expanding ${pluginzip}..."
+        fi
+        if [ -f ${pluginzip} ] ; then
+           unzip -o -q ${pluginzip} -d ${src}/maven
+        else
+           echo "${pluginzip} not found!"
+           error_cnt=`expr ${error_cnt} + 1`
+        fi
+        if [ "${DEBUG}" = "true" ] ; then
+            echo "Prepping an eclipselink.jar..."
+        fi
+        if [ -f ${src}/eclipselink.jar ] ; then
+            if [ "${DEBUG}" = "true" ] ; then
+                echo "   Getting from exported files..."
+            fi
+            cp ${src}/eclipselink.jar ${src}/maven/.
+        else
+            if [ "${DEBUG}" = "true" ] ; then
+                echo "    Expanding from ${installzip}..."
+            fi
+            if [ -f ${installzip} ] ; then
+                unzip -o -j -q ${installzip} eclipselink/jlib/eclipselink.jar -d ${src}/maven
+            else
+                echo "${installzip} not found!"
+                error_cnt=`expr ${error_cnt} + 1`
+            fi
+        fi
+        if [ "${DEBUG}" = "true" ] ; then
+            echo "Prepping a src.zip from ${srczip}..."
+        fi
+        if [ -f ${srczip} ] ; then
+            cp ${srczip} ${src}/maven/eclipselink-src.zip
+        else
+            echo "${srczip} not found!"
+            error_cnt=`expr ${error_cnt} + 1`
+        fi
+        if [ "${DEBUG}" = "true" ] ; then
+            ls ${src}/maven
+        fi
+
+        #Invoke Antscript for Maven upload
+        arguments="-Dbuild.deps.dir=${BldDepsDir} -Dcustom.tasks.lib=${RELENG_REPO}/ant_customizations.jar -Dversion.string=${version}.${qualifier}"
+        arguments="${arguments} -Drelease.version=${version} -Dbuild.date=${blddate} -Dbuild.type=SNAPSHOT -Dbundle.dir=${src}/maven"
+
+        # Run Ant from ${exec_location} using ${buildfile} ${arguments}
+        echo "ant ${RELENG_REPO}/upload${branch}ToMaven.xml ${arguments}"
+        if [ -f ${RELENG_REPO}/upload${branch}ToMaven.xml ] ; then
+            ant -f ${RELENG_REPO}/upload${branch}ToMaven.xml ${arguments}
+            if [ "$?" = "0" ]
+            then
+                echo "Maven publish complete."
+            else
+                # if encountered error, increment error_cnt
+                error_cnt=`expr ${error_cnt} + 1`
+            fi
+        else
+            echo "${RELENG_REPO}/upload${branch}ToMaven.xml doesn't exist. Aborting ant run..."
+            error_cnt=`expr ${error_cnt} + 1`
+        fi
+        if [ "$error_cnt" = "0" ]
+        then
+            # if successful, cleanup and set "COMPLETE"
+            PUB_SCOPE_COMPLETED=`expr ${PUB_SCOPE_COMPLETED} + 1`
+            if [ "${DEBUG}" = "true" ] ; then
+                echo "Maven Publish completed. PUB_SCOPE_COMPLETED = '${PUB_SCOPE_COMPLETED}'"
+            fi
+        fi
     else
-       # if encountered error, increment error_cnt
-       error_cnt=`expr ${error_cnt} + 1`
-    fi
-    if [ "$error_cnt" = "0" ]
-    then
-       # if successful, cleanup and set "COMPLETE"
-       PUB_SCOPE_COMPLETED=`expr ${PUB_SCOPE_COMPLETED} + 1`
+        # Something is not right! skipping.."
+        echo "    Required locations and data failed to verify... skipping Maven publishing...."
+        ERROR=true
+        if [ "${DEBUG}" = "true" ] ; then
+            echo "publishMavenRepo: Required locations and data:"
+            echo "   src       = '${src}'"
+            echo "   branch    = '${branch}'"
+            echo "   blddate   = '${blddate}'"
+            echo "   version   = '${version}'"
+            echo "   qualifier = '${qualifier}'"
+        fi
     fi
 }
 
@@ -486,6 +552,8 @@
 
         #count number of pages (html) exported, and copy them preserving date
         srcHtmlCount=`ls ${src} | grep -c [.]html$`
+        #track qualifier pattern in case multiple builds in one day
+        srcQualified=`ls ${src} | grep -m1 [.]html$ | cut -d'.' -f4`
         if [ ! "${srcHtmlCount}" = "0" ] ; then
             if [ "${DEBUG}" = "true" ] ; then
                 echo "publishTestArtifacts: Copying ${srcHtmlCount} html(s)"
@@ -494,7 +562,8 @@
             fi
             cp --preserve=timestamps ${src}/*.html ${downloadDest}/.
         fi
-        destHtmlCount=`ls ${downloadDest} | grep -c [.]html$`
+        # check number of appropriately qualified destination files
+        destHtmlCount=`ls ${downloadDest}/*${srcQualified}* | grep -c [.]html$`
         if [ "${DEBUG}" = "true" ] ; then
             echo "publishTestArtifacts: ${destHtmlCount} htmls copied."
         fi
@@ -563,14 +632,19 @@
            publishP2Repo ${BUILD_ARCHIVE_LOC} ${DNLD_DIR} ${VERSION} ${QUALIFIER}
        fi
        if [ "${PUB_SCOPE_EXPECTED}" -ge 1 ] ; then
-           #publishMavenRepo ${BUILD_ARCHIVE_LOC} ${BRANCH} ${BLDDATE} ${VERSION} ${QUALIFIER}
-           echo "run maven if ready... (not yet. need to isolate branch specific dependencies)"
+           publishMavenRepo ${BUILD_ARCHIVE_LOC} ${BRANCH} ${BLDDATE} ${VERSION} ${QUALIFIER}
        fi
        if [ "${PUB_SCOPE_EXPECTED}" = "${PUB_SCOPE_COMPLETED}" ] ; then
-          echo "Success: can now delete '${handoff}' and '${BUILD_ARCHIVE_LOC}'"
+           echo "Success: now deleting '${handoff}'"
+           echo "TODO: also should delete '${BUILD_ARCHIVE_LOC}' but need to make sure tests export to different area first"
+           rm ${handoff}
        else
-          echo "Full processing failed: Cannot remove '${handoff}' and '${BUILD_ARCHIVE_LOC}'"
-          echo "    Deletion aborted..."
+           if [ "${DEBUG}" = "true" ] ; then
+               echo "PUB_SCOPE_EXPECTED  = '${PUB_SCOPE_EXPECTED}'"
+               echo "PUB_SCOPE_COMPLETED = '${PUB_SCOPE_COMPLETED}'"
+           fi
+           echo "Full processing failed: Cannot remove '${handoff}' and '${BUILD_ARCHIVE_LOC}'"
+           echo "    Deletion aborted..."
        fi
     else
        publishTestArtifacts ${BUILD_ARCHIVE_LOC} ${DNLD_DIR} ${VERSION} ${BLDDATE} ${HOST}
