diff --git a/policy-management/src/main/server-gen/bin/features b/policy-management/src/main/server-gen/bin/features
index e21562f..5918bf3 100644
--- a/policy-management/src/main/server-gen/bin/features
+++ b/policy-management/src/main/server-gen/bin/features
@@ -27,20 +27,59 @@
 #   └── features/
 #        └── <feature-name>*/
 #            └── [config]/
-#            │   └── <config-file>*
+#            │   └── <config-file>+
 #            └── lib/
 #            │   └── [dependencies]/
-#            │   │   └── <dependent-jar>*
+#            │   │   └── <dependent-jar>+
 #            │   └── feature/
 #            │       └── <feature-jar>
+#            └── [db]/
+#            │   └── <db-name>/+
+#            │       └── sql/
+#            │           └── <sql-scripts>*
 #            └── [install]
 #                └── [enable]
 #                └── [disable]
-#                └── [other-future-operations]
-#                └── [other-files]
+#                └── [other-directories-or-files]
 #
-#   <feature-name> directory should not have the "feature-" prefix.
-#   <config-file> preferable with "feature-" prefix.
+# notes:  [] = optional , * = 0 or more , + = 1 or more
+#   <feature-name> directory without "feature-" prefix.
+#   [config]       feature configuration directory that contains all configuration
+#                  needed for this features
+#   [config]/<config-file>  preferable named with "feature-<feature-name>" prefix to
+#                  precisely match it against the exact features, source code, and 
+#                  associated wiki page for configuration details.
+#   lib            jar libraries needed by this features
+#   lib/[dependencies]  3rd party jar dependencies not provided by base installation
+#                  of pdp-d that are necessary for <feature-name> to operate
+#                  correctly.
+#   lib/feature    the single feature jar that implements the feature.
+#   [db]           database directory, if the feature contains sql.
+#   [db]/<db-name> database to which underlying sql scripts should be applied against.
+#                  ideally, <db-name> = <feature-name> so it is easily to associate
+#                  the db data with a feature itself.   Ideally, since a feature is
+#                  a somewhat independent isolated unit of functionality,the <db-name>
+#                  database ideally isolates all its data.
+#   [db]/<db-name>/sql  directory with all the sql scripts.
+#   [db]/<db-name>/sql/<sql-scripts>  for this featuresql scripts
+#                  upgrade scripts should be suffixed with ".upgrade.sql"
+#                  downgrade scripts should be suffixed with ".downgrade.sql"
+#   [install]      custom installation directory where custom enable or disable scripts
+#                  and other free form data is included to be used for the enable and 
+#                  and disable scripts.
+#   [install]/[enable] enable script executed when the enable operation is invoked in
+#                  the feature.
+#   [install]/[disable] disable script executed when the disable operation is invoked in
+#                  the feature.
+#   [install]/[other-directories-or-files] other executables, or data that can be used
+#                  by the feature for any of its operations.   The content is determined
+#                  by the feature designer.
+#  
+# Operations:
+#   enable : enables 1) dependencies, 2) configuration, 3) database, and 4) feature 
+#   disable: disables 1) dependencies, 2) configuration, and 3) feature 
+#               * note: no operation on the DB.
+#   status : status of a feature
 #
 # Example:
 #
@@ -75,6 +114,7 @@
 
 LIB=${POLICY_HOME}/lib
 CONFIG=${POLICY_HOME}/config
+DB=${POLICY_HOME}/etc/db
 FEATURES=${POLICY_HOME}/features
 
 if [[ ! ( -d "${LIB}" && -x "${LIB}" ) ]]; then
@@ -92,12 +132,18 @@
 	exit 3
 fi
 
+if [[ ! -d "${DB}" ]]; then
+	mkdir -p "${DB}"
+fi
+
 # relative per Feature Directory Paths
 
 FEATURE_DEPS="lib/dependencies"
 FEATURE_LIB="lib/feature"
 FEATURE_CONFIG="config"
 FEATURE_INSTALL="install"
