diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/TransactionSubsystem.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/TransactionSubsystem.java
index 88311c5..ec1a386 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/TransactionSubsystem.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/TransactionSubsystem.java
@@ -21,7 +21,6 @@
 import java.util.concurrent.Callable;
 import java.util.logging.Logger;
 
-import org.apache.asterix.common.config.IPropertiesProvider;
 import org.apache.asterix.common.config.ReplicationProperties;
 import org.apache.asterix.common.config.TransactionProperties;
 import org.apache.asterix.common.exceptions.ACIDException;
@@ -36,7 +35,6 @@
 import org.apache.asterix.common.transactions.ITransactionManager;
 import org.apache.asterix.common.transactions.ITransactionSubsystem;
 import org.apache.asterix.common.utils.StorageConstants;
-import org.apache.asterix.common.utils.TransactionUtil;
 import org.apache.asterix.transaction.management.service.locking.ConcurrentLockManager;
 import org.apache.asterix.transaction.management.service.logging.LogManager;
 import org.apache.asterix.transaction.management.service.logging.LogManagerWithReplication;
@@ -70,8 +68,8 @@
         this.txnProperties = txnProperties;
         this.transactionManager = new TransactionManager(this);
         this.lockManager = new ConcurrentLockManager(txnProperties.getLockManagerShrinkTimer());
-        ReplicationProperties repProperties = ((IPropertiesProvider) asterixAppRuntimeContextProvider
-                .getAppContext()).getReplicationProperties();
+        ReplicationProperties repProperties = asterixAppRuntimeContextProvider.getAppContext()
+                .getReplicationProperties();
         IReplicationStrategy replicationStrategy = repProperties.getReplicationStrategy();
         final boolean replicationEnabled = repProperties.isParticipant(id);
 
@@ -91,7 +89,7 @@
         }
         this.recoveryManager = new RecoveryManager(this, serviceCtx);
 