+FEATURE_DB="db"
+FEATURE_SQL="sql"
 
 featureJars=$(find "${FEATURES}" -name "feature-*.jar" -type f -exec basename {} \; 2> /dev/null)
 if [[ -z ${featureJars} ]]; then
@@ -188,11 +234,11 @@
 }
 
 # ##########################################################
-# depEnableAnalysis(featureName):  
+# enableDepAnalysis (featureName):  
 #                   reports on potential dependency conflicts
 #   featureName: name of the feature
 # ##########################################################
-function depEnableAnalysis()
+function enableDepAnalysis ()
 {
 	if [[ ${DEBUG} == y ]]; then
 		echo "-- ${FUNCNAME[0]} $@ --"
@@ -235,11 +281,11 @@
 }
 
 # ##########################################################
-# configEnableAnalysis(featureName):  
+# enableConfigAnalysis (featureName):  
 #                   reports on potential dependency conflicts
 #   featureName: name of the feature
 # ##########################################################
-function configEnableAnalysis()
+function enableConfigAnalysis ()
 {
 	if [[ ${DEBUG} == y ]]; then
 		echo "-- ${FUNCNAME[0]} $@ --"
@@ -265,6 +311,58 @@
 }
 
 # ##########################################################
+# enableDbAnalysis (featureName):  
+#                   reports on potential db access problems
+#   featureName: name of the feature
+# ##########################################################
+function enableDbAnalysis()
+{
+	if [[ ${DEBUG} == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+	
+	local featureName="$1"
+	local featureSqls
+	
+	if [[ -z ${featureName} ]]; then
+		echo "WARN: no feature name"
+		return 1
+	fi
+	
+	featureSqls=$(ls "${FEATURES}"/"${featureName}"/"${FEATURE_DB}"/*/sql/*.upgrade.sql 2> /dev/null)
+	if [[ -z ${featureSqls} ]]; then
+		return 0
+	fi
+	
+	source "${POLICY_HOME}"/etc/profile.d/base.conf
+	if [[ -z ${SQL_HOST} ]] || [[ -z ${SQL_USER} ]] || [[ -z ${SQL_PASSWORD} ]]; then
+		echo "ERROR: not existing configuration to contact the database"
+		return 2
+	fi
+	
+	# check reachability
+	
+	if which mysqlshow; then
+		if ! mysqlshow -u"${SQL_USER}" -p"${SQL_PASSWORD}" -h"${SQL_HOST}" > /dev/null 2>&1; then
+			echo "ERROR: No DB connectivity to ${SQL_HOST} for ${SQL_USER}"
+			return 3
+		else
+			echo "OK: DB connect to ${SQL_HOST} connectivity for ${SQL_USER}"
+		fi
+	else 
+		if ! ping -c2 -W2 "${SQL_HOST}"; then
+			echo "ERROR: database ${SQL_HOST} not reachable"
+			return 4
+		else
+			echo "OK: ping ${SQL_HOST} connectivity"
+		fi
+	fi
+	
+	return 0
+}
+
+# ##########################################################
 # enableFeatureDeps(featureName):  
 #                               enables feature dependencies
 #   featureName: name of the feature
@@ -320,6 +418,81 @@
 }
 
 # ##########################################################
+# enableFeatureDbSchema(featureName):  
+#        enables feature DB Schema configuration
+#   featureName: name of the feature
+# ##########################################################
+function enableFeatureDbSchema()
+{
+	if [[ ${DEBUG} == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+	
+	local featureName="$1"
+	local featureDbPath="$2"
+	local schemaName="$3"
+	
+	if [[ -z ${featureName} ]]; then
+		echo "WARN: no feature name"
+		return 1
+	fi
+	
+	if [[ -z ${featureDbPath} ]]; then
+		echo "WARN: no feature DB path"
+		return 2
+	fi
+	
+	if [[ -z ${schemaName} ]]; then
+		echo "WARN: no feature schema name"
+		return 3
+	fi
+	
+	sqlUpgradeScripts=$(ls "${featureDbPath%/}"/sql/*.upgrade.sql 2> /dev/null)
+	if [[ -z "${sqlUpgradeScripts}" ]]; then
+		return 0
+	fi
+	
+	for sqlUpgradeScript in ${sqlUpgradeScripts}; do
+		if [[ ! -d "${DB}"/"${schemaName}"/sql ]]; then
+			mkdir -p "${DB}"/"${schemaName}"/sql 2> /dev/null
+		fi		
+		ln -s -f "${sqlUpgradeScript}" "${DB}"/"${schemaName}"/sql/
+	done
+}
+
+# ##########################################################
+# enableFeatureDb(featureName):  
+#       enables DB feature configuration
+#   featureName: name of the feature
+# ##########################################################
+function enableFeatureDb()
+{
+	if [[ ${DEBUG} == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+	
+	local featureName="$1"
+	local featureDbs featureDbPath schemaName
+	
+	if [[ -z ${featureName} ]]; then
+		echo "WARN: no feature name"
+		return 1
+	fi
+	
+	featureDbs=$(ls -d "${FEATURES}"/"${featureName}"/"${FEATURE_DB}"/*/ 2> /dev/null)
+	for featureDbPath in ${featureDbs}; do
+		if [[ -z "$(ls "${featureDbPath%/}"/"${FEATURE_SQL}"/*.upgrade.sql 2> /dev/null)" ]]; then
+			continue
+		fi
+		schemaName=$(basename "${featureDbPath%/}")
+		enableFeatureDbSchema "${featureName}" "${featureDbPath%/}" "${schemaName}"
+	done
+}
+
+
+# ##########################################################
 # enableFeatureOp(featureName): 'enable' feature operation
 #   featureName: name of the feature
 # ##########################################################
@@ -372,12 +545,16 @@
 		return 2
 	fi
 	
-	if ! depEnableAnalysis "${featureName}"; then
-		return 3
+	if ! enableDepAnalysis  "${featureName}"; then
+		return "$?"
 	fi
 	
-	if ! configEnableAnalysis "${featureName}"; then
-		return 4
+	if ! enableConfigAnalysis  "${featureName}"; then
+		return "$?"
+	fi
+	
+	if ! enableDbAnalysis "${featureName}"; then
+		return "$?"
 	fi
 	
 	# enable feature itself
@@ -392,7 +569,9 @@
 
 	enableFeatureConfig "${featureName}" 
 	
-	# TODO: run feature install DB scripts if any
+	# enable db
+
+	enableFeatureDb "${featureName}"
 
 	# run custom enable if any
 
@@ -490,6 +669,36 @@
 }
 
 # ##########################################################
+# disableFeatureDb(featureName):  
+# 				disables feature db configuration
+#   featureName: name of the feature
+# ##########################################################
+function disableFeatureDb()
+{
+	if [[ ${DEBUG} == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+
+	local featureName="$1"
+	local featureSqls sqlDir schemaDir schemaName
+	
+	if [[ -z ${featureName} ]]; then
+		echo "WARN: no feature name"
+		return 1
+	fi
+	
+	featureSqls=$(find "${FEATURES}"/"${featureName}"/"${FEATURE_DB}"/*/sql/*.upgrade.sql -type f -maxdepth 1 2> /dev/null)
+	for featureSql in ${featureSqls}; do
+		sqlName=$(basename "${featureSql}")
+		sqlDir=$(dirname "${featureSql}")
+		schemaDir=$(dirname "${sqlDir}")
+		schemaName=$(basename "${schemaDir}")
+		rm -f "${DB}"/"${schemaName}"/"${FEATURE_SQL}"/"${sqlName}" 2> /dev/null
+	done
+}
+
+# ##########################################################
 # disableFeatureOp(featureName): 'enable' feature operation
 #   featureName: name of the feature
 # ##########################################################
@@ -550,10 +759,12 @@
 
 	disableFeatureConfig "${featureName}"
 	
-	# run feature uninstall DB scripts if any
-	# TODO: future
+	# disable DB SQL scripts if any
+
+	disableFeatureDb "${featureName}"
 
 	# run custom disable if any
+
 	disableFeatureOp "${featureName}"
 }
 