-        if (TransactionUtil.PROFILE_MODE) {
+        if (this.txnProperties.isCommitProfilerEnabled()) {
             ecp = new EntityCommitProfiler(this, this.txnProperties.getCommitProfilerReportInterval());
             getAsterixAppRuntimeContextProvider().getThreadExecutor().submit(ecp);
         }
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/common/config/ConfigUsageTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/common/config/ConfigUsageTest.java
index 6a8dabf..acd4540 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/common/config/ConfigUsageTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/common/config/ConfigUsageTest.java
@@ -124,14 +124,15 @@
         // output header
         for (Column column : columns) {
             buf.append(column.ordinal() == 0 ? startDelim : midDelim);
-            pad(buf, StringUtils.capitalize(column.name().toLowerCase()), calculateMaxWidth(column, column.name()));
+            pad(buf, StringUtils.capitalize(column.name().toLowerCase()),
+                    align.computeIfAbsent(column, c -> false) ? calculateMaxWidth(column, column.name()) : 0);
         }
         buf.append(endDelim).append('\n');
 
         StringBuilder sepLine = new StringBuilder();
         for (Column column : columns) {
             sepLine.append(column.ordinal() == 0 ? startDelim : midDelim);
-            pad(sepLine, "", maxWidths.get(column), '-');
+            pad(sepLine, "", maxWidths.getOrDefault(column, 0), '-');
         }
         sepLine.append(endDelim).append('\n');
         buf.append(sepLine.toString().replace(' ', '-'));
@@ -143,9 +144,9 @@
                 for (Column column : columns) {
                     buf.append(column.ordinal() == 0 ? startDelim : midDelim);
                     if (column == Column.SECTION) {
-                        center(buf, extractValue(column, option), maxWidths.get(column));
+                        center(buf, extractValue(column, option), maxWidths.getOrDefault(column, 0));
                     } else {
-                        pad(buf, extractValue(column, option), maxWidths.get(column));
+                        pad(buf, extractValue(column, option), maxWidths.getOrDefault(column, 0));
                     }
                 }
                 buf.append(endDelim).append('\n');
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.adm
index bb241ba..aebf817 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1/cluster_state_1.1.adm
@@ -26,6 +26,7 @@
     "replication.log.buffer.pagesize" : 131072,
     "replication.max.remote.recovery.attempts" : 5,
     "replication.timeout" : 30,
+    "txn.commitprofiler.enabled" : false,
     "txn.commitprofiler.reportinterval" : 5,
     "txn.job.recovery.memorysize" : 67108864,
     "txn.lock.escalationthreshold" : 1000,
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.adm
index 3ee13c9..47ea9d6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_full/cluster_state_1_full.1.adm
@@ -26,6 +26,7 @@
     "replication.log.buffer.pagesize" : 131072,
     "replication.max.remote.recovery.attempts" : 5,
     "replication.timeout" : 30,
+    "txn.commitprofiler.enabled" : false,
     "txn.commitprofiler.reportinterval" : 5,
     "txn.job.recovery.memorysize" : 67108864,
     "txn.lock.escalationthreshold" : 1000,
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.adm
index 64d2f94..b39ccd7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cluster_state_1_less/cluster_state_1_less.1.adm
@@ -26,6 +26,7 @@
     "replication.log.buffer.pagesize" : 131072,
     "replication.max.remote.recovery.attempts" : 5,
     "replication.timeout" : 30,
+    "txn.commitprofiler.enabled" : false,
     "txn.commitprofiler.reportinterval" : 5,
     "txn.job.recovery.memorysize" : 67108864,
     "txn.lock.escalationthreshold" : 1000,
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/MessagingProperties.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/MessagingProperties.java
index 8097b5f..6a96546 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/MessagingProperties.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/MessagingProperties.java
@@ -30,15 +30,18 @@
 public class MessagingProperties extends AbstractProperties {
 
     public enum Option implements IOption {
-        MESSAGING_FRAME_SIZE(INTEGER_BYTE_UNIT, StorageUtil.getIntSizeInBytes(4, KILOBYTE)),
-        MESSAGING_FRAME_COUNT(INTEGER, 512);
+        MESSAGING_FRAME_SIZE(INTEGER_BYTE_UNIT, StorageUtil.getIntSizeInBytes(4, KILOBYTE),
+                "The frame size to be used for NC to NC messaging"),
+        MESSAGING_FRAME_COUNT(INTEGER, 512, "Number of reusable frames for NC to NC messaging");
 
         private final IOptionType type;
         private final Object defaultValue;
+        private final String description;
 
-        Option(IOptionType type, Object defaultValue) {
+        Option(IOptionType type, Object defaultValue, String description) {
             this.type = type;
             this.defaultValue = defaultValue;
+            this.description = description;
         }
 
         @Override
@@ -48,8 +51,7 @@
 
         @Override
         public String description() {
-            // TODO(mblow): add missing descriptions
-            return null;
+            return description;
         }
 
         @Override
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/ReplicationProperties.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/ReplicationProperties.java
index efa5296..1e79a26 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/ReplicationProperties.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/ReplicationProperties.java
@@ -39,20 +39,25 @@
 public class ReplicationProperties extends AbstractProperties {
 
     public enum Option implements IOption {
-        REPLICATION_MAX_REMOTE_RECOVERY_ATTEMPTS(INTEGER, 5),
+        REPLICATION_MAX_REMOTE_RECOVERY_ATTEMPTS(INTEGER, 5,
+                "The maximum number of times to attempt to recover from a replica on failure before giving up"),
         REPLICATION_LOG_BUFFER_PAGESIZE(INTEGER_BYTE_UNIT, StorageUtil.getIntSizeInBytes(128,
-                StorageUnit.KILOBYTE)),
-        REPLICATION_LOG_BUFFER_NUMPAGES(INTEGER, 8),
-        REPLICATION_LOG_BATCHSIZE(INTEGER_BYTE_UNIT, StorageUtil.getIntSizeInBytes(4, StorageUnit.KILOBYTE)),
-        REPLICATION_TIMEOUT(INTEGER, REPLICATION_TIME_OUT_DEFAULT),
+                StorageUnit.KILOBYTE), "The size in bytes of each log buffer page"),
+        REPLICATION_LOG_BUFFER_NUMPAGES(INTEGER, 8, "The number of log buffer pages"),
+        REPLICATION_LOG_BATCHSIZE(INTEGER_BYTE_UNIT, StorageUtil.getIntSizeInBytes(4, StorageUnit.KILOBYTE),
+                "The size in bytes to replicate in each batch"),
+        REPLICATION_TIMEOUT(INTEGER, REPLICATION_TIME_OUT_DEFAULT,
+                "The time in seconds to timeout when trying to contact a replica, before assuming it is dead"),
         ;
 
         private final IOptionType type;
         private final Object defaultValue;
+        private final String description;
 
-        Option(IOptionType type, Object defaultValue) {
+        Option(IOptionType type, Object defaultValue, String description) {
             this.type = type;
             this.defaultValue = defaultValue;
+            this.description = description;
         }
 
         @Override
@@ -62,8 +67,7 @@
 
         @Override
         public String description() {
-            // TODO(mblow): add missing descriptions
-            return null;
+            return description;
         }
 
         @Override
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/TransactionProperties.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/TransactionProperties.java
index 97ad6be..b809b4d 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/TransactionProperties.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/TransactionProperties.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.common.config;
 
+import static org.apache.hyracks.control.common.config.OptionTypes.BOOLEAN;
 import static org.apache.hyracks.control.common.config.OptionTypes.INTEGER;
 import static org.apache.hyracks.control.common.config.OptionTypes.INTEGER_BYTE_UNIT;
 import static org.apache.hyracks.control.common.config.OptionTypes.LONG_BYTE_UNIT;
@@ -37,17 +38,23 @@
         TXN_LOG_BUFFER_NUMPAGES(INTEGER, 8, "The number of pages in the transaction log tail"),
         TXN_LOG_BUFFER_PAGESIZE(INTEGER_BYTE_UNIT, StorageUtil.getIntSizeInBytes(128, KILOBYTE),
                 "The page size (in bytes) for transaction log buffer"),
-        TXN_LOG_PARTITIONSIZE(LONG_BYTE_UNIT, StorageUtil.getLongSizeInBytes(256L, MEGABYTE), null),
+        TXN_LOG_PARTITIONSIZE(LONG_BYTE_UNIT, StorageUtil.getLongSizeInBytes(256L, MEGABYTE),
+                "The maximum size (in bytes) of each transaction log file"),
         TXN_LOG_CHECKPOINT_LSNTHRESHOLD(INTEGER_BYTE_UNIT, StorageUtil.getIntSizeInBytes(64, MEGABYTE),
                 "The checkpoint threshold (in terms of LSNs (log sequence numbers) that have been written to the " +
                         "transaction log, i.e., the length of the transaction log) for transaction logs"),
-        TXN_LOG_CHECKPOINT_POLLFREQUENCY(INTEGER, 120, null),
+        TXN_LOG_CHECKPOINT_POLLFREQUENCY(INTEGER, 120,
+                "The frequency (in seconds) the checkpoint thread should check to see if a checkpoint should be written"
+        ),
         TXN_LOG_CHECKPOINT_HISTORY(INTEGER, 0, "The number of checkpoints to keep in the transaction log"),
-        TXN_LOCK_ESCALATIONTHRESHOLD(INTEGER, 1000, null),
-        TXN_LOCK_SHRINKTIMER(INTEGER, 5000, null),
+        TXN_LOCK_ESCALATIONTHRESHOLD(INTEGER, 1000,
+                "The maximum number of entity locks to obtain before upgrading to a dataset lock"),
+        TXN_LOCK_SHRINKTIMER(INTEGER, 5000,
+                "The time (in milliseconds) where under utilization of resources will trigger a shrink phase"),
         TXN_LOCK_TIMEOUT_WAITTHRESHOLD(INTEGER, 60000, "Time out (in milliseconds) of waiting for a lock"),
         TXN_LOCK_TIMEOUT_SWEEPTHRESHOLD(INTEGER, 10000, "Interval (in milliseconds) for checking lock timeout"),
-        TXN_COMMITPROFILER_REPORTINTERVAL(INTEGER, 5, null),
+        TXN_COMMITPROFILER_ENABLED(BOOLEAN, false, "Enable output of commit profiler logs"),
+        TXN_COMMITPROFILER_REPORTINTERVAL(INTEGER, 5, "Interval (in seconds) to report commit profiler logs"),
         TXN_JOB_RECOVERY_MEMORYSIZE(LONG_BYTE_UNIT, StorageUtil.getLongSizeInBytes(64L, MEGABYTE),
                 "The memory budget (in bytes) used for recovery");
 
@@ -138,6 +145,10 @@
         return accessor.getInt(Option.TXN_LOCK_TIMEOUT_SWEEPTHRESHOLD);
     }
 
+    public boolean isCommitProfilerEnabled() {
+        return accessor.getBoolean(Option.TXN_COMMITPROFILER_ENABLED);
+    }
+
     public int getCommitProfilerReportInterval() {
         return accessor.getInt(Option.TXN_COMMITPROFILER_REPORTINTERVAL);
     }
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/TransactionUtil.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/TransactionUtil.java
index 4ba35ae..e9f96f9 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/TransactionUtil.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/TransactionUtil.java
@@ -29,8 +29,6 @@
 
 public class TransactionUtil {
 
-    public static final boolean PROFILE_MODE = false;
-
     private TransactionUtil() {
     }
 
diff --git a/asterixdb/asterix-doc/src/site/markdown/ncservice.md b/asterixdb/asterix-doc/src/site/markdown/ncservice.md
index df30e7e..cd19db6 100644
--- a/asterixdb/asterix-doc/src/site/markdown/ncservice.md
+++ b/asterixdb/asterix-doc/src/site/markdown/ncservice.md
@@ -257,31 +257,31 @@
 
 | Section | Parameter                                 | Meaning | Default |
 |---------|-------------------------------------------|---|---|
-|   cc    | active.port                               | The listen port of the active server | 19003   |
+|   cc    | active.port                               | The listen port of the active server | 19003 |
 |   cc    | address                                   | Default bind address for all services on this cluster controller | 127.0.0.1 |
-|   cc    | api.port                                  | The listen port of the API server | 19002   |
-|   cc    | app.class                                 | Application CC main class | org.apache.asterix.hyracks.bootstrap.CCApplicationEntryPoint |
+|   cc    | api.port                                  | The listen port of the API server | 19002 |
+|   cc    | app.class                                 | Application CC main class | org.apache.asterix.hyracks.bootstrap.CCApplication |
 |   cc    | client.listen.address                     | Sets the IP Address to listen for connections from clients | same as address |
-|   cc    | client.listen.port                        | Sets the port to listen for connections from clients | 1098    |
+|   cc    | client.listen.port                        | Sets the port to listen for connections from clients | 1098 |
 |   cc    | cluster.listen.address                    | Sets the IP Address to listen for connections from NCs | same as address |
-|   cc    | cluster.listen.port                       | Sets the port to listen for connections from node controllers | 1099    |
+|   cc    | cluster.listen.port                       | Sets the port to listen for connections from node controllers | 1099 |
 |   cc    | cluster.public.address                    | Address that NCs should use to contact this CC | same as cluster.listen.address |
 |   cc    | cluster.public.port                       | Port that NCs should use to contact this CC | same as cluster.listen.port |
 |   cc    | cluster.topology                          | Sets the XML file that defines the cluster topology | &lt;undefined&gt; |
 |   cc    | console.listen.address                    | Sets the listen address for the Cluster Controller | same as address |
-|   cc    | console.listen.port                       | Sets the http port for the Cluster Controller) | 16001   |
-|   cc    | heartbeat.max.misses                      | Sets the maximum number of missed heartbeats before a node is marked as dead | 5       |
-|   cc    | heartbeat.period                          | Sets the time duration between two heartbeats from each node controller in milliseconds | 10000   |
-|   cc    | job.history.size                          | Limits the number of historical jobs remembered by the system to the specified value | 10      |
+|   cc    | console.listen.port                       | Sets the http port for the Cluster Controller) | 16001 |
+|   cc    | heartbeat.max.misses                      | Sets the maximum number of missed heartbeats before a node is marked as dead | 5 |
+|   cc    | heartbeat.period                          | Sets the time duration between two heartbeats from each node controller in milliseconds | 10000 |
+|   cc    | job.history.size                          | Limits the number of historical jobs remembered by the system to the specified value | 10 |
 |   cc    | job.manager.class                         | Specify the implementation class name for the job manager | org.apache.hyracks.control.cc.job.JobManager |
-|   cc    | job.queue.capacity                        | The maximum number of jobs to queue before rejecting new jobs | 4096    |
+|   cc    | job.queue.capacity                        | The maximum number of jobs to queue before rejecting new jobs | 4096 |
 |   cc    | job.queue.class                           | Specify the implementation class name for the job queue | org.apache.hyracks.control.cc.scheduler.FIFOJobQueue |
-|   cc    | profile.dump.period                       | Sets the time duration between two profile dumps from each node controller in milliseconds; 0 to disable | 0       |
-|   cc    | result.sweep.threshold                    | The duration within which an instance of the result cleanup should be invoked in milliseconds | 60000   |
+|   cc    | profile.dump.period                       | Sets the time duration between two profile dumps from each node controller in milliseconds; 0 to disable | 0 |
+|   cc    | result.sweep.threshold                    | The duration within which an instance of the result cleanup should be invoked in milliseconds | 60000 |
 |   cc    | result.ttl                                | Limits the amount of time results for asynchronous jobs should be retained by the system in milliseconds | 86400000 |
 |   cc    | root.dir                                  | Sets the root folder used for file operations | ${java.io.tmpdir}/asterixdb/ClusterControllerService |
-|   cc    | web.port                                  | The listen port of the legacy query interface | 19001   |
-|   cc    | web.queryinterface.port                   | The listen port of the query web interface | 19006   |
+|   cc    | web.port                                  | The listen port of the legacy query interface | 19001 |
+|   cc    | web.queryinterface.port                   | The listen port of the query web interface | 19006 |
 
 
 The following parameters for slave processes, under "[nc]" sections.
@@ -289,45 +289,45 @@
 | Section | Parameter                                 | Meaning | Default |
 |---------|-------------------------------------------|---|---|
 |   nc    | address                                   | Default IP Address to bind listeners on this NC.  All services will bind on this address unless a service-specific listen address is supplied. | 127.0.0.1 |
-|   nc    | app.class                                 | Application NC Main Class | org.apache.asterix.hyracks.bootstrap.NCApplicationEntryPoint |
+|   nc    | app.class                                 | Application NC Main Class | org.apache.asterix.hyracks.bootstrap.NCApplication |
 |   nc    | cluster.address                           | Cluster Controller address (required unless specified in config file) | &lt;undefined&gt; |
-|   nc    | cluster.connect.retries                   | Number of attempts to contact CC before giving up | 5       |
+|   nc    | cluster.connect.retries                   | Number of attempts to contact CC before giving up | 5 |
 |   nc    | cluster.listen.address                    | IP Address to bind cluster listener on this NC | same as address |
-|   nc    | cluster.listen.port                       | IP port to bind cluster listener | 0       |
-|   nc    | cluster.port                              | Cluster Controller port | 1099    |
+|   nc    | cluster.listen.port                       | IP port to bind cluster listener | 0 |
+|   nc    | cluster.port                              | Cluster Controller port | 1099 |
 |   nc    | cluster.public.address                    | Public IP Address to announce cluster listener | same as public.address |
 |   nc    | cluster.public.port                       | Public IP port to announce cluster listener | same as cluster.listen.port |
 |   nc    | command                                   | Command NCService should invoke to start the NCDriver | hyracksnc |
 |   nc    | core.dump.dir                             | The directory where node core dumps should be written | ${java.io.tmpdir}/asterixdb/coredump |
 |   nc    | data.listen.address                       | IP Address to bind data listener | same as address |
-|   nc    | data.listen.port                          | IP port to bind data listener | 0       |
+|   nc    | data.listen.port                          | IP port to bind data listener | 0 |
 |   nc    | data.public.address                       | Public IP Address to announce data listener | same as public.address |
 |   nc    | data.public.port                          | Public IP port to announce data listener | same as data.listen.port |
 |   nc    | iodevices                                 | Comma separated list of IO Device mount points | ${java.io.tmpdir}/asterixdb/iodevice |
 |   nc    | jvm.args                                  | JVM args to pass to the NCDriver | &lt;undefined&gt; |
 |   nc    | messaging.listen.address                  | IP Address to bind messaging listener | same as address |
-|   nc    | messaging.listen.port                     | IP port to bind messaging listener | 0       |
+|   nc    | messaging.listen.port                     | IP port to bind messaging listener | 0 |
 |   nc    | messaging.public.address                  | Public IP Address to announce messaging listener | same as public.address |
 |   nc    | messaging.public.port                     | Public IP port to announce messaging listener | same as messaging.listen.port |
 |   nc    | ncservice.address                         | Address the CC should use to contact the NCService associated with this NC | same as public.address |
-|   nc    | ncservice.pid                             | PID of the NCService which launched this NCDriver | -1      |
-|   nc    | ncservice.port                            | Port the CC should use to contact the NCService associated with this NC | 9090    |
-|   nc    | net.buffer.count                          | Number of network buffers per input/output channel | 1       |
-|   nc    | net.thread.count                          | Number of threads to use for Network I/O | 1       |
+|   nc    | ncservice.pid                             | PID of the NCService which launched this NCDriver | -1 |
+|   nc    | ncservice.port                            | Port the CC should use to contact the NCService associated with this NC | 9090 |
+|   nc    | net.buffer.count                          | Number of network buffers per input/output channel | 1 |
+|   nc    | net.thread.count                          | Number of threads to use for Network I/O | 1 |
 |   nc    | public.address                            | Default public address that other processes should use to contact this NC.  All services will advertise this address unless a service-specific public address is supplied. | same as address |
 |   nc    | result.listen.address                     | IP Address to bind dataset result distribution listener | same as address |
-|   nc    | result.listen.port                        | IP port to bind dataset result distribution listener | 0       |
+|   nc    | result.listen.port                        | IP port to bind dataset result distribution listener | 0 |
 |   nc    | result.manager.memory                     | Memory usable for result caching at this Node Controller in bytes | -1 (-1 B) |
 |   nc    | result.public.address                     | Public IP Address to announce dataset result distribution listener | same as public.address |
 |   nc    | result.public.port                        | Public IP port to announce dataset result distribution listener | same as result.listen.port |
-|   nc    | result.sweep.threshold                    | The duration within which an instance of the result cleanup should be invoked in milliseconds | 60000   |
+|   nc    | result.sweep.threshold                    | The duration within which an instance of the result cleanup should be invoked in milliseconds | 60000 |
 |   nc    | result.ttl                                | Limits the amount of time results for asynchronous jobs should be retained by the system in milliseconds | 86400000 |
 |   nc    | storage.buffercache.maxopenfiles          | The maximum number of open files in the buffer cache | 2147483647 |
 |   nc    | storage.buffercache.pagesize              | The page size in bytes for pages in the buffer cache | 131072 (128 kB) |
 |   nc    | storage.buffercache.size                  | The size of memory allocated to the disk buffer cache.  The value should be a multiple of the buffer cache page size. | 715915264 (682.75 MB) |
-|   nc    | storage.lsm.bloomfilter.falsepositiverate | The maximum acceptable false positive rate for bloom filters associated with LSM indexes | 0.01    |
+|   nc    | storage.lsm.bloomfilter.falsepositiverate | The maximum acceptable false positive rate for bloom filters associated with LSM indexes | 0.01 |
 |   nc    | storage.memorycomponent.globalbudget      | The size of memory allocated to the memory components.  The value should be a multiple of the memory component page size | 715915264 (682.75 MB) |
-|   nc    | storage.memorycomponent.numcomponents     | The number of memory components to be used per lsm index | 2       |
+|   nc    | storage.memorycomponent.numcomponents     | The number of memory components to be used per lsm index | 2 |
 |   nc    | storage.memorycomponent.numpages          | The number of pages to allocate for a memory component.  This budget is shared by all the memory components of the primary index and all its secondary indexes across all I/O devices on a node.  Note: in-memory components usually has fill factor of 75% since the pages are 75% full and the remaining 25% is un-utilized | 1/16th of the storage.memorycomponent.globalbudget value |
 |   nc    | storage.memorycomponent.pagesize          | The page size in bytes for pages allocated to memory components | 131072 (128 kB) |
 |   nc    | storage.metadata.memorycomponent.numpages | The number of pages to allocate for a metadata memory component | 1/64th of the storage.memorycomponent.globalbudget value or 256, whichever is larger |
@@ -343,35 +343,36 @@
 | common  | compiler.framesize                        | The page size (in bytes) for computation | 32768 (32 kB) |
 | common  | compiler.groupmemory                      | The memory budget (in bytes) for a group by operator instance in a partition | 33554432 (32 MB) |
 | common  | compiler.joinmemory                       | The memory budget (in bytes) for a join operator instance in a partition | 33554432 (32 MB) |
-| common  | compiler.parallelism                      | The degree of parallelism for query execution. Zero means to use the storage parallelism as the query execution parallelism, while other integer values dictate the number of query execution parallel partitions. The system will fall back to use the number of all available CPU cores in the cluster as the degree of parallelism if the number set by a user is too large or too small | 0       |
+| common  | compiler.parallelism                      | The degree of parallelism for query execution. Zero means to use the storage parallelism as the query execution parallelism, while other integer values dictate the number of query execution parallel partitions. The system will fall back to use the number of all available CPU cores in the cluster as the degree of parallelism if the number set by a user is too large or too small | 0 |
 | common  | compiler.sortmemory                       | The memory budget (in bytes) for a sort operator instance in a partition | 33554432 (32 MB) |
 | common  | instance.name                             | The name of this cluster instance | DEFAULT_INSTANCE |
 | common  | log.level                                 | The logging level for master and slave processes | WARNING |
-| common  | max.wait.active.cluster                   | The max pending time (in seconds) for cluster startup. After the threshold, if the cluster still is not up and running, it is considered unavailable | 60      |
-| common  | messaging.frame.count                     | N/A     | 512     |
-| common  | messaging.frame.size                      | N/A     | 4096 (4 kB) |
-| common  | metadata.callback.port                    | IP port to bind metadata callback listener (0 = random port) | 0       |
-| common  | metadata.listen.port                      | IP port to bind metadata listener (0 = random port) | 0       |
+| common  | max.wait.active.cluster                   | The max pending time (in seconds) for cluster startup. After the threshold, if the cluster still is not up and running, it is considered unavailable | 60 |
+| common  | messaging.frame.count                     | Number of reusable frames for NC to NC messaging | 512 |
+| common  | messaging.frame.size                      | The frame size to be used for NC to NC messaging | 4096 (4 kB) |
+| common  | metadata.callback.port                    | IP port to bind metadata callback listener (0 = random port) | 0 |
+| common  | metadata.listen.port                      | IP port to bind metadata listener (0 = random port) | 0 |
 | common  | metadata.node                             | the node which should serve as the metadata node | &lt;undefined&gt; |
-| common  | metadata.registration.timeout.secs        | how long in seconds to wait for the metadata node to register with the CC | 60      |
-| common  | plot.activate                             | N/A     | false   |
-| common  | replication.log.batchsize                 | N/A     | 4096 (4 kB) |
-| common  | replication.log.buffer.numpages           | N/A     | 8       |
-| common  | replication.log.buffer.pagesize           | N/A     | 131072 (128 kB) |
-| common  | replication.max.remote.recovery.attempts  | N/A     | 5       |
-| common  | replication.timeout                       | N/A     | 15      |
-| common  | txn.commitprofiler.reportinterval         | N/A     | 5       |
+| common  | metadata.registration.timeout.secs        | how long in seconds to wait for the metadata node to register with the CC | 60 |
+| common  | plot.activate                             | N/A | false |
+| common  | replication.log.batchsize                 | The size in bytes to replicate in each batch | 4096 (4 kB) |
+| common  | replication.log.buffer.numpages           | The number of log buffer pages | 8 |
+| common  | replication.log.buffer.pagesize           | The size in bytes of each log buffer page | 131072 (128 kB) |
+| common  | replication.max.remote.recovery.attempts  | The maximum number of times to attempt to recover from a replica on failure before giving up | 5 |
+| common  | replication.timeout                       | The time in seconds to timeout when trying to contact a replica, before assuming it is dead | 15 |
+| common  | txn.commitprofiler.enabled                | Enable output of commit profiler logs | false |
+| common  | txn.commitprofiler.reportinterval         | Interval (in seconds) to report commit profiler logs | 5 |
 | common  | txn.job.recovery.memorysize               | The memory budget (in bytes) used for recovery | 67108864 (64 MB) |
-| common  | txn.lock.escalationthreshold              | N/A     | 1000    |
-| common  | txn.lock.shrinktimer                      | N/A     | 5000    |
-| common  | txn.lock.timeout.sweepthreshold           | Interval (in milliseconds) for checking lock timeout | 10000   |
-| common  | txn.lock.timeout.waitthreshold            | Time out (in milliseconds) of waiting for a lock | 60000   |
-| common  | txn.log.buffer.numpages                   | The number of pages in the transaction log tail | 8       |
+| common  | txn.lock.escalationthreshold              | The maximum number of entity locks to obtain before upgrading to a dataset lock | 1000 |
+| common  | txn.lock.shrinktimer                      | The time (in milliseconds) where under utilization of resources will trigger a shrink phase | 5000 |
+| common  | txn.lock.timeout.sweepthreshold           | Interval (in milliseconds) for checking lock timeout | 10000 |
+| common  | txn.lock.timeout.waitthreshold            | Time out (in milliseconds) of waiting for a lock | 60000 |
+| common  | txn.log.buffer.numpages                   | The number of pages in the transaction log tail | 8 |
 | common  | txn.log.buffer.pagesize                   | The page size (in bytes) for transaction log buffer | 131072 (128 kB) |
-| common  | txn.log.checkpoint.history                | The number of checkpoints to keep in the transaction log | 0       |
+| common  | txn.log.checkpoint.history                | The number of checkpoints to keep in the transaction log | 0 |
 | common  | txn.log.checkpoint.lsnthreshold           | The checkpoint threshold (in terms of LSNs (log sequence numbers) that have been written to the transaction log, i.e., the length of the transaction log) for transaction logs | 67108864 (64 MB) |
-| common  | txn.log.checkpoint.pollfrequency          | N/A     | 120     |
-| common  | txn.log.partitionsize                     | N/A     | 268435456 (256 MB) |
+| common  | txn.log.checkpoint.pollfrequency          | The frequency (in seconds) the checkpoint thread should check to see if a checkpoint should be written | 120 |
+| common  | txn.log.partitionsize                     | The maximum size (in bytes) of each transaction log file | 268435456 (256 MB) |
 
 
 For the optional NCService process configuration file, the following parameters, under "[ncservice]" section.
diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/recovery/RemoteRecoveryManager.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/recovery/RemoteRecoveryManager.java
index fcc997f..7441ec7 100644
--- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/recovery/RemoteRecoveryManager.java
+++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/recovery/RemoteRecoveryManager.java
@@ -169,7 +169,7 @@
         PersistentLocalResourceRepository resourceRepository = (PersistentLocalResourceRepository) runtimeContext
                 .getLocalResourceRepository();
         IDatasetLifecycleManager datasetLifeCycleManager = runtimeContext.getDatasetLifecycleManager();
-        Map<String, ClusterPartition[]> nodePartitions = ((IPropertiesProvider) runtimeContext).getMetadataProperties()
+        Map<String, ClusterPartition[]> nodePartitions = runtimeContext.getMetadataProperties()
                 .getNodePartitions();
 
         while (true) {
diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogBuffer.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogBuffer.java
index efcff05..7b5d8ee 100644
--- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogBuffer.java
+++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogBuffer.java
@@ -262,7 +262,7 @@
                         txnSubsystem.getLockManager().unlock(reusableDatasetId, logRecord.getPKHashValue(),
                                 LockMode.ANY, txnCtx);
                         txnCtx.notifyOptracker(false);
-                        if (TransactionUtil.PROFILE_MODE) {
+                        if (txnSubsystem.getTransactionProperties().isCommitProfilerEnabled()) {
                             txnSubsystem.incrementEntityCommitCount();
                         }
                     } else if (logRecord.getLogType() == LogType.JOB_COMMIT
